powerpc: Use SWITCH_FRAME_SIZE for prom and rtas entry
Commit6c1719942e
("powerpc/of: Remove useless register save/restore when calling OF back") removed the saving of srr0 and srr1 when calling into OpenFirmware. Commite31aa453bb
("powerpc: Use LOAD_REG_IMMEDIATE only for constants on 64-bit") did the same for rtas. This means we don't need to save the extra stack space and can use the common SWITCH_FRAME_SIZE. There were already no users of _SRR0 and _SRR1 so we can remove them too. Link: https://github.com/linuxppc/linux/issues/83 Signed-off-by: Joel Stanley <joel@jms.id.au> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
65b9fdadfc
commit
ed9e84a4d7
|
@ -280,11 +280,6 @@ int main(void)
|
||||||
/* Interrupt register frame */
|
/* Interrupt register frame */
|
||||||
DEFINE(INT_FRAME_SIZE, STACK_INT_FRAME_SIZE);
|
DEFINE(INT_FRAME_SIZE, STACK_INT_FRAME_SIZE);
|
||||||
DEFINE(SWITCH_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs));
|
DEFINE(SWITCH_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs));
|
||||||
#ifdef CONFIG_PPC64
|
|
||||||
/* Create extra stack space for SRR0 and SRR1 when calling prom/rtas. */
|
|
||||||
DEFINE(PROM_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16);
|
|
||||||
DEFINE(RTAS_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16);
|
|
||||||
#endif /* CONFIG_PPC64 */
|
|
||||||
STACK_PT_REGS_OFFSET(GPR0, gpr[0]);
|
STACK_PT_REGS_OFFSET(GPR0, gpr[0]);
|
||||||
STACK_PT_REGS_OFFSET(GPR1, gpr[1]);
|
STACK_PT_REGS_OFFSET(GPR1, gpr[1]);
|
||||||
STACK_PT_REGS_OFFSET(GPR2, gpr[2]);
|
STACK_PT_REGS_OFFSET(GPR2, gpr[2]);
|
||||||
|
@ -328,10 +323,6 @@ int main(void)
|
||||||
STACK_PT_REGS_OFFSET(_ESR, dsisr);
|
STACK_PT_REGS_OFFSET(_ESR, dsisr);
|
||||||
#else /* CONFIG_PPC64 */
|
#else /* CONFIG_PPC64 */
|
||||||
STACK_PT_REGS_OFFSET(SOFTE, softe);
|
STACK_PT_REGS_OFFSET(SOFTE, softe);
|
||||||
|
|
||||||
/* These _only_ to be used with {PROM,RTAS}_FRAME_SIZE!!! */
|
|
||||||
DEFINE(_SRR0, STACK_FRAME_OVERHEAD+sizeof(struct pt_regs));
|
|
||||||
DEFINE(_SRR1, STACK_FRAME_OVERHEAD+sizeof(struct pt_regs)+8);
|
|
||||||
#endif /* CONFIG_PPC64 */
|
#endif /* CONFIG_PPC64 */
|
||||||
|
|
||||||
#if defined(CONFIG_PPC32)
|
#if defined(CONFIG_PPC32)
|
||||||
|
|
|
@ -1124,7 +1124,7 @@ _ASM_NOKPROBE_SYMBOL(fast_exception_return);
|
||||||
_GLOBAL(enter_rtas)
|
_GLOBAL(enter_rtas)
|
||||||
mflr r0
|
mflr r0
|
||||||
std r0,16(r1)
|
std r0,16(r1)
|
||||||
stdu r1,-RTAS_FRAME_SIZE(r1) /* Save SP and create stack space. */
|
stdu r1,-SWITCH_FRAME_SIZE(r1) /* Save SP and create stack space. */
|
||||||
|
|
||||||
/* Because RTAS is running in 32b mode, it clobbers the high order half
|
/* Because RTAS is running in 32b mode, it clobbers the high order half
|
||||||
* of all registers that it saves. We therefore save those registers
|
* of all registers that it saves. We therefore save those registers
|
||||||
|
@ -1256,7 +1256,7 @@ rtas_restore_regs:
|
||||||
ld r8,_DSISR(r1)
|
ld r8,_DSISR(r1)
|
||||||
mtdsisr r8
|
mtdsisr r8
|
||||||
|
|
||||||
addi r1,r1,RTAS_FRAME_SIZE /* Unstack our frame */
|
addi r1,r1,SWITCH_FRAME_SIZE /* Unstack our frame */
|
||||||
ld r0,16(r1) /* get return address */
|
ld r0,16(r1) /* get return address */
|
||||||
|
|
||||||
mtlr r0
|
mtlr r0
|
||||||
|
@ -1267,7 +1267,7 @@ rtas_restore_regs:
|
||||||
_GLOBAL(enter_prom)
|
_GLOBAL(enter_prom)
|
||||||
mflr r0
|
mflr r0
|
||||||
std r0,16(r1)
|
std r0,16(r1)
|
||||||
stdu r1,-PROM_FRAME_SIZE(r1) /* Save SP and create stack space */
|
stdu r1,-SWITCH_FRAME_SIZE(r1) /* Save SP and create stack space */
|
||||||
|
|
||||||
/* Because PROM is running in 32b mode, it clobbers the high order half
|
/* Because PROM is running in 32b mode, it clobbers the high order half
|
||||||
* of all registers that it saves. We therefore save those registers
|
* of all registers that it saves. We therefore save those registers
|
||||||
|
@ -1325,7 +1325,7 @@ _GLOBAL(enter_prom)
|
||||||
ld r4,_CCR(r1)
|
ld r4,_CCR(r1)
|
||||||
mtcr r4
|
mtcr r4
|
||||||
|
|
||||||
addi r1,r1,PROM_FRAME_SIZE
|
addi r1,r1,SWITCH_FRAME_SIZE
|
||||||
ld r0,16(r1)
|
ld r0,16(r1)
|
||||||
mtlr r0
|
mtlr r0
|
||||||
blr
|
blr
|
||||||
|
|
Loading…
Reference in New Issue