aboutsummaryrefslogtreecommitdiff
path: root/hw/psi.c
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2016-11-14 13:06:15 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2016-11-15 15:06:03 +1100
commitaecfaf0146ccfb2a4d31fa812d224f8317225e8b (patch)
tree69e5fce2a62b4f6307b5a3559c8fb10b13e6f93b /hw/psi.c
parentbd4eaedc2dda6e7b365eb5e104c07c5d114528e6 (diff)
downloadskiboot-aecfaf0146ccfb2a4d31fa812d224f8317225e8b.zip
skiboot-aecfaf0146ccfb2a4d31fa812d224f8317225e8b.tar.gz
skiboot-aecfaf0146ccfb2a4d31fa812d224f8317225e8b.tar.bz2
xive: Provide a way to override some IPI sources
Some devices such as NX or the NPU will use some of the XIVE provided IPIs for their own interrupts. Thus we need a way for those to provide a custom irq_source_ops for portions of the IPI space in order for them to provide their own attributes() and if needed, interrutps() callbacks. We achieve that by creating a second list of sources which can overlap the primary. The global stock of IPIs is registered by XIVE in the secondary list which is searched when no match is found in the primary. A new API xive_register_ipi_source() is provided for those devices to create an overlapping source structure in the primary list for a subset of the IPIs. Those IPIs must have been previously allocated using xive_alloc_ipi_irqs() Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw/psi.c')
-rw-r--r--hw/psi.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/hw/psi.c b/hw/psi.c
index a7ea12c..9913c3a 100644
--- a/hw/psi.c
+++ b/hw/psi.c
@@ -785,9 +785,9 @@ static void psi_init_p9_interrupts(struct psi *psi)
out_be64(psi->regs + PSIHB_IVT_OFFSET, val);
/* Register sources */
- xive_register_source(psi->interrupt, P9_PSI_NUM_IRQS,
- 12, psi->esb_mmio, XIVE_SRC_LSI,
- psi, &psi_p9_irq_ops);
+ xive_register_hw_source(psi->interrupt, P9_PSI_NUM_IRQS,
+ 12, psi->esb_mmio, XIVE_SRC_LSI,
+ psi, &psi_p9_irq_ops);
}
static void psi_init_interrupts(struct psi *psi)