diff options
-rw-r--r-- | arch/powerpc/include/asm/exception-64s.h | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/exceptions-64s.S | 16 |
2 files changed, 15 insertions, 3 deletions
diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h index ad708dda3ba3..9d5367e7e19b 100644 --- a/arch/powerpc/include/asm/exception-64s.h +++ b/arch/powerpc/include/asm/exception-64s.h | |||
@@ -305,6 +305,8 @@ label##_relon_hv: \ | |||
305 | #define SOFTEN_VALUE_0x502 PACA_IRQ_EE | 305 | #define SOFTEN_VALUE_0x502 PACA_IRQ_EE |
306 | #define SOFTEN_VALUE_0x900 PACA_IRQ_DEC | 306 | #define SOFTEN_VALUE_0x900 PACA_IRQ_DEC |
307 | #define SOFTEN_VALUE_0x982 PACA_IRQ_DEC | 307 | #define SOFTEN_VALUE_0x982 PACA_IRQ_DEC |
308 | #define SOFTEN_VALUE_0xe80 PACA_IRQ_DBELL | ||
309 | #define SOFTEN_VALUE_0xe82 PACA_IRQ_DBELL | ||
308 | 310 | ||
309 | #define __SOFTEN_TEST(h, vec) \ | 311 | #define __SOFTEN_TEST(h, vec) \ |
310 | lbz r10,PACASOFTIRQEN(r13); \ | 312 | lbz r10,PACASOFTIRQEN(r13); \ |
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 4665e82fa377..d08a3cdb7cbe 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
@@ -293,6 +293,8 @@ hv_exception_trampoline: | |||
293 | b hmi_exception_hv | 293 | b hmi_exception_hv |
294 | . = 0xe60 | 294 | . = 0xe60 |
295 | b hmi_exception_hv | 295 | b hmi_exception_hv |
296 | . = 0xe80 | ||
297 | b h_doorbell_hv | ||
296 | 298 | ||
297 | /* We need to deal with the Altivec unavailable exception | 299 | /* We need to deal with the Altivec unavailable exception |
298 | * here which is at 0xf20, thus in the middle of the | 300 | * here which is at 0xf20, thus in the middle of the |
@@ -514,6 +516,8 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_206) | |||
514 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe42) | 516 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe42) |
515 | STD_EXCEPTION_HV(., 0xe62, hmi_exception) /* need to flush cache ? */ | 517 | STD_EXCEPTION_HV(., 0xe62, hmi_exception) /* need to flush cache ? */ |
516 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe62) | 518 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe62) |
519 | MASKABLE_EXCEPTION_HV(., 0xe82, h_doorbell) | ||
520 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe82) | ||
517 | 521 | ||
518 | /* moved from 0xf00 */ | 522 | /* moved from 0xf00 */ |
519 | STD_EXCEPTION_PSERIES(., 0xf00, performance_monitor) | 523 | STD_EXCEPTION_PSERIES(., 0xf00, performance_monitor) |
@@ -657,6 +661,11 @@ machine_check_common: | |||
657 | STD_EXCEPTION_COMMON(0xe00, trap_0e, .unknown_exception) | 661 | STD_EXCEPTION_COMMON(0xe00, trap_0e, .unknown_exception) |
658 | STD_EXCEPTION_COMMON(0xe40, emulation_assist, .program_check_exception) | 662 | STD_EXCEPTION_COMMON(0xe40, emulation_assist, .program_check_exception) |
659 | STD_EXCEPTION_COMMON(0xe60, hmi_exception, .unknown_exception) | 663 | STD_EXCEPTION_COMMON(0xe60, hmi_exception, .unknown_exception) |
664 | #ifdef CONFIG_PPC_DOORBELL | ||
665 | STD_EXCEPTION_COMMON_ASYNC(0xe80, h_doorbell, .doorbell_exception) | ||
666 | #else | ||
667 | STD_EXCEPTION_COMMON_ASYNC(0xe80, h_doorbell, .unknown_exception) | ||
668 | #endif | ||
660 | STD_EXCEPTION_COMMON_ASYNC(0xf00, performance_monitor, .performance_monitor_exception) | 669 | STD_EXCEPTION_COMMON_ASYNC(0xf00, performance_monitor, .performance_monitor_exception) |
661 | STD_EXCEPTION_COMMON(0x1300, instruction_breakpoint, .instruction_breakpoint_exception) | 670 | STD_EXCEPTION_COMMON(0x1300, instruction_breakpoint, .instruction_breakpoint_exception) |
662 | STD_EXCEPTION_COMMON(0x1502, denorm, .unknown_exception) | 671 | STD_EXCEPTION_COMMON(0x1502, denorm, .unknown_exception) |
@@ -773,9 +782,8 @@ system_call_relon_pSeries: | |||
773 | . = 0x4e60 | 782 | . = 0x4e60 |
774 | b hmi_exception_relon_hv | 783 | b hmi_exception_relon_hv |
775 | 784 | ||
776 | /* For when we support the doorbell interrupt: | 785 | . = 0x4e80 |
777 | STD_RELON_EXCEPTION_HYPERVISOR(0x4e80, 0xe80, doorbell_hyper) | 786 | b h_doorbell_relon_hv |
778 | */ | ||
779 | 787 | ||
780 | performance_monitor_relon_pSeries_1: | 788 | performance_monitor_relon_pSeries_1: |
781 | . = 0x4f00 | 789 | . = 0x4f00 |
@@ -1355,6 +1363,8 @@ _GLOBAL(do_stab_bolted) | |||
1355 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe40) | 1363 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe40) |
1356 | STD_RELON_EXCEPTION_HV(., 0xe60, hmi_exception) | 1364 | STD_RELON_EXCEPTION_HV(., 0xe60, hmi_exception) |
1357 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe60) | 1365 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe60) |
1366 | MASKABLE_RELON_EXCEPTION_HV(., 0xe80, h_doorbell) | ||
1367 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe80) | ||
1358 | 1368 | ||
1359 | STD_RELON_EXCEPTION_PSERIES(., 0xf00, performance_monitor) | 1369 | STD_RELON_EXCEPTION_PSERIES(., 0xf00, performance_monitor) |
1360 | STD_RELON_EXCEPTION_PSERIES(., 0xf20, altivec_unavailable) | 1370 | STD_RELON_EXCEPTION_PSERIES(., 0xf20, altivec_unavailable) |