If you would like to pass through your gpu on windows, please use this guide first: https://mathiashueber.com/passthrough-windows-11-vm-ubuntu-22-04/
Enable BIOS features
To use PCIe Passthrough, you will need a compatible motherboard and CPU with support for iommu. Look up your motherboard manual on how to enable these features, but they are commonly named
Get Some Information
To pass through a card, you'll need to know some value pertaining to the card itself: The Device IDs, and BDF IDs. The following command will give a list of relevant devices to use in the next steps.
lspci -nn | grep "VGA\|Audio"
An example output might look like this:
26:00.0 VGA compatible controller : Advanced Micro Devices, Inc. [AMD/ATI] Curacao XT / Trinidad XT [Radeon R7 370 / R9 270X/370X] [1002:6810]
26:00.1 Audio device : Advanced Micro Devices, Inc. [AMD/ATI] Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000 Series] [1002:aab0]
The first value (
26:00.0) is the BDF ID, and the last (
1002:6810) is the Device ID. Cards with a built-in audio controller have to be passed together, so note the IDs for both subdevices.
Load the vfio-pci module
vfio-pci module is not included in the kernel on all systems, you may need for load it as part of initramfs. Look up your distro's documentation on how to do this.
Add Kernel Flags
iommu kernel module is not enabled by default, but you can enable it on boot by passing the following flags to the kernel. Replace the Device IDs with your corresponding card.
iommu=pt amd_iommu=on vfio-pci.ids=1002:66af,1002:ab20
iommu=pt intel_iommu=on vfio-pci.ids=1002:66af,1002:ab20
To do this permanently, you can add it to your bootloader. If you're using GRUB, for example, edit
/etc/default/grub and add the previous lines to the
GRUB_CMDLINE_LINUX_DEFAULT section, then run
sudo update-grub (or
sudo grub-mkconfig on some systems) and reboot.
Attach card to QEMU
You will need to attach the cards using the BDF IDs for the audio and video controller. The following example shows the config for a card with two devices. The romfile parameter is optional.
Note: You may need to run
basic.sh as sudo for the card to work.
-vga none \
-device pcie-root-port,bus=pcie.0,multifunction=on,port=1,chassis=1,id=port.1 \
-device vfio-pci,host=26:00.0,bus=port.1,multifunction=on,romfile=/path/to/card.rom \
-device vfio-pci,host=26:00.1,bus=port.1 \