Contribute
Register

[Success] AMD RX6000 Series working in macOS

Hi @surgeinc

It looks like your path should be:

PCI0.PEG1.PEGP.BRG0.GFX0

I think you have to make that change. You can check if the SSDT correctly specifies the path by using IORegistryExplorer, then search for "GFX0"
@tedyun I really appreciate finding this one. Saved the day!
 
The Radeon 5500M lists as GFX0 in the I/O Registry... I noticed that the 6900 XT listed two device-ids: <af 73 00 00> & <bf 73 00 00> in the I/O Registry. I found why: I typed "device_id" into the config.plist when it should've been "device-id" for DeviceProperties. I fixed that & tested it, but it still didn't work. I checked the I/O Registry and there's only 1 device-id now, but unfortunately, it's <af 73 00 00>.

Holy crap! I didn’t even notice that I had a “-“ vs a “_” !!! You solved my mystery of two device-id’s!!!

I made the same change as you, then disabled the FakePCIID kexts. Works as it should. Thanks, Mr. Eagle Eyes!
 
The Radeon 5500M lists as GFX0 in the I/O Registry... I noticed that the 6900 XT listed two device-ids: <af 73 00 00> & <bf 73 00 00> in the I/O Registry. I found why: I typed "device_id" into the config.plist when it should've been "device-id" for DeviceProperties. I fixed that & tested it, but it still didn't work. I checked the I/O Registry and there's only 1 device-id now, but unfortunately, it's <af 73 00 00>.

Hi @WrathOfThePast

This is kind of what I think you need to do to make an SSDT, although I really have no idea if this will work.

This is based on the ACPI path you specified earlier:

/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEG2@1,2/IOPP/UPSB@0/IOPP/DSB1@1/IOPP/UPS0@0/IOPP/pci-bridge@1/IOPP/pci-bridge@0/IOPP/pci-bridge@0/IOPP/display@0

I typed this out to name your pci-bridges, and I gave them random names "BRA0" "BRB0". Then I named your device "GFX1" since you're saying your existing Radeon 5500M is "GFX0"

Also, reading through your posts, you have an actual Mac? I'm not sure I would be mucking around with that.

Anyway, this SSDT doesn't compile, and it seems to be stuck on

DefinitionBlock ("", "SSDT", 2, "ACDT", "BRA0", "BRB0", "BRG0", 0x00000000)

I'm not sure what is wrong. But the idea is there.

Code:
/*
 * This table provides an example of creating a missing ACPI device
 * to ensure early DeviceProperty application. In this example
 * a GPU device is created for a platform having an extra PCI
 * bridge in the path - PCI0.PEG2.UPSB.DSB1.UPS0.BRA0.BRB0.BRG0.GFX1:
 * PciRoot(0x0)/Pci(0x1,0x2)/Pci(0x0,0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)
 * Such tables are particularly relevant for macOS 11.0 and newer.
 */

DefinitionBlock ("", "SSDT", 2, "ACDT", "BRA0", "BRB0", "BRG0", 0x00000000)
{
    External (_SB_.PCI0.PEG2.UPSB.DSB1.UPS0, DeviceObj)

    Scope (\_SB.PCI0.PEG2.UPSB.DSB1.UPS0)
    {
        /*
         * This is a PCI bridge device present on PEGP.
         * Normally seen as pci-bridge in I/O Registry.
         */
        Device (BRA0)
        {
            Name (_ADR, Zero)

            /*
             * This is an actual GPU device present on the bridge.
             * Normally seen as display in I/O Registry.
             */
            Device (BRB0)
            {
                Name (_ADR, Zero)  // _ADR: Address
                
                Device (BRG0)
                {
                    Name (_ADR, Zero)
                    
                    Device (GFX1)
                    {
                         Name (_ADR, Zero)
                    }
                }
            }
        }
    }
 }
 
Hi @WrathOfThePast

This is kind of what I think you need to do to make an SSDT, although I really have no idea if this will work.

This is based on the ACPI path you specified earlier:

/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEG2@1,2/IOPP/UPSB@0/IOPP/DSB1@1/IOPP/UPS0@0/IOPP/pci-bridge@1/IOPP/pci-bridge@0/IOPP/pci-bridge@0/IOPP/display@0

I typed this out to name your pci-bridges, and I gave them random names "BRA0" "BRB0". Then I named your device "GFX1" since you're saying your existing Radeon 5500M is "GFX0"

Also, reading through your posts, you have an actual Mac? I'm not sure I would be mucking around with that.

Anyway, this SSDT doesn't compile, and it seems to be stuck on

DefinitionBlock ("", "SSDT", 2, "ACDT", "BRA0", "BRB0", "BRG0", 0x00000000)

I'm not sure what is wrong. But the idea is there.

Code:
/*
 * This table provides an example of creating a missing ACPI device
 * to ensure early DeviceProperty application. In this example
 * a GPU device is created for a platform having an extra PCI
 * bridge in the path - PCI0.PEG2.UPSB.DSB1.UPS0.BRA0.BRB0.BRG0.GFX1:
 * PciRoot(0x0)/Pci(0x1,0x2)/Pci(0x0,0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)
 * Such tables are particularly relevant for macOS 11.0 and newer.
 */

DefinitionBlock ("", "SSDT", 2, "ACDT", "BRA0", "BRB0", "BRG0", 0x00000000)
{
    External (_SB_.PCI0.PEG2.UPSB.DSB1.UPS0, DeviceObj)

    Scope (\_SB.PCI0.PEG2.UPSB.DSB1.UPS0)
    {
        /*
         * This is a PCI bridge device present on PEGP.
         * Normally seen as pci-bridge in I/O Registry.
         */
        Device (BRA0)
        {
            Name (_ADR, Zero)

            /*
             * This is an actual GPU device present on the bridge.
             * Normally seen as display in I/O Registry.
             */
            Device (BRB0)
            {
                Name (_ADR, Zero)  // _ADR: Address
               
                Device (BRG0)
                {
                    Name (_ADR, Zero)
                   
                    Device (GFX1)
                    {
                         Name (_ADR, Zero)
                    }
                }
            }
        }
    }
 }
I found the official documentation on ACPI... you're right the error is in the DefinitionBlock... you can't separate BRA0, BRB0, & BRG0 with commas as that field is a table id... in essence, you're saying the revision id=BRB0. Furthermore, deleting the commas is also invalid syntax even if group with "<>." This is because there can only be one entry for the table id.

Here's what the DefinitionBlock should be according my understanding:
Code:
DefinitionBlock ("", "SSDT", 2, "ACDT", "BRA0", 0x00000000)

I am on genuine Mac which gave me an idea if this doesn't work:

I found the kext drivers Apple made for the 6800, 6800 XT, & 6900 XT and within each those I found a config.plist where they specified the applicable device-ids... I could simply add "0x73AF1200" to those each of those... however, those are in read-only System folder, so I'd have to indefinitely disable SIP & do some shenanigans which would break macOS update... on the plus side this would allow me to use Secure Boot and Fire Vault again.

macOS Monterey released today, so I'm installing it on my old MacBook Pro first to see if they added it before I do it myself.
 
I found the official documentation on ACPI... you're right the error is in the DefinitionBlock... you can't separate BRA0, BRB0, & BRG0 with commas as that field is a table id... in essence, you're saying the revision id=BRB0. Furthermore, deleting the commas is also invalid syntax even if group with "<>." This is because there can only be one entry for the table id.

Here's what the DefinitionBlock should be according my understanding:
Code:
DefinitionBlock ("", "SSDT", 2, "ACDT", "BRA0", 0x00000000)

I am on genuine Mac which gave me an idea if this doesn't work:

I found the kext drivers Apple made for the 6800, 6800 XT, & 6900 XT and within each those I found a config.plist where they specified the applicable device-ids... I could simply add "0x73AF1200" to those each of those... however, those are in read-only System folder, so I'd have to indefinitely disable SIP & do some shenanigans which would break macOS update... on the plus side this would allow me to use Secure Boot and Fire Vault again.

macOS Monterey released today, so I'm installing it on my old MacBook Pro first to see if they added it before I do it myself.
Update: macOS 12.0.1 Monterey did not add support.
 
@tedyun I found that the device ID spoof works on all levels until I get to the "Pci-bridge"s. Furthermore, I found with the typo "device_id" I originally had in my config.plist that it was successfully adding it. Considering that, it was very bizarre that upon fixing the typo that it didn't spoof the device ID. I'm unsure where to go from here.
 
@WrathOfThePast :

There are two paths you need to specify in order for the spoof to work. The first is done using the SSDT-BRG0.aml, then the second path is specified in the config.plist under Device Properties.

The SSDT.BRG0.aml needs to be written so that you name all the pci-bridges in this path:

/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEG2@1,2/IOPP/UPSB@0/IOPP/DSB1@1/IOPP/UPS0@0/IOPP/pci-bridge@1/IOPP/pci-bridge@0/IOPP/pci-bridge@0/IOPP/display@0

Then using the DeviceProperties path here, you can spoof your device-id to the 73BF

PciRoot(0x0)/Pci(0x1,0x2)/Pci(0x0,0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)

So where we're stuck is with how to write the SSDT-BRG0 to incorporate the extra pci-bridges.

I'm surprised that no one has offered to help. There are a number of people here that could help, and I'll try tagging them to see if they will help you out. If we can figure this out, then it will be incredibly useful to people using the eGPU's.

@CaseySJ @vandroiy @Gigamaxx , do you think you can help Wrath?
 
@WrathOfThePast :

There are two paths you need to specify in order for the spoof to work. The first is done using the SSDT-BRG0.aml, then the second path is specified in the config.plist under Device Properties.

The SSDT.BRG0.aml needs to be written so that you name all the pci-bridges in this path:

/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEG2@1,2/IOPP/UPSB@0/IOPP/DSB1@1/IOPP/UPS0@0/IOPP/pci-bridge@1/IOPP/pci-bridge@0/IOPP/pci-bridge@0/IOPP/display@0

Then using the DeviceProperties path here, you can spoof your device-id to the 73BF

PciRoot(0x0)/Pci(0x1,0x2)/Pci(0x0,0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)

So where we're stuck is with how to write the SSDT-BRG0 to incorporate the extra pci-bridges.

I'm surprised that no one has offered to help. There are a number of people here that could help, and I'll try tagging them to see if they will help you out. If we can figure this out, then it will be incredibly useful to people using the eGPU's.

@CaseySJ @vandroiy @Gigamaxx , do you think you can help Wrath?
@tedyun I just added the "model" to DeviceProperties & it successfully renamed my gpu, but the device-id still isn't spoofed. Very bizarre as this implies that things should be working in the current configuration.
 
Last edited:
I just added the "model" to DeviceProperties & it successfully renamed my gpu, but the device-id still isn't spoofed. Very bizarre as this implies that things should be working in the current configuration.

That's because you've only completed 1 of the 2 paths you need to specify. The DeviceProperties path is the most straightforward. The ACPI path is the trickier one because you need to dive into assembly language in order to modify the SSDT. Then on top of that, in your case, you need to assign multiple levels of pci-bridges instead of a single pci-bridge that an internal dGPU has.

So in order to complete your hack, we need someone with knowledge of assembly language and the ACPI structure to help you out with the ACPI path.
 
@tedyun I just added the "model" to DeviceProperties & it successfully renamed my gpu, but the device-id still isn't spoofed. Very bizarre as this implies that things should be working in the current configuration.
It seems you’ve installed your NAVI GPU into a Thunderbolt eGPU. Spoofing the device-id is most likely failing for that reason.
 
Back
Top