Hey people,
I just got Proxmox iGPU passthrough on my framework desktop board working after the BIOS upgrade. Not quite sure if the VBIOS changed and that was the key (but I am attaching checksum information on the used ROMS in any case).
Had LLMs help me summarize the complete state of my system and how I got there:
I am absolutely sure that not everything is needed to be set like this for it to work. But sometimes it is nice to have a really detailed description of a working system.
(If this is considered too much spam/AI Slop I will be happy to shorten/redact)
Update: There is more to it :
(Excuse the multiple edits, this was quite a journey. I briefly thought I was going insane. After playing around some more and rebooting, without changing anything, the driver stopped loaded correctly on the guest. So I kept retracing what I did before I got it into the working state.)
It turns out that it only works if you do a warm-up binding procedure on the host, where you first unbind from vfio and then rebind to amdgpu. Note that the kernel must not be blacklisted for that.
echo 0000:c8:00.0 > /sys/bus/pci/drivers/vfio-pci/unbind
echo 0000:c8:00.0 > /sys/bus/pci/drivers/amdgpu/bind
qm start <VM_Number>
It then even works again after rebooting/shutting down the guest virtual machine gracefully.
Hard stopping with qm stop <VM_Number> brings the system into an unstable state.
Trying to unbind/rebind in this unstable state leads to a crash of the host…
I will keep on reporting, for now I think I will just have a script automatically do the warmup on host boot and pray that the guest does not crash ungracefully while I am playing with it…
So here we go:
Overview
Complete setup for passing through AMD Strix Halo integrated GPU (Radeon 8050S/8060S Graphics) to a Proxmox VM with UEFI support.
Tested on:
-
Proxmox VE 9.0.11
-
Kernel:
Linux version 6.14.11-4-pve (build@proxmox) (gcc (Debian 14.2.0-19) 14.2.0, GNU ld (GNU Binutils for Debian) 2.44) #1 SMP PREEMPT_DYNAMIC PMX 6.14.11-4 (2025-10-10T08:04Z)
Prerequisites
1. Update Framework Desktop BIOS
Using the newest Framework Desktop BIOS 3.03:
# Update BIOS using fwupdmgr
fwupdmgr refresh --force
fwupdmgr get-updates
fwupdmgr update
Note: Ensure charger is attached during BIOS update and do not interrupt power during the process.
2. Configure BIOS/Firmware Settings
Access BIOS setup (F2 during boot) and configure:
Administer Secure Boot:
- Secure Boot: Disabled
Setup Utility/Advanced/:
-
iGPU Memory Configuration: Custom
-
iGPU Memory Size: 96GB
Setup Utility/Security/:
- TPM Availability: Hidden
Host Configuration
3. Enable IOMMU
# Edit /etc/kernel/cmdline
root=ZFS=rpool/ROOT/pve-1 boot=zfs quiet amd_iommu=on iommu=pt video=efifb:off
4. Configure VFIO Modules
# Create /etc/modules-load.d/vfio.conf
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
5. VBIOS Extraction
Important: VBIOS extraction requires the amdgpu driver to be loaded. Do this before creating the blacklist:
- Create VBIOS extraction tool (
vbios.c):
-
Follow steps 1-2 from the VBIOS Extraction Guide
-
This creates the
vbios.cfile and compiles it
- Extract VBIOS (while amdgpu driver is available):
gcc vbios.c -o vbios
./vbios
# This creates vbios_1002_1586.bin
- Place VBIOS file:
mv vbios_1002_1586.bin /usr/share/kvm/
6. Blacklist Host GPU Drivers
( do not blacklist amdgpu, because we need it for the warmup procedure)
# Create /etc/modprobe.d/blacklist-gpu.conf
blacklist radeon
blacklist snd_hda_intel
7. Bind GPU to VFIO
# Create /etc/modprobe.d/vfio.conf
options vfio-pci ids=1002:1586,1002:1640
softdep amdgpu pre: vfio-pci
softdep snd_hda_intel pre: vfio-pci
VM Configuration
8. Guest OS Setup
Install required packages in the guest:
# For Arch Linux (example)
sudo pacman -Syu --noconfirm linux-firmware mesa vulkan-radeon xf86-video-amdgpu
# For Ubuntu/Debian
sudo apt update && sudo apt install -y linux-firmware mesa-vulkan-drivers xserver-xorg-video-amdgpu
Force GPU driver detection in guest:
# Add to guest kernel command line (e.g., /boot/loader/entries/*.conf for systemd-boot)
options root=ZFS=rpool/ROOT/pve-1 boot=zfs quiet amdgpu.force_probe=1002:1586
9. VM Settings
Verify GPU PCI addresses:
# Find GPU devices - should show c8:00.0 (display) and c8:00.1 (audio)
lspci -nnk | grep -iE "vga|display|audio" -A3
# Look for devices with IDs 1002:1586 (display) and 1002:1640 (audio)
# Note: Ignore any "pcilib: Error reading /sys/bus/pci/devices/.../label: Operation not permitted" warnings - they are harmless
# /etc/pve/qemu-server/100.conf
agent: 1
bios: ovmf
boot: order=scsi0;ide2;net0
cores: 16
cpu: host
efidisk0: local-zfs:vm-100-disk-3,efitype=4m,pre-enrolled-keys=0,size=1M
hostpci0: 0000:c8:00.0,pcie=1,x-vga=1,romfile=vbios_1002_1586.bin
hostpci1: 0000:c8:00.1,pcie=1,romfile=AMDGopDriver.rom
machine: q35,viommu=virtio
memory: 16384
vga: none
ROM Files
10. Required ROM Files
-
VBIOS:
vbios_1002_1586.bin(17,408 bytes) -
MD5:
8f2d1e6c0a333d39117849bbfccbb1d7 -
SHA256:
35ea302fd1cf5e1f7fbbc34c37e43cccc6e5ffab8fa1f335f4d10ad1d577627d -
UEFI ROM:
AMDGopDriver.rom(92,672 bytes) -
MD5:
4c0fee922ddf6afbe4ff6d50c9af211b -
SHA256:
1c2b9dc8bd931b98e0a0097b3169bff8e00636eb6c144a86be9873ebfd6e3331
11. UEFI ROM Setup
# Download AMDGopDriver.rom
wget https://github.com/isc30/ryzen-gpu-passthrough-proxmox/raw/main/AMDGopDriver.rom -O /usr/share/kvm/AMDGopDriver.rom
12. Reboot the host and apply warmup procedure
echo 0000:c8:00.0 > /sys/bus/pci/drivers/vfio-pci/unbind
echo 0000:c8:00.0 > /sys/bus/pci/drivers/amdgpu/bind
qm start <VM_ID>
After starting the VM, proxmox binds vfio again and the driver is loaded correctly in the guest. It keeps working correctly, as long as the host is shutdown gracefully reboot or shutdown.
Warning: A cold “stop” of the VM in proxmox qm stop <VM_id> (or via GUI) leaves the system in an unstable state. After a non-graceful stop, restarting the VM leads to driver errors.
Trying to unbind and rebind the pci address completely crashed the kernel.
Also, after the first restart I did not get HDMI output, but I do not care, since I am running this machine headless for my use case.
Verification
The setup is successful when guest dmesg (on the guest) shows:
Fetched VBIOS from VFCT[drm] Loading DMUB firmware via PSP: version=0x09002E00Initialized amdgpu 3.64.0 for 0000:01:00.0 on minor 0- No PSP firmware loading errors
References
-
VM-iGPU-Passthrough – Strix Halo HomeLab (my first resource, but this was done on a non framework strix halo machine)
-
Framework Desktop BIOS 3.03 Release - Latest BIOS with widescreen support and security updates
-
VBIOS Extraction Guide - Steps 1-2 for VBIOS extraction from VFCT
-
AMD GPU Passthrough Repository - Complete guide and ROM files