From: Ruslan Ruslichenko <[email protected]> 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 <[email protected]> --- 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
