IGD passthrough for Intel NUC8i7BEH
Host Configuration
Virtualization Environment: Proxmox 7.0 (GRUB)
Hardware: Intel NUC NUC8i7BEH
BIOS: UEFI Mode
Proxmox Configuration
Enable IOMMU
Update /etc/default/grub.
Find the line with GRUB_CMDLINE_LINUX_DEFAULT. Set to
1 | GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off,vesafb:off" |
Then save the changes and update grub by calling update-grub
Load VFIO module
Add the following to /etc/modules:
1 | vfio |
Blacklist the drivers
Add the following to /etc/modprobe.d/pve-blacklist.conf
1 | blacklist snd_hda_intel |
Enable VFIO for IGD
Run the following command to get the device ID of iGPU
1 | $ lspci -n | grep -E "0300" |
Copy the value 8086:3ea5. Add this line to /etc/modprobe.d/vfio.conf:options vfio-pci ids=8086:3ea5
Verification
Reboot. If the booting freeze at Loading initial ramdisk ... means the IGD driver has been blacklisted.
Extract IGD ROM
TLDR: here is the premake ROM file.
Following the guide from this link https://github.com/tmbeck/nuc-passthrough. Generate and copy the ROM file to /usr/share/kvm of the host.
Configure VM configuration
- Set
MachinetoDefault (i440fx). Legacy IGD is not compatible with q35. - Set
Displaytonone. Legacy IGD requires VGA mode to benone.
Update VM configuration
Edit /etc/pve/qemu-server/<vmid>.conf. <vmid> refer to VM ID.
Add this line to the end of the file:
1 | hostpci0: 0000:00:02.0,legacy-igd=1,romfile=<rom-file>.rom |
<rom-file> is the ROM file name copied into /usr/share/kvm.
Booting the Windows VM
Make sure remote access is working properly. There will be no signal output from HDMI.
Go to the Device Manager. Ensure the IGD driver is working properly with no error code like 43.
You can also pass through USB controller 0000:00:14.0 to use USB devices like keyboards and mouses.
Reference
https://pve.proxmox.com/wiki/Pci_passthrough
https://github.com/tmbeck/nuc-passthrough
https://blog.timzhong.top/2020/09/27/pve-direct-pcie/
https://www.10bests.com/win10-htpc-on-pve/