powerpc/of: Remove useless register save/restore when calling OF back
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 23 Jul 2009 23:15:07 +0000 (23:15 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 20 Aug 2009 00:12:36 +0000 (10:12 +1000)
enter_prom() used to save and restore registers such as CTR, XER etc..
which are volatile, or SRR0,1... which we don't care about. This
removes a bunch of useless code and while at it turns an mtmsrd into
an MTMSRD macro which will be useful to Book3E.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/entry_64.S

index dbf0e31..1cb0f3d 100644 (file)
@@ -823,30 +823,17 @@ _GLOBAL(enter_prom)
         * of all registers that it saves.  We therefore save those registers
         * PROM might touch to the stack.  (r0, r3-r13 are caller saved)
         */
-       SAVE_8GPRS(2, r1)
+       SAVE_GPR(2, r1)
        SAVE_GPR(13, r1)
        SAVE_8GPRS(14, r1)
        SAVE_10GPRS(22, r1)
-       mfcr    r4
-       std     r4,_CCR(r1)
-       mfctr   r5
-       std     r5,_CTR(r1)
-       mfspr   r6,SPRN_XER
-       std     r6,_XER(r1)
-       mfdar   r7
-       std     r7,_DAR(r1)
-       mfdsisr r8
-       std     r8,_DSISR(r1)
-       mfsrr0  r9
-       std     r9,_SRR0(r1)
-       mfsrr1  r10
-       std     r10,_SRR1(r1)
+       mfcr    r10
        mfmsr   r11
+       std     r10,_CCR(r1)
        std     r11,_MSR(r1)
 
        /* Get the PROM entrypoint */
-       ld      r0,GPR4(r1)
-       mtlr    r0
+       mtlr    r4
 
        /* Switch MSR to 32 bits mode
         */
@@ -860,8 +847,7 @@ _GLOBAL(enter_prom)
         mtmsrd  r11
         isync
 
-       /* Restore arguments & enter PROM here... */
-       ld      r3,GPR3(r1)
+       /* Enter PROM here... */
        blrl
 
        /* Just make sure that r1 top 32 bits didn't get
@@ -871,7 +857,7 @@ _GLOBAL(enter_prom)
 
        /* Restore the MSR (back to 64 bits) */
        ld      r0,_MSR(r1)
-       mtmsrd  r0
+       MTMSRD(r0)
         isync
 
        /* Restore other registers */
@@ -881,18 +867,6 @@ _GLOBAL(enter_prom)
        REST_10GPRS(22, r1)
        ld      r4,_CCR(r1)
        mtcr    r4
-       ld      r5,_CTR(r1)
-       mtctr   r5
-       ld      r6,_XER(r1)
-       mtspr   SPRN_XER,r6
-       ld      r7,_DAR(r1)
-       mtdar   r7
-       ld      r8,_DSISR(r1)
-       mtdsisr r8
-       ld      r9,_SRR0(r1)
-       mtsrr0  r9
-       ld      r10,_SRR1(r1)
-       mtsrr1  r10
        
         addi   r1,r1,PROM_FRAME_SIZE
        ld      r0,16(r1)