July 20, 20241 yr 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/igdThe 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-passthroughAfter 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 restrictionsThis 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 AMDOnly supports UEFI, normal boot. Secure boot is not supported yet.Only supports OVMF mode, seabios does not support itThe 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:version: working on 6.12.11-6.12.14, 7.0.0 and 7.1.2intel_gpu_top plugin installed Host BIOS settings that MIGHT be relevant (ASRock Z690M-ITX/ax, i5-12400):VT-d: EnabledPrimary graphics adapter: OnboardAbove 4G Decoding: EnabledC.A.M. Clever access memory: EnabledSR-IOV support: EnabledShare 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 StepsDownload the two ROM files from the GitHub repo and save to the domains share. I used /mnt/cache/domains/iGPU_ROM_files/gen12_igd.rom (for the iGPU)gen12_gop.rom (for the sound card)Bind the iGPU and soundcard (and the rest of the devices in the same iommu group in my case) to VFIO in system devices Plug monitor into iGPU HDMI and/or DP portsReboot unRAIDCreate a new Windows 10 VM with NoVNC graphics card, CPU host passthrough, i440fx-7.2 and OVMFInstall Windows with NoVNC, install standard virtio driversShut down VMAdd iGPU as a second graphics card for the VM in UI editorAdd intel soundcard in UI editorStart VMConfirm iGPU is visible in device managerDownload and install intel iGPU driver (I used https://www.intel.com/content/www/us/en/support/detect.html)Shut down VMRemove NoVNC from VM in UI editor and set iGPU as primary graphics cardBrowse for and set graphics card ROM file in UI editor to gen12_igd.romSave changes Edit VM XML and add gen12_gop.rom to soundcard, following the syntax of the iGPU from step aboveI 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 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> NOTE: from unraid v7.1 this step is no longer requiredAt 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 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> Start the VM and enjoy monitor output from the iGPU! Edited May 24, 20251 yr by Jorgen updates
July 20, 20241 yr Does doing this make the iGPU inaccessible to docker containers, such as Jellyfin, for transcoding tasks?
July 20, 20241 yr 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.
July 20, 20241 yr 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?
July 26, 20241 yr 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.
July 29, 20241 yr 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 July 29, 20241 yr by Jorgen new info found
July 30, 20241 yr 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
August 10, 20241 yr 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. First off, you need to edit the VM in XML mode. 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 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> 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
August 13, 20241 yr 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
February 2, 20251 yr 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!
May 20, 20251 yr 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 May 25, 20251 yr by Jorgen update
May 22, 20251 yr Author Some related topics. Looks like things are progressing upstream, and we might be able to use Q35 without custom VBIOS soon?GitHubqemu/docs/igd-assign.txt at master · qemu/qemuOfficial QEMU mirror. Please see https://www.qemu.org/contribute/ for how to submit changes to QEMU. Pull Requests are ignored. Please only use release tarballs from the QEMU website. - qemu/qemuhttps://gitlab.com/qemu-project/qemu/-/issues/2586https://patchew.org/QEMU/[email protected]/[email protected]/https://patchew.org/search?q=project%3AQEMU+vfio%2Figdhttps://lore.kernel.org/all/[email protected]/https://forum.proxmox.com/threads/ugreen-dxp4800-igpu-99-success-win-server-2025.163149/#post-753351https://eci.intel.com/docs/3.0/components/kvm-hypervisor.html#passthrough-kvm-graphics-device Edited May 23, 20251 yr by Jorgen
May 25, 20251 yr Author Just got this working with Q35 on Unraid 7.1.2 too!Additional steps:Addded video=vesafb:off,efifb:off to Syslinux.confSet DVMT to 128M in BIOSFor VM settings:Machinetype = Q35-9.2:<type arch='x86_64' machine='pc-q35-9.2'>hvm</type>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>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.02025-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.
June 22, 20251 yr 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:Only the additional files need to be downloaded and the respective code needs to be added (still installed Bazzite using VNC/virtual graphics card)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 June 22, 20251 yr by nampad
June 23, 20251 yr 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.
July 10, 2025Jul 10 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 motherboardIntel i5-135000 CPUHere 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:Driver version:The VM log has the following errors:2025-07-10T08:14:19.818093Z qemu-system-x86_64: VFIO_MAP_DMA failed: Invalid argument2025-07-10T08:14:19.818097Z qemu-system-x86_64: vfio_container_dma_map(0x555a96787ab0, 0x383800003000, 0x5000, 0x14ac01ff3000) = -22 (Invalid argument) Edited July 10, 2025Jul 10 by xs2usun
July 21, 2025Jul 21 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/
July 21, 2025Jul 21 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 outputNot 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
July 21, 2025Jul 21 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 July 21, 2025Jul 21 by xs2usun
July 22, 2025Jul 22 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 argument2025-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>
July 22, 2025Jul 22 Author Host BIOS settings that MIGHT be relevant (example from ASRock Z690M-ITX/ax, i5-12400):VT-d: EnabledPrimary graphics adapter: Onboard (i.e. the iGPU is the primary adapter)Above 4G Decoding: EnabledC.A.M. Clever access memory: EnabledSR-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: EnabledUnraid Syslinux configurationAdd video=vesafb:off,efifb:off to Syslinux.conf VM configurationDownload 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/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 Plug monitor into iGPU HDMI and/or DP portsReboot unRAIDCreate a new Windows VM with NoVNC graphics card, CPU host passthrough, i440fx-9.2 and Seabios (for Q35 and OVMF, see next post)Install Windows with NoVNC, install standard virtio driversShut down VMAdd iGPU as a second graphics card for the VM in UI editorAdd intel soundcard in UI editor (optional)Start VMConfirm iGPU is visible in Windows device managerDownload and install Intel iGPU driver (I used https://www.intel.com/content/www/us/en/support/detect.html).This process might require a reboot.Shut down VMRemove NoVNC from VM in UI editorStill in the VM UI editorSelect the iGPU as the primary graphics cardFor Graphics ROM BIOS, select igd_rpls.rom from step 1For Sound Card, select the Intel audio controller (optional)Save changes, but don't start the VM yet In the VM UI editor, add this block of code to the QEMU Command Line fieldIMPORTANT: 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> Example where I have set DVMT to 512M in BIOSStart the VM and enjoy monitor output from the iGPU! Edited August 3, 2025Aug 3 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.