]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/rtas: PACA can be restored directly from SPRG
authorNicholas Piggin <npiggin@gmail.com>
Tue, 8 Mar 2022 13:50:40 +0000 (23:50 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 19 May 2022 13:11:27 +0000 (23:11 +1000)
On 64-bit, PACA is saved in a SPRG so it does not need to be saved on
stack. We also don't need to mask off the top bits for real mode
addresses because the architecture does this for us.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Laurent Dufour <ldufour@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220308135047.478297-8-npiggin@gmail.com
arch/powerpc/kernel/rtas_entry.S

index acf90a15e39d51b93e86e222795b4b98db3a295c..3bd29ddba54685be05653678c6ed1ca02d2e38cf 100644 (file)
@@ -62,10 +62,9 @@ _GLOBAL(enter_rtas)
 
        /* Because RTAS is running in 32b mode, it clobbers the high order half
         * of all registers that it saves.  We therefore save those registers
-        * RTAS might touch to the stack.  (r0, r3-r13 are caller saved)
+        * RTAS might touch to the stack.  (r0, r3-r12 are caller saved)
         */
        SAVE_GPR(2, r1)                 /* Save the TOC */
-       SAVE_GPR(13, r1)                /* Save paca */
        SAVE_NVGPRS(r1)                 /* Save the non-volatiles */
 
        mfcr    r4
@@ -135,15 +134,14 @@ rtas_return_loc:
        mtmsrd  r6
 
        /* relocation is off at this point */
-       GET_PACA(r4)
-       clrldi  r4,r4,2                 /* convert to realmode address */
+       GET_PACA(r13)
 
        bcl     20,31,$+4
 0:     mflr    r3
        ld      r3,(1f-0b)(r3)          /* get &rtas_restore_regs */
 
-       ld      r1,PACAR1(r4)           /* Restore our SP */
-       ld      r4,PACASAVEDMSR(r4)     /* Restore our MSR */
+       ld      r1,PACAR1(r13)          /* Restore our SP */
+       ld      r4,PACASAVEDMSR(r13)    /* Restore our MSR */
 
        mtspr   SPRN_SRR0,r3
        mtspr   SPRN_SRR1,r4
@@ -159,11 +157,8 @@ _ASM_NOKPROBE_SYMBOL(rtas_return_loc)
 rtas_restore_regs:
        /* relocation is on at this point */
        REST_GPR(2, r1)                 /* Restore the TOC */
-       REST_GPR(13, r1)                /* Restore paca */
        REST_NVGPRS(r1)                 /* Restore the non-volatiles */
 
-       GET_PACA(r13)
-
        ld      r4,_CCR(r1)
        mtcr    r4
        ld      r5,_CTR(r1)