powerpc/powernv: Add XICS emulation APIs
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 8 Jul 2016 06:37:05 +0000 (16:37 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 15 Jul 2016 10:18:43 +0000 (20:18 +1000)
OPAL provides an emulated XICS interrupt controller to
use as a fallback on newer processors that don't have a
XICS. It's meant as a way to provide backward compatibility
with future processors. Add the corresponding interfaces.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/opal-api.h
arch/powerpc/include/asm/opal.h
arch/powerpc/platforms/powernv/opal-wrappers.S

index 6de1e4e..b349621 100644 (file)
 #define OPAL_PCI_GET_PRESENCE_STATE            119
 #define OPAL_PCI_GET_POWER_STATE               120
 #define OPAL_PCI_SET_POWER_STATE               121
-#define OPAL_LAST                              121
+#define OPAL_INT_GET_XIRR                      122
+#define        OPAL_INT_SET_CPPR                       123
+#define OPAL_INT_EOI                           124
+#define OPAL_INT_SET_MFRR                      125
+#define OPAL_LAST                              125
 
 /* Device tree flags */
 
index 52b9f4a..162ebe6 100644 (file)
@@ -218,6 +218,11 @@ int64_t opal_pci_set_power_state(uint64_t async_token, uint64_t id,
                                 uint64_t data);
 int64_t opal_pci_poll2(uint64_t id, uint64_t data);
 
+int64_t opal_int_get_xirr(uint32_t *out_xirr, bool just_poll);
+int64_t opal_int_set_cppr(uint8_t cppr);
+int64_t opal_int_eoi(uint32_t xirr);
+int64_t opal_int_set_mfrr(uint32_t cpu, uint8_t mfrr);
+
 /* Internal functions */
 extern int early_init_dt_scan_opal(unsigned long node, const char *uname,
                                   int depth, void *data);
index 7979d6d..c7764f9 100644 (file)
@@ -307,3 +307,7 @@ OPAL_CALL(opal_get_device_tree,                     OPAL_GET_DEVICE_TREE);
 OPAL_CALL(opal_pci_get_presence_state,         OPAL_PCI_GET_PRESENCE_STATE);
 OPAL_CALL(opal_pci_get_power_state,            OPAL_PCI_GET_POWER_STATE);
 OPAL_CALL(opal_pci_set_power_state,            OPAL_PCI_SET_POWER_STATE);
+OPAL_CALL(opal_int_get_xirr,                   OPAL_INT_GET_XIRR);
+OPAL_CALL(opal_int_set_cppr,                   OPAL_INT_SET_CPPR);
+OPAL_CALL(opal_int_eoi,                                OPAL_INT_EOI);
+OPAL_CALL(opal_int_set_mfrr,                   OPAL_INT_SET_MFRR);