Intel IGD (integrated graphics) Pass Through Support - March 2016 Update


Recommended Posts

  • 1 month later...
  • 1 month later...
  • 2 months later...
On 5/18/2018 at 7:10 PM, salora said:

Working !!

Finally got this working on my Intel NUC 9 Extreme KIT with Unraid 6.9.2

IGPU 630 UHD  => LibreElec

GPU Nvidia GTX3060  => Windows 11 

Steps: Separating the HDMI audio device from an IOMMU group was necessary. (used space invaders video  specify the vfio-pci.ids below). Then added all in the boot config in the flash drive like this. Especially important seem to be to add this part  i915.alpha_support=1 video=efifb:off,vesafb:off modprobe.blacklist=i2c_i801,i2c_smbus,snd_hda_intel,snd_hda_codec_hdmi,i915,drm,drm_kms_helper,i2c_algo_bit

config:

kernel /bzimage
append initrd=/bzroot pcie_acs_override=downstream vfio_iommu_type1.allow_unsafe_interrupts=1 vfio-pci.ids=8086:a30e,8086:a348,8086:a323,8086:a324,8086:15bb i915.alpha_support=1 video=efifb:off,vesafb:off modprobe.blacklist=i2c_i801,i2c_smbus,snd_hda_intel,snd_hda_codec_hdmi,i915,drm,drm_kms_helper,i2c_algo_bit 

finally found this vbios which works for iGPU somewhere (was referred to), see attached. I could not dump it myself due to io error.

Then installed Intel drivers in Windows etc. (Had Splashtop Streamer installed first..).

Amazing community and especially amazing Spaceinvaders videos made it possible :))

Thanks everyone!!

 

vbios_gvt_uefi.rom

Link to comment
  • 2 months later...

I can’t get gvt-g passthrough to work. I have a 10th gen nuc and don't have any external GPU, just the iGPU. I followed lots of guides. When I enter the Windows VM, I am able to run intel's iGPU driver installer, but during installation the screen will go black and won’t ever come back.

 

I add these modules to boot:
 

    sudo nano /etc/modules

    vfio
    vfio_iommu_type1
    vfio_mdev
    vfio_virqfd
    vfio_pci
    kvmgt
    kvm
    i915

 

I use this systemd service to have the device ready on every boot:

sudo nano /etc/systemd/system/setup-gvt.service
sudo systemctl enable setup-gvt

    [Unit]
    Description=Setup GVT

    [Service]
    Type=oneshot
    User=root
    ExecStart=/usr/bin/bash -c 'echo 06f10f82-5430-4913-9dae-8f6b67239c21 > /sys/devices/pci0000:00/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_4/create'

    [Install]
    WantedBy=multi-user.target

 

Changes I make to Libvirt's XML (using virt-manager)

`domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'`

    graphics type='spice'
      listen type='none'/
      gl enable='yes' rendernode='/dev/dri/by-path/pci-0000:00:02.0-render'/
    /graphics
---------------
    video
      model type='none'/
    /video
---------------
    hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'
    source
    address uuid='06f10f82-5430-4913-9dae-8f6b67239c21'/
    /source
    address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/
    /hostdev

Some errors on Linux host
A firmware error

    sudo dmesg | ...
    Command line: root=UUID=824b1303-1f00-4749-bd64-3775a198c9d2 ro i915.enable_gvt=1 kvm.ignore_msrs=1  i915.enable_fbc=0 i915.enable_guc=0 quiet splash intel_iommu=igfx_off
    Kernel command line: root=UUID=824b1303-1f00-4749-bd64-3775a198c9d2 ro i915.enable_gvt=1 kvm.ignore_msrs=1  i915.enable_fbc=0 i915.enable_guc=0 quiet splash intel_iommu=igfx_off
i915 0000:00:02.0: firmware: failed to load i915/gvt/vid_0x8086_did_0x9b41_rid_0x02.golden_hw_state (-2)
i915 0000:00:02.0: Direct firmware load for i915/gvt/vid_0x8086_did_0x9b41_rid_0x02.golden_hw_state failed with error -2


Here, I can't see 0000:00:02.0 (intel iGPU) in an IOMMU group

 

     Command line: root=UUID=824b1303-1f00-4749-bd64-3775a198c9d2 ro i915.enable_gvt=1 kvm.ignore_msrs=1  i915.enable_fbc=0 i915.enable_guc=0 quiet splash intel_iommu=igfx_off
     ACPI: DMAR 0x0000000099B61200 000088 (v01 COREv4 COREBOOT 00000000 CORE 20200925)
     ACPI: Reserving DMAR table memory at [mem 0x99b61200-0x99b61287]
     Kernel command line: root=UUID=824b1303-1f00-4749-bd64-3775a198c9d2 ro i915.enable_gvt=1 kvm.ignore_msrs=1  i915.enable_fbc=0 i915.enable_guc=0 quiet splash intel_iommu=igfx_off
     DMAR: Disable GFX device mapping
     DMAR: Host address width 39
     DMAR: DRHD base: 0x000000fed90000 flags: 0x0
     DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 19e2ff0505e
     DMAR: DRHD base: 0x000000fed91000 flags: 0x1
     DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da
     DMAR: RMRR base: 0x0000009b000000 end: 0x0000009f7fffff
     DMAR-IR: IOAPIC id 2 under DRHD base  0xfed91000 IOMMU 1
     DMAR-IR: HPET id 0 under DRHD base 0xfed91000
     DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
     DMAR-IR: Enabled IRQ remapping in x2apic mode
     iommu: Default domain type: Translated
     DMAR: No ATSR found
     DMAR: dmar1: Using Queued invalidation
     pci 0000:00:00.0: Adding to iommu group 0
     pci 0000:00:04.0: Adding to iommu group 1
     pci 0000:00:08.0: Adding to iommu group 2
     pci 0000:00:12.0: Adding to iommu group 3
     pci 0000:00:14.0: Adding to iommu group 4
     pci 0000:00:14.2: Adding to iommu group 4
     pci 0000:00:17.0: Adding to iommu group 5
     pci 0000:00:1d.0: Adding to iommu group 6
     pci 0000:00:1f.0: Adding to iommu group 7
     pci 0000:00:1f.3: Adding to iommu group 7
     pci 0000:00:1f.4: Adding to iommu group 7
     pci 0000:00:1f.5: Adding to iommu group 7
     pci 0000:01:00.0: Adding to iommu group 8
     DMAR: Intel(R) Virtualization Technology for Directed I/O
     AMD-Vi: AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de>
    AMD-Vi: AMD IOMMUv2 functionality not available on this system
         intel_iommu=igfx_off


There's a problem at 'lspci -vvvv's result.

 

    pcilib: sysfs_read_vpd: read failed: Input/output error
            Not readable
        Capabilities: [100 v1] Advanced Error Reporting
            UESta:    DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
            UEMsk:    DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
            UESvrt:    DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
            CESta:    RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr-
            CEMsk:    RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
            AERCap:    First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
                MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
            HeaderLog: 00000000 00000000 00000000 00000000
        Capabilities: [140 v1] Virtual Channel
            Caps:    LPEVC=0 RefClk=100ns PATEntryBits=1
            Arb:    Fixed- WRR32- WRR64- WRR128-
            Ctrl:    ArbSelect=Fixed
            Status:    InProgress-
            VC0:    Caps:    PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
                Arb:    Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
                Ctrl:    Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
                Status:    NegoPending- InProgress-
        Capabilities: [160 v1] Device Serial Number 01-00-00-00-68-4c-e0-00
        Kernel driver in use: r8169
        Kernel modules: r8169

 

Link to comment

Hello @dqmhug

i`m a little bit confused what you are trying to achive.

On 12/21/2021 at 5:47 PM, dqmhug said:

I

 

I use this systemd service to have the device ready on every boot:

sudo nano /etc/systemd/system/setup-gvt.service
sudo systemctl enable setup-gvt

    [Unit]
    Description=Setup GVT

    [Service]
    Type=oneshot
    User=root
    ExecStart=/usr/bin/bash -c 'echo 06f10f82-5430-4913-9dae-8f6b67239c21 > /sys/devices/pci0000:00/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_4/create'

    [Install]
    WantedBy=multi-user.target

 

 

I know "i915-GVTg_V5_4" only from virtualization of the iGPU and using it for one or multiple VMs, but only for HW acceleration. You cant use it with a Monitor connected to your gpu. If you want this have a look at the plugin:

If you want to use your video output, like HDMI, you have to pass the iGPU through. As described here.

Are you working with the GUI or only on CLI?

 

Link to comment
On 12/27/2021 at 7:07 PM, Picha said:

If you want to use your video output, like HDMI, you have to pass the iGPU through.

 

 

 

My only HDMI monitor is directly connected to the NUC's motherboard.

I am not doing this on unraid currently, but on Qemu-Libvirt-Virt-manager.

Do you mean I have to do gvt-d (full igpu passthrough) rather than gvt-g (partial igpu passthrough)?

 

Because I think I've read somewhere that full igpu passthrough (gvt-d) is not possible when you don't have a discrete graphics card. (Is it?)

Link to comment

Yes, try gvt-d if you want monitor output. Works even if you only have the igpu installed. At least on unraid, your can run it headless. Did this on two different machines and it worked. I can't tell you how to do it on a different hypervisior tho. Did most of it via the GUI of unraid and with the help of the forum.

Link to comment
  • 5 weeks later...
  • 7 months later...

Hi there

 

I hope this is the right topic (and I am an noob, so sorry, if there is a solution, but I was to stupid to understand it). I have bought an used "HP ProDesk 600 G3 Mini DM Intel Core i5-6500T" an wanted to run Unraid on it with a Windows 10 VM, which will be my daily driver.

Unfortunately I am getting error messages, when I try to launch the VM with the graphics passthrough.

Here is what I've done so far:

* Activated Legacy Mode in BIOS in order to be able to start unraid

* Activated this checkbox and rebooted the server

grafik.thumb.png.f5cf8bf9b1012c9ce86d9a4c1fa63774.png

 

* Created a Windows 10 VM with following settings

grafik.thumb.png.b3c4cefb5929d7d90f5934d5cfb8745a.png

* Received this error message

grafik.png.2613a85f883a2bcba7c1f5f9cf2cfe78.png

 

* Those settings didn't work so i changed the Grapics card to VNC, and installed Windows 10 (is now working fine, but in VNC).

 

My main goal is to use the DP output on the PC in order to work with my regular monitor.

 

I've seen this post, but i don't know if this is something, what could/should help (Edit: checked it out with the developer. It might be possible with additional hardware, but there might be several issues. So a "natural" passthrough from the pc's DP to the monitor would be a more stable solution):

 

 

Thanks for any help!

Cheers!

 

 

Edited by Doublemyst
Added edit
Link to comment

A small update.

I've done modifications as suggested by @salora and modified my Syslinux configuration and even added allow unsafe interrupts and created a new VM using SeaBIOS:

kernel /bzimage
append pcie_acs_override=downstream,multifunction vfio-pci.ids=8086:a2f0 modprobe.blacklist=i2c_i801,i2c_smbussnd_hda_intel video=efifb:off,vesafb:off vfio_iommu_type1.allow_unsafe_interrupts=1 initrd=/bzroot

 

Where "8086:a2f0" is my audio card:

grafik.thumb.png.69a364e5bd42ec01b0a35bc3c48b3de1.png

 

But had no luck, as I got this error message

grafik.png.a7da9216f904f9afd3dc32158c9c0a5f.png

Which indicates, that the audio device is still somehow binded to unraid.

 

Then I tried this configuration:

After checking this config for modprobe.blacklist

grafik.png.665277f8c0f3a8ff3af0372022991369.png

and seeing someone using this i915 in his configuration:

kernel /bzimage
append pcie_acs_override=downstream,multifunction vfio-pci.ids=8086:a2f0 modprobe.blacklist=i915,snd_hda_intel,snd_hda_codec_hdmi video=efifb:off,vesafb:off initrd=/bzroot

 

But this didn't help neither..

 

grafik.png.0ff71e00932bfcff9fa97c14b07c44e3.png

 

When I disable the audio card, the VM is starting, but I have no video output.

grafik.png.62eff829a96be39f8ea6836c5a3438fe.png

 

The reason I think is the missing ROM Bios, but I didn't manage to find one for intel hd graphics 530.. Found drivers and several roms for differend intel hd graphic cards, but not the 530.. Maybe someone has one laying around?

On techpowerup those are the processors, but I couldn't find the bios files:

https://www.techpowerup.com/gpu-specs/hd-graphics-530.c2789

https://www.techpowerup.com/cpu-specs/core-i5-6500.c1829 my processor is i5-6500T, but i think those are very similar.

 

 

Anyone any suggestions?

 

 

Edited by Doublemyst
Infos added
Link to comment
  • 3 months later...

Hi,

 

I wanted to give a little writeup about my journey to getting IGD passthrough working with:

- latest LibreELEC 11 nightlies / Kodi 20 Nexus

- latest unRAID 6.11.5

 --> Both HDMI Video and Audio are working including HDR10

 

Maybe this will help others to fix their setup!

 

 

My hardware as follows:

- ASRock H570M-ITX

- Intel Core i5-11400 (note: This is a Gen11 CPU with UHD 730 graphics which needs Linux 5.12 onwards in both LibreELEC AND unRAID to get Audio passthrough to work!)

 

Be aware of this LibreELEC Wiki entry if you are trying to get passthrough to work. It seems there are quiet a few hardware dependencies (especially with HDR):

LibreELEC 10.0 shipped with Linux 5.10 kernel support and Xorg graphics, so it does not have support for HDR or Gen11 hardware. Community created LibreELEC 10.0 images with newer Linux kernels supporting Gen11 hardware and GBM graphics with experimental HDR patches can be downloaded from the LibreELEC forums. LibreELEC 11.0 nightly development images from 21/9/21 onwards also use GBM graphics, include early (pre-Alpha) Kodi 20.0 support for HDR, and an updated kernel supporting Gen11 hardware.

 

 

IOMMU:

Mine look like these:

image.thumb.png.a11353a04e936e73f8352c2a8cdb2409.png

 

image.thumb.png.60e5bc715b47a7e32def5e6a7ee92d0f.png

 

To be able to passthrough the audio device you have to make sure that none of the devices in this group is used by unraid.

I actually had one of my two ethernet controllers listed there aswell which was used by unraid. After I switched to the second eth controller in the network settings the group was free to use. I also disabled the first eth controller in the BIOS (that's why it's not listed in group 10 anymore).

 

To passthrough the HDMI audio you need to add all devices in the group EXCEPT interconnects like PCI bridges to the vfio-pci driver via the syslinux.cfg. My entry looks like this (replace the values with the IDs of your controllers):

vfio-pci.ids=8086:43c8,8086:43a3,8086:43a4 

 

I also turned on PCIe ACS override - downstream and VFIO allow unsafe interrupts in the VM settings.

and added the following in the syslinux.cfg:

modprobe.blacklist=i915,snd_hda_intel,snd_hda_codec_hdmi video=efifb:off,vesafb:off

 

To find the modprobe.blacklist value see this post

 

So after all the steps my syslinux.cfg looks like this:

kernel /bzimage
append pcie_acs_override=downstream vfio_iommu_type1.allow_unsafe_interrupts=1 vfio-pci.ids=8086:43c8,8086:43a3,8086:43a4 modprobe.blacklist=i915,snd_hda_intel,snd_hda_codec_hdmi video=efifb:off,vesafb:off initrd=/bzroot

 

 

VM creation:

I created the VM using i440fx and SeaBIOS. Q35 and OVMF did not work!

image.png.1cf883d2a5f34b007691770c06cc3817.png

image.png.7f85e9fc3b5f446a4d2e6f8daf086336.png

 

No ROM Bios and no further xml adjustments needed!

 

See spaceinvaders video if you don't know how to create a LibreELEC VM:

 

 

Additional BIOS settings for IGD usage:

- Primary Graphics Adapter - onboard

- iGPU Multi Monitor - enabled

- OnBoard HD Audio - enabled

- OnBoard HDMI HD Audio - enabled

- C.A.M (Clever Access Memory) - disabled (not sure if this is needed but I read somewhere about it) --> The setting is only visible on AsRock Boards when turning on "Above 4G Decoding". C.A.M is also called S.A.M or resizable BAR by other manufacturers!

 

 

This should be it! Good luck!

 

Edited by Marv
  • Like 2
Link to comment
  • 2 weeks later...

Thanks for the write up Marv, I followed it exactly however It did not solve the error Im having. Its not entirely the same thing, But I have an UHD 750 and when running the VM, I get this:

 

2023-01-15T22:59:11.306752Z qemu-system-x86_64: -device {"driver":"vfio-pci","host":"0000:00:02.0","id":"hostdev0","bus":"pci.0","addr":"0x2"}: IGD device 0000:00:02.0 has no ROM, legacy mode disabled
2023-01-15T22:59:11.724838Z qemu-system-x86_64: vfio-pci: Cannot read device rom at 0000:00:02.0
Device option ROM contents are probably invalid (check dmesg).
Skip option ROM probe with rombar=0, or load from file with romfile=

 

Any ideas as to why

Link to comment

Mine looks very similar here. This shouldn't be the problem.

 

2023-01-16T14:26:50.071283Z qemu-system-x86_64: -device {"driver":"vfio-pci","host":"0000:00:02.0","id":"hostdev0","bus":"pci.0","addr":"0x2"}: IGD device 0000:00:02.0 has no ROM, legacy mode disabled
2023-01-16T14:26:50.195651Z qemu-system-x86_64: vfio: Cannot reset device 0000:00:1f.3, no available reset mechanism.
2023-01-16T14:26:50.195736Z qemu-system-x86_64: vfio: Cannot reset device 0000:00:1f.3, no available reset mechanism.
2023-01-16T14:26:50.769928Z qemu-system-x86_64: vfio-pci: Cannot read device rom at 0000:00:02.0
Device option ROM contents are probably invalid (check dmesg).
Skip option ROM probe with rombar=0, or load from file with romfile=

 

Is the VM starting and the screen just stays black?

Are you using a LibreELEC 11 Generic or Generic-Legacy build?

 

Link to comment
  • 9 months later...

Still having issues with my Intel Hawell I7-4700S. Whenever I enable the onboard graphics for my VM and then launch the VM, it causes my Unraid server to freeze.

 

This issue should be a top priority for Unraid as these Intel cpus with onboard graphics are the perfect solution for NAS and servers. 

 

Curious, does the AMD cpus with onboard graphics also have this issue?

 

Despite this issue, simply love Unraid.

 

Cheers

 

 

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.