mirror of https://gitee.com/openkylin/linux.git
powerpc/of: Remove useless register save/restore when calling OF back
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>
This commit is contained in:
parent
7d60b02cc7
commit
6c1719942e
|
@ -823,30 +823,17 @@ _GLOBAL(enter_prom)
|
||||||
* of all registers that it saves. We therefore save those registers
|
* of all registers that it saves. We therefore save those registers
|
||||||
* PROM might touch to the stack. (r0, r3-r13 are caller saved)
|
* 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_GPR(13, r1)
|
||||||
SAVE_8GPRS(14, r1)
|
SAVE_8GPRS(14, r1)
|
||||||
SAVE_10GPRS(22, r1)
|
SAVE_10GPRS(22, r1)
|
||||||
mfcr r4
|
mfcr r10
|
||||||
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)
|
|
||||||
mfmsr r11
|
mfmsr r11
|
||||||
|
std r10,_CCR(r1)
|
||||||
std r11,_MSR(r1)
|
std r11,_MSR(r1)
|
||||||
|
|
||||||
/* Get the PROM entrypoint */
|
/* Get the PROM entrypoint */
|
||||||
ld r0,GPR4(r1)
|
mtlr r4
|
||||||
mtlr r0
|
|
||||||
|
|
||||||
/* Switch MSR to 32 bits mode
|
/* Switch MSR to 32 bits mode
|
||||||
*/
|
*/
|
||||||
|
@ -860,8 +847,7 @@ _GLOBAL(enter_prom)
|
||||||
mtmsrd r11
|
mtmsrd r11
|
||||||
isync
|
isync
|
||||||
|
|
||||||
/* Restore arguments & enter PROM here... */
|
/* Enter PROM here... */
|
||||||
ld r3,GPR3(r1)
|
|
||||||
blrl
|
blrl
|
||||||
|
|
||||||
/* Just make sure that r1 top 32 bits didn't get
|
/* 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) */
|
/* Restore the MSR (back to 64 bits) */
|
||||||
ld r0,_MSR(r1)
|
ld r0,_MSR(r1)
|
||||||
mtmsrd r0
|
MTMSRD(r0)
|
||||||
isync
|
isync
|
||||||
|
|
||||||
/* Restore other registers */
|
/* Restore other registers */
|
||||||
|
@ -881,18 +867,6 @@ _GLOBAL(enter_prom)
|
||||||
REST_10GPRS(22, r1)
|
REST_10GPRS(22, r1)
|
||||||
ld r4,_CCR(r1)
|
ld r4,_CCR(r1)
|
||||||
mtcr r4
|
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
|
addi r1,r1,PROM_FRAME_SIZE
|
||||||
ld r0,16(r1)
|
ld r0,16(r1)
|
||||||
|
|
Loading…
Reference in New Issue