Strix Point (890M) iGPU passthrough on Proxmox - can't get video output working

Hi

I have a Minisforum AI X1 PRO.
My goal is to have a Ubuntu VM running on top of Proxmox with iGPU passthrough and workig video output from the VM.

Is there anyone out there that got iGPU working on Strix Point including video output? All the success stories I have found so far do this for AI and don’t need video output. I have that working too.

current state of my setup:

  • proxmox 9.0.9 is up and running,
  • Kubuntu-VM is running and sees the 890M. However as soon as I remove the primary display adapter and make the 890M the primary GPU my screen (HDMI) remains black. The VM boots up though and I can ping it.

I have followed this guide. Here is my VM-config:

root@gateway:~# cat /etc/pve/qemu-server/100.conf 
agent: 1
balloon: 8192
bios: ovmf
boot: order=scsi0;ide2;net0
cores: 4
cpu: host
efidisk0: local-lvm:vm-100-disk-0,efitype=4m,pre-enrolled-keys=1,size=4M
hostpci0: 0000:c5:00.0,pcie=1,romfile=vbios_ryzen-ai-9-hx-370_strix-point.bin,x-vga=1
hostpci1: 0000:c5:00.1,pcie=1,romfile=AMDGopDriver.rom
ide2: none,media=cdrom
machine: q35
memory: 16384
meta: creation-qemu=10.0.2,ctime=1757711069
name: test-igpu
net0: virtio=BC:24:11:00:85:5D,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: local-lvm:vm-100-disk-1,iothread=1,size=32G,ssd=1
scsihw: virtio-scsi-single
smbios1: uuid=cf2e806a-26b0-4510-bde3-64904dbeae24
sockets: 1
usb0: host=3-1
usb1: host=3-2
usb2: host=3-4
usb3: host=7-1
vga: none
vmgenid: e11c3cba-1b52-463f-b46c-80d93c625020
root@gateway:~# 

Any help is appreciated. Thank you.

I have some progress.

I had to extract my own AMDGopDriver form the BIOS using UBU.

Further after a Proxmox reboot I have to hard-reset the iGPU using

echo "1" > /sys/bus/pci/devices/0000\:c5\:00.0/remove
echo "1" > /sys/bus/pci/devices/0000\:c5\:00.1/remove

echo "1" > /sys/bus/pci/rescan

The first VM start after this has working video out. Unfortunately this does not survive VM reboot- and/or start/stop-cycles.

Right now I’m trying to install gnif’s vendor-reset to test with that. Unfortunately currently I’m blocked - See here.

Gnif’s vendor reset unfortunately does not support this iGPU.

At this point I’m out of ideas. If someone has iGPU passthrough on a Strix-Point APU with video output working reliably please let me know.

Can you test Ubuntu 24.04? I dont have a 890M, but a 780M and Ubuntu VM with newest Proxmox is working fine most of the times.

 ⚡ root@abc  ~  cat /etc/pve/qemu-server/200.conf
agent: 1
balloon: 0
bios: ovmf
boot: order=scsi0;net0
cores: 8
cpu: host
efidisk0: local-zfs:vm-200-disk-0,efitype=4m,pre-enrolled-keys=1,size=1M
hostpci0: 0000:c4:00.0,pcie=1,x-vga=1
hostpci1: 0000:c4:00.1,pcie=1
machine: q35
memory: 16384
meta: creation-qemu=9.2.0,ctime=xxxxxxxx
name: UBUNTU24
net0: virtio=BX:24:XX:XX:XX:XX,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
parent: Working
scsi0: local-zfs:vm-200-disk-1,cache=writeback,discard=on,iothread=1,size=64G,ssd=1
scsihw: virtio-scsi-single
smbios1: uuid=d6xxxxa1-cxxx-4xx2-9xx3-ecxxxxxx9cxx
sockets: 1
usb0: host=3346:1009
usb1: host=046d:c52b
vga: none
vmgenid: xxxxxxx2b-xxx7-4xxx-xxxx-xxxxxxxxx

Install Ubuntu without passthrough, install the amdgpu driver dkms module directly from amd website (try without passthrough, if it install fine, otherwise you need to passthrough the gpu but not as primary device, use the proxmox gui to install)
Make sure you use OMVF and Q35 latest. CPU Type Host. For Linux I dont need any VBIOS or AMDGOP efi laoded.
What you can also try is different combination of pcie devices. So of course always the gpu, rombar, pcie checked. Make sure to disable the proxmox display options, and set the gpu as primary gpu (you can test this on or off). And then different pcie combination of gpu, gpu audio, audio coprocessor and ccp/psp module. Try different combination of this pcie passthrough (for example gpu + gpu audio, or gpu+ coprorcessor+psp, or all of them) For me, my PC crashes more often if I pass through the gpu audio device, only GPU is working for me most of the times.

Also yes vendor reset is not working, you can add you gpu id, but this will probably not fix anything as the reset methods vendor-reset provides are for older gpus.

Also I disabled secure boot on host and vm, dunno if that helps

Hi!

Any progress with this?

I am now using the same mini PC with a win10 guest running proxmox 9.

Basically everything is working great aside from the reset / shutdown issue mentioned above.

I’m going to hammer at it for a while as this is replacing my primary wotkstation for at least a couple of years.

I have not really tried anything too drastic to resolve the reset / shutdown issue as I just got it up an running.

So far I am passing through just the GPU and audio controller and had to use my own VBIOS and GOP.

For what its worth initially the plan was to roll my own and just run vanilla debian (13). It woudnt work, same vbios and GOP and as soon as video output popped on (which did), it was garbled. Funny thing is the tiancore bios would show fine tho.

Anyways, if anyone makes any progress on this, then do let us know. I’ll be sure to post if I come up with anything myself.

I’ve made a tiny bit of progress, although this won’t be the final solution. In windows at least, I am using that and reset bug fix which disables and re-enables the GPU before shutdown and startup. Thanks to this restarts of windows work fine, although a bit delayed. Shutdowns still don’t work well. When the os comes back up there are glitches on the display and its unusable.

So I got this working fully.

a) Restarts (eg: VM stays running, OS reboots) - As mentioned above, use devcon to disable / enable the GPU on reboot.

More detail here:

They are talking about 780M but it applies to my 890M.

b) Shutdowns - So he commands listed by @Steve087 (Thanks!) are what did it for me.

echo "1" > /sys/bus/pci/devices/0000\:c5\:00.0/remove
echo "1" > /sys/bus/pci/devices/0000\:c5\:00.1/remove
echo "1" > /sys/bus/pci/rescan

Running that AFTER the VM has come down will do 2 things… First of all, your GPU should be handed back to Proxmox. It is in my case, 100%… I see my console login prompt.

Not only that, when you start the VM up again, it will come up with the GPU working. With just the reset bug fix for me it would come up half garbled, strange white blocks all over the screen. Unusable.


So its working 100% for me now. I can reboot, shutdown, start back up and hand my GPU back to Proxmox as needed.

I bet there are edge cases, but for the 15 minutes of testing I just did… Works every time.

BTW, this is the snippet that chatgpt generated for me:

cat >/var/lib/vz/snippets/vm100-hooks.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

vmid="${1:-}"
phase="${2:-}"

# Proxmox calls hook scripts as: script <vmid> <phase>
# phases: pre-start, post-start, pre-stop, post-stop

# Only act for VM 100
[[ "$vmid" == "100" ]] || exit 0

log(){ echo "[hook:$vmid:$phase] $*"; }

case "$phase" in
  post-stop)
    log "Removing PCI functions and rescanning PCI bus"
    for fn in 0 1; do
      path="/sys/bus/pci/devices/0000:c5:00.$fn/remove"
      if [[ -e "$path" ]]; then
        printf 1 > "$path" || true
      fi
    done
    if [[ -e /sys/bus/pci/rescan ]]; then
      printf 1 > /sys/bus/pci/rescan || true
    fi
    ;;
esac
EOF

chmod +x /var/lib/vz/snippets/vm100-hooks.sh

And I have it attached to my VM like so:

hookscript: local:snippets/vm100-hooks.sh

Oh and I am unsure if it matters but maybe it does, I have blacklisted most of the snd related modules… I know the .1 device is the hdmi sound bits… Anyways here is my list of blacklists just for reference. They may or may not matter:

root@PROXMOX:/etc/modprobe.d# cat blacklist-*
blacklist btusb
blacklist btrtl
blacklist btintel
blacklist btbcm
blacklist btmtk
blacklist bluetooth
blacklist intel_rapl_msr
blacklist intel_rapl_common
blacklist snd_hda_codec_realtek
blacklist snd_hda_codec_generic
blacklist snd_hda_scodec_component
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_intel_dspcfg
blacklist snd_intel_sdw_acpi
blacklist snd_hda_codec
blacklist snd_hda_core
blacklist snd_usb_audio
blacklist snd_usbmidi_lib
blacklist snd_ump
blacklist snd_rawmidi
blacklist snd_hwdep
blacklist snd_seq_device
blacklist snd_pcm
blacklist snd_timer
blacklist snd
blacklist soundcore
blacklist mt7925e
blacklist mt7925_common
blacklist mt792x_lib
blacklist mt76_connac_lib
blacklist mt76
blacklist mac80211
blacklist cfg80211
blacklist libarc4

Enjoy!

1 Like