diff options
Diffstat (limited to 'arch/powerpc/kernel/exceptions-64s.S')
-rw-r--r-- | arch/powerpc/kernel/exceptions-64s.S | 56 |
1 files changed, 25 insertions, 31 deletions
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 40e4a17c8ba0..4e00d223b2e3 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
@@ -341,10 +341,17 @@ vsx_unavailable_pSeries_1: | |||
341 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 341 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
342 | b vsx_unavailable_pSeries | 342 | b vsx_unavailable_pSeries |
343 | 343 | ||
344 | facility_unavailable_trampoline: | ||
344 | . = 0xf60 | 345 | . = 0xf60 |
345 | SET_SCRATCH0(r13) | 346 | SET_SCRATCH0(r13) |
346 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 347 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
347 | b tm_unavailable_pSeries | 348 | b facility_unavailable_pSeries |
349 | |||
350 | hv_facility_unavailable_trampoline: | ||
351 | . = 0xf80 | ||
352 | SET_SCRATCH0(r13) | ||
353 | EXCEPTION_PROLOG_0(PACA_EXGEN) | ||
354 | b facility_unavailable_hv | ||
348 | 355 | ||
349 | #ifdef CONFIG_CBE_RAS | 356 | #ifdef CONFIG_CBE_RAS |
350 | STD_EXCEPTION_HV(0x1200, 0x1202, cbe_system_error) | 357 | STD_EXCEPTION_HV(0x1200, 0x1202, cbe_system_error) |
@@ -522,8 +529,10 @@ denorm_done: | |||
522 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xf20) | 529 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xf20) |
523 | STD_EXCEPTION_PSERIES_OOL(0xf40, vsx_unavailable) | 530 | STD_EXCEPTION_PSERIES_OOL(0xf40, vsx_unavailable) |
524 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xf40) | 531 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xf40) |
525 | STD_EXCEPTION_PSERIES_OOL(0xf60, tm_unavailable) | 532 | STD_EXCEPTION_PSERIES_OOL(0xf60, facility_unavailable) |
526 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xf60) | 533 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xf60) |
534 | STD_EXCEPTION_HV_OOL(0xf82, facility_unavailable) | ||
535 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xf82) | ||
527 | 536 | ||
528 | /* | 537 | /* |
529 | * An interrupt came in while soft-disabled. We set paca->irq_happened, then: | 538 | * An interrupt came in while soft-disabled. We set paca->irq_happened, then: |
@@ -793,14 +802,10 @@ system_call_relon_pSeries: | |||
793 | STD_RELON_EXCEPTION_PSERIES(0x4d00, 0xd00, single_step) | 802 | STD_RELON_EXCEPTION_PSERIES(0x4d00, 0xd00, single_step) |
794 | 803 | ||
795 | . = 0x4e00 | 804 | . = 0x4e00 |
796 | SET_SCRATCH0(r13) | 805 | b . /* Can't happen, see v2.07 Book III-S section 6.5 */ |
797 | EXCEPTION_PROLOG_0(PACA_EXGEN) | ||
798 | b h_data_storage_relon_hv | ||
799 | 806 | ||
800 | . = 0x4e20 | 807 | . = 0x4e20 |
801 | SET_SCRATCH0(r13) | 808 | b . /* Can't happen, see v2.07 Book III-S section 6.5 */ |
802 | EXCEPTION_PROLOG_0(PACA_EXGEN) | ||
803 | b h_instr_storage_relon_hv | ||
804 | 809 | ||
805 | . = 0x4e40 | 810 | . = 0x4e40 |
806 | SET_SCRATCH0(r13) | 811 | SET_SCRATCH0(r13) |
@@ -808,9 +813,7 @@ system_call_relon_pSeries: | |||
808 | b emulation_assist_relon_hv | 813 | b emulation_assist_relon_hv |
809 | 814 | ||
810 | . = 0x4e60 | 815 | . = 0x4e60 |
811 | SET_SCRATCH0(r13) | 816 | b . /* Can't happen, see v2.07 Book III-S section 6.5 */ |
812 | EXCEPTION_PROLOG_0(PACA_EXGEN) | ||
813 | b hmi_exception_relon_hv | ||
814 | 817 | ||
815 | . = 0x4e80 | 818 | . = 0x4e80 |
816 | SET_SCRATCH0(r13) | 819 | SET_SCRATCH0(r13) |
@@ -835,11 +838,17 @@ vsx_unavailable_relon_pSeries_1: | |||
835 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 838 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
836 | b vsx_unavailable_relon_pSeries | 839 | b vsx_unavailable_relon_pSeries |
837 | 840 | ||
838 | tm_unavailable_relon_pSeries_1: | 841 | facility_unavailable_relon_trampoline: |
839 | . = 0x4f60 | 842 | . = 0x4f60 |
840 | SET_SCRATCH0(r13) | 843 | SET_SCRATCH0(r13) |
841 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 844 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
842 | b tm_unavailable_relon_pSeries | 845 | b facility_unavailable_relon_pSeries |
846 | |||
847 | hv_facility_unavailable_relon_trampoline: | ||
848 | . = 0x4f80 | ||
849 | SET_SCRATCH0(r13) | ||
850 | EXCEPTION_PROLOG_0(PACA_EXGEN) | ||
851 | b facility_unavailable_relon_hv | ||
843 | 852 | ||
844 | STD_RELON_EXCEPTION_PSERIES(0x5300, 0x1300, instruction_breakpoint) | 853 | STD_RELON_EXCEPTION_PSERIES(0x5300, 0x1300, instruction_breakpoint) |
845 | #ifdef CONFIG_PPC_DENORMALISATION | 854 | #ifdef CONFIG_PPC_DENORMALISATION |
@@ -1165,36 +1174,21 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX) | |||
1165 | bl .vsx_unavailable_exception | 1174 | bl .vsx_unavailable_exception |
1166 | b .ret_from_except | 1175 | b .ret_from_except |
1167 | 1176 | ||
1168 | .align 7 | 1177 | STD_EXCEPTION_COMMON(0xf60, facility_unavailable, .facility_unavailable_exception) |
1169 | .globl tm_unavailable_common | ||
1170 | tm_unavailable_common: | ||
1171 | EXCEPTION_PROLOG_COMMON(0xf60, PACA_EXGEN) | ||
1172 | bl .save_nvgprs | ||
1173 | DISABLE_INTS | ||
1174 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
1175 | bl .tm_unavailable_exception | ||
1176 | b .ret_from_except | ||
1177 | 1178 | ||
1178 | .align 7 | 1179 | .align 7 |
1179 | .globl __end_handlers | 1180 | .globl __end_handlers |
1180 | __end_handlers: | 1181 | __end_handlers: |
1181 | 1182 | ||
1182 | /* Equivalents to the above handlers for relocation-on interrupt vectors */ | 1183 | /* Equivalents to the above handlers for relocation-on interrupt vectors */ |
1183 | STD_RELON_EXCEPTION_HV_OOL(0xe00, h_data_storage) | ||
1184 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe00) | ||
1185 | STD_RELON_EXCEPTION_HV_OOL(0xe20, h_instr_storage) | ||
1186 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe20) | ||
1187 | STD_RELON_EXCEPTION_HV_OOL(0xe40, emulation_assist) | 1184 | STD_RELON_EXCEPTION_HV_OOL(0xe40, emulation_assist) |
1188 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe40) | ||
1189 | STD_RELON_EXCEPTION_HV_OOL(0xe60, hmi_exception) | ||
1190 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe60) | ||
1191 | MASKABLE_RELON_EXCEPTION_HV_OOL(0xe80, h_doorbell) | 1185 | MASKABLE_RELON_EXCEPTION_HV_OOL(0xe80, h_doorbell) |
1192 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe80) | ||
1193 | 1186 | ||
1194 | STD_RELON_EXCEPTION_PSERIES_OOL(0xf00, performance_monitor) | 1187 | STD_RELON_EXCEPTION_PSERIES_OOL(0xf00, performance_monitor) |
1195 | STD_RELON_EXCEPTION_PSERIES_OOL(0xf20, altivec_unavailable) | 1188 | STD_RELON_EXCEPTION_PSERIES_OOL(0xf20, altivec_unavailable) |
1196 | STD_RELON_EXCEPTION_PSERIES_OOL(0xf40, vsx_unavailable) | 1189 | STD_RELON_EXCEPTION_PSERIES_OOL(0xf40, vsx_unavailable) |
1197 | STD_RELON_EXCEPTION_PSERIES_OOL(0xf60, tm_unavailable) | 1190 | STD_RELON_EXCEPTION_PSERIES_OOL(0xf60, facility_unavailable) |
1191 | STD_RELON_EXCEPTION_HV_OOL(0xf80, facility_unavailable) | ||
1198 | 1192 | ||
1199 | #if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV) | 1193 | #if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV) |
1200 | /* | 1194 | /* |