]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
powerpc: Add book3s hypervisor doorbell exception vectors
authorIan Munsie <imunsie@au1.ibm.com>
Wed, 14 Nov 2012 18:49:45 +0000 (18:49 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 10 Jan 2013 04:09:06 +0000 (15:09 +1100)
Directed Hypervisor Doorbell Interrupts come in at 0xe80 (or
0xc000000000004e80 if relocation on exceptions is enabled), so add
exception vectors at these locations.

If doorbell support is not compiled in we handle it as an
unknown_exception.

Signed-off-by: Ian Munsie <imunsie@au1.ibm.com>
Tested-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/include/asm/exception-64s.h
arch/powerpc/kernel/exceptions-64s.S

index ad708dda3ba371a5a63b9f5e970870dd0e9aaa71..9d5367e7e19bc7e4f4d7765d746367e31e7f9e2b 100644 (file)
@@ -305,6 +305,8 @@ label##_relon_hv:                                   \
 #define SOFTEN_VALUE_0x502     PACA_IRQ_EE
 #define SOFTEN_VALUE_0x900     PACA_IRQ_DEC
 #define SOFTEN_VALUE_0x982     PACA_IRQ_DEC
+#define SOFTEN_VALUE_0xe80     PACA_IRQ_DBELL
+#define SOFTEN_VALUE_0xe82     PACA_IRQ_DBELL
 
 #define __SOFTEN_TEST(h, vec)                                          \
        lbz     r10,PACASOFTIRQEN(r13);                                 \
index 4665e82fa37739a2ee9dec60880f033a68f060cf..d08a3cdb7cbe31accd64c4e7011c97af3f082e90 100644 (file)
@@ -293,6 +293,8 @@ hv_exception_trampoline:
        b       hmi_exception_hv
        . = 0xe60
        b       hmi_exception_hv
+       . = 0xe80
+       b       h_doorbell_hv
 
        /* We need to deal with the Altivec unavailable exception
         * here which is at 0xf20, thus in the middle of the
@@ -514,6 +516,8 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_206)
        KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe42)
        STD_EXCEPTION_HV(., 0xe62, hmi_exception) /* need to flush cache ? */
        KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe62)
+       MASKABLE_EXCEPTION_HV(., 0xe82, h_doorbell)
+       KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe82)
 
        /* moved from 0xf00 */
        STD_EXCEPTION_PSERIES(., 0xf00, performance_monitor)
@@ -657,6 +661,11 @@ machine_check_common:
        STD_EXCEPTION_COMMON(0xe00, trap_0e, .unknown_exception)
        STD_EXCEPTION_COMMON(0xe40, emulation_assist, .program_check_exception)
        STD_EXCEPTION_COMMON(0xe60, hmi_exception, .unknown_exception)
+#ifdef CONFIG_PPC_DOORBELL
+       STD_EXCEPTION_COMMON_ASYNC(0xe80, h_doorbell, .doorbell_exception)
+#else
+       STD_EXCEPTION_COMMON_ASYNC(0xe80, h_doorbell, .unknown_exception)
+#endif
        STD_EXCEPTION_COMMON_ASYNC(0xf00, performance_monitor, .performance_monitor_exception)
        STD_EXCEPTION_COMMON(0x1300, instruction_breakpoint, .instruction_breakpoint_exception)
        STD_EXCEPTION_COMMON(0x1502, denorm, .unknown_exception)
@@ -773,9 +782,8 @@ system_call_relon_pSeries:
        . = 0x4e60
        b       hmi_exception_relon_hv
 
-       /* For when we support the doorbell interrupt:
-       STD_RELON_EXCEPTION_HYPERVISOR(0x4e80, 0xe80, doorbell_hyper)
-       */
+       . = 0x4e80
+       b       h_doorbell_relon_hv
 
 performance_monitor_relon_pSeries_1:
        . = 0x4f00
@@ -1355,6 +1363,8 @@ _GLOBAL(do_stab_bolted)
        KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe40)
        STD_RELON_EXCEPTION_HV(., 0xe60, hmi_exception)
        KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe60)
+       MASKABLE_RELON_EXCEPTION_HV(., 0xe80, h_doorbell)
+       KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe80)
 
        STD_RELON_EXCEPTION_PSERIES(., 0xf00, performance_monitor)
        STD_RELON_EXCEPTION_PSERIES(., 0xf20, altivec_unavailable)