Just a couple of build fixes for powerpc all{mod,yes}config.
Submitted by me since BenH is on vacation. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iQIcBAABCAAGBQJRUMdFAAoJEIn5HApB1cB6QzEP/1O0KL7QCbWiCnT92hvExo8a qFHdaAk/O9qasOv/+R1ObuFOVB0oSxlYFKKz6OE5XvHYzK6406Dn2xBDdBYo+SRO dkF6Uq7ZAzbaNXOOFa9yG6R43DDHdJgiXvQa0a8J8dJZX3OgaPSmtMMkoQIn39Fi xLsDMjEWfOVsOe4yebi/Btmwokqd9SRlKOyPeRRHsok9vyEqyteyNPNhCXtT9dTp s6noshnp3f7Yjk2al2UOoh74jUEc6oZahPK393FG93McuXXBZPRLQjh0JOpbHMeS 12/LoyLYlqxqAEM5bUnEICkDQZCwUShpHtoMFrufr1LF+zRcqX4sN51iCahQnlNO XDZfAe+4UvkZGs0MbGJSgUiq/tG5D7uRoKkcgtEUmxd+gemDLVwrCnAITc9qUk3r D+pOJB8ZNKezG/n5e/KzQurymrj2isvAB4MOXSn0OrvShukFC+ST4civXQYUMHnr sJK9uas9MjPxjWqdXwHuaknV5EObdSAh4O5JEw5ZFZ8L1lYXXNaJrhnmPtHCD69Q Hw58ytQ8S5tcQMylxlshJGnRYTni1/8n20HAvyyw/bDWcSbo7usrsfCYQz2czPMM H1c+pcz/bWJrO1xxD0eX4n8EHC+JqEte1z/RNJhThZvNXvym+VdmhC3sAluM9U3H PYPmaOeMQifvRoSh5ZSt =rm4T -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sfr/next-fixes Pull powerpc build fixes from Stephen Rothwell: "Just a couple of build fixes for powerpc all{mod,yes}config. Submitted by me since BenH is on vacation." * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sfr/next-fixes: powerpc: define the conditions where the ePAPR idle hcall can be supported powerpc: make additional room in exception vector area
This commit is contained in:
commit
9064171268
|
@ -23,8 +23,10 @@
|
||||||
#include <asm/code-patching.h>
|
#include <asm/code-patching.h>
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
|
|
||||||
|
#if !defined(CONFIG_64BIT) || defined(CONFIG_PPC_BOOK3E_64)
|
||||||
extern void epapr_ev_idle(void);
|
extern void epapr_ev_idle(void);
|
||||||
extern u32 epapr_ev_idle_start[];
|
extern u32 epapr_ev_idle_start[];
|
||||||
|
#endif
|
||||||
|
|
||||||
bool epapr_paravirt_enabled;
|
bool epapr_paravirt_enabled;
|
||||||
|
|
||||||
|
@ -47,11 +49,15 @@ static int __init epapr_paravirt_init(void)
|
||||||
|
|
||||||
for (i = 0; i < (len / 4); i++) {
|
for (i = 0; i < (len / 4); i++) {
|
||||||
patch_instruction(epapr_hypercall_start + i, insts[i]);
|
patch_instruction(epapr_hypercall_start + i, insts[i]);
|
||||||
|
#if !defined(CONFIG_64BIT) || defined(CONFIG_PPC_BOOK3E_64)
|
||||||
patch_instruction(epapr_ev_idle_start + i, insts[i]);
|
patch_instruction(epapr_ev_idle_start + i, insts[i]);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(CONFIG_64BIT) || defined(CONFIG_PPC_BOOK3E_64)
|
||||||
if (of_get_property(hyper_node, "has-idle", NULL))
|
if (of_get_property(hyper_node, "has-idle", NULL))
|
||||||
ppc_md.power_save = epapr_ev_idle;
|
ppc_md.power_save = epapr_ev_idle;
|
||||||
|
#endif
|
||||||
|
|
||||||
epapr_paravirt_enabled = true;
|
epapr_paravirt_enabled = true;
|
||||||
|
|
||||||
|
|
|
@ -1066,78 +1066,6 @@ unrecov_user_slb:
|
||||||
#endif /* __DISABLED__ */
|
#endif /* __DISABLED__ */
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* r13 points to the PACA, r9 contains the saved CR,
|
|
||||||
* r12 contain the saved SRR1, SRR0 is still ready for return
|
|
||||||
* r3 has the faulting address
|
|
||||||
* r9 - r13 are saved in paca->exslb.
|
|
||||||
* r3 is saved in paca->slb_r3
|
|
||||||
* We assume we aren't going to take any exceptions during this procedure.
|
|
||||||
*/
|
|
||||||
_GLOBAL(slb_miss_realmode)
|
|
||||||
mflr r10
|
|
||||||
#ifdef CONFIG_RELOCATABLE
|
|
||||||
mtctr r11
|
|
||||||
#endif
|
|
||||||
|
|
||||||
stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */
|
|
||||||
std r10,PACA_EXSLB+EX_LR(r13) /* save LR */
|
|
||||||
|
|
||||||
bl .slb_allocate_realmode
|
|
||||||
|
|
||||||
/* All done -- return from exception. */
|
|
||||||
|
|
||||||
ld r10,PACA_EXSLB+EX_LR(r13)
|
|
||||||
ld r3,PACA_EXSLB+EX_R3(r13)
|
|
||||||
lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */
|
|
||||||
|
|
||||||
mtlr r10
|
|
||||||
|
|
||||||
andi. r10,r12,MSR_RI /* check for unrecoverable exception */
|
|
||||||
beq- 2f
|
|
||||||
|
|
||||||
.machine push
|
|
||||||
.machine "power4"
|
|
||||||
mtcrf 0x80,r9
|
|
||||||
mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */
|
|
||||||
.machine pop
|
|
||||||
|
|
||||||
RESTORE_PPR_PACA(PACA_EXSLB, r9)
|
|
||||||
ld r9,PACA_EXSLB+EX_R9(r13)
|
|
||||||
ld r10,PACA_EXSLB+EX_R10(r13)
|
|
||||||
ld r11,PACA_EXSLB+EX_R11(r13)
|
|
||||||
ld r12,PACA_EXSLB+EX_R12(r13)
|
|
||||||
ld r13,PACA_EXSLB+EX_R13(r13)
|
|
||||||
rfid
|
|
||||||
b . /* prevent speculative execution */
|
|
||||||
|
|
||||||
2: mfspr r11,SPRN_SRR0
|
|
||||||
ld r10,PACAKBASE(r13)
|
|
||||||
LOAD_HANDLER(r10,unrecov_slb)
|
|
||||||
mtspr SPRN_SRR0,r10
|
|
||||||
ld r10,PACAKMSR(r13)
|
|
||||||
mtspr SPRN_SRR1,r10
|
|
||||||
rfid
|
|
||||||
b .
|
|
||||||
|
|
||||||
unrecov_slb:
|
|
||||||
EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
|
|
||||||
DISABLE_INTS
|
|
||||||
bl .save_nvgprs
|
|
||||||
1: addi r3,r1,STACK_FRAME_OVERHEAD
|
|
||||||
bl .unrecoverable_exception
|
|
||||||
b 1b
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_PPC_970_NAP
|
|
||||||
power4_fixup_nap:
|
|
||||||
andc r9,r9,r10
|
|
||||||
std r9,TI_LOCAL_FLAGS(r11)
|
|
||||||
ld r10,_LINK(r1) /* make idle task do the */
|
|
||||||
std r10,_NIP(r1) /* equivalent of a blr */
|
|
||||||
blr
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.align 7
|
.align 7
|
||||||
.globl alignment_common
|
.globl alignment_common
|
||||||
alignment_common:
|
alignment_common:
|
||||||
|
@ -1335,6 +1263,78 @@ _GLOBAL(opal_mc_secondary_handler)
|
||||||
#endif /* CONFIG_PPC_POWERNV */
|
#endif /* CONFIG_PPC_POWERNV */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* r13 points to the PACA, r9 contains the saved CR,
|
||||||
|
* r12 contain the saved SRR1, SRR0 is still ready for return
|
||||||
|
* r3 has the faulting address
|
||||||
|
* r9 - r13 are saved in paca->exslb.
|
||||||
|
* r3 is saved in paca->slb_r3
|
||||||
|
* We assume we aren't going to take any exceptions during this procedure.
|
||||||
|
*/
|
||||||
|
_GLOBAL(slb_miss_realmode)
|
||||||
|
mflr r10
|
||||||
|
#ifdef CONFIG_RELOCATABLE
|
||||||
|
mtctr r11
|
||||||
|
#endif
|
||||||
|
|
||||||
|
stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */
|
||||||
|
std r10,PACA_EXSLB+EX_LR(r13) /* save LR */
|
||||||
|
|
||||||
|
bl .slb_allocate_realmode
|
||||||
|
|
||||||
|
/* All done -- return from exception. */
|
||||||
|
|
||||||
|
ld r10,PACA_EXSLB+EX_LR(r13)
|
||||||
|
ld r3,PACA_EXSLB+EX_R3(r13)
|
||||||
|
lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */
|
||||||
|
|
||||||
|
mtlr r10
|
||||||
|
|
||||||
|
andi. r10,r12,MSR_RI /* check for unrecoverable exception */
|
||||||
|
beq- 2f
|
||||||
|
|
||||||
|
.machine push
|
||||||
|
.machine "power4"
|
||||||
|
mtcrf 0x80,r9
|
||||||
|
mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */
|
||||||
|
.machine pop
|
||||||
|
|
||||||
|
RESTORE_PPR_PACA(PACA_EXSLB, r9)
|
||||||
|
ld r9,PACA_EXSLB+EX_R9(r13)
|
||||||
|
ld r10,PACA_EXSLB+EX_R10(r13)
|
||||||
|
ld r11,PACA_EXSLB+EX_R11(r13)
|
||||||
|
ld r12,PACA_EXSLB+EX_R12(r13)
|
||||||
|
ld r13,PACA_EXSLB+EX_R13(r13)
|
||||||
|
rfid
|
||||||
|
b . /* prevent speculative execution */
|
||||||
|
|
||||||
|
2: mfspr r11,SPRN_SRR0
|
||||||
|
ld r10,PACAKBASE(r13)
|
||||||
|
LOAD_HANDLER(r10,unrecov_slb)
|
||||||
|
mtspr SPRN_SRR0,r10
|
||||||
|
ld r10,PACAKMSR(r13)
|
||||||
|
mtspr SPRN_SRR1,r10
|
||||||
|
rfid
|
||||||
|
b .
|
||||||
|
|
||||||
|
unrecov_slb:
|
||||||
|
EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
|
||||||
|
DISABLE_INTS
|
||||||
|
bl .save_nvgprs
|
||||||
|
1: addi r3,r1,STACK_FRAME_OVERHEAD
|
||||||
|
bl .unrecoverable_exception
|
||||||
|
b 1b
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_PPC_970_NAP
|
||||||
|
power4_fixup_nap:
|
||||||
|
andc r9,r9,r10
|
||||||
|
std r9,TI_LOCAL_FLAGS(r11)
|
||||||
|
ld r10,_LINK(r1) /* make idle task do the */
|
||||||
|
std r10,_NIP(r1) /* equivalent of a blr */
|
||||||
|
blr
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hash table stuff
|
* Hash table stuff
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue