powerpc: Add book3s privileged doorbell exception vectors
authorIan Munsie <imunsie@au1.ibm.com>
Wed, 14 Nov 2012 18:49:46 +0000 (18:49 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 10 Jan 2013 04:09:06 +0000 (15:09 +1100)
Directed Privileged Doorbell Interrupts come in at 0xa00 (or
0xc000000000004a00 if relocation on exception 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 9d5367e7e19bc7e4f4d7765d746367e31e7f9e2b..b1edd801d314e01beaa5b4f6bcb9fbdfe44ef6b0 100644 (file)
@@ -305,6 +305,7 @@ 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_0xa00     PACA_IRQ_DBELL
 #define SOFTEN_VALUE_0xe80     PACA_IRQ_DBELL
 #define SOFTEN_VALUE_0xe82     PACA_IRQ_DBELL
 
index d08a3cdb7cbe31accd64c4e7011c97af3f082e90..176bf99e01c662eba35709437b8dd3e320f8f3ab 100644 (file)
@@ -252,7 +252,7 @@ hardware_interrupt_hv:
        MASKABLE_EXCEPTION_PSERIES(0x900, 0x900, decrementer)
        STD_EXCEPTION_HV(0x980, 0x982, hdecrementer)
 
-       STD_EXCEPTION_PSERIES(0xa00, 0xa00, trap_0a)
+       MASKABLE_EXCEPTION_PSERIES(0xa00, 0xa00, doorbell_super)
        KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xa00)
 
        STD_EXCEPTION_PSERIES(0xb00, 0xb00, trap_0b)
@@ -655,7 +655,11 @@ machine_check_common:
        STD_EXCEPTION_COMMON_ASYNC(0x500, hardware_interrupt, do_IRQ)
        STD_EXCEPTION_COMMON_ASYNC(0x900, decrementer, .timer_interrupt)
        STD_EXCEPTION_COMMON(0x980, hdecrementer, .hdec_interrupt)
-       STD_EXCEPTION_COMMON(0xa00, trap_0a, .unknown_exception)
+#ifdef CONFIG_PPC_DOORBELL
+       STD_EXCEPTION_COMMON_ASYNC(0xa00, doorbell_super, .doorbell_exception)
+#else
+       STD_EXCEPTION_COMMON_ASYNC(0xa00, doorbell_super, .unknown_exception)
+#endif
        STD_EXCEPTION_COMMON(0xb00, trap_0b, .unknown_exception)
        STD_EXCEPTION_COMMON(0xd00, single_step, .single_step_exception)
        STD_EXCEPTION_COMMON(0xe00, trap_0e, .unknown_exception)
@@ -755,6 +759,7 @@ hardware_interrupt_relon_hv:
        STD_RELON_EXCEPTION_PSERIES(0x4800, 0x800, fp_unavailable)
        MASKABLE_RELON_EXCEPTION_PSERIES(0x4900, 0x900, decrementer)
        STD_RELON_EXCEPTION_HV(0x4980, 0x982, hdecrementer)
+       MASKABLE_RELON_EXCEPTION_PSERIES(0x4a00, 0xa00, doorbell_super)
        STD_RELON_EXCEPTION_PSERIES(0x4b00, 0xb00, trap_0b)
 
        . = 0x4c00