MacOS GPU passthrough [W5500] works, but without display output

daemontus

New Member
Jun 14, 2023
4
1
3
Hi! I realise that this is not a "hackintosh support" forum, but I don't think my issue is necessarily MacOS related, so I might as well try to ask here too.

Basically, I have a Radeon W5500 that is passed through to a MacOS VM. The MacOS VM recognises the GPU (it is shown in the device list, the Radeon kexts are loaded, and it is also listed by system_profile and any other method that I could find). However, if I try to actually use the GPU to output any signal (i.e. I disable the virtual display), I only get to the bootloader (I can see and interact with the opencore bootloader just fine using the GPU). Once macOS actually starts loading, the video signal is frozen on the macOS loading screen. However, I can SSH into the VM to confirm that the OS posted successfully and that the GPU is *still recognised*, but with no active video outputs.

What I learned so far:
- The same configuration works with a linux VM without any issues (i.e. passthrough is working with full GPU acceleration).
- I can spoof the GPU device id to match RX5500 instead of W5500, but this does not seem to affect anything.
- I can try to force macOS to test all three supported framebuffers for this family of GPUs, but neither gives me any signal.
- I tried using a proper rom file.
- I tried both pcie=1 and x-vga=1 options.
- I tried multiple versions of the q35 machine.
- I tried booting without any display connected and then connecting only once the VM is booted up.

Is this something that could be related to GPU passthrough? Has anyone seen such behaviour before?

GRUB config:
Code:
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=vesafb:off video=efifb:off initcall_blacklist=sysfb_init"
#GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

VM config:
Code:
#hostpci0%3A 0000%3A57%3A00,pcie=1,romfile=w5500.rom,x-vga=1
agent: 1
args: -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -global nec-usb-xhci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -cpu Haswell-noTSX,vendor=GenuineIntel,+invtsc,+hypervisor,kvm=on,vmware-cpuid-freq=on
balloon: 0
bios: ovmf
boot: order=virtio0;net0
cores: 4
cpu: Haswell
efidisk0: local-lvm:vm-100-disk-0,efitype=4m,size=4M
hostpci0: 0000:57:00,pcie=1
machine: q35
memory: 16384
meta: creation-qemu=7.2.0,ctime=1686688870
name: macos-ventura
net0: virtio=DE:F9:AD:E9:DE:1F,bridge=vmbr0,firewall=1
numa: 0
ostype: other
scsihw: virtio-scsi-pci
smbios1: uuid=4a9bed52-ff78-41c7-8df2-d8ffec15d86a
sockets: 1
usb0: host=05ac:024f,usb3=1
usb1: host=17ef:60e5,usb3=1
vga: vmware
virtio0: local-lvm:vm-100-disk-1,cache=unsafe,discard=on,iothread=1,size=128G
vmgenid: 11726e84-c32e-42e3-bde6-d6000f26e7f8

blacklist.conf:
Code:
blacklist radeon
blacklist nouveau
blacklist nvidia
 
I'm not sure if you ever figured this out, but I'm currently stuck in the same spot. If you see this message and can provide an update that would be awesome!
 
I personally haven't progressed much, but I received some hopeful news from Pierre Blaizeau who actually got it to run.

I haven't had a chance to test his method yet because I had to keep the machine online for other users. But I'd like to experiment with it a bit more this weekend.

As such, I am posting a simplified version of the troubleshooting email that I received from Pierre. Maybe this helps anyone else (hope he doesn't mind). I will report back once I actually try to reproduce his method.
 

Attachments

I recall my issue being solved by setting the right boot flags for my gpu. My display seemed to not be working but with the 6900xt, I just needed
Code:
agdpmod=pikera
but yours will likely be different
Thanks for the suggestion @realwiseman, I did try the OpenCore boot arg of agdpmod=pikera for my macOS VM, yet the issue persists.

Additionally I tried the macOS boot arg of agdpmod=vit9696 (based on the link you shared) but that did NOT resolve the issue either.
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!