The only issue I had was the nVidia Windows driver throwing up Code 43. This was my approach to fixing it:
Standard BIOS settings required for PCIe passthrough:
On the Asus ProArt X670E, passthrough only worked with Resize BAR disabled. On the X870E, it works with Resize BAR enabled.
Initial Problem
My problem was this:
While the Proxmox host didn't touch the GPU, it was binding to the GPU's integrated audio interface. While the guest could output video using the GPU, Windows Device Manager reported that the driver was stopped with Code 43.
1)
I tried to force VFIO to reserve the GPU and the integrated audio device early by adding
This did not change anything. I also suspect this is unnecessary. but I'm mentioning it here to document my thought process.
2)
Similar to how nVidia drivers are blacklsited, I then blacklisted the audio drivers:
After a reboot
The Proxmox host was no longer initializing the GPUs integrated audio device, but it still didn't work.
3)
The last step was to explicitly pass through BOTH the GPU and its integrated audio device to the guest. Up until this point I was only passing through the GPU, which had worked on the Asus ProArt X670E. I was not able to specify the full PCIe address for both devices using the Proxmox web UI, so I edited the guest's conf file:
A reboot later and this worked correctly. No ROM files required.
Standard BIOS settings required for PCIe passthrough:
« Advanced « CPU Configuration « SVM Mode | Enabled |
« Advanced « AMD CBS « IOMMU | Enabled |
« Advanced « PCI Subsystem Settings « SR-IOV Support | Enabled |
« Advanced « PCI Subsystem Settings « Resize BAR Support | Enabled |
On the Asus ProArt X670E, passthrough only worked with Resize BAR disabled. On the X870E, it works with Resize BAR enabled.
Initial Problem
My problem was this:
Bash:
lspci -nnk -d 10de:22bb
[ 4.481006] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card1/input12
[ 4.481170] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card1/input13
[ 4.481288] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card1/input14
[ 4.481473] input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card1/input15
While the Proxmox host didn't touch the GPU, it was binding to the GPU's integrated audio interface. While the guest could output video using the GPU, Windows Device Manager reported that the driver was stopped with Code 43.
1)
I tried to force VFIO to reserve the GPU and the integrated audio device early by adding
vfio-pci.ids=10de:2704,10de:22bb
to grub:/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt vfio-pci.ids=10de:2704,10de:22bb"
This did not change anything. I also suspect this is unnecessary. but I'm mentioning it here to document my thought process.
2)
Similar to how nVidia drivers are blacklsited, I then blacklisted the audio drivers:
/etc/modprobe.d/blacklist-hda.conf
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
update-initramfs -u -k all
After a reboot
lspci
now gave me this:
Bash:
lspci -nnk -d 10de:22bb
03:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:22bb] (rev a1)
Subsystem: ASUSTeK Computer Inc. Device [1043:8900]
Kernel driver in use: vfio-pci
Kernel modules: snd_hda_intel
The Proxmox host was no longer initializing the GPUs integrated audio device, but it still didn't work.
3)
The last step was to explicitly pass through BOTH the GPU and its integrated audio device to the guest. Up until this point I was only passing through the GPU, which had worked on the Asus ProArt X670E. I was not able to specify the full PCIe address for both devices using the Proxmox web UI, so I edited the guest's conf file:
/etc/pve/qemu-server/{vmid}.conf
Note it's using the full PCIe address (includes the .0 and .1). Includinghostpci0: 0000:03:00.0,pcie=1,x-vga=1
hostpci1: 0000:03:00.1,pcie=1
pcie=1
is also important, as that passes the card through as a PCIe device rather than a legacy PCI device.A reboot later and this worked correctly. No ROM files required.
Last edited: