[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PULL v1 10/12] hw/xen: pvh-common: Add support for creating PCIe/GPEX
- To: Philippe Mathieu-Daudé <philmd@xxxxxxxxxx>
- From: "Edgar E. Iglesias" <edgar.iglesias@xxxxxxxxx>
- Date: Tue, 18 Feb 2025 10:34:47 -0600
- Cc: qemu-devel@xxxxxxxxxx, sstabellini@xxxxxxxxxx, Paolo Bonzini <pbonzini@xxxxxxxxxx>, anthony@xxxxxxxxxxxxxx, paul@xxxxxxx, peter.maydell@xxxxxxxxxx, alex.bennee@xxxxxxxxxx, xenia.ragiadakou@xxxxxxx, jason.andryuk@xxxxxxx, edgar.iglesias@xxxxxxx, xen-devel@xxxxxxxxxxxxxxxxxxxx
- Delivery-date: Tue, 18 Feb 2025 16:35:04 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
Hi Edgar,
On 4/9/24 18:15, Edgar E. Iglesias wrote:
> From: "Edgar E. Iglesias" <edgar.iglesias@xxxxxxx>
>
> Add support for optionally creating a PCIe/GPEX controller.
>
> Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xxxxxxx>
> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> ---
> 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.
|