Contribute
Register

[Success] AMD RX6000 Series working in macOS

Have you tried using Corpnewt's SSDTTime script to sort out the missing bridge entries from your GPU's APCI address?

The gfxutil.txt file you provided shows the following:

/PC00/TRP0@7/PXSX@0/pci-bridge@1/pci-bridge@0/pci-bridge@0/GFX0@0

Option #9 in the SSDTTime script should when used with your system DSDT.aml be able to fill out the full APCI path, i.e. translate the pci-bridge entries, so you can use the full address in the SSDT.

Screenshot 2023-03-06 at 19.19.35.png Select option 9 - PCI Bridge


Devices BRG1 and Device BRG2 are probably wrong in the SSDT-BRG0.aml table.

Screenshot 2023-03-06 at 19.28.07.png
 
That was my forum typo - I wish it were that easy :)
Obviously, I wished that too!
Addresses are correct. The ACPI error message look like the first bridge PXSX is not found, although it does have a name. Should we try to define it as well?
 

Attachments

  • SSDT-BRG.aml
    140 bytes · Views: 29
Have you tried using Corpnewt's SSDTTime script to sort out the missing bridge entries from your GPU's APCI address?

The gfxutil.txt file you provided shows the following:

/PC00/TRP0@7/PXSX@0/pci-bridge@1/pci-bridge@0/pci-bridge@0/GFX0@0

Option #9 in the SSDTTime script should when used with your system DSDT.aml be able to fill out the full APCI path, i.e. translate the pci-bridge entries, so you can use the full address in the SSDT.
Ok so making some progress...

Using SSDTTime's script I have a new BRG0 SSDT. It seems to be recognizing the device but it's now booting to a blank screen. Here's the SSDT generated...

Code:
DefinitionBlock ("", "SSDT", 2, "CORP", "PCIBRG", 0x00000000)
{
    /*
     * Start copying here if you're adding this info to an existing SSDT-Bridge!
     */
    External (\_SB.PC00, DeviceObj)
    Scope (\_SB.PC00)
    {
        Device (BRG0)
        {
            Name (_ADR, 0x00070000)
            Device (BRG1)
            {
                Name (_ADR, Zero)
                Device (BRG2)
                {
                    Name (_ADR, 0x00010000)
                    Device (BRG3)
                    {
                        Name (_ADR, Zero)
                        Device (BRG4)
                        {
                            Name (_ADR, Zero)
                            // Customize this device name if needed, eg. GFX0
                            Device (GFX0)
                            {
                                // Target Device Path:
                                // PciRoot(0x0)/Pci(0x7,0x0)/Pci(0x0,0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)
                                Name (_ADR, Zero)
                            }
                        }
                    }
                }
            }
        }
    }
    /*
     * End copying here if you're adding this info to an existing SSDT-Bridge!
     */
}
 
How are you connecting the display to the GPU?
  • DP to DP, HDMI to HDMI?
  • Are you using any adapters or adapter cables?

Do you have the agdpmod=pikera boot argument in your config.plist?

Have you tried agdpmod=ignore boot argument in place of the pikera argument?
 
Obviously, I wished that too!
Addresses are correct. The ACPI error message look like the first bridge PXSX is not found, although it does have a name. Should we try to define it as well?

Thanks for this. I still get the same ACPI Error: [\_SB_.PC00.TRP0] Namespace lookup failure, AE_NOT_FOUND, so it's actually the TRP0 device that's the issue. The SSDTTime-generated SSDT is the only one that works.
 
How are you connecting the display to the GPU?
  • DP to DP, HDMI to HDMI?
  • Are you using any adapters or adapter cables?

Do you have the agdpmod=pikera boot argument in your config.plist?

Have you tried agdpmod=ignore boot argument in place of the pikera argument?

So I'm using an eGPU (Razer Core X) connected via thunderbolt cable. The TB mapping is correct: in fact, it works fine with the RX580 which boots up without any need for additional config. agdpmod=pikera/ignore doesn't make a difference at this point...
 
Using SSDTTime's script I have a new BRG0 SSDT. It seems to be recognizing the device but it's now booting to a blank screen. Here's the SSDT generated...
It defines everything from, and including, TRP0 :eek:
OK, maybe this is just "the safest, fool-proof, way" to ensure that there's a fully named ACPI path. No error message with this one?

I trust you have the spoofing information as DeviceProperties in config.plist. Is this applied?
 
It defines everything from, and including, TRP0 :eek:
OK, maybe this is just "the safest, fool-proof, way" to ensure that there's a fully named ACPI path. No error message with this one?

I trust you have the spoofing information as DeviceProperties in config.plist. Is this applied?
Yes, and I've finally found a workaround to make it boot correctly. I've (reluctantly) had to change the SMBIOS from MacbookPro16,4 to MacPro7,1 and both displays (laptop + monitor) boot up fine.

TL;DR - I've managed to successfully drive two laptops (XPS 9360 and XPS 9520) using Monterey to use the eGPU to their full potential, but would like to keep the laptop smbios profile to keep things like power management, USB ports etc fully working. The RX580 worked fine off the MBP16,4 profile - so to keep this smbios what else needs to change (I'm assuming eg: framebuffer) to make the RX6650XT work off the MBP16,4 profile?
 
TL;DR - I've managed to successfully drive two laptops (XPS 9360 and XPS 9520) using Monterey to use the eGPU to their full potential,
Ah! It was an eGPU! That explains the unusual number of bridges and the error message: The external enclosure is not yet initialised when ACPI tables are loaded.

You've found the solution to a problem which had escaped us so far.
Which SSDT is working? My half-desperate SSDT-BRG? The one from SSDTTime? Both?
 
Back
Top