Merge tag 'timers-urgent-2020-12-27' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / arch / arm / kernel / sleep.S
index 5dc8b80..43077e1 100644 (file)
@@ -72,8 +72,9 @@ ENTRY(__cpu_suspend)
        ldr     r3, =sleep_save_sp
        stmfd   sp!, {r0, r1}           @ save suspend func arg and pointer
        ldr     r3, [r3, #SLEEP_SAVE_SP_VIRT]
-       ALT_SMP(ldr r0, =mpidr_hash)
+       ALT_SMP(W(nop))                 @ don't use adr_l inside ALT_SMP()
        ALT_UP_B(1f)
+       adr_l   r0, mpidr_hash
        /* This ldmia relies on the memory layout of the mpidr_hash struct */
        ldmia   r0, {r1, r6-r8} @ r1 = mpidr mask (r6,r7,r8) = l[0,1,2] shifts
        compute_mpidr_hash      r0, r6, r7, r8, r2, r1
@@ -147,9 +148,8 @@ no_hyp:
        mov     r1, #0
        ALT_SMP(mrc p15, 0, r0, c0, c0, 5)
        ALT_UP_B(1f)
-       adr     r2, mpidr_hash_ptr
-       ldr     r3, [r2]
-       add     r2, r2, r3              @ r2 = struct mpidr_hash phys address
+       adr_l   r2, mpidr_hash          @ r2 = struct mpidr_hash phys address
+
        /*
         * This ldmia relies on the memory layout of the mpidr_hash
         * struct mpidr_hash.
@@ -157,10 +157,7 @@ no_hyp:
        ldmia   r2, { r3-r6 }   @ r3 = mpidr mask (r4,r5,r6) = l[0,1,2] shifts
        compute_mpidr_hash      r1, r4, r5, r6, r0, r3
 1:
-       adr     r0, _sleep_save_sp
-       ldr     r2, [r0]
-       add     r0, r0, r2
-       ldr     r0, [r0, #SLEEP_SAVE_SP_PHYS]
+       ldr_l   r0, sleep_save_sp + SLEEP_SAVE_SP_PHYS
        ldr     r0, [r0, r1, lsl #2]
 
        @ load phys pgd, stack, resume fn
@@ -177,12 +174,6 @@ ENDPROC(cpu_resume_arm)
 ENDPROC(cpu_resume_no_hyp)
 #endif
 
-       .align 2
-_sleep_save_sp:
-       .long   sleep_save_sp - .
-mpidr_hash_ptr:
-       .long   mpidr_hash - .                  @ mpidr_hash struct offset
-
        .data
        .align  2
        .type   sleep_save_sp, #object