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 Alexander Graf (4): pci: Split pcie_host_mmcfg_map() 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 | 112 +++++++++++++++++++++++-- hw/pci-host/Makefile.objs | 1 + hw/pci-host/gpex.c | 153 +++++++++++++++++++++++++++++++++++ hw/pci/pcie_host.c | 9 ++- include/hw/pci-host/gpex.h | 54 +++++++++++++ include/hw/pci/pcie_host.h | 1 + include/sysemu/device_tree.h | 9 +++ 20 files changed, 336 insertions(+), 29 deletions(-) create mode 100644 hw/pci-host/gpex.c create mode 100644 include/hw/pci-host/gpex.h -- 1.7.12.4