Intel IGP Passthrough - Invalid PCI ROM header signature

n1nj4888

Well-Known Member
Jan 13, 2019
162
22
58
44
Hi There,

Posting this more out of interest than an actual issue...

I’m getting the following error in the Proxmox host syslog when starting a VM with IGP passthrough:

Code:
Jun  8 16:08:51 pve-host1.local kernel: [309988.432878] vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xd76f

I have an Intel NUC8i5BEH (with integrated Iris GPU) on which latest Proxmox is installed. The IGP is passed through to a VM running Plex and the VM is seemingly working ok and able to use Plex Hardware Transcoding (Intel QuickSync) features of the IGP/CPU.

I didn’t do anything special with the passthrough of the IGP other than enabling IOMMU on the Proxmox host and passing the IGP device through to the VM through the Proxmox GUI ...

... So, just intrigued whether I should be concerned about the kernel error above?

Thanks!
 
You're one of the first results when I google this error. :) I'm working on getting full iGPU passthrough working on an Intel i5-12500T (Intel HD 770) and see this when I launch a VM with the iGPU passed through.

Right now, I've got compute, but seemingly no video out.

I've seen other GPU passthrough guides where you have to give Proxmox a copy of the GPU BIOS. Investigating that now.
Did you ever get video out from yours?
 
Struggling with same problem. Disabling CSM removes this error, but igpu from 1165g7 still doesn't want to output anything from hdmi , and I've got error 43. maybe its because i've got exotic mobo from topton ...
 
Struggling with same problem. Disabling CSM removes this error, but igpu from 1165g7 still doesn't want to output anything from hdmi , and I've got error 43. maybe its because i've got exotic mobo from topton ...
With an older NVIDIA card, the solution to this error was to dump the BIOS from the physical card as a .ROM file, and then have the VM use that ROM file when it loaded to tell the VM how to talk to the card correctly.

But, I've failed at dumping the Intel iGPU ROM and can't find it anywhere, so that's a dead end so far.
 
With an older NVIDIA card, the solution to this error was to dump the BIOS from the physical card as a .ROM file, and then have the VM use that ROM file when it loaded to tell the VM how to talk to the card correctly.

But, I've failed at dumping the Intel iGPU ROM and can't find it anywhere, so that's a dead end so far.
After many failed attempts to do the same, I concluded that you can't dump igpu vbios due to the fact in runs in UEFI mode. Did you come to same conclusion ? Or maybe you found some workaround for that ?
 
  • Like
Reactions: SInisterPisces
After many failed attempts to do the same, I concluded that you can't dump igpu vbios due to the fact in runs in UEFI mode. Did you come to same conclusion ? Or maybe you found some workaround for that ?
It took two days of research and bumbling, and in the end I sort of found it by accident, but yes.

tl;dr I figured out how to get a text file of the debug version of the VBIOS, which is the hex dump + a bunch of human readable diagnostic text. Someone who knows more about assembling VBIOSes than me (I know nothing), should be able to make a usable ROM binary file with a hex editor.

You definitely can't do it the usual way, using the method in the PVE wiki. You also can't boot into Legacy mode and do it, as Legacy mode BIOS support was removed in all Intel CPUs made in 2020 or after (I found a tech note for this--let me know if you want the link and I'll find it again).

However, Intel being Intel, there is a way but it's ridiculous and not immediately useful.

Reproducing my post to r/VFIO last night: https://www.reddit.com/r/VFIO/comments/1c98ww0/i_dumped_the_12500t_igpu_ihd_770_vbios_as_a/

I presently have a text file debug mode dump of the VBIOS from my i5-12500T. In the intel-gpu-tools package is a tool caled intel_vbt_decode, and when pointed at the /sys/kernel/debug/dri/0/i915_vbt "file," it works.

I think someone who has more skills with a hex editor than me and more familiarity with these kinds of files might be able to get a usable hex vbios rom file out of this, so I wanted to share. :)

These are the commands:
intel_vbt_decode --file=/sys/kernel/debug/dri/0/i915_vbt --hexdump (this actually worked for me)

intel_vbt_decode --file=/sys/kernel/debug/dri/0/i915_opregion (if you try to dump this, it says the "VBT signature" is missing.

It dumps a massive text file that's a mix of human readable debug info and the actual hex code.

In that same /0/ "directory," there's a very interesting "gpu-info" ... file ... that you can dump just using cat. It includes a few interesting bits that make the difficulty dumping the rom with the normal methods a bit clearer. The vbt_firmware line is empty. I wonder if that's what the usual dump technique using cat and echo tries to read off of.

Code:
GuC firmware: i915/tgl_guc_70.bin
GuC firmware wanted: i915/tgl_guc_70.bin
HuC firmware: i915/tgl_huc.bin
HuC firmware wanted: i915/tgl_huc.bin
i915.vbt_firmware=(null)
i915.guc_firmware_path=(null)
i915.huc_firmware_path=(null)
i915.dmc_firmware_path=(null)
i915.gsc_firmware_path=(null)
 
It took two days of research and bumbling, and in the end I sort of found it by accident, but yes.

tl;dr I figured out how to get a text file of the debug version of the VBIOS, which is the hex dump + a bunch of human readable diagnostic text. Someone who knows more about assembling VBIOSes than me (I know nothing), should be able to make a usable ROM binary file with a hex editor.

You definitely can't do it the usual way, using the method in the PVE wiki. You also can't boot into Legacy mode and do it, as Legacy mode BIOS support was removed in all Intel CPUs made in 2020 or after (I found a tech note for this--let me know if you want the link and I'll find it again).

However, Intel being Intel, there is a way but it's ridiculous and not immediately useful.

Reproducing my post to r/VFIO last night: https://www.reddit.com/r/VFIO/comments/1c98ww0/i_dumped_the_12500t_igpu_ihd_770_vbios_as_a/

I presently have a text file debug mode dump of the VBIOS from my i5-12500T. In the intel-gpu-tools package is a tool caled intel_vbt_decode, and when pointed at the /sys/kernel/debug/dri/0/i915_vbt "file," it works.

I think someone who has more skills with a hex editor than me and more familiarity with these kinds of files might be able to get a usable hex vbios rom file out of this, so I wanted to share. :)

These are the commands:
intel_vbt_decode --file=/sys/kernel/debug/dri/0/i915_vbt --hexdump (this actually worked for me)

intel_vbt_decode --file=/sys/kernel/debug/dri/0/i915_opregion (if you try to dump this, it says the "VBT signature" is missing.

It dumps a massive text file that's a mix of human readable debug info and the actual hex code.

In that same /0/ "directory," there's a very interesting "gpu-info" ... file ... that you can dump just using cat. It includes a few interesting bits that make the difficulty dumping the rom with the normal methods a bit clearer. The vbt_firmware line is empty. I wonder if that's what the usual dump technique using cat and echo tries to read off of.

Code:
GuC firmware: i915/tgl_guc_70.bin
GuC firmware wanted: i915/tgl_guc_70.bin
HuC firmware: i915/tgl_huc.bin
HuC firmware wanted: i915/tgl_huc.bin
i915.vbt_firmware=(null)
i915.guc_firmware_path=(null)
i915.huc_firmware_path=(null)
i915.dmc_firmware_path=(null)
i915.gsc_firmware_path=(null)

Little hint: You can just do cat sys/kernel/debug/dri/0/i915_vbt > vbt.dump
I first thought, I made the iGPU passthrough successfully working into my VM by dumping the vbt and then loading it in my VM via a kernel parameter on the guest (i915.vbt_firmware=vbt.dump). However, this was not the case.
However: I have successfully forwarded my iGPU (NUC10i3FNH) of my i3-10110U (CometLake-U GT2).

After preparing proxmox for PCI forwarding (https://3os.org/infrastructure/prox...oxmox-configuration-for-igpu-full-passthrough) with these kernel parameters:
Code:
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 vfio-pci.ids=8086:9b41 i915.enable_guc=0

where 8086:9b41 is the vendor:device ID of the iGPU (Get it vialspci -n).

My VM is using the i440fx machine type and OVMF as "Bios". Q35 gave me problems. I also had to disable the "Display" option, otherwise there was no output via HDMI <- This was the main reason, why I always thought, passthrough failed. The iGPU simply didn't take over and the VM continued outputting via the Proxmox VNC Display. Doh
1720887839660.png

Once I booted the VM with these settings and also making sure, that I had the firmware-linux-nonfree package installed, I finally had output on my screen via HDMI!
 
Last edited:
Thanks for this guide. I'm going to have to experiment with it. I'm using SR-IOV now, so I'm not trying to pass the whole iGPU anymore.

To follow up a bit:

Little hint: You can just do cat sys/kernel/debug/dri/0/i915_vbt > vbt.dump

This is exactly how it should work according to the wiki, but this always failed with a permission denied error or a zero byte file on my HP EliteMini G9 600. I assume HP has done something undocumented to lock their BIOS images down. I'm sure there are other boxes that are similarly restricted, so I don't want people thinking they're doing something wrong if this doesn't work.

OTOH, not being able to do it easily got me going down he SR-IOV road, which is more of what I wanted in the end.
 

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!