Sapphire RX 580 Nitro+ SE OSX passthrough - Black screen


Recommended Posts

Hi Guys,

So I am a new Unraid user and successfully created a Big Sur VM with the help of Macinabox.
It works with VNC, but when I try to set my gpu ( https://www.sapphiretech.com/en/consumer/nitro-rx-580-8g-g5-se ) and switch input source on my monitor then I get a black screen.

I tried it with and without rom ( https://www.techpowerup.com/vgabios/197894/sapphire-rx580-8192-171107 ) but same error.
I also selected the sound card inside it and edited my xml manually as suggested in Spaceinvader One - Advanced GPU passthrough techniques on Unraid video. So multifunction is turned on. Bus ans slot is the same, gpu is function 0 and sound card is function 1.

UEFI boot is turned off in Unraid.

OSX SMBIOS is set to iMac 19,2 but also tried with iMacPro 1,1.

Same error in both cases.
In the BIOS I set the Intel UHD 630 gpu to be the initial gpu.

 

Any idea to make the gpu passthrough work?

 

System info
 

Model: Custom
M/B: Gigabyte Technology Co., Ltd. Z390 DESIGNARE-CF Version x.x - s/n: Default string
BIOS: American Megatrends Inc. Version F9j. Dated: 01/19/2021
CPU: Intel® Core™ i7-8700K CPU @ 3.70GHz
HVM: Enabled
IOMMU: Enabled
Cache: 384 KiB, 1536 KiB, 12 MB
Memory: 32 GiB DDR4 (max. installable capacity 64 GiB)
Network: bond0: fault-tolerance (active-backup), mtu 1500
 eth0: interface down
 eth1: 1000 Mbps, full duplex, mtu 1500
Kernel: Linux 5.10.21-Unraid x86_64
OpenSSL: 1.1.1j

 

You can see my xml below
 

<?xml version='1.0' encoding='UTF-8'?>
<domain type='kvm'>
  <name>Macinabox BigSur</name>
  <uuid>3220c0ff-52d1-4b1f-9ce1-edacb0d43ebc</uuid>
  <description>MacOS Big Sur</description>
  <metadata>
    <vmtemplate xmlns="unraid" name="Windows 10" icon="default.png" os="osx"/>
  </metadata>
  <memory unit='KiB'>17301504</memory>
  <currentMemory unit='KiB'>17301504</currentMemory>
  <memoryBacking>
    <nosharepages/>
  </memoryBacking>
  <vcpu placement='static'>12</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='0'/>
    <vcpupin vcpu='1' cpuset='6'/>
    <vcpupin vcpu='2' cpuset='1'/>
    <vcpupin vcpu='3' cpuset='7'/>
    <vcpupin vcpu='4' cpuset='2'/>
    <vcpupin vcpu='5' cpuset='8'/>
    <vcpupin vcpu='6' cpuset='3'/>
    <vcpupin vcpu='7' cpuset='9'/>
    <vcpupin vcpu='8' cpuset='4'/>
    <vcpupin vcpu='9' cpuset='10'/>
    <vcpupin vcpu='10' cpuset='5'/>
    <vcpupin vcpu='11' cpuset='11'/>
  </cputune>
  <os>
    <type arch='x86_64' machine='pc-q35-5.1'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/etc/libvirt/qemu/nvram/3220c0ff-52d1-4b1f-9ce1-edacb0d43ebc_VARS-pure-efi.fd</nvram>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough' check='none' migratable='on'>
    <topology sockets='1' dies='1' cores='6' threads='2'/>
    <cache mode='passthrough'/>
  </cpu>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/local/sbin/qemu</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='writeback'/>
      <source file='/mnt/user/domains/Macinabox BigSur/macos_disk.img'/>
      <target dev='hdc' bus='sata'/>
      <boot order='1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='2'/>
    </disk>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='1' port='0x8'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='2' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='2' port='0x9'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='pci' index='3' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='3' port='0x12'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
    </controller>
    <controller type='pci' index='4' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='4' port='0x13'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x2'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:ed:fe:fd'/>
      <source bridge='br0'/>
      <model type='virtio-net'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/isos/Sapphire.RX580.8192.170511.rom'/>
      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0' multifunction='on'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x1'/>
    </hostdev>
    <memballoon model='none'/>
  </devices>
</domain>

 

In syslinux I have the following config
 

kernel /bzimage
append initrd=/bzroot,/bzroot-gui pcie_aspm=off pcie_acs_override=downstream,multifunction vfio-pci.ids=1002:67df,1002:aaf0

 

Edited by mkaszas
Link to comment
  • 2 weeks later...

Hello,

 

Same issue.

My devices : Intel I3-8100 (CPU + IGPU for transcoding) + MSI GT730 (for VM display)

IOMMU group 0:[8086:3e1f] 00:00.0 Host bridge: Intel Corporation 8th Gen Core 4-core Desktop Processor Host Bridge/DRAM Registers [Coffee Lake S] (rev 08)

IOMMU group 1:[8086:1901] 00:01.0 PCI bridge: Intel Corporation 6th-10th Gen Core Processor PCIe Controller (x16) (rev 08)

IOMMU group 2:[8086:3e91] 00:02.0 VGA compatible controller: Intel Corporation CoffeeLake-S GT2 [UHD Graphics 630]

 

IOMMU group 14:[10de:1287] 01:00.0 VGA compatible controller: NVIDIA Corporation GK208B [GeForce GT 730] (rev a1)

IOMMU group 15:[10de:0e0f] 01:00.1 Audio device: NVIDIA Corporation GK208 HDMI/DP Audio Controller (rev a1)

 

Everything works with VNC but Black screen with GT730 passthrough like many other users...

 

VM Specs : Q35.1 and OVMF

 

It worked with Unraid 6.8 but not with 6.9.1 version.

Has someone found a solution?

Thanks guys

Link to comment
  • 1 month later...

I was having the same issue on a new build. My dual sapphire 580's worked fine Catalina and a previous Big Sur vm I made a year ago. But no joy with this.

 

 

I did the following:

Updated OpenCore to the latest

Made sure the GPU and sound were on the same bus/slot

Updated Lilu and Whatevergreen

Made sure my on-card performance switch was to the right (top) . Some places say to the left works, but those are mainly Hackintosh and not vm. But I get no signal with it to the left and to the right worked previously.

Was only using DisplayPort to view (HDMI is not currently supported)

Used my previously self-dumped 580 bios

Make sure you have a Mac defined in open core that could use a gpu like a Mac Pro or possibly the latest iMac Pro.

 

I then played around and booted the vm with vnc as the primary and GPU secondary. Display in vnc worked but the card was not properly listed in the vm. it only knew it as an AMD something, and no output.

 

So, I took a wild shot and moved my GPU to the same bus assignment as the VNC viewer (and removed the vnc viewer). I was able to see the OpenCore selection menu on the screen, and it booted normally.

 

I don't know which one's of the above specifically fixed it but I know to get my sapphire rx580's to work I had to have that change in my xml.

 

<hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x11' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/cache/domains/vbios/580.dump'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x11' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1' multifunction='on'/>
    </hostdev>

 

 

if you end up with a conflict on slot 2, then change to slot 3 or higher. I don't show sound available, but that's ok for now.

 

hope this helps!

Edited by 1812
Link to comment
  • 3 months later...

I'm going to add to this because I just got my Sapphire RX580 Nitro working with macinabox and it was a PAIN! So first thing with these cards, the HDMI ports will not work in macOS, you need to use Display Port for the output.  Secondly you need to dump the vrom and use that file, without it I still just had a black screen.  But here is the thing... Our cards have a multi-bios feature. A physical toggle on the card.  If you have NOT flashed these and the card bios is as it was from the factory, one of them is a quite setting and the other is a more aggressive overclock performance tuned.  If you got the card out of your old gaming rig or a mining rig most likely that is set in performance mode. Now MACOS only likes the base bios the quite version.  So power down, toggle that switch and make sure to re-dump the vrom from this setting. After adding that vrom in the setting the system booted right up (on DP :)) In theory you could then toggle the switch back but use this VROM and you can get the performance tuning in your other VMs but I haven't played with that yet!

Edited by Nickfmc
Sapphire RX580 Nitro
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.