I encountered a Code 43 error with the graphics driver in my Windows 11 virtual machine when performing PCI passthrough of the integrated graphics (Intel UHD Graphics, PCI ID `0000:00:02.0`) on a Proxmox VE host equipped with an Intel Alder Lake-N N100 CPU.
How to Check Error Logs and Identify the Root Cause:
By running the `dmesg` command on the Proxmox VE host's command line, I discovered the root cause of the Code 43 error: an invalid VBIOS ROM signature.
Here are the relevant `dmesg` log snippets:
Code:
root@node-home ~
➤ dmesg | grep -i vfio
[ 4.075646] VFIO - User Level meta-driver version: 0.3
[ 4.088924] vfio-pci 0000:00:02.0: vgaarb: deactivate vga console
[ 4.088930] vfio-pci 0000:00:02.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[ 4.089153] vfio_pci: add [8086:46d1[ffffffff:ffffffff]] class 0x000000/00000000
[ 120.442320] vfio-pci 0000:00:02.0: resetting
[ 120.546424] vfio-pci 0000:00:02.0: reset done
[ 122.333493] vfio-pci 0000:00:02.0: resetting
[ 122.434371] vfio-pci 0000:00:02.0: reset done
[ 122.448472] vfio-pci 0000:00:02.0: resetting
[ 122.554368] vfio-pci 0000:00:02.0: reset done
[ 123.660367] vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xcffa
root@node-home ~
➤ dmesg | grep -i iommu
[ 0.210129] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.455482] pci 0000:00:02.0: DMAR: Skip IOMMU disabling for graphics
[ 0.509108] iommu: Default domain type: Translated
[ 0.509108] iommu: DMA domain TLB invalidation policy: lazy mode
[ 0.565099] pci 0000:00:02.0: Adding to iommu group 0
# ... (Other IOMMU Groups) ...
The error message `Invalid PCI ROM header signature: expecting 0xaa55, got 0xcffa` clearly indicates that the graphics card's VBIOS ROM signature is not compliant, preventing QEMU from loading it correctly.
Solution: Provide a Compatible VBIOS ROM File and Configure the VM Correctly
The key to resolving Code 43 is to replace the problematic onboard VBIOS by providing the virtual machine with a verified, compatible VBIOS ROM file and configuring it correctly.
1. Obtain the VBIOS ROM File:
I used a custom ROM file for Intel Alder Lake-N, named `12-n100-q10.rom`. You can download it from the following link:
`
https://github.com/lixiaoliu666/intel6-14rom/releases/download/v2.0-20250622-100999/12-n100-q10.rom`
2. Place the ROM File:
Upload the downloaded `12-n100-q10.rom` file to the **`/usr/share/kvm/`** directory on your Proxmox VE host.
3. Virtual Machine Configuration (`103`):
Below is my successful virtual machine configuration (`/etc/pve/qemu-server/103.conf`) that resolved the Code 43 issue. Please adjust it according to your VM ID and PCI device ID. The critical parts are the `romfile` parameter in `hostpci0`, as well as the `args` and `cpu: host,hidden=1` parameters:
Code:
agent: 1
args: -set device.hostpci0.bus=pcie.0 -set device.hostpci0.addr=0x02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on
balloon: 4096
bios: ovmf
boot: order=scsi0;ide2;ide0;net0
cores: 3
cpu: host,hidden=1
efidisk0: local-lvm:vm-YOUR_VM_ID-disk-0,efitype=4m,pre-enrolled-keys=1,size=4M
hostpci0: 0000:00:02.0,romfile=12-n100-q10.rom,pcie=1,x-vga=1
ide0: local:iso/virtio-win-0.1.285.iso,media=cdrom,size=771138K
ide2: local:iso/win11-iot-GENERIC_WINDOWS_IMAGE.iso,media=cdrom,size=7146500K
machine: pc-q35-10.0+pve1
memory: 8192
meta: creation-qemu=10.0.2,ctime=GENERIC_TIMESTAMP
name: win11-iot
net0: virtio=XX:XX:XX:XX:XX:XX,bridge=vmbr0,firewall=1
numa: 0
ostype: win11
scsi0: local-lvm:vm-YOUR_VM_ID-disk-1,discard=on,iothread=1,size=150G,ssd=1
scsihw: virtio-scsi-single
smbios1: uuid=GENERIC_UUID
sockets: 1
tpmstate0: local-lvm:vm-YOUR_VM_ID-disk-2,size=4M,version=v2.0
vga: none
vmgenid: GENERIC_VM_GEN_ID
With the above configuration, the virtual machine now boots normally, the Intel UHD Graphics card in Windows 11 loads and functions correctly, and the Code 43 error is completely resolved