On Tue, Feb 18, 2025 at 6:02 AM Philippe Mathieu-Daudé <phi...@linaro.org> wrote:
> Hi Edgar, > > On 4/9/24 18:15, Edgar E. Iglesias wrote: > > From: "Edgar E. Iglesias" <edgar.igles...@amd.com> > > > > Add support for optionally creating a PCIe/GPEX controller. > > > > Signed-off-by: Edgar E. Iglesias <edgar.igles...@amd.com> > > Reviewed-by: Stefano Stabellini <sstabell...@kernel.org> > > --- > > hw/xen/xen-pvh-common.c | 76 +++++++++++++++++++++++++++++++++ > > include/hw/xen/xen-pvh-common.h | 29 +++++++++++++ > > 2 files changed, 105 insertions(+) > > > > +/* > > + * We use the GPEX PCIe controller with its internal INTX PCI interrupt > > + * swizzling. This swizzling is emulated in QEMU and routes all INTX > > + * interrupts from endpoints down to only 4 INTX interrupts. > > + * See include/hw/pci/pci.h : pci_swizzle() > > + */ > > +static inline void xenpvh_gpex_init(XenPVHMachineState *s, > > + XenPVHMachineClass *xpc, > > + MemoryRegion *sysmem) > > +{ > > + MemoryRegion *ecam_reg; > > + MemoryRegion *mmio_reg; > > + DeviceState *dev; > > + int i; > > + > > + object_initialize_child(OBJECT(s), "gpex", &s->pci.gpex, > > + TYPE_GPEX_HOST); > > + dev = DEVICE(&s->pci.gpex); > > + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); > > + > > + ecam_reg = sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0); > > + memory_region_add_subregion(sysmem, s->cfg.pci_ecam.base, ecam_reg); > > + > > + mmio_reg = sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 1); > > + > > + if (s->cfg.pci_mmio.size) { > > + memory_region_init_alias(&s->pci.mmio_alias, OBJECT(dev), > "pcie-mmio", > > + mmio_reg, > > + s->cfg.pci_mmio.base, > s->cfg.pci_mmio.size); > > + memory_region_add_subregion(sysmem, s->cfg.pci_mmio.base, > > + &s->pci.mmio_alias); > > + } > > + > > + if (s->cfg.pci_mmio_high.size) { > > + memory_region_init_alias(&s->pci.mmio_high_alias, OBJECT(dev), > > + "pcie-mmio-high", > > + mmio_reg, s->cfg.pci_mmio_high.base, > s->cfg.pci_mmio_high.size); > > + memory_region_add_subregion(sysmem, s->cfg.pci_mmio_high.base, > > + &s->pci.mmio_high_alias); > > + } > > + > > + /* > > + * PVH implementations with PCI enabled must provide > set_pci_intx_irq() > > + * and optionally an implementation of set_pci_link_route(). > > + */ > > + assert(xpc->set_pci_intx_irq); > > + > > + for (i = 0; i < GPEX_NUM_IRQS; i++) { > > + qemu_irq irq = qemu_allocate_irq(xpc->set_pci_intx_irq, s, i); > > + > > + sysbus_connect_irq(SYS_BUS_DEVICE(dev), i, irq); > > + gpex_set_irq_num(GPEX_HOST(dev), i, s->cfg.pci_intx_irq_base + > i); > > + if (xpc->set_pci_link_route) { > > + xpc->set_pci_link_route(i, s->cfg.pci_intx_irq_base + i); > > + } > > + } > > +} > > Some Kconfig selector seems missing here: > > /usr/bin/ld: libqemu-aarch64-softmmu.a.p/hw_xen_xen-pvh-common.c.o: in > function `xenpvh_gpex_init': > hw/xen/xen-pvh-common.c:174: undefined reference to `gpex_set_irq_num' > /usr/bin/ld: libqemu-aarch64-softmmu.a.p/hw_xen_xen-hvm-common.c.o: in > function `pci_dev_bus_num': > include/hw/pci/pci.h:337: undefined reference to `pci_bus_num' > /usr/bin/ld: include/hw/pci/pci.h:337: undefined reference to `pci_bus_num' > /usr/bin/ld: include/hw/pci/pci.h:337: undefined reference to `pci_bus_num' > /usr/bin/ld: include/hw/pci/pci.h:337: undefined reference to `pci_bus_num' > /usr/bin/ld: include/hw/pci/pci.h:337: undefined reference to `pci_bus_num' > /usr/bin/ld: libqemu-aarch64-softmmu.a.p/hw_xen_xen-hvm-common.c.o: in > function `cpu_ioreq_config': > hw/xen/xen-hvm-common.c:412: undefined reference to > `pci_host_config_read_common' > /usr/bin/ld: hw/xen/xen-hvm-common.c:428: undefined reference to > `pci_host_config_read_common' > /usr/bin/ld: hw/xen/xen-hvm-common.c:438: undefined reference to > `pci_host_config_write_common' > > The current 'XEN' key represents both the "accelerator" part and > the common Xen HW, which isn't helping to follow. Anyhow, this > snippet fixes the build issue: > > -- >8 -- > diff --git a/accel/Kconfig b/accel/Kconfig > index 794e0d18d2..4263cab722 100644 > --- a/accel/Kconfig > +++ b/accel/Kconfig > @@ -16,4 +16,5 @@ config KVM > config XEN > bool > select FSDEV_9P if VIRTFS > + select PCI_EXPRESS_GENERIC_BRIDGE > select XEN_BUS > --- > > I'll post a patch later. > Sounds good, thanks Phil! Cheers, Edgar > > Regards, > > Phil. >