Trying out 6950XT and MacOS

ovenlite1

Active member
AMD OS X Member
Joined
Jun 22, 2020
Messages
106
As you probably know, AMD recently released its latest gpu refreshes for the RX 6000 series. Having held out all this time with a 5500XT, I went ahead and gave the AMD queue a shot. To my surprise, I scored a 6950XT! With component prices going down, I also lucked out on a deal on a lightly used 5950x a few weeks ago. Guess demand really is going down? Anyway, this evening I've started the process of trying to get this card to work in my current system:
Mobo - Asrock x570 ITX/TB3
CPU - Ryzen 5950x
GPU - AMD 6950XT reference edition

So far, results have been... mixed. My first attempt was done out of curiosity more than anything, but I popped that sucker staring into my mobo and tried to boot. Of course, that did not work. One can dream, right?

As folks had discussed across various forums, the 6950XT is in essence a souped up 6900XT so I still had hopes that this wouldn't be too hard a process. I went ahead with trying to spoof the device-id to just a vanilla 6900XT, as others have needed to do with the XTXH or whatever those were called. I'll admit, not totally sure if I did it right, but hey I booted into MacOS and I'm typing this into Safari now! I hope I won't have to flash the bios to 6900XT, but I do have experience doing that kind of thing and if worst comes to worst, I'll do it. But here's what I've observed so far:
  • In 'About This Mac' I guess I was able to get 'AMD Radeon RX 6950XT' to display properly! whoopee. it shows up.
  • ... but it also says I only have 31MB of VRAM
  • Continuing into 'System Report,' VRAM (Total): reads out to 31MB AND Device ID: 0x73a5, which if I'm not mistaken is for the 6950XT, not the 6900XT.
  • Although I'm using MacOS, it's buggy and laggy as all get out. Minimize too many things at once and the poor machine will lock up and lose its lunch. Moving objects/windows around the monitor results in tremendous amounts of stuttering.
  • Google Chrome is absolutely unusable. No images are produced at all.
  • Via HDMI, video output max was 1080p. No other resolutions available, even on my 4K panel. Switching from HDMI to Display Port on my LG 4K monitor unlocked the ability to display at 4K, but no scaling. Not sure why that made a difference.
  • Wifi cuts out sometimes? Using a replacement Broadcom card. This might be a separate issue though (ah the life of a hackintosher!)
Screen Shot 2022-05-17 at 11.12.03 PM.png
Screen Shot 2022-05-17 at 11.04.54 PM.png




Here's what I did and have tried:
  • I updated to Monterey 12.4, against my better judgment. Everything was working fine before. Damn I wish I had waited, just in case it ends up being important.
  • In my config.plist I have listed device-id as 'FF730000'
  • I do believe I'm using the latest versions of whatevergreen and Lilu, if that's relevant.
  • I did use Gfxutil to add in the correct entry for DeviceProperties (I think?!?)
  • I did compile SSDT-BRG0 and enable in my config.plist, but this is where I was the least confident in my work.
  • Not sure if this needs mentioning, but it works in windows, just fine.

If you couldn't tell, I'm relatively new at this and pretty ignorant when it comes to a lot of hackintoshing work. All in all, I'm glad that I at least got this far, though, barring apple releasing updated drivers with support for these refreshes, I hope I can find a working solution to smooth things out a bit. I'll be documenting my findings and progress here. If you have any advice or tips on what I might try, I'd be happy to give them a shot and report back. Fair warning though, between work, moving, getting married, other fun personal business, I can't promise that how quickly I'll be able to make process. Still, if you have any ideas on how I might get this to work a bit better, I'm all ears! For now, a break. Been spending too much time on this for tonight!

Thank you!
 

Middleman

Active member
AMD OS X Member
Joined
Jan 29, 2021
Messages
723
Wow. This attempt was made solely by setting device-id to BF730000, and I did change the model to 6950XT, as you can see below. Popped the card into my brother-in-law's machine, booted from USB, and here I am. Appears to have full acceleration. Just as on my personal machine, this hackintosh has been updated to the latest opencore version. Such an interesting turn of events. I suspect I've got something in my own personal computer's config that is preventing proper spoofing for the card. I may attempt to rebuild that config from scratch. But for now- 6950XT DOES work in MacOS with spoofing to 6900XT device-id.

I will test things out to see if anything else about the system has been affected but things seem to be running pretty smoothly!

View attachment 6223
That's brilliant! Wow, you can also see the full VRAM amount it offers! That should be a very quick card. I'm very happy for you. 😊
 

lukakeiton

Member
AMD OS X Member
Joined
Jul 26, 2020
Messages
87
Hi, I have bought an and rx 6950 xt (not arrived yet) and I am creating the ssdt to spoof it to 6900.

As far as I red here, I need to spoof to BF730000 device id, finding the acpi path of device. In my case, it is /_SB.PCI0.GPP8.X161 (checked in original dsdt) and weg renamed to GFX0.

So, my question is if this aml code will work for me? (Obviously, when I receive the graphic card, I will test it.)

Code:
DefinitionBlock ("", "SSDT", 2, "AMDOSX", "AMDGPU", 0x00001000)
{
    External (_SB_.PCI0, DeviceObj)
    External (_SB_.PCI0.GPP8.X161, DeviceObj)
    External (_SB_.PCI0.DTGP, MethodObj)

    Scope (\_SB.PCI0.GPP8.X161)
    {
        If (_OSI ("Darwin"))
        {
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Local0 = Package (0x08)
                    {
                        "AAPL,slot-name",
                        Buffer (0x07)
                        {
                            "Slot-1"
                        },

                        "model",
                        Buffer (0x13)
                        {
                            "AMD Radeon 6950 XT"
                        },

                        "device-id",
                        Buffer (0x04)
                        {
                             0xBF, 0x73, 0x00, 0x00                           // .s..
                        },

                        "@0,AAPL,boot-display",
                        Buffer (Zero){}
                    }
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }
    }
}

Or should I scope GFX0 device instead?

Thank you in advance.
 

ExtremeXT

Donator
Donator
Joined
Aug 7, 2022
Messages
843
Hi, I have bought an and rx 6950 xt (not arrived yet) and I am creating the ssdt to spoof it to 6900.

As far as I red here, I need to spoof to BF730000 device id, finding the acpi path of device. In my case, it is /_SB.PCI0.GPP8.X161 (checked in original dsdt) and weg renamed to GFX0.

So, my question is if this aml code will work for me? (Obviously, when I receive the graphic card, I will test it.)

Code:
DefinitionBlock ("", "SSDT", 2, "AMDOSX", "AMDGPU", 0x00001000)
{
    External (_SB_.PCI0, DeviceObj)
    External (_SB_.PCI0.GPP8.X161, DeviceObj)
    External (_SB_.PCI0.DTGP, MethodObj)

    Scope (\_SB.PCI0.GPP8.X161)
    {
        If (_OSI ("Darwin"))
        {
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Local0 = Package (0x08)
                    {
                        "AAPL,slot-name",
                        Buffer (0x07)
                        {
                            "Slot-1"
                        },

                        "model",
                        Buffer (0x13)
                        {
                            "AMD Radeon 6950 XT"
                        },

                        "device-id",
                        Buffer (0x04)
                        {
                             0xBF, 0x73, 0x00, 0x00                           // .s..
                        },

                        "@0,AAPL,boot-display",
                        Buffer (Zero){}
                    }
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }
    }
}

Or should I scope GFX0 device instead?

Thank you in advance.
Use DeviceProperties property injection in your plist. Make sure you use your path. You can use Hackintool > PCIe > GPU > Right Click > Copy Device Path or use Device Manager in Windows

To convert Device Manager PCI Path to macOS PCI path:
PCIROOT(0)#PCI(0301)#PCI(0000)
PCIROOT(0) becomes PciRoot(0x0)
PCI(0301) becomes Pci(0x3,0x1)
PCI(0000) becomes Pci(0x0,0x0)
Then we replace # with /
PciRoot(0x0)/Pci(0x3,0x1)/Pci(0x0,0x0)

Image attached is an example of the DeviceProperties > Add entry. Make sure you have WhateverGreen added and agdpmod=pikera in your boot-args. Let me know if it works.

If it's not working, create an SSDT-Bridge using SSDTTime.
 

Attachments

  • Screenshot_7.png
    Screenshot_7.png
    6.5 KB · Views: 15

lukakeiton

Member
AMD OS X Member
Joined
Jul 26, 2020
Messages
87
Use DeviceProperties property injection in your plist. Make sure you use your path. You can use Hackintool > PCIe > GPU > Right Click > Copy Device Path or use Device Manager in Windows

To convert Device Manager PCI Path to macOS PCI path:
PCIROOT(0)#PCI(0301)#PCI(0000)
PCIROOT(0) becomes PciRoot(0x0)
PCI(0301) becomes Pci(0x3,0x1)
PCI(0000) becomes Pci(0x0,0x0)
Then we replace # with /
PciRoot(0x0)/Pci(0x3,0x1)/Pci(0x0,0x0)

Image attached is an example of the DeviceProperties > Add entry. Make sure you have WhateverGreen added and agdpmod=pikera in your boot-args. Let me know if it works.

If it's not working, create an SSDT-Bridge using SSDTTime.
Hi, thanks for your reply. I will test this when gc arrives.
 

lukakeiton

Member
AMD OS X Member
Joined
Jul 26, 2020
Messages
87
Use DeviceProperties property injection in your plist. Make sure you use your path. You can use Hackintool > PCIe > GPU > Right Click > Copy Device Path or use Device Manager in Windows

To convert Device Manager PCI Path to macOS PCI path:
PCIROOT(0)#PCI(0301)#PCI(0000)
PCIROOT(0) becomes PciRoot(0x0)
PCI(0301) becomes Pci(0x3,0x1)
PCI(0000) becomes Pci(0x0,0x0)
Then we replace # with /
PciRoot(0x0)/Pci(0x3,0x1)/Pci(0x0,0x0)

Image attached is an example of the DeviceProperties > Add entry. Make sure you have WhateverGreen added and agdpmod=pikera in your boot-args. Let me know if it works.

If it's not working, create an SSDT-Bridge using SSDTTime.
No lucky when injection in config-plist. I used an SSDT instead.

Here are the steps:

Use IORegistryExplorer to found the ACPI path looking for "GFX0". For example, mine is

IOACPIPlane:/_SB/PCI0@0/GPP8@30001/X161@0/pci-bridge@0/GFX0@0

So, we need to rename this "pci-bridge". This is done through SSDT injection, like this:

Code:
 */
DefinitionBlock ("", "SSDT", 2, "AMDOSX", "AMDGPU", 0x00001000)
{
    External (_SB_.PCI0, DeviceObj)
    External (_SB_.PCI0.GPP8.X161, DeviceObj)

    Scope (_SB.PCI0.GPP8.X161)
    {
        If (_OSI ("Darwin"))
        {
            Device (BRG0)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (GFX0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Local0 = Package (0x08)
                            {
                                "AAPL,slot-name",
                                Buffer (0x07)
                                {
                                    "Slot-1"
                                },

                                "model",
                                Buffer (0x13)
                                {
                                    "AMD Radeon 6950 XT"
                                },

                                "device-id",
                                Buffer (0x04)
                                {
                                     0xBF, 0x73, 0x00, 0x00                           // .s..
                                },

                                "@0,AAPL,boot-display",
                                Buffer (Zero){}
                            }
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }
            }
        }
    }

    Scope (\_SB.PCI0)
    {
        Method (DTGP, 5, NotSerialized)
        {
            If ((Arg0 == ToUUID ("a0b5b7c6-1318-441c-b0c9-fe695eaf949b") /* Unknown UUID */))
            {
                If ((Arg1 == One))
                {
                    If ((Arg2 == Zero))
                    {
                        Arg4 = Buffer (One)
                            {
                                 0x03                                             // .
                            }
                        Return (One)
                    }

                    If ((Arg2 == One))
                    {
                        Return (One)
                    }
                }
            }

            Arg4 = Buffer (One)
                {
                     0x00                                             // .
                }
            Return (Zero)
        }
    }
}

In this example, no matter what name you put into first device Device ("whatever name you want instead BRG0, but I recommend it"). This is due next line: Name (_ADR, Zero). This line referencies the @0 of pci-brigde memory section, so we can scope it with "Name (_ADR, Zero)" line. This fact allows us to recreate a new device under this "brigde" called BRG0 device. So what we need to do next is scope GFX0 device, remember to set @0 as Name (_ADR, Zero), this will allow us to insert _DSM method, (maybe your @number is different.

When all it done, remember to add changes in config.plist. No injection is required.

Greetings.

Captura de pantalla 2022-09-19 a las 20.21.49.png

Captura de pantalla 2022-09-19 a las 20.00.26.png
 
Last edited:

ExtremeXT

Donator
Donator
Joined
Aug 7, 2022
Messages
843
No lucky when injection in config-plist. I used an SSDT instead.

Here are the steps:

Use IORegistryExplorer to found the ACPI path looking for "GFX0". For example, mine is

IOACPIPlane:/_SB/PCI0@0/GPP8@30001/X161@0/pci-bridge@0/GFX0@0

So, we need to rename this "pci-bridge". This is done through SSDT injection, like this:

Code:
 */
DefinitionBlock ("", "SSDT", 2, "AMDOSX", "AMDGPU", 0x00001000)
{
    External (_SB_.PCI0, DeviceObj)
    External (_SB_.PCI0.GPP8.X161, DeviceObj)

    Scope (_SB.PCI0.GPP8.X161)
    {
        If (_OSI ("Darwin"))
        {
            Device (BRG0)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (GFX0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Local0 = Package (0x08)
                            {
                                "AAPL,slot-name",
                                Buffer (0x07)
                                {
                                    "Slot-1"
                                },

                                "model",
                                Buffer (0x13)
                                {
                                    "AMD Radeon 6950 XT"
                                },

                                "device-id",
                                Buffer (0x04)
                                {
                                     0xBF, 0x73, 0x00, 0x00                           // .s..
                                },

                                "@0,AAPL,boot-display",
                                Buffer (Zero){}
                            }
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }
            }
        }
    }

    Scope (\_SB.PCI0)
    {
        Method (DTGP, 5, NotSerialized)
        {
            If ((Arg0 == ToUUID ("a0b5b7c6-1318-441c-b0c9-fe695eaf949b") /* Unknown UUID */))
            {
                If ((Arg1 == One))
                {
                    If ((Arg2 == Zero))
                    {
                        Arg4 = Buffer (One)
                            {
                                 0x03                                             // .
                            }
                        Return (One)
                    }

                    If ((Arg2 == One))
                    {
                        Return (One)
                    }
                }
            }

            Arg4 = Buffer (One)
                {
                     0x00                                             // .
                }
            Return (Zero)
        }
    }
}

In this example, no matter what name you put into first device Device ("whatever name you want instead BRG0, but I recommend it"). This is due next line: Name (_ADR, Zero). This line referencies the @0 of pci-brigde memory section, so we can scope it with "Name (_ADR, Zero)" line. This fact allows us to recreate a new device under this "brigde" called BRG0 device. So what we need to do next is scope GFX0 device, remember to set @0 as Name (_ADR, Zero), this will allow us to insert _DSM method, (maybe your @number is different.

When all it done, remember to add changes in config.plist. No injection is required.

Greetings.

View attachment 7288

View attachment 7289
The same could have been achieved with DeviceProperties injection and SSDT-Bridge from SSDTTime.
 

lukakeiton

Member
AMD OS X Member
Joined
Jul 26, 2020
Messages
87
The same could have been achieved with DeviceProperties injection and SSDT-Bridge from SSDTTime.
No matter if DSDT changes due to BIOS update and no trouble on working with acpi language. I tried to explain how to get MY device working. With your method, it is not working for me.
 
Back
Top Bottom
  AdBlock Detected
Sure, ad-blocking software does a great job at blocking ads, but it also blocks some useful and important features of our website. For the best possible site experience please take a moment to disable your AdBlocker.