diff options
Diffstat (limited to 'arch/powerpc/kernel/exceptions-64s.S')
-rw-r--r-- | arch/powerpc/kernel/exceptions-64s.S | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 902ca3c6b4b6..3a9ed6ac224b 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
@@ -293,27 +293,31 @@ system_call_pSeries: | |||
293 | * out of line to handle them | 293 | * out of line to handle them |
294 | */ | 294 | */ |
295 | . = 0xe00 | 295 | . = 0xe00 |
296 | hv_exception_trampoline: | 296 | hv_data_storage_trampoline: |
297 | SET_SCRATCH0(r13) | 297 | SET_SCRATCH0(r13) |
298 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 298 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
299 | b h_data_storage_hv | 299 | b h_data_storage_hv |
300 | 300 | ||
301 | . = 0xe20 | 301 | . = 0xe20 |
302 | hv_instr_storage_trampoline: | ||
302 | SET_SCRATCH0(r13) | 303 | SET_SCRATCH0(r13) |
303 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 304 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
304 | b h_instr_storage_hv | 305 | b h_instr_storage_hv |
305 | 306 | ||
306 | . = 0xe40 | 307 | . = 0xe40 |
308 | emulation_assist_trampoline: | ||
307 | SET_SCRATCH0(r13) | 309 | SET_SCRATCH0(r13) |
308 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 310 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
309 | b emulation_assist_hv | 311 | b emulation_assist_hv |
310 | 312 | ||
311 | . = 0xe60 | 313 | . = 0xe60 |
314 | hv_exception_trampoline: | ||
312 | SET_SCRATCH0(r13) | 315 | SET_SCRATCH0(r13) |
313 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 316 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
314 | b hmi_exception_hv | 317 | b hmi_exception_hv |
315 | 318 | ||
316 | . = 0xe80 | 319 | . = 0xe80 |
320 | hv_doorbell_trampoline: | ||
317 | SET_SCRATCH0(r13) | 321 | SET_SCRATCH0(r13) |
318 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 322 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
319 | b h_doorbell_hv | 323 | b h_doorbell_hv |
@@ -323,32 +327,32 @@ hv_exception_trampoline: | |||
323 | * prolog code of the PerformanceMonitor one. A little | 327 | * prolog code of the PerformanceMonitor one. A little |
324 | * trickery is thus necessary | 328 | * trickery is thus necessary |
325 | */ | 329 | */ |
326 | performance_monitor_pSeries_1: | ||
327 | . = 0xf00 | 330 | . = 0xf00 |
331 | performance_monitor_pseries_trampoline: | ||
328 | SET_SCRATCH0(r13) | 332 | SET_SCRATCH0(r13) |
329 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 333 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
330 | b performance_monitor_pSeries | 334 | b performance_monitor_pSeries |
331 | 335 | ||
332 | altivec_unavailable_pSeries_1: | ||
333 | . = 0xf20 | 336 | . = 0xf20 |
337 | altivec_unavailable_pseries_trampoline: | ||
334 | SET_SCRATCH0(r13) | 338 | SET_SCRATCH0(r13) |
335 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 339 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
336 | b altivec_unavailable_pSeries | 340 | b altivec_unavailable_pSeries |
337 | 341 | ||
338 | vsx_unavailable_pSeries_1: | ||
339 | . = 0xf40 | 342 | . = 0xf40 |
343 | vsx_unavailable_pseries_trampoline: | ||
340 | SET_SCRATCH0(r13) | 344 | SET_SCRATCH0(r13) |
341 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 345 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
342 | b vsx_unavailable_pSeries | 346 | b vsx_unavailable_pSeries |
343 | 347 | ||
344 | facility_unavailable_trampoline: | ||
345 | . = 0xf60 | 348 | . = 0xf60 |
349 | facility_unavailable_trampoline: | ||
346 | SET_SCRATCH0(r13) | 350 | SET_SCRATCH0(r13) |
347 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 351 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
348 | b facility_unavailable_pSeries | 352 | b facility_unavailable_pSeries |
349 | 353 | ||
350 | hv_facility_unavailable_trampoline: | ||
351 | . = 0xf80 | 354 | . = 0xf80 |
355 | hv_facility_unavailable_trampoline: | ||
352 | SET_SCRATCH0(r13) | 356 | SET_SCRATCH0(r13) |
353 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 357 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
354 | b facility_unavailable_hv | 358 | b facility_unavailable_hv |
@@ -367,11 +371,7 @@ denorm_exception_hv: | |||
367 | HMT_MEDIUM_PPR_DISCARD | 371 | HMT_MEDIUM_PPR_DISCARD |
368 | mtspr SPRN_SPRG_HSCRATCH0,r13 | 372 | mtspr SPRN_SPRG_HSCRATCH0,r13 |
369 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 373 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
370 | std r11,PACA_EXGEN+EX_R11(r13) | 374 | EXCEPTION_PROLOG_1(PACA_EXGEN, NOTEST, 0x1500) |
371 | std r12,PACA_EXGEN+EX_R12(r13) | ||
372 | mfspr r9,SPRN_SPRG_HSCRATCH0 | ||
373 | std r9,PACA_EXGEN+EX_R13(r13) | ||
374 | mfcr r9 | ||
375 | 375 | ||
376 | #ifdef CONFIG_PPC_DENORMALISATION | 376 | #ifdef CONFIG_PPC_DENORMALISATION |
377 | mfspr r10,SPRN_HSRR1 | 377 | mfspr r10,SPRN_HSRR1 |
@@ -381,6 +381,7 @@ denorm_exception_hv: | |||
381 | bne+ denorm_assist | 381 | bne+ denorm_assist |
382 | #endif | 382 | #endif |
383 | 383 | ||
384 | KVMTEST(0x1500) | ||
384 | EXCEPTION_PROLOG_PSERIES_1(denorm_common, EXC_HV) | 385 | EXCEPTION_PROLOG_PSERIES_1(denorm_common, EXC_HV) |
385 | KVM_HANDLER_SKIP(PACA_EXGEN, EXC_STD, 0x1500) | 386 | KVM_HANDLER_SKIP(PACA_EXGEN, EXC_STD, 0x1500) |
386 | 387 | ||
@@ -501,6 +502,10 @@ denorm_done: | |||
501 | mtcrf 0x80,r9 | 502 | mtcrf 0x80,r9 |
502 | ld r9,PACA_EXGEN+EX_R9(r13) | 503 | ld r9,PACA_EXGEN+EX_R9(r13) |
503 | RESTORE_PPR_PACA(PACA_EXGEN, r10) | 504 | RESTORE_PPR_PACA(PACA_EXGEN, r10) |
505 | BEGIN_FTR_SECTION | ||
506 | ld r10,PACA_EXGEN+EX_CFAR(r13) | ||
507 | mtspr SPRN_CFAR,r10 | ||
508 | END_FTR_SECTION_IFSET(CPU_FTR_CFAR) | ||
504 | ld r10,PACA_EXGEN+EX_R10(r13) | 509 | ld r10,PACA_EXGEN+EX_R10(r13) |
505 | ld r11,PACA_EXGEN+EX_R11(r13) | 510 | ld r11,PACA_EXGEN+EX_R11(r13) |
506 | ld r12,PACA_EXGEN+EX_R12(r13) | 511 | ld r12,PACA_EXGEN+EX_R12(r13) |
@@ -808,6 +813,7 @@ system_call_relon_pSeries: | |||
808 | b . /* Can't happen, see v2.07 Book III-S section 6.5 */ | 813 | b . /* Can't happen, see v2.07 Book III-S section 6.5 */ |
809 | 814 | ||
810 | . = 0x4e40 | 815 | . = 0x4e40 |
816 | emulation_assist_relon_trampoline: | ||
811 | SET_SCRATCH0(r13) | 817 | SET_SCRATCH0(r13) |
812 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 818 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
813 | b emulation_assist_relon_hv | 819 | b emulation_assist_relon_hv |
@@ -816,36 +822,37 @@ system_call_relon_pSeries: | |||
816 | b . /* Can't happen, see v2.07 Book III-S section 6.5 */ | 822 | b . /* Can't happen, see v2.07 Book III-S section 6.5 */ |
817 | 823 | ||
818 | . = 0x4e80 | 824 | . = 0x4e80 |
825 | h_doorbell_relon_trampoline: | ||
819 | SET_SCRATCH0(r13) | 826 | SET_SCRATCH0(r13) |
820 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 827 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
821 | b h_doorbell_relon_hv | 828 | b h_doorbell_relon_hv |
822 | 829 | ||
823 | performance_monitor_relon_pSeries_1: | ||
824 | . = 0x4f00 | 830 | . = 0x4f00 |
831 | performance_monitor_relon_pseries_trampoline: | ||
825 | SET_SCRATCH0(r13) | 832 | SET_SCRATCH0(r13) |
826 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 833 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
827 | b performance_monitor_relon_pSeries | 834 | b performance_monitor_relon_pSeries |
828 | 835 | ||
829 | altivec_unavailable_relon_pSeries_1: | ||
830 | . = 0x4f20 | 836 | . = 0x4f20 |
837 | altivec_unavailable_relon_pseries_trampoline: | ||
831 | SET_SCRATCH0(r13) | 838 | SET_SCRATCH0(r13) |
832 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 839 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
833 | b altivec_unavailable_relon_pSeries | 840 | b altivec_unavailable_relon_pSeries |
834 | 841 | ||
835 | vsx_unavailable_relon_pSeries_1: | ||
836 | . = 0x4f40 | 842 | . = 0x4f40 |
843 | vsx_unavailable_relon_pseries_trampoline: | ||
837 | SET_SCRATCH0(r13) | 844 | SET_SCRATCH0(r13) |
838 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 845 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
839 | b vsx_unavailable_relon_pSeries | 846 | b vsx_unavailable_relon_pSeries |
840 | 847 | ||
841 | facility_unavailable_relon_trampoline: | ||
842 | . = 0x4f60 | 848 | . = 0x4f60 |
849 | facility_unavailable_relon_trampoline: | ||
843 | SET_SCRATCH0(r13) | 850 | SET_SCRATCH0(r13) |
844 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 851 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
845 | b facility_unavailable_relon_pSeries | 852 | b facility_unavailable_relon_pSeries |
846 | 853 | ||
847 | hv_facility_unavailable_relon_trampoline: | ||
848 | . = 0x4f80 | 854 | . = 0x4f80 |
855 | hv_facility_unavailable_relon_trampoline: | ||
849 | SET_SCRATCH0(r13) | 856 | SET_SCRATCH0(r13) |
850 | EXCEPTION_PROLOG_0(PACA_EXGEN) | 857 | EXCEPTION_PROLOG_0(PACA_EXGEN) |
851 | b hv_facility_unavailable_relon_hv | 858 | b hv_facility_unavailable_relon_hv |