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 | /* |
