|
@@ -57,6 +57,10 @@
|
|
|
* 0x7000 - 0x7fff : FWNMI data area
|
|
|
* 0x8000 - .... : Common interrupt handlers, remaining early
|
|
|
* setup code, rest of kernel.
|
|
|
+ *
|
|
|
+ * We could reclaim 0x4000-0x42ff for real mode trampolines if the space
|
|
|
+ * is necessary. Until then it's more consistent to explicitly put VIRT_NONE
|
|
|
+ * vectors there.
|
|
|
*/
|
|
|
OPEN_FIXED_SECTION(real_vectors, 0x0100, 0x1900)
|
|
|
OPEN_FIXED_SECTION(real_trampolines, 0x1900, 0x4000)
|
|
@@ -88,6 +92,9 @@ USE_FIXED_SECTION(real_vectors)
|
|
|
.globl __start_interrupts
|
|
|
__start_interrupts:
|
|
|
|
|
|
+/* No virt vectors corresponding with 0x0..0x100 */
|
|
|
+EXC_VIRT_NONE(0x4000, 0x4100)
|
|
|
+
|
|
|
EXC_REAL_BEGIN(system_reset, 0x100, 0x200)
|
|
|
SET_SCRATCH0(r13)
|
|
|
#ifdef CONFIG_PPC_P7_NAP
|
|
@@ -907,9 +914,7 @@ TRAMP_KVM(PACA_EXGEN, 0xd00)
|
|
|
EXC_COMMON(single_step_common, 0xd00, single_step_exception)
|
|
|
|
|
|
EXC_REAL_OOL_HV(h_data_storage, 0xe00, 0xe20)
|
|
|
-EXC_VIRT_BEGIN(unused, 0x4e00, 0x4e20)
|
|
|
- b . /* Can't happen, see v2.07 Book III-S section 6.5 */
|
|
|
-EXC_VIRT_END(unused, 0x4e00, 0x4e20)
|
|
|
+EXC_VIRT_NONE(0x4e00, 0x4e20)
|
|
|
TRAMP_KVM_HV_SKIP(PACA_EXGEN, 0xe00)
|
|
|
EXC_COMMON_BEGIN(h_data_storage_common)
|
|
|
mfspr r10,SPRN_HDAR
|
|
@@ -922,13 +927,10 @@ EXC_COMMON_BEGIN(h_data_storage_common)
|
|
|
addi r3,r1,STACK_FRAME_OVERHEAD
|
|
|
bl unknown_exception
|
|
|
b ret_from_except
|
|
|
-EXC_COMMON(trap_0e_common, 0xe00, unknown_exception)
|
|
|
|
|
|
|
|
|
EXC_REAL_OOL_HV(h_instr_storage, 0xe20, 0xe40)
|
|
|
-EXC_VIRT_BEGIN(unused, 0x4e20, 0x4e40)
|
|
|
- b . /* Can't happen, see v2.07 Book III-S section 6.5 */
|
|
|
-EXC_VIRT_END(unused, 0x4e20, 0x4e40)
|
|
|
+EXC_VIRT_NONE(0x4e20, 0x4e40)
|
|
|
TRAMP_KVM_HV(PACA_EXGEN, 0xe20)
|
|
|
EXC_COMMON(h_instr_storage_common, 0xe20, unknown_exception)
|
|
|
|
|
@@ -939,11 +941,14 @@ TRAMP_KVM_HV(PACA_EXGEN, 0xe40)
|
|
|
EXC_COMMON(emulation_assist_common, 0xe40, emulation_assist_interrupt)
|
|
|
|
|
|
|
|
|
+/*
|
|
|
+ * hmi_exception trampoline is a special case. It jumps to hmi_exception_early
|
|
|
+ * first, and then eventaully from there to the trampoline to get into virtual
|
|
|
+ * mode.
|
|
|
+ */
|
|
|
__EXC_REAL_OOL_HV_DIRECT(hmi_exception, 0xe60, 0xe80, hmi_exception_early)
|
|
|
__TRAMP_REAL_REAL_OOL_MASKABLE_HV(hmi_exception, 0xe60)
|
|
|
-EXC_VIRT_BEGIN(unused, 0x4e60, 0x4e80)
|
|
|
- b . /* Can't happen, see v2.07 Book III-S section 6.5 */
|
|
|
-EXC_VIRT_END(unused, 0x4e60, 0x4e80)
|
|
|
+EXC_VIRT_NONE(0x4e60, 0x4e80)
|
|
|
TRAMP_KVM_HV(PACA_EXGEN, 0xe60)
|
|
|
TRAMP_REAL_BEGIN(hmi_exception_early)
|
|
|
EXCEPTION_PROLOG_1(PACA_EXGEN, KVMTEST_HV, 0xe60)
|
|
@@ -1118,6 +1123,7 @@ TRAMP_KVM_HV_SKIP(PACA_EXGEN, 0x1200)
|
|
|
EXC_COMMON(cbe_system_error_common, 0x1200, cbe_system_error_exception)
|
|
|
#else /* CONFIG_CBE_RAS */
|
|
|
EXC_REAL_NONE(0x1200, 0x1300)
|
|
|
+EXC_VIRT_NONE(0x5200, 0x5300)
|
|
|
#endif
|
|
|
|
|
|
|
|
@@ -1126,6 +1132,8 @@ EXC_VIRT(instruction_breakpoint, 0x5300, 0x5400, 0x1300)
|
|
|
TRAMP_KVM_SKIP(PACA_EXGEN, 0x1300)
|
|
|
EXC_COMMON(instruction_breakpoint_common, 0x1300, instruction_breakpoint_exception)
|
|
|
|
|
|
+EXC_REAL_NONE(0x1400, 0x1500)
|
|
|
+EXC_VIRT_NONE(0x5400, 0x5500)
|
|
|
|
|
|
EXC_REAL_BEGIN(denorm_exception_hv, 0x1500, 0x1600)
|
|
|
mtspr SPRN_SPRG_HSCRATCH0,r13
|
|
@@ -1228,6 +1236,7 @@ TRAMP_KVM_HV_SKIP(PACA_EXGEN, 0x1600)
|
|
|
EXC_COMMON(cbe_maintenance_common, 0x1600, cbe_maintenance_exception)
|
|
|
#else /* CONFIG_CBE_RAS */
|
|
|
EXC_REAL_NONE(0x1600, 0x1700)
|
|
|
+EXC_VIRT_NONE(0x5600, 0x5700)
|
|
|
#endif
|
|
|
|
|
|
|
|
@@ -1248,6 +1257,7 @@ TRAMP_KVM_HV_SKIP(PACA_EXGEN, 0x1800)
|
|
|
EXC_COMMON(cbe_thermal_common, 0x1800, cbe_thermal_exception)
|
|
|
#else /* CONFIG_CBE_RAS */
|
|
|
EXC_REAL_NONE(0x1800, 0x1900)
|
|
|
+EXC_VIRT_NONE(0x5800, 0x5900)
|
|
|
#endif
|
|
|
|
|
|
|