Kaby Lake IGD passthrough on Proxmox 5.1 with Win10 VM

Leif Julen

Active Member
Nov 7, 2017
17
0
41
Others wiser than me may have already solved this problem, but I'm stumped and need help. I'm on a steep learning curve with linux and Proxmox, so please bear with me.

I followed the below links trying to set up a Windows 10 VM with Kaby Lake IGD passthrough to drive one or more of my monitors, but the Windows VM still doesn't detect any VGA/DVI/HDMI attached monitor no matter which configuration I've tried. What am I missing? What other information other than the below is needed to troubleshoot?

pve.proxmox.com/wiki/Pci_passthrough
forum.proxmox.com/threads/guide-intel-intergrated-graphic-passthrough.30451/
redhat.com/archives/vfio-users/2017-April/msg00032.html
forum.proxmox.com/threads/proxmox-5-0-kaby-lake-and-igd-graphics-passthrough-for-windows-10.36165/

Hardware is MSI C236A with E3-1245v6 and 32GB ECC. Non-UEFI configured to boot with IGD enabled as default output and directed I/O (VT-d) enabled. I modified my Proxmox 5.1 and Windows 10 VM the following way:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:eek:ff,vesafb:eek:ff"

# update-grub

blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

options vfio-pci ids=8086:591d disable_vga=1

# update-initramfs -u

/sys/kernel/iommu_groups/7/devices/0000:00:17.0
/sys/kernel/iommu_groups/15/devices/0000:06:00.0
/sys/kernel/iommu_groups/15/devices/0000:06:00.1
/sys/kernel/iommu_groups/15/devices/0000:05:02.0
/sys/kernel/iommu_groups/5/devices/0000:00:15.0
/sys/kernel/iommu_groups/5/devices/0000:00:15.1
/sys/kernel/iommu_groups/13/devices/0000:03:00.0
/sys/kernel/iommu_groups/3/devices/0000:00:08.0
/sys/kernel/iommu_groups/11/devices/0000:00:1f.3
/sys/kernel/iommu_groups/11/devices/0000:00:1f.4
/sys/kernel/iommu_groups/11/devices/0000:00:1f.2
/sys/kernel/iommu_groups/11/devices/0000:00:1f.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.1
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:02:00.0
/sys/kernel/iommu_groups/8/devices/0000:00:1c.0
/sys/kernel/iommu_groups/16/devices/0000:07:00.0
/sys/kernel/iommu_groups/16/devices/0000:05:04.0
/sys/kernel/iommu_groups/16/devices/0000:07:00.1
/sys/kernel/iommu_groups/6/devices/0000:00:16.0
/sys/kernel/iommu_groups/14/devices/0000:04:00.0
/sys/kernel/iommu_groups/4/devices/0000:00:14.2
/sys/kernel/iommu_groups/4/devices/0000:00:14.0
/sys/kernel/iommu_groups/12/devices/0000:00:1f.6
/sys/kernel/iommu_groups/2/devices/0000:00:02.0
/sys/kernel/iommu_groups/10/devices/0000:00:1e.0
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/9/devices/0000:00:1c.4

00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics P630 [8086:591d] (rev 04)

args: -device vfio-pci,host=00:02.0,addr=0x02
bios: ovmf
bootdisk: scsi0
cores: 4
cpu: host
efidisk0: local-zfs:vm-200-disk-2,size=128K
machine: q35
memory: 8192
name: Win10Pro64
net0: virtio=B2:83:E3:9F:D2:BE,bridge=vmbr0
numa: 0
ostype: win10
parent: Fresh_Install
scsi0: local-zfs:vm-200-disk-1,cache=writeback,discard=on,size=32G
scsihw: virtio-scsi-pci
smbios1: uuid=79a7e25a-d143-4f2b-aec5-7fafe78bbc7b
sockets: 1
usb0: host=1-10
usb1: host=1-9
vga: none

Thank you!
 
I should clarify that everything seems to be working with my Xeon Kaby Lake IGD except for output to an external monitor. I've got iGPU acceleration for software that takes advantage of it, but no way to view the Windows 10 VM desktop without using Remote Desktop, SPICE, VNC, etc... on another computer. The whole point of virtualization is to avoid needing multiple computers, right?

I read the info below from nearly two years ago regarding qemu IGD passthrough which seemed applicable to me, tried a few of its suggestions, but still have had no luck:

github.com/qemu/qemu/blob/master/docs/igd-assign.txt

YAGA confirmed that he is getting IGD passthrough to display on an external monitor, so I know it is possible. I just don't know what I am missing... Please help, IGD passthrough to external monitor is the linchpin for my project!

Thank you in advance!
 
Here is my vm config, maybe it helps:

bios: ovmf
boot: dcn
bootdisk: scsi0
cores: 2
cpu: Haswell-noTSX
hostpci0: 01:00,x-vga=on
memory: 8192
name: win10steamserver
net0: virtio=EA:4E:94:25:3D:BA,bridge=vmbr1
numa: 0
ostype: win8
scsi0: vm2:104/vm-104-disk-1.raw,backup=0,size=50G
scsi1: /dev/disk/by-id/xxxxxxxxxxx
scsihw: virtio-scsi-pci
smbios1: uuid=xxxxxxxxxxxxxxx
sockets: 1
usb0: host=3-6

It's working with Windows 8.1 and a dedicated card.
 
Last edited:
I am currently doing this on a pretty large scale and having great success so far. Here are some of the items I ran into.

- The only way I could get the monitor to turn on was to install the Intel drivers in the VM. Once I did that it made all the difference in the world.
- I also pass qxl for vga but I keep that adapter disabled and only for emergency situations

- I made a base windows image (With Intel Drivers) and sysprep'd for easy deployment

Here is my args command.

args: -device vfio-pci,host=00:02.0,addr=0x18,x-vga=on,x-igd-opregion=on
 
  • Like
Reactions: Leif Julen
Thanks adamb and mcflym,

I've tried adamb's args command as well but the VM fails to start giving me the following error:
kvm: -device vfio-pci,host=00:02.0,addr=0x18,x-vga=on,x-igd-opregion=on: vfio error: 0000:00:02.0: failed getting region info for VGA region index 8: Invalid argument

I don't know how to interpret that error. However, I think the problem lies with "x-vga=on" since the VM always fails with the above error when I include it. The following args commands have been recommended by others with Intel IGD passthrough and all successfully let my Windows 10 VM boot, but none of them give me output to an external monitor still:
args: -device vfio-pci,host=00:02.0,addr=0x02
args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-opregion=on
args: -device vfio-pci,host=00:02.0,addr=0x18
args: -device vfio-pci,host=00:02.0,addr=0x18,x-igd-opregion=on

I have the Intel drivers installed and the Windows VM shows "Intel(R) HD Graphics P630" as working in Device Manager. But still no external monitor detected. I'm stumped.

From what I've read, "x-igd-opregion=on" is required for the Intel iGPU to output to an external monitor using the "Universal Pass-Through" (UPT for Broadwell or newer iGPU) versus the "legacy" method (for Sandy Bridge iGPU or older). Several people also use "x-vga=on" with the UPT method, but it crashes my VM. I of course would prefer to use UPT since I believe my Xeon E3-1245v6 supports it. Maybe someone has a theory for what is going wrong based on that info?

mcflym, are you using an add-on graphics card to passthrough video to an external monitor? I have the impression that the method of passing through Intel's integrated GPU (iGPU) is different from passthrough for a full-blown AMD or Nvidia graphics card. I have successfully gotten passthrough for other PCIe cards (HBA and NIC for FreeNAS and pfSense) using the "hostpci0:" method like in your config. However, that method doesn't seem to work for Intel iGPU passthrough (at least on my Windows 10 VM).

Thanks again!
 
Thanks adamb and mcflym,

I've tried adamb's args command as well but the VM fails to start giving me the following error:


I don't know how to interpret that error. However, I think the problem lies with "x-vga=on" since the VM always fails with the above error when I include it. The following args commands have been recommended by others with Intel IGD passthrough and all successfully let my Windows 10 VM boot, but none of them give me output to an external monitor still:





I have the Intel drivers installed and the Windows VM shows "Intel(R) HD Graphics P630" as working in Device Manager. But still no external monitor detected. I'm stumped.

From what I've read, "x-igd-opregion=on" is required for the Intel iGPU to output to an external monitor using the "Universal Pass-Through" (UPT for Broadwell or newer iGPU) versus the "legacy" method (for Sandy Bridge iGPU or older). Several people also use "x-vga=on" with the UPT method, but it crashes my VM. I of course would prefer to use UPT since I believe my Xeon E3-1245v6 supports it. Maybe someone has a theory for what is going wrong based on that info?

mcflym, are you using an add-on graphics card to passthrough video to an external monitor? I have the impression that the method of passing through Intel's integrated GPU (iGPU) is different from passthrough for a full-blown AMD or Nvidia graphics card. I have successfully gotten passthrough for other PCIe cards (HBA and NIC for FreeNAS and pfSense) using the "hostpci0:" method like in your config. However, that method doesn't seem to work for Intel iGPU passthrough (at least on my Windows 10 VM).

Thanks again!

try this:
'addr=0x02,x-igd-gms=1'
my cpu is i5 4690k and succeed. remember to set "vga: none". i use the latest Win10 1903 version. i tried on win10 1703 but failed. just for your reference.
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!