Linux implements a nice binding to describe a "generic" PCI Express host bridge using only device tree.
This patch set adds enough emulation logic to expose the parts that are "generic" as a simple sysbus device and maps it into ARM's virt machine. With this patch set, we can finally spawn PCI devices on ARM VMs. I was able to have a fully DRM enabled virtual machine with VGA, e1000 and XHCI (for keyboard and mouse) up and working. It's only a small step for QEMU, but a big step for ARM VM's usability. v1 -> v2: - Add documentation links - Remove mmio_window_size - Add define for pci range types - Use 4 PCI INTX IRQ lines v2 -> v3: - Update patch description - Increase ecam region to full size - Expose number of irqs via define - Update header description - Update host bridge qom description string - Use new Red Hat PCIe host bridge PCI ID - Coding style fixes - Map ECAM space via alias to limit its size - Increase ECAM size to 16 buses - Use GPEX IRQ number define - Align ECAM region, Document region allocation better - Move interrupt-map into irq map function - s/FDT_PCI_RANGE_TYPE/FDT_PCI_RANGE_TYPE_MASK/ v3 -> v4: - update memory map comment v4 -> v5: - fix size alignment calculation - expose bus-range as 16 - improve mmio map comment Alexander Graf (4): pci: Allocate PCIe host bridge PCI ID pci: Add generic PCIe host bridge arm: Add PCIe host bridge in virt machine pci: Move PCI VGA to pci.mak default-configs/alpha-softmmu.mak | 2 - default-configs/arm-softmmu.mak | 2 + default-configs/i386-softmmu.mak | 2 - default-configs/mips-softmmu.mak | 2 - default-configs/mips64-softmmu.mak | 2 - default-configs/mips64el-softmmu.mak | 2 - default-configs/mipsel-softmmu.mak | 2 - default-configs/pci.mak | 2 + default-configs/ppc-softmmu.mak | 2 - default-configs/ppc64-softmmu.mak | 2 - default-configs/ppcemb-softmmu.mak | 2 - default-configs/sparc64-softmmu.mak | 2 - default-configs/x86_64-softmmu.mak | 2 - hw/arm/virt.c | 137 +++++++++++++++++++++++++++++-- hw/pci-host/Makefile.objs | 1 + hw/pci-host/gpex.c | 154 +++++++++++++++++++++++++++++++++++ include/hw/pci-host/gpex.h | 56 +++++++++++++ include/hw/pci/pci.h | 1 + include/sysemu/device_tree.h | 9 ++ 19 files changed, 357 insertions(+), 27 deletions(-) create mode 100644 hw/pci-host/gpex.c create mode 100644 include/hw/pci-host/gpex.h -- 1.7.12.4