Contribute
Register

[Success] AMD RX6000 Series working in macOS

Hi.
I need help.
I have recently replaced my RX580 with an RX6800 Sapphire Pulse. With my RX580 everything worked fine (Ventura 13.3.1), but I have noticed that with the RX6800, I have a strange behavior. The can boot normally and all is working. Only if I turn the monitor off and on the system crashes and the WindowsServer process crashes. In the same way, if I change the input of the monitor from DP to HDMI, the same thing happens. However, if I put the computer to sleep and start it, it works fine.
You know that it may be due?
 
Your RX 6900XT is at the following PCI path:

_SB.PC02.BR2A.SL05.PCI-Bridge@0.GFX0

But only first first 4 parts of the path are defined in the DSDT. The two parts in bold must be created by the SSDT in order to reach the correct final endpoint (the GPU). Only then can we change the Device ID.

The process is described in this post:
I've made the necessary changes and attached both the AML and DSL files. The DSL file should have all the comments intact.
Hi @CaseySJ I am trying to spoof 73AF 6900XT on a cMP5,1. If spoofing is to BF the Mac reboots. If the spoofing is to AE the SSDT loads, but the driver does not load. I tried spoofing 6950 to BF on cMP5,1 and MP7,1 before and the Macs just go to an endless loop. Here is the IOregistry after spoofing to AE.
 

Attachments

  • MPNE293OX_v3.zip
    7.3 MB · Views: 54
Hi @CaseySJ I am trying to spoof 73AF 6900XT on a cMP5,1. If spoofing is to BF the Mac reboots. If the spoofing is to AE the SSDT loads, but the driver does not load. I tried spoofing 6950 to BF on cMP5,1 and MP7,1 before and the Macs just go to an endless loop. Here is the IOregistry after spoofing to AE.
Hello @zirkaiva,

Some questions:
  • Are you using WhateverGreen?
  • If so, have you tried simply creating a Device Property and setting device-id to BF730000?
 
Hello @zirkaiva,

Some questions:
  • Are you using WhateverGreen?
  • If so, have you tried simply creating a Device Property and setting device-id to BF730000?
Yes I tried that before. BF73 just reboots the real Macs. No problem with the Hackintoshes though. Maybe it needs compatible property?
 
I was able to boot with my XTXH variant (ASROCK RX 6900 XT OC Formula) but I have been unsuccessful all day at getting hardware acceleration working. I'm not great with SSDTs but tried a half dozen variants for GPU spoofing I found linked here and elsewhere.

From MacOS, I get these:

gfxutil:
Code:
/PC01@0/BR1A@0/SL01@0/pci-bridge@0/display@0 = PciRoot(0x1)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)
IOService:
Code:
/AppleACPIPlatformExpert/PC01@0/AppleACPIPCI/BR1A@0/IOPP/SL01@0/IOPP/pci-bridge@0/IOPP/display@0

gfxutil:
Code:
/PC01@0/BR1A@0/SL01@0/pci-bridge@0/pci1002,ab28@0,1 = PciRoot(0x1)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x1)
IOService:
Code:
/AppleACPIPlatformExpert/PC01@0/AppleACPIPCI/BR1A@0/IOPP/SL01@0/IOPP/pci-bridge@0/IOPP/pci1002,ab28@0,1

From Windows, I get these:
Code:
ACPI(_SB_)#ACPI(PC01)#ACPI(BR1A)#ACPI(SL01)#PCI(0000)#PCI(0000)
ACPI(_SB_)#ACPI(PC01)#ACPI(BR1A)#ACPI(PEGP)#PCI(0000)#PCI(0000)


So that's my first hangup - I get two strings instead of one for my card. I think the 2nd represents HDMI audio? FWIW, the HDMI audio is a static garbled mess at the moment... which is odd because it kind of sounded ok the first hour of troubleshooting this.

I'm not sure what to put in the various lines in my dsl file. Most recently:
Code:
DefinitionBlock ("", "SSDT", 2, "ACDT", "BRG0", 0x00000000)
{
    External (_SB_.PC01.BR1A.SL01, DeviceObj)

    Scope (_SB.PC01.BR1A.SL01)
    {
        Device (BRG0)
        {
            Name (_ADR, Zero)

            Device (GFX0)
            {
                Name (_ADR, Zero)  // _ADR: Address
            }
        }
   }
}

Device (BRG0) <- I believe this absorbs "pci-bridge@0"?
Device (GFX0) <- likewise this absorbs "display@0"?

I have the compiled aml file enabled in config.plist along with the device-id (see screenshot) and appropriate boot args: -v npci=0x2000 keepsyms=1 alcid=1 debug=0x100 agdpmod=pikera -TSC_sync_margin=0

Closest I've gotten is causing the screen to go black on load or, as is the current case, instant reboot when the login screen would otherwise appear. I feel like I'm missing something.
did you solve your problem ? I got the same problem
 
Congrats on your VBIOS success @byteminer



It is possible to do this via Acidanthera tools. Not OpenCore, but WhateverGreen, plus an SSDT. I've done it myself in the past. You can specify an "ATY,bin_image" block on the GPU device and this defines the VBIOS used by the macOS GPU driver. This is by far the safest method, as it requires no on-card flashing, and is entirely configured in software. Therefore no chance of bricking the card - if it fails, just boot with a different config that doesn't load that SSDT.

Attached is a DSL that demonstrates the general syntax. It's not a complete working SSDT as I just extracted it from an old test DSDT I used a couple of years ago on my X58. But it shows the principle and should be straightforward to convert to an SSDT for the X299. The biggest challenge I found was generating a text version of the 64kb of hexadecimal that represents the VBIOS, and in the right format (each byte separated by commas). I think I did this just by copying the hex representation out of Hexfiend into a Visual Studio Code file, then used a regular expression to convert the text to the format needed by the SSDT.
This deserves more attention. To convert string to HEX ACPI style this can be used:
Code:
printf "113-C944A1XT-014" | xxd -u -c 8 -g 1 -i
Result:
Code:
0X31, 0X31, 0X33, 0X2D, 0X43, 0X39, 0X34, 0X34,
0X41, 0X31, 0X58, 0X54, 0X2D, 0X30, 0X31, 0X34

Unfortunately RX 6900 XT does not use
"ATY,bin_image" block
 
Last edited:
Hi everyone!
I have a video card with device-id 0x73AF (XTXH chip). I used the spoffing method in order for card to work. Changed device-id to 0x73BF.
What works:
1. transparent interface
2. coding\decoding
Problems:
1. Interface lags
2. OpenCL Score in geekbanch - 30385 (nativ video cards shows 120 000 - 130 000)
what's done:
  1. Create correct SSDT-BRG0 table
  2. Set up a named frame buffer (Carswell)
  3. Added to the bootloader OC Power Play Table
 
I tried spoofe my asrock phantom 6950xt for Monterey ..but its not work,,, I really have no idea ... ask for help ..please!!! :thumbup: My PC config is B450mb 2700x cpu..

Location Path:
PCIROOT(0)#PCI(0301)#PCI(0000)#PCI(0000)#PCI(0000)
ACPI(_SB_)#ACPI(PCI0)#ACPI(GPP8)#PCI(0000)#PCI(0000)#PCI(0000)
ACPI(_SB_)#ACPI(USBX)#ACPI(GPP8)#PCI(0000)#PCI(0000)#PCI(0000)

Gfxutil:
PCI0@0/GPP8@3,1/pci-bridge@0/pci-bridge@0/GFX0@0

the SSDT-BRG0 .aml as below:

DefinitionBlock ("", "SSDT", 2, "ACDT", "BRG0", 0x00000000)
{
External (_SB_.PCI0.GPP8, DeviceObj)
Scope (\_SB.PCI0.GPP8)
{
Device (BRG0)
{
Name (_ADR, Zero) // _ADR: Address
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (_OSI ("Darwin"))
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}

Device (GFX0)
{
Name (_ADR, Zero) // _ADR: Address
}
}
}
}
 
I tried spoofe my asrock phantom 6950xt for Monterey ..but its not work,,, I really have no idea ... ask for help ..please!!! :thumbup: My PC config is B450mb 2700x cpu..

Location Path:
PCIROOT(0)#PCI(0301)#PCI(0000)#PCI(0000)#PCI(0000)
ACPI(_SB_)#ACPI(PCI0)#ACPI(GPP8)#PCI(0000)#PCI(0000)#PCI(0000)

Gfxutil:
PCI0@0/GPP8@3,1/pci-bridge@0/pci-bridge@0/GFX0@0
There are two unnamed bridges, so you use two (nested) blocks of code:

Code:
DefinitionBlock ("", "SSDT", 2, "ACDT", "BRG0", 0x00000000)
{
    External (_SB_.PCI0.GPP8, DeviceObj)

    Scope (\_SB.PCI0.GPP8)
    {
        Device (BRG0)
        {
            Name (_ADR, Zero)
            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                If (_OSI ("Darwin"))
                {
                    Return (0x0F)
                }
                Else
                {
                    Return (Zero)
                }
            }

            Device (BRG1)
            {
                Name (_ADR, Zero)
                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    If (_OSI ("Darwin"))
                    {
                        Return (0x0F)
                    }
                    Else
                    {
                        Return (Zero)
                    }
                }

                Device (GFX0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                }
            }
        }
    }
}
 

Attachments

  • SSDT-BRG.aml
    171 bytes · Views: 22
  • SSDT-BRG.dsl
    1 KB · Views: 27
a first gen 6900XT name shows up fine. a seond gen one (XTX/H models) show up as unknown prototype even if spoofed to load as a first gen XTX card because deep down driver can still tell it's an unsupported card even if it was tricked into loading it under false pretenses. when I used a flashed bios to load my card, name was correct, but when i restored cards original bios and used spoofing, even though spoofing fixes cards name in about this mac, the driver can still recognize it as an unsuppoted card, thus the fallback generic prototype name and being unable to report metal capabilities in system information. I covered all this earlier in thread.
Hi, any luck whith correct spoffing XTXH card?
 
Back
Top