Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Guide - Intel Alderlake (Gen 12) iGPU passthrough to Windows 10 VM

Featured Replies

Since I got my i5-12400 CPU in a recent hardware refresh, I've struggled to pass through the integrated intel GPU (and audio) to a Windows 10 VM. I wanted the VM to use the iGPU with an attached monitor for HDMI output, but most guides I came across were either for older generation CPUs or were about virtual GPU usage via SR-IOV (which is also cool, but not what I wanted to achieve).

I was able to isolate the iGPU and pass it through to a Win10 VM, installing the intel drivers, but it always ended with a code 43 error in the device manager, a black screen and this error in the VM logs:
 

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=

 

Setting rombar=0 did remove the error from the log, but did not resolve code 43 or the black screen.

 

However, it did lead me to this guide: https://www.cnx-software.com/2023/12/17/how-to-use-a-hdmi-monitor-usb-mouse-keyboard-in-promox-ve-on-an-intel-alder-lake-n-mini-pc/

And this github repo containing rom files for gen 12+ intel iGPUs! https://github.com/gangqizai/igd

The instructions in the repo are all in Chinese, but a bit of google translate made it pretty clear how to use the files.

Update: a kind soul has made a fork with translations to English: https://github.com/markc/ms01-igpu-passthrough

After some trial and error, I've managed to get the iGPU passed through to a Win10 VM on unRAID and outputting to the monitor via HDMI. Happy days.

 

 Please read these notes from the repo maintainer before trying this!

Quote

Usage restrictions

This ROM does not support commercial use and is only for technical research by DIY enthusiasts.

This ROM only supports Intel core graphics and does not support AMD

Only supports UEFI, normal boot. Secure boot is not supported yet.

Only supports OVMF mode, seabios does not support it

The memory must be at least 4G. If it is less than 4G, there may be problems.

Pay attention to the BIOS settings: DVMT pre allocated, do not exceed 64M, 64M corresponds to x-igd-gms=0x2, if it exceeds 64M, x-igd-gms must be increased!

 

 

Here are the steps/settings that worked for me on unRAID with my specific hardware.

 

UnRAID settings:

 

Host BIOS settings that MIGHT be relevant (ASRock Z690M-ITX/ax, i5-12400):

  • VT-d: Enabled

  • Primary graphics adapter: Onboard

  • Above 4G Decoding: Enabled

  • C.A.M. Clever access memory: Enabled

  • SR-IOV support: Enabled

  • Share Memory: 64M (DVMT pre-allocated)

    • NOTE: 64MB DVMT matches 'x-igd-gms' value='2' in the qemu overrides later. It can be increased but it must match between BIOS settings and qemu override. The 'value' integer is a multiplier for "32M". So if you set DVMT to 128M, set value=4, etc.

  • IGPU Multi-monitor: Enabled

 

Steps

  1. Download the two ROM files from the GitHub repo and save to the domains share. I used /mnt/cache/domains/iGPU_ROM_files/

    1. gen12_igd.rom (for the iGPU)

    2. gen12_gop.rom (for the sound card)

  2. Bind the iGPU and soundcard (and the rest of the devices in the same iommu group in my case) to VFIO in system devices
    image.png
     

  3. Plug monitor into iGPU HDMI and/or DP ports

  4. Reboot unRAID

  5. Create a new Windows 10 VM with NoVNC graphics card, CPU host passthrough, i440fx-7.2 and OVMF

    1. Install Windows with NoVNC, install standard virtio drivers

    2. Shut down VM

  6. Add iGPU as a second graphics card for the VM in UI editor

  7. Add intel soundcard in UI editor

  8. Start VM

  9. Confirm iGPU is visible in device manager

  10. Download and install intel iGPU driver (I used https://www.intel.com/content/www/us/en/support/detect.html)

  11. Shut down VM

  12. Remove NoVNC from VM in UI editor and set iGPU as primary graphics card

  13. Browse for and set graphics card ROM file in UI editor to gen12_igd.rom

  14. Save changes
     

  15. Edit VM XML and add gen12_gop.rom to soundcard, following the syntax of the iGPU from step above

    1. I also added multifunction=on for the iGPU and soundcard, and changed the slot of the soundcard to be the same as the iGPU, but I don't know if either of these are actually required
       

  16. The relevant part of the VM XML looks like this now:

        <hostdev mode='subsystem' type='pci' managed='yes'>
          <driver name='vfio'/>
          <source>
            <address domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
          </source>
          <rom file='/mnt/cache/domains/iGPU_ROM_files/gen12_igd.rom'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
        </hostdev>
        <hostdev mode='subsystem' type='pci' managed='yes'>
          <driver name='vfio'/>
          <source>
            <address domain='0x0000' bus='0x00' slot='0x1f' function='0x3'/>
          </source>
          <rom file='/mnt/cache/domains/iGPU_ROM_files/gen12_gop.rom'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1' multifunction='on'/>
        </hostdev>

     

  17. NOTE: from unraid v7.1 this step is no longer required
    At the top of the XML, replace this line

    <domain type='kvm'>

    with

    <domain type='kvm' id='14' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

    To allow us to add Qemu overrides commands to the XML
     

  18. NOTE: from unraid v7.1 this step can also be done via the form view
    Add this block of code at the end of the XML, just before the closing </domain> tag

      <qemu:override>
        <qemu:device alias='hostdev0'>
          <qemu:frontend>
            <qemu:property name='x-igd-opregion' type='bool' value='true'/>
            <qemu:property name='x-igd-gms' type='unsigned' value='2'/>
          </qemu:frontend>
        </qemu:device></qemu:override>

     

  19. Start the VM and enjoy monitor output from the iGPU!

Edited by Jorgen
updates

Does doing this make the iGPU inaccessible to docker containers, such as Jellyfin, for transcoding tasks?

  • Author

I don’t know for sure, but probably yes.

29 minutes ago, alayavijnana said:

Does doing this make the iGPU inaccessible to docker containers, such as Jellyfin, for transcoding tasks?

Yes any passthru makes the gpu not available in the host.

Thanks guys! Disclaimer: I’m a newb.

 

I have an Intel i5 12600k on a AsRock z690 Pro RS motherboard and am hoping to set up my Unraid server to handle docker containers (Jellyfin and Immich) whilst also running a Win11 VM for light gaming and a Linux VM for “daily driving”. 
 

When I get a discrete GPU (leaving the iGPU to handle the docker container tasks) can I leverage it for both VMs at the same time? Or is passthrough of a discrete GPU (or any PCIe controller for that matter) only limited to one VM at a time?

  • Author

Only one (running) VM at the time for GPU passthrough with display output.

Good to know. Thank you!

  • Author

I've updated the BIOS settings after further reading, and to get rid of error messages related to resizable memory allocation in the unraid boot logs.

New setting that works well so far:

  • Above 4G Decoding: Enabled
  • C.A.M. Clever access memory: Enabled
  • Share Memory: 64M (DVMT pre-allocated)

I'm now running dual monitor output in my Win10 VM from the iGPU, via HDMI and Displayport.

 

No real-life problems so far, but I'm getting the below in the unraid logs when I start the VM:

Tower kernel: vfio-pci 0000:00:02.0: vfio_ecap_init: hiding ecap 0x1b@0x100
Tower kernel: vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0x7b09
Tower kernel: vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0x7b09
Tower kernel: vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0x7b09
Tower kernel: vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0x7b09


The first line is just reporting that some native extended capability of the iGPU is not being passed through to the VM. Not sure which one yet, but it doesn't seem to cause any issues.

I will investigate ROM header signature warning and see if I should raise this on the ROM github page or if there's something else I'm missing. Again, doesn't seem to affect anything in practice, so priority is low.

 

  • Author

Was experiencing severe flickering in MS Teams app today, when watching a shared screen. It could be related to hardware transcoding, but no conclusive evidence.

However, my syslog got spammed with large sections of this today, which I think corresponds with the Teams flickering episodes. Can't be sure though, will watch the log next time it happens.

 

Jul 29 09:02:29 Tower kernel: dmar_fault: 3204 callbacks suppressed
Jul 29 09:02:29 Tower kernel: DMAR: DRHD: handling fault status reg 3
Jul 29 09:02:29 Tower kernel: DMAR: [DMA Read NO_PASID] Request device [00:02.0] fault addr 0x70680000 [fault reason 0x06] PTE Read access is not set
Jul 29 09:02:29 Tower kernel: DMAR: DRHD: handling fault status reg 3
Jul 29 09:02:29 Tower kernel: DMAR: [DMA Read NO_PASID] Request device [00:02.0] fault addr 0x70680000 [fault reason 0x06] PTE Read access is not set
Jul 29 09:02:29 Tower kernel: DMAR: DRHD: handling fault status reg 3
Jul 29 09:02:29 Tower kernel: DMAR: [DMA Read NO_PASID] Request device [00:02.0] fault addr 0x70680000 [fault reason 0x06] PTE Read access is not set
Jul 29 09:02:29 Tower kernel: DMAR: DRHD: handling fault status reg 3
Jul 29 09:03:43 Tower kernel: dmar_fault: 2705 callbacks suppressed

 

 

EDIT: seems related to the amount of memory allocated to the iGPU: https://forum.proxmox.com/threads/dmar-dma-read-no_pasid-request-device-00-02-0-fault-addr-0xc8e8c000-fault-reason-0x06-pte-read-access-is-not-set-intel-610-integrated-graphic.128012/

 

I'll try increasing it in BIOS and work out what the ROM repo maintainer means with:
 

Quote

Pay attention to the BIOS settings: DVMT pre allocated, do not exceed 64M, 64M corresponds to x-igd-gms=0x2, if it exceeds 64M, x-igd-gms must be increased!

 

Edited by Jorgen
new info found

  • Author
On 7/29/2024 at 9:42 PM, Jorgen said:

I'll try increasing it in BIOS and work out what the ROM repo maintainer means with:
 

Quote

Pay attention to the BIOS settings: DVMT pre allocated, do not exceed 64M, 64M corresponds to x-igd-gms=0x2, if it exceeds 64M, x-igd-gms must be increased!

 

 

The flickering is definitely related to the log errors, they happen at the same time. No flickering, no error.

 

Just increasing the shared memory (DVMT pre-allocated) in BIOS with no other changes did not improve things.


I'm struggling to convert the ProxMox formatted arguments below to something unraid will accept in the XML. All three of these are needed according to the GitHub page, and I have none of them added.

args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on 

 

Maybe something along the lines of https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/6/html/virtualization_administration_guide/sub-sect-domain_commands-converting_qemu_arguments_to_domain_xml#sub-sect-Domain_Commands-Converting_QEMU_arguments_to_domain_XML

 

  • 2 weeks later...
  • Author
On 7/30/2024 at 10:17 PM, Jorgen said:

I'm struggling to convert the ProxMox formatted arguments below to something unraid will accept in the XML. All three of these are needed according to the GitHub page, and I have none of them added.

args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on 

 

 

Ok, finally had some time to look into this. The need for both x-igd-gms=0x2 and x-igd-opregion=on is explained here https://github.com/qemu/qemu/blob/master/docs/igd-assign.txt. BUT that doc is 8 years old and written for older generation iGPUs. SR-IOV and UEFI seem to have changed things, but I haven't found any definitive sources to explain if and why these two lines are required for new generations.

Nevertheless, the ROM github page calls them out as requirements, so who am I to argue.

This is how to add them to an unraid VM config.

 

  1. First off, you need to edit the VM in XML mode.
     
  2. Replace
    <domain type='kvm'>

    with

    <domain type='kvm' id='14' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

    To allow us to add Qemu overrides commands to the XML
     

  3. Add this block of code at the end of the XML, just before the closing </domain> tag

      <qemu:override>
        <qemu:device alias='hostdev0'>
          <qemu:frontend>
            <qemu:property name='x-igd-opregion' type='bool' value='true'/>
            <qemu:property name='x-igd-gms' type='unsigned' value='2'/>
          </qemu:frontend>
        </qemu:device>
      </qemu:override>

     

  4. Unraid seems to automatically add hostdev alias names to the hostdev devices when the VM is running. For me, it correctly labelled the iGPU as hostdev0, but your milage may vary... This is what my iGPU and audio hostdevs look like in the XML while the VM is running:
        <hostdev mode='subsystem' type='pci' managed='yes'>
          <driver name='vfio'/>
          <source>
            <address domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
          </source>
          <alias name='hostdev0'/>
          <rom file='/mnt/cache/domains/iGPU_ROM_files/gen12_igd.rom'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
        </hostdev>
        <hostdev mode='subsystem' type='pci' managed='yes'>
          <driver name='vfio'/>
          <source>
            <address domain='0x0000' bus='0x00' slot='0x1f' function='0x3'/>
          </source>
          <alias name='hostdev1'/>
          <rom file='/mnt/cache/domains/iGPU_ROM_files/gen12_gop.rom'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1' multifunction='on'/>
        </hostdev>

Since the flickering/log errors are intermittent, I'm not sure if this has resolved the issue. I've been running it like this for a few hours, and so far so good, even after stress testing by running 5 simultaneous 4K youtube streams at the same time.

 

I also made two more changes to the system, which might have helped as well:

  • Removed discrete GPU (GT710), the PCIe slot is now empty.
  • Enabled HDMI sound for the iGPU in BIOS. Not sure why I had it disabled in the first place, or if it even mattered

Will report back after a few more days of daily use

 

Oh, I also spent a lot of time trying to work out how to support legacy mode, see instructions below, but it turns out unraid adds  "-nodefaults" automatically so that was all taken care of already.

Quote

 To make use of legacy mode, simply remove all other graphics options and use "-nographic" and either "-vga none" or "-nodefaults", along with adding the device using vfio-pci

 

  • Author
On 8/10/2024 at 9:18 PM, Jorgen said:

Since the flickering/log errors are intermittent, I'm not sure if this has resolved the issue. I've been running it like this for a few hours, and so far so good, even after stress testing by running 5 simultaneous 4K youtube streams at the same time.

 

I'm going to mark this as resolved, no more flickering or log errors for 2 days of daily use. It showed up many times a day before adding the qemu override lines. I'll update the first post with the required steps

  • Author

Just confirmed this is still working well after the upgrade to Unraid v 7.0.0.

 

Nice to see the new QEMU Commandline section and all other additions to the VM manager form view, great stuff @SimonF!

  • 4 weeks later...

@Jorgen you rock, i spent way way too much time on this!!  Big help, thank you.

  • 2 months later...
  • Author

Just updated to Unraid 7.1.2 and this is still working.

UPDATE: After a few days of daily use, I'm sometimes getting the old flickering screen issue again, but only in Teams.

Edited by Jorgen
update

  • Author

Some related topics. Looks like things are progressing upstream, and we might be able to use Q35 without custom VBIOS soon?

Edited by Jorgen

  • Author

Just got this working with Q35 on Unraid 7.1.2 too!

Additional steps:

  1. Addded video=vesafb:off,efifb:off to Syslinux.conf
    Screenshot 2025-05-25 at 10.28.34 am.png

  2. Set DVMT to 128M in BIOS

  3. For VM settings:

    1. Machinetype = Q35-9.2:
      <type arch='x86_64' machine='pc-q35-9.2'>hvm</type>

    2. Same custom rom files for Intel integrated GPU and soundcard:
      <hostdev mode='subsystem' type='pci' managed='yes'>

      <driver name='vfio'/>

      <source>

      <address domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>

      </source>

      <rom file='/mnt/cache/domains/iGPU_ROM_files/gen12_igd.rom'/>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>

      </hostdev>

      <hostdev mode='subsystem' type='pci' managed='yes'>

      <driver name='vfio'/>

      <source>

      <address domain='0x0000' bus='0x00' slot='0x1f' function='0x3'/>

      </source>

      <rom file='/mnt/cache/domains/iGPU_ROM_files/gen12_gop.rom'/>

      <address type='pci' domain='0x0000' bus='0x07' slot='0x01' function='0x0' multifunction='on'/>

      </hostdev>

    3. Same qemu overrides, but x-igd-gms set to 4 to align with DVMT in BIOS:
      <qemu:override>

      <qemu:device alias='hostdev0'>

      <qemu:frontend>

      <qemu:property name='x-igd-opregion' type='bool' value='true'/>

      <qemu:property name='x-igd-gms' type='unsigned' value='4'/>

      </qemu:frontend>

      </qemu:device>

      </qemu:override>

Getting complaints about legacy mode not supported (which is expected for Q35), but it still works.

2025-05-25T00:17:58.100378Z qemu-system-x86_64: -device {"driver":"vfio-pci","host":"0000:00:02.0","id":"hostdev0","bus":"pcie.0","multifunction":true,"addr":"0x2","romfile":"/mnt/cache/domains/iGPU_ROM_files/gen12_igd.rom","x-igd-opregion":true,"x-igd-gms":4}: IGD device 0000:00:02.0 cannot support legacy mode due to existing devices at address 1f.0

2025-05-25T00:17:58.307272Z qemu-system-x86_64: vfio: Cannot reset device 0000:00:1f.3, no available reset mechanism.

2025-05-25T00:17:58.548189Z qemu-system-x86_64: vfio: Cannot reset device 0000:00:1f.3, no available reset mechanism.

  • 4 weeks later...

Thank you very much @Jorgen , finally got HDMI out to my Bazzite VM on my Ugreen 4800 plus NAS as a total noob.

For any other noob finding this thread and trying to setup Bazzite:

  1. Only the additional files need to be downloaded and the respective code needs to be added (still installed Bazzite using VNC/virtual graphics card)

  2. To add the code, there are some checkboxes in the upper right corner of the VM settings. By clicking them you get into the code section instead of the form. You can't enter the second file for the soundcard etc. elsewise.

Unfortunately, I still have no audio even though I downloaded the related 8505_gop.rom according to my device and followed the setup. Bazzite is showing "No output or input device found" even though the system information under PCI shows the audio device. Anyone know what might be the issue?

edit: The sound issue was fixed by setting the "VM Manager" setting "VFIO allow unsafe interrupts" to yes.

Using pc-q35-9.2 with DVMT value set to 4 (Ugreen bios has no setting for this though).

Edited by nampad

I need a rom for an AMD iGPU used in a 7900X3D because the GPU passthrough isn't working, I start a windows 11 Pro VM and the whole PC locks up with a black screen until I force shut it down.. I also picked Machinetype = Q35-9.2 and Added video=vesafb:off,efifb:off to Syslinux.conf.

The system see's the iGPU just fine so you would think it would just work without issues..

I went through the iommu groups also and tried fiddling in there, nothing is working to get it to passthrough, so im assuming I need a rom. I simply want to use it to encode video using the iGPU on the 7900X3D either through a windows VM or through a docker app called shotcut, either method will be fine but neither method actually sees the iGPU..

so anyone know where I can get a rom for an AMD iGPU(Raphael) for the 7900X3D CPU? ..unless I don't need one, if thats the case im gonna need some sort of hand holding to get it to work correctly because the BIOS settings are correct, the Unraid settings look correct and the VM settings look correct...still not working, only thing im missing is a ROM.

  • 3 weeks later...

Thank you @Jorgen! I finally managed to get to use my HMDI output in a Windows 11 pro VM thanks to this guide.

But I don't seem to manage to get any audio output out of that same HDMI output. The same applies when I try my display-port. It's video only and no audio output. I hope someone knows what I did wrong. I followed every step in this guide. I also tried Windows 10 pro and got the same result.

My hardware:

  • Asrock Z690 Steel Legend motherboard

  • Intel i5-135000 CPU

Here is the part of step 16:

<hostdev mode='subsystem' type='pci' managed='yes'>

<driver name='vfio'/>

<source>

<address domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>

</source>

<alias name='hostdev0'/>

<rom file='/mnt/user/domains/iGPU_ROM/gen12_igd.rom'/>

<address type='pci' domain='0x0000' bus='0x07' slot='0x01' function='0x0' multifunction='on'/>

</hostdev>

<hostdev mode='subsystem' type='pci' managed='yes'>

<driver name='vfio'/>

<source>

<address domain='0x0000' bus='0x00' slot='0x1f' function='0x3'/>

</source>

<alias name='hostdev1'/>

<rom file='/mnt/user/domains/iGPU_ROM/gen12_gop.rom'/>

<address type='pci' domain='0x0000' bus='0x07' slot='0x01' function='0x1' multifunction='on'/>

</hostdev>

HDMI audio is missing in Device Manager:

image.png

Driver version:

image.png

image.png

The VM log has the following errors:

2025-07-10T08:14:19.818093Z qemu-system-x86_64: VFIO_MAP_DMA failed: Invalid argument

2025-07-10T08:14:19.818097Z qemu-system-x86_64: vfio_container_dma_map(0x555a96787ab0, 0x383800003000, 0x5000, 0x14ac01ff3000) = -22 (Invalid argument)

Edited by xs2usun

  • 2 weeks later...
  • Author
On 6/24/2025 at 6:08 AM, bes said:

I need a rom for an AMD iGPU used in a 7900X3D because the GPU passthrough isn't working, I start a windows 11 Pro VM and the whole PC locks up with a black screen until I force shut it down.. I also picked Machinetype = Q35-9.2 and Added video=vesafb:off,efifb:off to Syslinux.conf.

The system see's the iGPU just fine so you would think it would just work without issues..

I went through the iommu groups also and tried fiddling in there, nothing is working to get it to passthrough, so im assuming I need a rom. I simply want to use it to encode video using the iGPU on the 7900X3D either through a windows VM or through a docker app called shotcut, either method will be fine but neither method actually sees the iGPU..

so anyone know where I can get a rom for an AMD iGPU(Raphael) for the 7900X3D CPU? ..unless I don't need one, if thats the case im gonna need some sort of hand holding to get it to work correctly because the BIOS settings are correct, the Unraid settings look correct and the VM settings look correct...still not working, only thing im missing is a ROM.

Sorry I have only ever used Intel systems, so I have no idea. However, this thread says it's possible to dump the VBIOS ROM file you need, and also has step-by-step instructions to follow for a non-unraid system..

I don't know if this works or is safe to do, so use your own judgement:
https://www.reddit.com/r/VFIO/comments/16mrk6j/amd_7000_seriesraphaelrdna2_igpu_passthrough/

  • Author
On 7/10/2025 at 6:19 PM, xs2usun said:

But I don't seem to manage to get any audio output out of that same HDMI output

Not sure what the problem is, sorry. My understanding is that audio should work with this method. I don't personally use audio over HDMI as my monitors have no audio out capabilities... :)

There is a method of using a "combined" ROM file so you only need to assign it to the iGPU, not the sound card part. Maybe that would help?

See here for instructions: https://forums.unraid.net/bug-reports/stable-releases/712-vm-intel-gpu-passthrough-to-monitor-stopped-working-r3855/#findComment-34189

Thank you for your suggestion. But unfortunately still no audio. I tried the combined ROM without or with soundcard. So I hope that someone knows what the problem could be.

Edited by xs2usun

  • Author
On 7/10/2025 at 6:19 PM, xs2usun said:

The VM log has the following errors:

2025-07-10T08:14:19.818093Z qemu-system-x86_64: VFIO_MAP_DMA failed: Invalid argument

2025-07-10T08:14:19.818097Z qemu-system-x86_64: vfio_container_dma_map(0x555a96787ab0, 0x383800003000, 0x5000, 0x14ac01ff3000) = -22 (Invalid argument)

I had a look at this error, and I think you either need to update to the latest unraid version for a newer kernel, OR reduce the RAM allocation for the VM.

For the latter, see here (but I wouldn't start messing with hugepages, ignore that section) https://seanthegeek.net/posts/fix-for-vfio-gpu-passthrough-vfio-map-dma-failed-errors-in-truenas-proxmox-unraid-qemu/

For your audio issue, you could try forcing the sound card to have the same address in the VM as it does on the host. I know passing through previous generations of intel iGPU and sound card required them to be at the expected address in teh VM, maybe that still applies?

That's a manual XML edit though, and you will likely get conflicting use of the same address, plus other errors that needs to be worked through:

</hostdev>

<hostdev mode='subsystem' type='pci' managed='yes'>

<driver name='vfio'/>

<source>

<address domain='0x0000' bus='0x00' slot='0x1f' function='0x3'/>

</source>

<alias name='hostdev1'/>

<rom file='/mnt/user/domains/iGPU_ROM/gen12_gop.rom'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x3' multifunction='on'/>

</hostdev>

  • Author

Host BIOS settings that MIGHT be relevant (example from ASRock Z690M-ITX/ax, i5-12400):

  • VT-d: Enabled

  • Primary graphics adapter: Onboard (i.e. the iGPU is the primary adapter)

  • Above 4G Decoding: Enabled

  • C.A.M. Clever access memory: Enabled

  • SR-IOV support: Enabled (probably not required)

  • Share Memory: 64M (DVMT pre-allocated)

    • NOTE: 64MB DVMT matches 'x-igd-gms' value='2' in the qemu overrides later. It can be increased but it must match between BIOS settings and qemu override. The 'value' integer is a multiplier for "32M". So if you set DVMT to 128M, set value=4, etc.

  • IGPU Multi-monitor: Enabled

Unraid Syslinux configuration

  1. Add video=vesafb:off,efifb:off to Syslinux.conf
    Screenshot 2025-05-25 at 10.28.34 am.png

 

VM configuration

  1. Download the "combined" ROM file igd_rpls.rom from the GitHub repo https://github.com/gangqizai/igd/tree/main/2in1_rom and save it to the domains share. I used /mnt/cache/domains/iGPU_ROM_files/

  2. Bind the iGPU and optionally the soundcard (and the rest of the devices in the same iommu group in my case) to VFIO in Tools/System devices
    image.png
     

  3. Plug monitor into iGPU HDMI and/or DP ports

  4. Reboot unRAID

  5. Create a new Windows VM with NoVNC graphics card, CPU host passthrough, i440fx-9.2 and Seabios (for Q35 and OVMF, see next post)

    1. Install Windows with NoVNC, install standard virtio drivers

    2. Shut down VM

  6. Add iGPU as a second graphics card for the VM in UI editor

  7. Add intel soundcard in UI editor (optional)

  8. Start VM

  9. Confirm iGPU is visible in Windows device manager

  10. Download and install Intel iGPU driver (I used https://www.intel.com/content/www/us/en/support/detect.html).
    This process might require a reboot.

  11. Shut down VM

  12. Remove NoVNC from VM in UI editor

  13. Still in the VM UI editor

    1. Select the iGPU as the primary graphics card

    2. For Graphics ROM BIOS, select igd_rpls.rom from step 1

    3. For Sound Card, select the Intel audio controller (optional)

    Screenshot 2025-07-23 at 8.36.44 am.png

  14. Save changes, but don't start the VM yet
     

  15. In the VM UI editor, add this block of code to the QEMU Command Line field
    IMPORTANT: the x-igd-gms value must match what you set the DVMT to in the host BIOS.
    64MB DVMT matches 'x-igd-gms' value='2'. The 'value' integer is a multiplier for "32M". So if you set DVMT to 128M, set value=4, etc.

      <qemu:override>
        <qemu:device alias='hostdev0'>
          <qemu:frontend>
            <qemu:property name='x-igd-opregion' type='bool' value='true'/>
            <qemu:property name='x-igd-gms' type='unsigned' value='2'/>
          </qemu:frontend>
        </qemu:device></qemu:override>

     

  16. Example where I have set DVMT to 512M in BIOS
    Screenshot 2025-07-23 at 8.46.24 am.png

  17. Start the VM and enjoy monitor output from the iGPU!

Edited by Jorgen
Q35 should use a slightly different setup

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...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.