ryzen-7000-series-proxmox
ryzen-7000-series-proxmox copied to clipboard
Passthrough of iGPU Audio Controller May Prevent VM from Rebooting
My hardware configuration is as follows:
Minisforum MS-A1 AMD Ryzen 7 8700G with Radeon 780M Graphics.
Initially, following common advice found online, I passed through both the iGPU (0000:68:00.0) and its audio controller (0000:68:00.1) to the virtual machine via PCI passthrough. Additionally, I configured the RadeonResetBugFix within the VM. However, I still encountered an issue where the VM could not reboot:
- The first boot of the VM worked perfectly fine.
- Once the VM was shut down (including during a restart), it would fail to start again (with a timeout waiting on systemd).
- Even after the VM was powered off, the memory allocated to it would not be released and remained occupied, even though Proxmox VE (PVE) indicated that the VM was already powered off.
However, to my surprise today, when I removed the passthrough for the iGPU's audio controller (0000:68:00.1), the issue was completely resolved. The VM can now boot and shut down normally, and the memory is properly freed afterward. Therefore, I am sharing my experience here in hopes of helping others who may encounter the same problem.
P.s. It is important to note that if the system is booted via UEFI, both the vbios and AMDGopDriver need to be added to the PCI device. After removing the audio controller, only the iGPU allows the addition of a ROM file. Therefore, it is necessary to merge the vbios and AMDGopDriver into a single ROM file and mount it to the iGPU.
"Therefore, it is necessary to merge the vbios and AMDGopDriver into a single ROM file and mount it to the iGPU." How do we do this?
"Therefore, it is necessary to merge the vbios and AMDGopDriver into a single ROM file and mount it to the iGPU." How do we do this?
I’m using a tool developed by a Bilibili creator, and here’s the download link for it. (https://diyforfun.cn/1058.html) This tool can merge AMDGopDriver.efi and vbios.bin into a single file.
Thanks will give it a try, did you still use the Radeon Reset service? or any other vendor-reset fix?
Thanks will give it a try, did you still use the Radeon Reset service? or any other vendor-reset fix?
I use https://github.com/inga-lovinde/RadeonResetBugFix
Yeah i ain't running this 😆 without a completely isolated sandbox
https://www.virustotal.com/gui/file/7e543a1b39f672c44fb022d89e9a5052c374a211aeb022849382dd2b77bf2649
https://www.hybrid-analysis.com/sample/7e543a1b39f672c44fb022d89e9a5052c374a211aeb022849382dd2b77bf2649
EDIT: ok so i ran it in a sandboxed enviroment and to be fair it did work, without passing through my audio controller and after rebooting 2 times the AMD reset bug didn't happen. I'm now going to try it without the Radeon Reset service and with and without the vendor-reset kernel module (i'm on arch)
EDIT2: Doesn't work without the Radeon Reset service and without vendor-reset, now going to try the vendor-reset with updated dev id's
EDIT3: Doesn't work with vendor-reset set to NAVI10, possible it may work with other modes but most other iGPU's need to be NAVI10, so using RadeonResetBugFix works, i'm specifically using this fork of it since it reduces the delays massively https://github.com/yegor-usoltsev/RadeonResetBugFix/releases
ok, solved that problem without combining any files I think:
I found in an old thread on the proxmox forum that someone passed all things related to audio to his win11 to make passthrough work at all for him at that time and I just tried that (even if that was nod needed before on my machine):
root@k8plus:~# lspci -nn | grep -e 'Audio' c6:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Rembrandt Radeon High Definition Audio Controller [1002:1640] c6:00.5 Multimedia controller [0480]: Advanced Micro Devices, Inc. [AMD] ACP/ACP3X/ACP6x Audio Coprocessor [1022:15e2] (rev 63) c6:00.6 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Family 17h/19h HD Audio Controller [1022:15e3]
The hostpci0 & 1 were there before, I just neeed to add the hostpci 2 & 3 and it just worked. I also use as machine: pc-q35-9.2+pve1,viommu=virtio
hostpci0: 0000:c6:00.0,pcie=1,romfile=vbios_7xxx.bin,x-vga=1
hostpci1: 0000:c6:00.1,pcie=1,romfile=AMDGopDriver.rom
hostpci2: 0000:c6:00.5,pcie=1
hostpci3: 0000:c6:00.6,pcie=1
did you have the reset problem?
ok, solved that problem without combining any files I think:
I found in an old thread on the proxmox forum that someone passed all things related to audio to his win11 to make passthrough work at all for him at that time and I just tried that (even if that was nod needed before on my machine):
root@k8plus:~# lspci -nn | grep -e 'Audio' c6:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Rembrandt Radeon High Definition Audio Controller [1002:1640] c6:00.5 Multimedia controller [0480]: Advanced Micro Devices, Inc. [AMD] ACP/ACP3X/ACP6x Audio Coprocessor [1022:15e2] (rev 63) c6:00.6 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Family 17h/19h HD Audio Controller [1022:15e3]
The hostpci0 & 1 were there before, I just neeed to add the hostpci 2 & 3 and it just worked. I also use as machine: pc-q35-9.2+pve1,viommu=virtio
hostpci0: 0000:c6:00.0,pcie=1,romfile=vbios_7xxx.bin,x-vga=1hostpci1: 0000:c6:00.1,pcie=1,romfile=AMDGopDriver.romhostpci2: 0000:c6:00.5,pcie=1hostpci3: 0000:c6:00.6,pcie=1
Did you have to install the RadeonResetBugFixService.exe in the VM for your solution?
If you want to not use VMs anymore and to use LXCs that dont hang and block with thoose kind of pass-throughs, feel free to checkout my answer here: https://github.com/isc30/ryzen-gpu-passthrough-proxmox/issues/139#issuecomment-3508645552
https://github.com/jammsen/proxmox-setup-scripts - 😎