On Sun, Mar 24, 2013 at 11:32:30AM +0000, Peter Maydell wrote: > This patch series fixes a number of serious bugs in our emulation of > the PCI controller found on VersatilePB and the early Realview boards: > * our interrupt mapping was totally wrong > * we weren't implementing the PCI memory windows > * the I/O window wasn't mapped on VersatilePB > * realview mapped things at the wrong addresses > * we didn't implement the controller's registers at all > It also updates to some reasonable approximation to QOM best practice, > including subclassing pci_host rather than doing everything by hand. > > I haven't implemented support for the SMAP registers (which control > how the controller converts accesses made by bus-mastering PCI > devices into system addresses). For the moment we rely on the fact > that Linux always maps things 1:1. (It wouldn't be too hard to add > SMAP support but it requires changing QEMU's pci code to allow a > controller to pass in a MemoryRegion* for DMA to use instead of > the system address space, so I prefer to leave that for another series.) > > Patchset tested on both versatilepb and realview, using a set of > Linux kernel patches written by Arnd Bergmann: > http://lists.infradead.org/pipermail/linux-arm-kernel/2010-October/029040.html > which were in turn tested against real PB926 and PB1176 hardware. > > > * WARNING WARNING * > > This patchset will break any use of PCI (including the default SCSI > card) on versatilepb with current Linux kernels, because those kernels
Do you mean Versatile/PB and not Versatile/AB, or actually both? > have the matching bug in interrupt mapping to old QEMU. How is real hardware working with this bug? > I've provided a property for enabling the old broken IRQ mapping; > this can be enabled with the command line option: > -global versatile_pci.broken-irq-mapping=1 > > (If anybody wants to suggest a better way of handling this please do.) Do you have a pointer to the corresponding kernel patch? Is it possible to get the kernel to detect if it should use the correct or the broken IRQ mapping? > Peter Maydell (10): > versatile_pci: Fix hardcoded tabs > versatile_pci: Expose PCI I/O region on Versatile PB > versatile_pci: Update to realize and instance init functions > versatile_pci: Change to subclassing TYPE_PCI_HOST_BRIDGE > versatile_pci: Use separate PCI I/O space rather than system I/O space > versatile_pci: Put the host bridge PCI device at slot 29 > versatile_pci: Implement the correct PCI IRQ mapping > versatile_pci: Implement the PCI controller's control registers > arm/realview: Fix mapping of PCI regions > versatile_pci: Expose PCI memory space to system > > hw/arm/realview.c | 22 +-- > hw/arm/versatilepb.c | 11 +- > hw/versatile_pci.c | 368 > ++++++++++++++++++++++++++++++++++++++++++++------ > 3 files changed, 344 insertions(+), 57 deletions(-) > > -- > 1.7.9.5 > > > -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurel...@aurel32.net http://www.aurel32.net