From: Ruslan Ruslichenko <Ruslan_Ruslichenko@epam.com>
Add a new gsi-irqs array property to the GPEX PCI host controller.
This enables them to be configured on realize callback.
This is required to init GPEX PCI host from a static configuration,
such as Hardware device tree.
Signed-off-by: Ruslan Ruslichenko <Ruslan_Ruslichenko@epam.com>
---
hw/pci-host/gpex.c | 6 ++++++
include/hw/pci-host/gpex.h | 3 +++
2 files changed, 9 insertions(+)
diff --git a/hw/pci-host/gpex.c b/hw/pci-host/gpex.c
index e66784ce51..6125b2c319 100644
--- a/hw/pci-host/gpex.c
+++ b/hw/pci-host/gpex.c
@@ -148,6 +148,10 @@ static void gpex_host_realize(DeviceState *dev, Error **errp)
s->irq[i].irq_num = -1;
}
+ for (i = 0; i < s->gsi_irq_num; i++) {
+ gpex_set_irq_num(s, i, s->gsi_irqs[i]);
+ }
+
pci->bus = pci_register_root_bus(dev, "pcie.0", gpex_set_irq,
gpex_swizzle_map_irq_fn,
s, &s->io_mmio, &s->io_ioport, 0,
@@ -190,6 +194,8 @@ static const Property gpex_host_properties[] = {
DEFINE_PROP_SIZE(PCI_HOST_ABOVE_4G_MMIO_SIZE, GPEXHost,
gpex_cfg.mmio64.size, 0),
DEFINE_PROP_UINT8("num-irqs", GPEXHost, num_irqs, PCI_NUM_PINS),
+ DEFINE_PROP_ARRAY("gsi-irqs", GPEXHost, gsi_irq_num,
+ gsi_irqs, qdev_prop_uint32, uint32_t),
};
static void gpex_host_class_init(ObjectClass *klass, const void *data)
diff --git a/include/hw/pci-host/gpex.h b/include/hw/pci-host/gpex.h
index 1da9c85bce..f8e9874756 100644
--- a/include/hw/pci-host/gpex.h
+++ b/include/hw/pci-host/gpex.h
@@ -64,6 +64,9 @@ struct GPEXHost {
GPEXIrq *irq;
uint8_t num_irqs;
+ uint32_t *gsi_irqs;
+ uint32_t gsi_irq_num;
+
bool allow_unmapped_accesses;
struct GPEXConfig gpex_cfg;
--
2.43.0