HP t740 / Raven Ridge (1002:15dd): GPU passthrough works only once after host reboot – PCI reset causes host freeze

Tomblarom

Active Member
Dec 12, 2019
14
1
43
29
Hi everyone,

I'm trying to pass through the integrated Radeon Vega GPU of an HP t740 thin client to a Debian VM (as a moonlight client for sunshine server). After extensive testing, I found a workaround that allows the first successful GPU initialization, but the GPU cannot be initialized a second time without rebooting the Proxmox host.
  • HP t740, AMD Ryzen Embedded V1756B
  • Radeon Vega (Raven Ridge), PCI ID 1002:15dd, revision 82
  • GPU at 0000:04:00.0, isolated in its own IOMMU group
  • Proxmox VE 9.2.24, kernel 7.0.14-26-pve
  • pve-qemu-kvm 11.0.3-4, qemu-server 9.2.13
  • Debian 13 guest, OVMF, q35, CPU host
  • GPU bound to vfio-pci during host boot

Problem 1: PCI reset freezes the host
With the standard GPU reset methods (flr bus), starting the VM with the GPU passed through can freeze the entire Proxmox host. The host kernel previously logged:
Bash:
AMD-Vi: IOMMU ... Completion-Wait loop timed out
IOTLB_INV_TIMEOUT device=0000:04:00.0
Using pci=noats alone did not resolve the host freeze.


Workaround for the first VM start
The following combination allows the VM to boot with GPU passthrough:
Bash:
# Host kernel parameter:
pci=noats

# Disable PCI reset methods before VM start:
printf '\n' > /sys/bus/pci/devices/0000:04:00.0/reset_method

I implemented the latter using a Proxmox VM pre-start hookscript:
Bash:
#!/bin/bash
set -eu

VMID="${1:-}"
PHASE="${2:-}"

[ "$VMID" = "210" ] || exit 0
[ "$PHASE" = "pre-start" ] || exit 0

CONFIG="/etc/pve/qemu-server/${VMID}.conf"
GPU="/sys/bus/pci/devices/0000:04:00.0"

# Only apply, when Vega is present
if ! grep -Eq '^hostpci0:[[:space:]]*(0000:)?04:00\.0([,[:space:]]|$)' "$CONFIG"; then
    logger -t vega210-noreset \
      "VM 210: no Vega passthrough configured, skipping"
    exit 0
fi

# Checks
[ "$(hostname -s)" = "aribup" ]
grep -qw 'pci=noats' /proc/cmdline
[ "$(readlink -f "$GPU/driver")" = \
  "/sys/bus/pci/drivers/vfio-pci" ]

# Disable PCI-Resetmethods for Vega
printf '\n' > "$GPU/reset_method"
[ -z "$(cat "$GPU/reset_method")" ]

logger -t vega210-noreset \
  "VM 210: Vega PCI reset methods disabled"

Proxmox reports:
Bash:
failed to reset PCI device '0000:04:00.0',
but trying to continue as not all devices need a reset
Despite this warning, the guest boots successfully, amdgpu initializes, /dev/dri/renderD128 is created, and the physical DisplayPort output works. Mesa's Wayland/EGL path can also render on the actual AMD GPU.

The Debian guest requires firmware-amd-graphics.


Problem 2: GPU cannot be reinitialized
After the first successful run, both of these fail:
  1. Rebooting the Debian guest.
  2. Completely shutting down the guest and starting a new QEMU process with qm start.
The second initialization produces GPU page faults, including:
Bash:
amdgpu: no-retry page fault
amdgpu: VM_L2_PROTECTION_FAULT_STATUS: 0xFFFFFFFF
amdgpu: failed to write reg 28b4 wait reg 28c6
The guest does not complete booting, although QEMU may report status: running.

With PCI reset methods disabled, the Proxmox host remains accessible. Removing the GPU passthrough allows the VM to boot normally again.

Additional tests that did not resolve the issue
  • pci=noats without disabling PCI resets
  • d3cold_allowed=0
  • vfio-pci.disable_idle_d3=1
  • reboot: 0 (a new QEMU process still cannot reinitialize the GPU)
The host reports the GPU in D0 after guest shutdown. A full host reboot restores functionality for exactly one guest initialization. I also found a somewhat similar report for a Radeon 780M under PVE 9, where the author reports that PVE 8.4 works correctly: https://forum.proxmox.com/threads/pve-9-x-ryzen-igpu-passthrough.177030/

Questions
Is there a known hardware-specific reset limitation or quirk for Raven Ridge 1002:15dd? Could this be related to a regression in newer kernels or VFIO? Is there a safe reset/reinitialization approach that would avoid rebooting the entire host?

I'd appreciate any pointers on where to investigate next or what additional logs would be useful.
 
Hi,

this sounds like the "famous" radeon reset bug, but did you try with older kernel versions (to test for regressions). at least to me it isn't a known issue. That said, passing through (on) consumer hardware is always a bit of a gamble, especially so with integrated devices and is often subject to the mainboard firmware...
 
Thanks for suggesting an older-kernel comparison. I have now completed additional controlled tests on the HP t740, Raven Ridge GPU 1002:15dd (rev 82).

The first GPU initialization works after restarting the physical host, including hardware video decoding and physical DisplayPort output. In all the following comparisons, the first initialization worked, but a guest reboot within the same QEMU process caused reinitialization to fail:

Host kernelGuest kernelFirst initializationGuest reboot,
same QEMU process
7.0.14-26-pve6.12.113+deb13-amd64WorksFails
6.17.13-21-pve6.12.113+deb13-amd64WorksFails
6.8.12-43-pve6.12.113+deb13-amd64Works with explicit VBIOSFails
7.0.14-26-pve6.12.113+deb13-amd64Works with the identical VBIOSFails
7.0.14-26-pve7.2.11+deb13-amd64WorksFails

For the 6.8 test, automatic VBIOS discovery initially failed. I supplied the unmodified matching GPU image from this machine’s ACPI VFCT table through QEMU’s romfile option. That enabled the first initialization, but did not fix reinitialization. The identical-ROM control on 7.0 also failed after a guest reboot.

These were host-kernel comparisons with the existing Proxmox/QEMU userspace retained, not a complete downgrade to PVE 8.4. The existing reset-avoidance and power-management settings were retained for the comparisons.

I also tested several different lifecycle paths:
  • A successful clean VM shutdown followed by a fresh QEMU process: reinitialization fails.
  • Unloading and reloading amdgpu inside the guest, without restarting either the guest or QEMU: unloading succeeds, reloading fails.
  • Native host driver test with both VMs stopped: after unbinding the GPU from vfio-pci, the host’s amdgpu driver initializes it successfully. With no DRM clients, ordinary modprobe -r amdgpu succeeds. The following modprobe amdgpu hangs with the same register errors.

The last test used host kernel 7.0.14-26-pve. Its journal records one successful initialization, clean driver teardown, and then these errors during reprobe, without a second successful initialization:

Code:
amdgpu: [gfxhub0] no-retry page fault
amdgpu: VM_L2_PROTECTION_FAULT_STATUS:0xFFFFFFFF
amdgpu: failed to write reg 28b4 wait reg 28c6
amdgpu: failed to write reg 1a6f4 wait reg 1a706

The native-host test still started from the existing VFIO-at-boot configuration, with the existing reset/power settings and PSP function reserved and unbound. It therefore does not exclude every VFIO or platform-state influence, but it demonstrates that a running VM or a QEMU restart is not required to reproduce the problem.

After this test, a normal host reboot did not bring the machine back, a physical power-button restart recovered it. Ordinary host reboots had recovered the earlier guest-only failures.

I did not re-enable FLR or bus resets for these comparisons. The original reset-related host freeze and the later GPU reinitialization failures should be distinguished: disabling the problematic reset attempts keeps the guest tests from freezing the host, but does not provide a working GPU reset mechanism.

The installed HP BIOS is M42 v01.23, dated 2026-04-27, matching the version currently listed in HP’s board-8522 BIOS catalog. This does not rule out a firmware limitation.

One relevant source-code detail is that soc15_asic_reset() in Linux explicitly limits the Raven/Raven2 reset path, apart from a specific suspend-abort case. Also, vendor-reset’s device database does not include Raven Ridge 1002:15dd; I have not tried applying a discrete-Vega reset sequence to this APU.

These results make a regression confined to the tested 7.x host kernels less likely, and narrow the problem beyond VM lifecycle handling alone. They do not yet establish whether the remaining limitation is in the driver, platform firmware, or hardware.

Is there a documented Raven Ridge reinitialization/reset sequence, or an AMD-supported way to diagnose the device state after amdgpu teardown? I can provide selected kernel-log excerpts and version details for further investigation.