After some research, the problem is that mpc8544ds has only 2 PCI slots defined (hw/ppc/mpc8544ds.c -> pmc->pci_nr_slots = 2;). This in turn results in DTB only contain 2 devices in pci@e0008000/interrupt-map. Too bad qemu doesn't complain when more devices are added - the PCI bars seem to be OK, just interrupts are not found by linux, hence the error -22:
pci 8000:00:13.0: of_irq_parse_pci: failed with rc=-22 ...and later virtio_rng probe freeze (which freezes linux boot, if a module is not used and probed in different process). Changing pci_nr_slots to bigger number (e.g. 4) seems to work just OK, though of course the mpc8544ds simulation is then non-realistic. A cleaner solution is adding PCI-PCI bridge, that seems to work too. As a side-note, MSI doesn't seem to work on e500mc neither. Enabling MSI support in kernel seems to cause that virtio-blk-pci device probe freeze in linux, /proc/interrupts shows: 19: 0 fsl-msi-224 0 Edge virtio1-config 20: 0 fsl-msi-224 1 Edge virtio1-req.0 Without MSI, legacy IRQ is used and that seems to work OK: 17: 743 OpenPIC 3 Level virtio1 Alternatively, passing vectors=0 to the virtio device (-device virtio- blk,drive=drive0,vectors=0 -drive ...) does the trick as well. That was a fun ride... :-) -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1856834 Title: PCI broken in qemu ppc e500 in v2.12.0 and other versions Status in QEMU: New Bug description: The same qemu -M mpc... command that works on qemu-system-ppc version 2.8.0 freezes guest on bootup and shows error for qemu-system-ppc version 4.2.0release and 4.19dirtygit: qemu-system-ppc: virtio-blk failed to set guest notifier (-24), ensure -accel kvm is set. qemu-system-ppc: virtio_bus_start_ioeventfd: failed. Fallback to userspace (slower). ends/freezes at: nbd: registered device at major 43 vda: I'm using -drive file=/home/me/rawimage.dd,if=virtio and works fine in version 2.8.0 installed with apt-get install (Ubuntu 17.04) and also with 2.8.0 official release from git/github that I compiled/built myself. But both of the newer releases fail on the same exact machine same config. I also noticed that qemu-2.8.0 was fine with mtd but the newer ones I tried weren't, ie gave qemu-system-ppc: -drive if=mtd: machine type does not support if=mtd,bus=0,unit=0 (but I removed -drive if=mtd since wasn't using it anyway) I also tried on windows but I think virtio doesn't work on windows hosts at all? On windows host it fails the same way, even version 2.12 as well as 4.1.10... used: ./configure --prefix=/opt/... --enable-fdt --enable-kvm --enable-debug (basically all steps the same on same exact system same config, yet 2.8.0 works fine whether apt-get installed or built from source while the others I built, 4.19/4.2.0 or 2.12/4.1.10(win) don't.) In case newer qemu versions act weird on various kernels, I did try with both vmlinuz-4.10.0-19-generic and vmlinuz-4.13.12-041312-generic (I didn't compile them but I can provide config-..files. This is on Ubuntu 17.04 x86_64 host emulating e500v2 cpm guest, ie -M mpc... GUEST kernel 2.6.32.44 which is why I can't use -M ppce500 instead..) tx ecs To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1856834/+subscriptions