mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
hw/pci-host/designware: Expose MSI IRQ
Fixes INTD and MSI interrupts poking the same IRQ line without keeping track of each other's IRQ level. Furthermore, SoCs such as the i.MX 8M Plus don't share the MSI IRQ with the INTx lines, so expose it as a dedicated pin. Signed-off-by: Bernhard Beschow <shentey@gmail.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
a451cc11c4
commit
1b326f278d
7 changed files with 36 additions and 8 deletions
|
@ -106,6 +106,8 @@ static void fsl_imx6_init(Object *obj)
|
|||
object_initialize_child(obj, "eth", &s->eth, TYPE_IMX_ENET);
|
||||
|
||||
object_initialize_child(obj, "pcie", &s->pcie, TYPE_DESIGNWARE_PCIE_HOST);
|
||||
object_initialize_child(obj, "pcie4-msi-irq", &s->pcie4_msi_irq,
|
||||
TYPE_OR_IRQ);
|
||||
}
|
||||
|
||||
static void fsl_imx6_realize(DeviceState *dev, Error **errp)
|
||||
|
@ -435,14 +437,23 @@ static void fsl_imx6_realize(DeviceState *dev, Error **errp)
|
|||
sysbus_realize(SYS_BUS_DEVICE(&s->pcie), &error_abort);
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->pcie), 0, FSL_IMX6_PCIe_REG_ADDR);
|
||||
|
||||
object_property_set_int(OBJECT(&s->pcie4_msi_irq), "num-lines", 2,
|
||||
&error_abort);
|
||||
qdev_realize(DEVICE(&s->pcie4_msi_irq), NULL, &error_abort);
|
||||
|
||||
irq = qdev_get_gpio_in(DEVICE(&s->a9mpcore), FSL_IMX6_PCIE4_MSI_IRQ);
|
||||
qdev_connect_gpio_out(DEVICE(&s->pcie4_msi_irq), 0, irq);
|
||||
|
||||
irq = qdev_get_gpio_in(DEVICE(&s->a9mpcore), FSL_IMX6_PCIE1_IRQ);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->pcie), 0, irq);
|
||||
irq = qdev_get_gpio_in(DEVICE(&s->a9mpcore), FSL_IMX6_PCIE2_IRQ);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->pcie), 1, irq);
|
||||
irq = qdev_get_gpio_in(DEVICE(&s->a9mpcore), FSL_IMX6_PCIE3_IRQ);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->pcie), 2, irq);
|
||||
irq = qdev_get_gpio_in(DEVICE(&s->a9mpcore), FSL_IMX6_PCIE4_IRQ);
|
||||
irq = qdev_get_gpio_in(DEVICE(&s->pcie4_msi_irq), 0);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->pcie), 3, irq);
|
||||
irq = qdev_get_gpio_in(DEVICE(&s->pcie4_msi_irq), 1);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->pcie), 4, irq);
|
||||
|
||||
/*
|
||||
* PCIe PHY
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue