|
@@ -592,61 +592,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_CFAR)
|
|
|
MASKABLE_EXCEPTION_HV_OOL(0xe62, hmi_exception)
|
|
|
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe62)
|
|
|
|
|
|
- .globl hmi_exception_early
|
|
|
-hmi_exception_early:
|
|
|
- EXCEPTION_PROLOG_1(PACA_EXGEN, NOTEST, 0xe60)
|
|
|
- mr r10,r1 /* Save r1 */
|
|
|
- ld r1,PACAEMERGSP(r13) /* Use emergency stack */
|
|
|
- subi r1,r1,INT_FRAME_SIZE /* alloc stack frame */
|
|
|
- std r9,_CCR(r1) /* save CR in stackframe */
|
|
|
- mfspr r11,SPRN_HSRR0 /* Save HSRR0 */
|
|
|
- std r11,_NIP(r1) /* save HSRR0 in stackframe */
|
|
|
- mfspr r12,SPRN_HSRR1 /* Save SRR1 */
|
|
|
- std r12,_MSR(r1) /* save SRR1 in stackframe */
|
|
|
- std r10,0(r1) /* make stack chain pointer */
|
|
|
- std r0,GPR0(r1) /* save r0 in stackframe */
|
|
|
- std r10,GPR1(r1) /* save r1 in stackframe */
|
|
|
- EXCEPTION_PROLOG_COMMON_2(PACA_EXGEN)
|
|
|
- EXCEPTION_PROLOG_COMMON_3(0xe60)
|
|
|
- addi r3,r1,STACK_FRAME_OVERHEAD
|
|
|
- bl hmi_exception_realmode
|
|
|
- /* Windup the stack. */
|
|
|
- /* Clear MSR_RI before setting SRR0 and SRR1. */
|
|
|
- li r0,MSR_RI
|
|
|
- mfmsr r9 /* get MSR value */
|
|
|
- andc r9,r9,r0
|
|
|
- mtmsrd r9,1 /* Clear MSR_RI */
|
|
|
- /* Move original HSRR0 and HSRR1 into the respective regs */
|
|
|
- ld r9,_MSR(r1)
|
|
|
- mtspr SPRN_HSRR1,r9
|
|
|
- ld r3,_NIP(r1)
|
|
|
- mtspr SPRN_HSRR0,r3
|
|
|
- ld r9,_CTR(r1)
|
|
|
- mtctr r9
|
|
|
- ld r9,_XER(r1)
|
|
|
- mtxer r9
|
|
|
- ld r9,_LINK(r1)
|
|
|
- mtlr r9
|
|
|
- REST_GPR(0, r1)
|
|
|
- REST_8GPRS(2, r1)
|
|
|
- REST_GPR(10, r1)
|
|
|
- ld r11,_CCR(r1)
|
|
|
- mtcr r11
|
|
|
- REST_GPR(11, r1)
|
|
|
- REST_2GPRS(12, r1)
|
|
|
- /* restore original r1. */
|
|
|
- ld r1,GPR1(r1)
|
|
|
-
|
|
|
- /*
|
|
|
- * Go to virtual mode and pull the HMI event information from
|
|
|
- * firmware.
|
|
|
- */
|
|
|
- .globl hmi_exception_after_realmode
|
|
|
-hmi_exception_after_realmode:
|
|
|
- SET_SCRATCH0(r13)
|
|
|
- EXCEPTION_PROLOG_0(PACA_EXGEN)
|
|
|
- b hmi_exception_hv
|
|
|
-
|
|
|
MASKABLE_EXCEPTION_HV_OOL(0xe82, h_doorbell)
|
|
|
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe82)
|
|
|
|
|
@@ -1306,6 +1251,61 @@ fwnmi_data_area:
|
|
|
. = 0x8000
|
|
|
#endif /* defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV) */
|
|
|
|
|
|
+ .globl hmi_exception_early
|
|
|
+hmi_exception_early:
|
|
|
+ EXCEPTION_PROLOG_1(PACA_EXGEN, NOTEST, 0xe60)
|
|
|
+ mr r10,r1 /* Save r1 */
|
|
|
+ ld r1,PACAEMERGSP(r13) /* Use emergency stack */
|
|
|
+ subi r1,r1,INT_FRAME_SIZE /* alloc stack frame */
|
|
|
+ std r9,_CCR(r1) /* save CR in stackframe */
|
|
|
+ mfspr r11,SPRN_HSRR0 /* Save HSRR0 */
|
|
|
+ std r11,_NIP(r1) /* save HSRR0 in stackframe */
|
|
|
+ mfspr r12,SPRN_HSRR1 /* Save SRR1 */
|
|
|
+ std r12,_MSR(r1) /* save SRR1 in stackframe */
|
|
|
+ std r10,0(r1) /* make stack chain pointer */
|
|
|
+ std r0,GPR0(r1) /* save r0 in stackframe */
|
|
|
+ std r10,GPR1(r1) /* save r1 in stackframe */
|
|
|
+ EXCEPTION_PROLOG_COMMON_2(PACA_EXGEN)
|
|
|
+ EXCEPTION_PROLOG_COMMON_3(0xe60)
|
|
|
+ addi r3,r1,STACK_FRAME_OVERHEAD
|
|
|
+ bl hmi_exception_realmode
|
|
|
+ /* Windup the stack. */
|
|
|
+ /* Clear MSR_RI before setting SRR0 and SRR1. */
|
|
|
+ li r0,MSR_RI
|
|
|
+ mfmsr r9 /* get MSR value */
|
|
|
+ andc r9,r9,r0
|
|
|
+ mtmsrd r9,1 /* Clear MSR_RI */
|
|
|
+ /* Move original HSRR0 and HSRR1 into the respective regs */
|
|
|
+ ld r9,_MSR(r1)
|
|
|
+ mtspr SPRN_HSRR1,r9
|
|
|
+ ld r3,_NIP(r1)
|
|
|
+ mtspr SPRN_HSRR0,r3
|
|
|
+ ld r9,_CTR(r1)
|
|
|
+ mtctr r9
|
|
|
+ ld r9,_XER(r1)
|
|
|
+ mtxer r9
|
|
|
+ ld r9,_LINK(r1)
|
|
|
+ mtlr r9
|
|
|
+ REST_GPR(0, r1)
|
|
|
+ REST_8GPRS(2, r1)
|
|
|
+ REST_GPR(10, r1)
|
|
|
+ ld r11,_CCR(r1)
|
|
|
+ mtcr r11
|
|
|
+ REST_GPR(11, r1)
|
|
|
+ REST_2GPRS(12, r1)
|
|
|
+ /* restore original r1. */
|
|
|
+ ld r1,GPR1(r1)
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Go to virtual mode and pull the HMI event information from
|
|
|
+ * firmware.
|
|
|
+ */
|
|
|
+ .globl hmi_exception_after_realmode
|
|
|
+hmi_exception_after_realmode:
|
|
|
+ SET_SCRATCH0(r13)
|
|
|
+ EXCEPTION_PROLOG_0(PACA_EXGEN)
|
|
|
+ b hmi_exception_hv
|
|
|
+
|
|
|
#ifdef CONFIG_PPC_POWERNV
|
|
|
_GLOBAL(opal_mc_secondary_handler)
|
|
|
HMT_MEDIUM_PPR_DISCARD
|