From: Dmytro Terletskyi <[email protected]> Added support for the "iommus" property for virtio_mmio in device tree nodes. The property specifies the SMMU phandle and stream ID.
Signed-off-by: Dmytro Terletskyi <[email protected]> Signed-off-by: Ruslan Ruslichenko <[email protected]> --- hw/arm/virt.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index ad609bc651..ff3eb95036 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -89,6 +89,7 @@ #include "hw/uefi/var-service-api.h" #include "hw/virtio/virtio-md-pci.h" #include "hw/virtio/virtio-iommu.h" +#include "hw/virtio/virtio-mmio.h" #include "hw/char/pl011.h" #include "hw/cxl/cxl.h" #include "hw/cxl/cxl_host.h" @@ -1178,9 +1179,11 @@ static void create_gpio_devices(const VirtMachineState *vms, int gpio, static void create_virtio_devices(const VirtMachineState *vms) { int i; + uint32_t stream_ids[NUM_VIRTIO_TRANSPORTS]; hwaddr size = vms->memmap[VIRT_MMIO].size; MachineState *ms = MACHINE(vms); + /* We create the transports in forwards order. Since qbus_realize() * prepends (not appends) new child buses, the incrementing loop below will * create a list of virtio-mmio buses with decreasing base addresses. @@ -1212,8 +1215,11 @@ static void create_virtio_devices(const VirtMachineState *vms) int irq = vms->irqmap[VIRT_MMIO] + i; hwaddr base = vms->memmap[VIRT_MMIO].base + i * size; - sysbus_create_simple("virtio-mmio", base, + DeviceState* dev = sysbus_create_simple("virtio-mmio", base, qdev_get_gpio_in(vms->gic, irq)); + + VirtIOMMIOProxy *proxy = VIRTIO_MMIO(dev); + stream_ids[i] = proxy->stream_id; } /* We add dtb nodes in reverse order so that they appear in the finished @@ -1238,6 +1244,9 @@ static void create_virtio_devices(const VirtMachineState *vms) GIC_FDT_IRQ_TYPE_SPI, irq, GIC_FDT_IRQ_FLAGS_EDGE_LO_HI); qemu_fdt_setprop(ms->fdt, nodename, "dma-coherent", NULL, 0); + qemu_fdt_setprop_sized_cells(ms->fdt, nodename, "iommus", + 1, vms->sysbus_iommu_phandle, + 1, stream_ids[i]); g_free(nodename); } } -- 2.43.0
