[SOLVED] Issues with Intel ARC A770M GPU Passthrough on NUC12SNKi72 (vfio-pci not ready after FLR or bus reset)

I did dump my own vbios and try that. I will try again on another VM build.

It does work fine on Bazzite without issue, so definitely a weird Windows driver/firmware problem.
 
Have an update for you. Decided to use the firmware tool and go back to the last WHQL on the previous SOC firmware version (DG02_1.3257. Current version is DG02_1.3266 and has been since October 2024.) When windows detected the GPU and installed the built-in driver, I had a Code 43. I installed 101.6078 WHQL driver and it complained that it was older than what was installed, but it worked!

This is on a fresh, unmodified Windows 11 25H2. I did modify the Windows Update policy to disable driver updates. I have not dumped the vBIOS or done any custom cli commands, but am running the hookscript on the vm config. Just added the GPU as PCIe devices and it is working. Rebooting and everything without issue.

Obviously newer drivers have worked, so I think I am going to keep updating to see which version breaks everything. I went back to September 2025 WHQL and had issues, but that was before I rolled firmware back to September 2024.

Screenshot 2026-02-05 102723.pngScreenshot 2026-02-05 102911.png
 
Last edited:
  • Like
Reactions: UmbraAtrox
Thanks for the update ❤️. I'm still on fresh Vm with one driver back, still crashing in random intervals. Gotta try going back further. Quick Q: did you downgrade flash the card in a vm with passthough or baremetal? (Guess it shouldn't make a difference when vbios dumped the same checksum, but curious.) And, do you use a dummy plug? If yes hdmi or dp?
 
Last edited:
I downgraded on baremetal and am currently using an HDMI dummy plug. I know the HDMI interface on Arc is odd and emulated or something, so I do want to try getting a native DP dummy plug.

I have tried updating to newer drivers, but would keep getting a code 43, but a simple rollback would fix it. I have had no crashing issues to speak of. I am doing this on a Dell T7920 workstation with dual CPUs and no REBAR support unfortunately.
 
So turns out "stuck in D3" was my PSU kicking the bucket. Haven't dared to update windows drivers past 32.0.101.8331 or upgrade card firmware, guess that's how it's going to be for a while.

Dunno if it helps someone: i've changed my hookscript to enable AI stuff in lxc and keep on demand passthrough. Ditched the whole blacklisting (blacklist.conf & vfio.conf) and using xe driver on host (experimental on Alchemist?) (grub cmdline "xe.force_probe=56a1 i915.force_probe=!56a1").
Lxc <-> VM back and forth seems to work pretty flawless now with passed vbios to VM. Giving the card back to xe driver rather than leaving it floating in an unreset state after VM shutdown also seems to do something because it gets rid of occasional artifacing on subsequent VM starts.

(Haven't figured yet how to reattach to running lxc when VM releases the gpu without restarting lxc. Have to shutdown container before shutting down VM else host creates new /dev/dri nodes, but that's a quest for another day/thread i guess)

Current hooksript:
(maybe wait until someone who actually knows what they're doing confirms it's fine before using. Works for me though)
Code:
#!/bin/bash

# Arguments from Proxmox: $1 = VMID, $2 = phase (pre-start, post-start, pre-stop, post-stop)
VMID=$1
PHASE=$2

# PCI addresses from lspci
GPU="0000:03:00.0"  # VGA PCI address
AUDIO="0000:04:00.0"  # Audio PCI address
GPU_ID="8086 56a1"  # Vendor:Device for GPU
AUDIO_ID="8086 4f90"  # For audio
HOST_VGA_DRIVER="xe"
HOST_AUDIO_DRIVER="snd_hda_intel"

if [ "$PHASE" = "pre-start" ]; then
    # Before VM start: Detach from host drivers, bind to VFIO
    echo "Detaching GPU $GPU and audio $AUDIO from host drivers..."

    # Unbind GPU and audio if bound
    echo "$GPU" > /sys/bus/pci/devices/"$GPU"/driver/unbind 2>/dev/null
    echo "$AUDIO" > /sys/bus/pci/devices/"$AUDIO"/driver/unbind 2>/dev/null

    # Bind to VFIO
    echo "$GPU_ID" > /sys/bus/pci/drivers/vfio-pci/new_id 2>/dev/null
    echo "$AUDIO_ID" > /sys/bus/pci/drivers/vfio-pci/new_id 2>/dev/null

    echo "GPU bound to VFIO for VM $VMID."
    echo "Arc hook: Disabling reset methods for $GPU and $AUDIO"
    echo > /sys/bus/pci/devices/$GPU/reset_method
    echo > /sys/bus/pci/devices/$AUDIO/reset_method
fi

if [ "$PHASE" = "post-stop" ]; then
    # After VM shutdown: Unbind from VFIO, rebind to host
    echo "Rebinding GPU $GPU and audio $AUDIO to host drivers..."

    # Unbind from VFIO
    echo "$GPU" > /sys/bus/pci/drivers/vfio-pci/unbind 2>/dev/null
    echo "$AUDIO" > /sys/bus/pci/drivers/vfio-pci/unbind 2>/dev/null

    # Remove IDs from VFIO (optional?)
    echo "$GPU_ID" > /sys/bus/pci/drivers/vfio-pci/remove_id 2>/dev/null
    echo "$AUDIO_ID" > /sys/bus/pci/drivers/vfio-pci/remove_id 2>/dev/null

    # Remove devices and rescan PCI bus (Turns out it didn't need those)
    #echo 1 > /sys/bus/pci/devices/"$GPU"/remove 2>/dev/null
    #echo 1 > /sys/bus/pci/devices/"$AUDIO"/remove 2>/dev/null
    #echo 1 > /sys/bus/pci/rescan

    # Rebind to host drivers
    echo "$GPU" > /sys/bus/pci/drivers/"$HOST_VGA_DRIVER"/bind 2>/dev/null
    echo "$AUDIO" > /sys/bus/pci/drivers/"$HOST_AUDIO_DRIVER"/bind 2>/dev/null

    echo "GPU rebound to host for VM $VMID."
fi