Dear All, These days I'm working on Intel IGD passthrough by qemu+vfio. Success on i3-6100, but failed on i3-6100U.
The two cpus are both SkyLake arch.
I have successed to passthrough IGD device to Win7/Win10 on an i3-6100 machine with Fedora 25. I use legacy mode and set x-igd-gms=1 on qemu command line.
When I work on another machine of i3-6100U with the same solution.
CPU: Intel(R) Core(TM) i3-6100U CPU @ 2.30GHz VGA: 00:02.0 VGA compatible controller: Intel Corporation HD Graphics 520 (rev 07)
[root localhost ~]# dmesg | grep IOMMU [ 0.000000] DMAR: IOMMU enabled [ 0.067707] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[root localhost ~]# cat /proc/cmdline BOOT_IMAGE=/vmlinuz-4.8.6-300.fc25.x86_64 root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root rd.lvm.lv=fedora/swap rhgb quiet intel_iommu=on iommu=pt
After virsh create command, nothing displays on the screen, there's always no signal. No other graphic and video devices, only passthrough hostdev:
<hostdev mode='subsystem' type='pci' managed='yes'> <driver name='vfio'/> <source> <address domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </source> <alias name='hostdev0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </hostdev>
[root localhost ~]# ps -elf | grep qemu 6 S qemu 1541 1 99 80 0 - 804613 poll_s 17:34 ? 00:04:22 /usr/bin/qemu-system-x86_64 -machine accel=kvm -name guest=cn_windows_10_enterprise_version_1703_updated_july_2017_x64_dvd_10925390,debug-threads=on -S -object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-2-cn_windows_10_enterp/master-key.aes -machine pc-i440fx-2.7,accel=kvm,usb=off -cpu Skylake-Client,hv_time,hv_relaxed,hv_vapic,hv_spinlocks=0x1fff -m 2048 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid 128589da-017e-412d-b807-92de81ca7a29 -display none -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-2-cn_windows_10_enterp/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=localtime,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -drive file=/home/zwj/cn_windows_10_enterprise_version_1703_updated_july_2017_x64_dvd_10925390.qcow2,format=qcow2,if=none,id=drive-ide0-0-0 -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=26,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:86:04:cc,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0,bus=usb.0,port=1 -device vfio-pci,host=00:02.0,id=hostdev0,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -bios /usr/share/seabios/bios.bin -chardev file,id=seabios,path=/tmp/bios.log -device isa-debugcon,iobase=0x402,chardev=seabios -set device.hostdev0.x-igd-opregion=on -set device.hostdev0.x-igd-gms=1 -msg timestamp=on
dmesg has an error: [五 10月 12 17:34:21 2018] Console: switching to colour dummy device 80x25 [五 10月 12 17:34:21 2018] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem [五 10月 12 17:34:21 2018] virbr0: port 2(vnet0) entered blocking state [五 10月 12 17:34:21 2018] virbr0: port 2(vnet0) entered disabled state [五 10月 12 17:34:21 2018] device vnet0 entered promiscuous mode [五 10月 12 17:34:21 2018] virbr0: port 2(vnet0) entered blocking state [五 10月 12 17:34:21 2018] virbr0: port 2(vnet0) entered listening state [五 10月 12 17:34:22 2018] DMAR: DRHD: handling fault status reg 2 [五 10月 12 17:34:22 2018] DMAR: [DMA Write] Request device [00:02.0] fault addr 0 [fault reason 02] Present bit in context entry is clear [五 10月 12 17:34:22 2018] vfio_ecap_init: 0000:00:02.0 hiding ecap 0x1b 0x100 [五 10月 12 17:34:23 2018] virbr0: port 2(vnet0) entered learning state [五 10月 12 17:34:25 2018] virbr0: port 2(vnet0) entered forwarding state [五 10月 12 17:34:25 2018] virbr0: topology change detected, propagating
Below is log of SeaBIOS, it stops at running rom:
[root localhost ~]# cat /tmp/bios.log SeaBIOS (version 1.9.3-1.fc25) BUILD: gcc: (GCC) 6.1.1 20160621 (Red Hat Cross 6.1.1-2) binutils: version 2.26.1-1.fc25 RamSize: 0x80000000 [cmos] Relocating init from 0x000e4080 to 0x7ffb2320 (size 56384) Found QEMU fw_cfg QEMU fw_cfg DMA interface supported RamBlock: addr 0x0000000000000000 len 0x0000000080000000 [e820] Moving pm_base to 0x600 boot order: 1: /pci i0cf8/ide 1,1/drive 0/disk 0 2: HALT === PCI bus & bridge init === PCI: pci_bios_init_bus_rec bus = 0x0 === PCI device probing === Found 12 PCI devices (max PCI bus is 00) === PCI new allocation pass #1 === PCI: check devices === PCI new allocation pass #2 === PCI: IO: c000 - c1cf PCI: 32: 0000000080000000 - 00000000fec00000 PCI: map device bdf=00:03.0 bar 0, addr 0000c000, size 00000100 [io] PCI: map device bdf=00:02.0 bar 4, addr 0000c100, size 00000040 [io] PCI: map device bdf=00:04.0 bar 0, addr 0000c140, size 00000020 [io] PCI: map device bdf=00:05.0 bar 4, addr 0000c160, size 00000020 [io] PCI: map device bdf=00:05.1 bar 4, addr 0000c180, size 00000020 [io] PCI: map device bdf=00:05.2 bar 4, addr 0000c1a0, size 00000020 [io] PCI: map device bdf=00:01.1 bar 4, addr 0000c1c0, size 00000010 [io] PCI: map device bdf=00:02.0 bar 0, addr fd000000, size 01000000 [mem] PCI: map device bdf=00:03.0 bar 6, addr fe000000, size 00040000 [mem] PCI: map device bdf=00:02.0 bar 6, addr fe040000, size 00020000 [mem] PCI: map device bdf=00:03.0 bar 1, addr fe060000, size 00001000 [mem] PCI: map device bdf=00:05.7 bar 0, addr fe061000, size 00001000 [mem] PCI: map device bdf=00:02.0 bar 2, addr e0000000, size 10000000 [prefmem] PCI: map device bdf=00:04.0 bar 4, addr f0000000, size 00800000 [prefmem] PCI: init bdf=00:00.0 id=8086:1237 PCI: init bdf=00:01.0 id=8086:7000 PIIX3/PIIX4 init: elcr=00 0c PCI: init bdf=00:01.1 id=8086:7010 PCI: init bdf=00:01.3 id=8086:7113 Using pmtimer, ioport 0x608 PCI: init bdf=00:02.0 id=8086:1916 Intel IGD OpRegion enabled at 0x7fffe000, size 8KB, dev 00:02.0 Intel IGD BDSM enabled at 0x7d700000, size 40MB, dev 00:02.0 PCI: init bdf=00:03.0 id=10ec:8139 PCI: init bdf=00:04.0 id=1af4:1002 PCI: init bdf=00:05.0 id=8086:2934 PCI: init bdf=00:05.1 id=8086:2935 PCI: init bdf=00:05.2 id=8086:2936 PCI: init bdf=00:05.7 id=8086:293a PCI: init bdf=00:1f.0 id=8086:9d48 PCI: Using 00:02.0 for primary VGA handle_smp: apic_id=1 Found 2 cpu(s) max supported 2 cpu(s) Copying PIR from 0x7ffbfca0 to 0x000f1c40 Copying MPTABLE from 0x00006e90/7ffa8e80 to 0x000f1b10 Copying SMBIOS entry point from 0x00006e90 to 0x000f1930 Scan for VGA option rom Running option rom at c000:0003
Now seabios stops and monitor shows no signal. I have install win10 directly on the host and it works well. Does it means the vga rom image is ok? What can I do for further debug? Thanks!