[GUIDE] Intel Intergrated graphic Passthrough

Okay, so it looks like I made it work. Removed the whole "args: -device 'vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1'" line from the VM config. Added "hostpci0: 00:02.0,pcie=1,rombar=0,x-vga=1"

Rebooted into BIOS, enabled UEFI boot for storage and PCI-E. Rebooted and it suddenly worked.
How were you able to achieve making it work, are you using lastest proxmox version, and latests intel graphics driver, or any other version?

Kind regards
 
hi, i tried follow this guide to pass through my HD2500 graphic on my b75 motherboard ,after configuration the windows seems detect IGPU but if I try to install driver for it , I got a blue screen with this error “system_thread_exception_not_handled (igdkmd64.sys)”
 
few tips:

add in /etc/modules:
Code:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

In VM, set UEFI as Bios and use virtio-gpu as display
 
Hello Everyone,

I too can confirm that the above tutorial works. I have successfully managed to passthrough my Integrated GPU (Intel Core i5-4460 with Intel HD graphics 4600) to a Windows10 host. The only problem is that I cannot do the same with the integrated sound card through HDMI.

My GPU has a different ID from sound device :
lspci
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)

I tried to pass both on VM's cfg as follows :

args: -device 'vfio-pci,host=00:02.0,x-igd-gms=1' -device 'vfio-pci,host=00:03.0,x-igd-gms=1'

but no sound appears. Can you please assist?

Thank you in advance
I have the same processor. Can you advise right configuration?
 
So i had a completly working Windows VM with a VertIO GPU. I decided I wanted to pass thru the IGPU (i have a xeon E3-1260L Sandy Bridge)... I have looked at 100 different setups and configs... everything i do ends in the same result.

Code:
kvm: -device vfio-pci,host=0000:00:02.0,id=hostpci0,bus=pci.0,addr=0x2: vfio 0000:00:02.0: error getting device from group 1: Cannot allocate memory
Verify all devices in group 1 are bound to vfio-<bus> or pci-stub and not already in use
TASK ERROR: start failed: QEMU exited with code 1

grub:
Code:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb nomodeset video=vesafb:off ,efifb:off hugepagesz=1G default_hugepagesz=2M""

I know someone else got turned away for this code... but its obviously hooked to the vfio pass thru. I can confirm that the gpu is in its own Iommu group...

IOMMU:
Code:
for a in /sys/kernel/iommu_groups/*; do find $a -type l; done | sort
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:02.0
/sys/kernel/iommu_groups/2/devices/0000:00:16.0
/sys/kernel/iommu_groups/2/devices/0000:00:16.2
/sys/kernel/iommu_groups/2/devices/0000:00:16.3
/sys/kernel/iommu_groups/3/devices/0000:00:19.0
/sys/kernel/iommu_groups/4/devices/0000:00:1a.0
/sys/kernel/iommu_groups/5/devices/0000:00:1d.0
/sys/kernel/iommu_groups/6/devices/0000:00:1e.0
/sys/kernel/iommu_groups/7/devices/0000:00:1f.0
/sys/kernel/iommu_groups/7/devices/0000:00:1f.2
/sys/kernel/iommu_groups/7/devices/0000:00:1f.3

lscpi:
Code:
lspci -kn | grep -A 2 00:02
00:02.0 0300: 8086:010a (rev 09)
        Subsystem: 1025:0586
        Kernel driver in use: vfio-pci

It also shows that the igpu is running under vfio driver, and there is no output (So i assume proxmox is no longer loading it). I tried this setup with this same result... I tried setting "hostpci0: 00:02.0,legacy-igd=1" in the VM... I've googled and looked and tried just about everything and cant figure this out. The only thing I found was a write up on qemu's page about memory allocation and setting this below 4G... but I tried add these lines to the VM which was supposed to fix that: "args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-opregion=on,x-igd-gms=1". I even pulled a bios image and got the rom file for the igpu and tried loading that... same message.

Nothing changes the message... I'm at the end of my talent and hoping someone knows what to modify to make the memory issue go away...
 
Hello,

Finally, i get to have the Integrated Intel GPU of my Haswell i5 4250u (HD5000) to work in passthrough mode with a recent proxmox 6.4.4/

First i want to thanks sshaikh for this post. I didn't known it was possible to change code and i had to do it off course !
https://forum.proxmox.com/threads/igd-passthrough-and-hard-coded-pci-bridges.68285/
https://www.reddit.com/r/VFIO/comments/fx4pa0/haswell_igd_passthrough/

First, as Haswell is too old, i read i had to forget UPT mode, and go for legacy. I guess this means it is impossible to use q35 machine, whereas everybosy say , use q35 ! i tried many setups with q35, nothing on HDMI. My next Hystou will be UPT !!!

Well, it works, but i'm limited in resolution at 1024x768 and a few colours ( such as the good old beginng of computers !)
Actually, i have the "basic W10 video drivers".
I wonder if someone has an idea to get the Intel HD 5000 drivers to be installed...

Thank you.

Here's all i've done :

The ultimate trick ! :
Code:
vi /usr/share/perl5/PVE/QemuServer.pm

    if (!$q35) {
        # add pci bridges
        if (min_version($machine_version, 2, 3)) {
           $bridges->{1} = 1;
#          $bridges->{2} = 1;
           $bridges->{2} = 1 if $vmid != 100; # put the vm id you need PT !
        }

        $bridges->{3} = 1 if $scsihw =~ m/^virtio-scsi-single/;

    }


Code:
vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"  

update-grub

Code:
vi /etc/modprobe.d/blacklist.conf
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

Code:
vi /etc/modprobe.d/vfio.conf
options vfio-pci ids=8086:0a26

Code:
vi /etc/modprobe.d/kvm.conf
options kvm ignore_msrs=1

Code:
/etc/modules

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

update-initramfs -u

Code:
/etc/pve/qemu-server/vm100.conf
      
args: -device 'vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1'
vga: none
 
Last edited:
Reply to myself :cool:

I get the HD 5000 drivers running into windows, well, using this command line:

Code:
args: -device 'vfio-pci,host=00:02.0,addr=0x02,x-vga=off,x-igd-gms=1,rombar=1,x-igd-opregion=on'

and increasing VMDT memory to 512 Mo ( but i don't known if this settings is really necessary )
Here's the passthoruh on a cheap old hystou... :)
Thanks to jt730 for this long post !
https://bbs.archlinux.org/viewtopic.php?pid=1870700#p1870700

Next step : the sound !
 
Last edited:
Reply to myself :cool:

I get the HD 5000 drivers running into windows, well, using this command line:

Code:
args: -device 'vfio-pci,host=00:02.0,addr=0x02,x-vga=off,x-igd-gms=1,rombar=1,x-igd-opregion=on'

and increasing VMDT memory to 512 Mo ( but i don't known if this settings is really necessary )
Here's the passthoruh on a cheap old hystou... :)
Thanks to jt730 for this long post !
https://bbs.archlinux.org/viewtopic.php?pid=1870700#p1870700

Next step : the sound !
i create account here only for say THANK YOU!!!!!! bcros for this tutorial thats a gold!
 
  • Like
Reactions: Dough29
I just want to passthrough my HD Graphics 530 into windows.
After installation of windows the driver is installed correctly without error.
But as soon as I start the machine the display of my monitor goes black for a short time and then it says no signal.
Does anyone have a hint for me?
Tried many solutions with "-args..." but nothing helps.
 
Just to record my situation. Finally i get the Intel integrated graphics passthru and output to a monitor (a TV) through HDMI but still don't get HDMI audio work.

I don't use the UEFI to install Win10 (the latest 1903 version works, i also tried 1703 but failed, i guess due to the integrated graphics driver, i don't know just guess), just use the default SeaBIOS, i don't know why, but it works.

PVE 5.4-3
CPU: i5 4690k
Motherboard: Colorful B85K-HD V22

/etc/default/grub
Code:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"
root@pve:~# update-grub

/etc/modprobe.d/blacklist.conf
Code:
# blacklist nvidiafb
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

root@pve:~# lspci
Code:
00:00.0 Host bridge: Intel Corporation 4th Gen Core Processor DRAM Controller (rev 06)
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 05)
00:16.0 Communication controller: Intel Corporation 8 Series/C220 Series Chipset Family MEI Controller #1 (rev 04)
00:1a.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 (rev 05)
00:1b.0 Audio device: Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller (rev 05)
00:1c.0 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #1 (rev d5)
00:1c.2 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #3 (rev d5)
00:1c.4 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #5 (rev d5)
00:1d.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1 (rev 05)
00:1f.0 ISA bridge: Intel Corporation B85 Express LPC Controller (rev 05)
00:1f.2 SATA controller: Intel Corporation 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] (rev 05)
00:1f.3 SMBus: Intel Corporation 8 Series/C220 Series Chipset Family SMBus Controller (rev 05)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)
03:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
03:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)

root@pve:~# lspci -n -s 00:02
Code:
00:02.0 0300: 8086:0412 (rev 06)

/etc/modprobe.d/vfio.conf
Code:
options vfio-pci ids=8086:0412

/etc/modprobe.d/kvm.conf
Code:
options kvm ignore_msrs=1

root@pve:~# update-initramfs -u
root@pve:~# reboot


/etc/pve/qemu-server/<YOUR VM ID>.conf
Code:
args: -device 'vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1'
bootdisk: sata0
cores: 4
hostpci0: 00:1b.0
ide2: local:iso/Windows10_1903.iso,media=cdrom
memory: 8196
name: Win10
net0: e1000=02:95:FE:77:B7:47,bridge=vmbr0,firewall=1
numa: 0
ostype: win10
sata0: local-lvm:vm-106-disk-0,size=30G
scsihw: virtio-scsi-pci
smbios1: uuid=be2bec92-23cd-4637-ac16-9d6d3523642d
sockets: 1
usb0: host=3-2,usb3=1
usb1: host=3-3,usb3=1
usb2: host=3-7
usb3: host=3-8
usb4: host=3-10
vga: none
vmgenid: f99e2477-44fd-422a-a8f7-346438dbce9b
thank you
 
Has anyone managed to get iGPU passthru to work on a 2012 Mac mini?
I'm trying to pass through to MacOS Monterey VMs.

I have gotten as far as getting the iGPU to show up on the list of Graphics/Displays ... Apple | About This Mac | System Report | Graphics/Displays ... will show a list of two. The first item is "Display" which shows 7MB VRAM and the second is "Intel HD Graphics 4000" which has no VRAM.

But in opening the Activity Monitor, there is absolutely no GPU activity, even in apps that would/could utilize it.
 
Hi. My Proxmox 7.3-6 run on a Fujitsu s761 Laptop (Sandy Bridge 2nd Generation Intel).
With iGPU Passtrough Win11 VM run only with this settings:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction initcall_blacklist=sysfb_init video=simplefb:off video=vesafb:off video=efifb:off video=vesa:off disable_vga=1 vfio_iommu_type1.allow_unsafe_interrupts=1 kvm.ignore_msrs=1 modprobe.blacklist=radeon,nouveau,nvidia,nvidiafb,nvidia-gpu,snd_hda_intel,snd_hda_codec_hdmi,i915"

bios: ovmf machine: pc-q35-2.11 vga: none hostpci0: 00:02.0,pcie=1,rombar=0,x-vga=1

The VM starts with OK but my problem is that the laptop screen goes black when the VM starts. Is there a parameter that tells me to use the internal panel?
 
Is there someone who has a working SandyBridge/Laptop setup and can send me their configs?

edit:
Now I'm one step further with the following I see the Windows Installer loading bar on the Laptop Panel:

Code:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

Code:
vmgenid: 0
args: -set device.hostpci0.x-igd-gms=1
hostpci0: 0000:00:02.0,legacy-igd=1
machine: pc-i440fx-2.2
vga: none
BIOS only Seabios
UEFI not work

But then is the screen black. I see the screen is on.

The console say:
Code:
swtpm_setup: Not overwriting existing state file.
kvm: -device vfio-pci,host=0000:00:02.0,id=hostpci0,bus=pci.0,addr=0x2: Failed to mmap 0000:00:02.0 BAR 2. Performance may be slow
 
Last edited:
Up until recently this was working with a Haswell cpu (i440fx machine).
I upgraded to Proxmox 7.4 and now it is not working anymore.
 
Hello

I was wondering if someone could help me troubleshoot IGD passthrough using UPT Mode. I was able to successfully get IGD passthrough working using Legacy Mode by following the guide above. However, when I try to follow the UPT Mode instructions, I do not get anything displayed on my external monitor. My understanding is that in UPT Mode, the external monitor is supposed to become a secondary monitor and I am assuming that the VNC console should be the primary? Which I would then mirror to the external monitor? However, when I display the VNC console, all I see is the message "Guest has not initialized the display (yet)."

I have looked through the logs and haven't seen anything particularly striking.

Here is my basic configuration:
Proxmox 5.0
Windows 10 Guest
Kaby Lake i3-7100 CPU
There is no graphics card in the machine.

Please let me know if there is other configuration information or log files that could help identify the issue.

Thanks in advance,
Ed
This is because the VNC console doesn't work when you passthrough the GPU, so you need to enable RDP to access it. Also make sure that display is set to NONE.
 
Up until recently this was working with a Haswell cpu (i440fx machine).
I upgraded to Proxmox 7.4 and now it is not working anymore.

Hello,

I had the good idea to upgrade PVE too, to 7.4 precisely. I spent hours try new parameters and intermediate kernels, believing that new kernel was producing a regression. Finally, i had discover that /usr/share/perl5/PVE/QemuServer.pm was simply overwriten during upgrade. Actually, i lost the pve server, and had to reinstall proxmox, but never thought that the file returned to its original behaviour.

So, good news, the trick for Haswell still works ( see previous post ), you just need to change the file again (one line).

Btw, it seems pve takes more memory, so try to adjust max memory of vm to a level below, else, OOM pop after a while of running windows. For the total of 8 Gb, i had to lower 200 Mb the windows vm.

It is very frustating to loose the PT on upgrade, but, as it was a direct change of python file, that could happen, that's the point.
Well, i don't know why this brige is force when machinen is not q35 , and we can't use q35 because haswell is not UPT, but i guess this will never be fixed as the concerned processors are old.

Hope this will help.
 

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!