summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Auger2017-10-31 12:50:52 +0100
committerPeter Maydell2017-10-31 12:50:52 +0100
commit168df2dea701bbf3118bdfea7794369dfa694d3d (patch)
treebe9cd2584ddd3df4aa32860fede26e7933f6660f
parentmsf2: Wire up SYSRESETREQ in SoC for system reset (diff)
downloadqemu-168df2dea701bbf3118bdfea7794369dfa694d3d.tar.gz
qemu-168df2dea701bbf3118bdfea7794369dfa694d3d.tar.xz
qemu-168df2dea701bbf3118bdfea7794369dfa694d3d.zip
hw/pci-host/gpex: Improve INTX to gsi routing error checking
We exposed gpex_set_irq_num() for machines to set the INTx to GSI routing. However if the machine forgets to call that function we currently do not check the association was properly done. Let's initialize gsi values to -1 and if this value is found in gpex_route_intx_pin_to_irq, set the routing mode as disabled. Signed-off-by: Eric Auger <eric.auger@redhat.com> Message-id: 1508776211-22175-1-git-send-email-eric.auger@redhat.com Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--hw/pci-host/gpex.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/hw/pci-host/gpex.c b/hw/pci-host/gpex.c
index 4090793cf0..edf305b1fd 100644
--- a/hw/pci-host/gpex.c
+++ b/hw/pci-host/gpex.c
@@ -57,9 +57,14 @@ static PCIINTxRoute gpex_route_intx_pin_to_irq(void *opaque, int pin)
{
PCIINTxRoute route;
GPEXHost *s = opaque;
+ int gsi = s->irq_num[pin];
- route.mode = PCI_INTX_ENABLED;
- route.irq = s->irq_num[pin];
+ route.irq = gsi;
+ if (gsi < 0) {
+ route.mode = PCI_INTX_DISABLED;
+ } else {
+ route.mode = PCI_INTX_ENABLED;
+ }
return route;
}
@@ -81,6 +86,7 @@ static void gpex_host_realize(DeviceState *dev, Error **errp)
sysbus_init_mmio(sbd, &s->io_ioport);
for (i = 0; i < GPEX_NUM_IRQS; i++) {
sysbus_init_irq(sbd, &s->irq[i]);
+ s->irq_num[i] = -1;
}
pci->bus = pci_register_bus(dev, "pcie.0", gpex_set_irq,