Contribute
Register

[Success] AMD RX6000 Series working in macOS

Congrats on your VBIOS success @byteminer

'm not aware of OpenCore supporting any kind of VBIOS shenanigans. It would be rather concerning if it did, imho.
Flashing/modifying a VBIOS should be a rather deliberate act in all cases.

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.
 

Attachments

  • GPU.VBIOS.example.dsl
    914 KB · Views: 126
Last edited:
Given everything written here, what’s your probability % that RDNA 2 GPUs will be supported? I’m still confused if I should buy. MacOS is my primary OS.
It's supported already in the Big Sur 11.4 RC I have installed, but from AMD 6800 and higher. Not yet for 6700. Enjoy!
 
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.
Interesting!
I'll try to give this a shot with my setup and if it works I'll post the results here.
 
Interesting!
I'll try to give this a shot with my setup and if it works I'll post the results here.
Be aware that the ATY,bin_image should be exactly 64KB. If you dump your BIOS you'll likely get a file that's larger than that, I think because it contains both legacy and UEFI BIOS.

Here's the method I used:

1. Booted as normal, I used the following command to write my existing ATY,bin_image value (from IORegistry) to a file:
Code:
$ ioreg -arw0 -d1 -n GFX0 | xpath '//key[.="ATY,bin_image"]/following-sibling::*[1]/text()' | base64 -D -o ./ioreg.vega64.bios.rom

2. I then dumped my VBIOS using.. some tool, I forget which.

3. In Hexedit, I then compared the file extracted from ioreg with my dumped bios, to work out which 64KB of the dumped BIOS was the correct part

4. Then I converted that to DSL as described before.

It may well be simply the first 64KB, but I can't remember for sure so the above method should figure it out for you.

In your case the procedure would be: boot with the flashed VBIOS, do the above steps and create a DSL, reboot with the DSL and confirm it boots, then flip the VBIOS switch on the card to the non-flashed VBIOS and see if you can still boot. If so, the flashed VBIOS is being correctly applied by SSDT alone.
 
Not sure if that will work with the RDNA 2 GPUs since the ATY,bin_image isn’t being exposed to the OS, like it did with earlier GPUs.
 
Interesting!
I'll try to give this a shot with my setup and if it works I'll post the results here.
yes please do, if you can find a way to do it that doesn't involve flashing card I will use my card right now. I'm not not willing to risk bricking a 2,500 dollar card
 
Alas, my first try at this did not yield a functioning result. This is most likely due to what @Pavo mentioned, since the new breed of GPU's do not appear to offer ATY,bin_image at all, even when genuine.

This made it impossible to extract the working, flashed VBIOS from a running system. Instead, I manually took the first 64k bytes from the VBIOS that I flashed, made a small Python script to print it in a MaciASL-compatible format and put that into an SSDT.

I then did two things:
- Boot with the flashed VBIOS and the SSDT, just to see if anything attaches. It did not.
- Boot with the genuine VBIOS, which led to a hang-up in the middle of the boot process.

The hangup could stem from me not taking the correct 64k bytes, or alternatively it could be because this is not something that's possible anymore at all. Unfortunately, since the cards don't have their VBIOS attached in IOReg anymore, I can't tell, since I'm operating "blind". I might try a few other things if I can think of something, but for now the night seems dark and full of terrors.
 
Me too

Good for yo
Congratulations to everyone on finally having your GPUs working. I’ve been lurking this thread since it’s conception.


Currently operating on a Radeon VII and have been holding off on getting a 6900XT until it was fully supported.


Would anyone advise against doing so?


If I recall correctly, @pastrychef you had a Radeon VII. Do you think it’s a worthwhile upgrade?
I would advice against it if you’re looking for gaming.

5700 XT to a 6800 XT yielded 0 benefits.
However, the 6800 XT booted OOB with .4 RC. So it’s pretty much the same as the 5700 XT
 
Alas, my first try at this did not yield a functioning result. This is most likely due to what @Pavo mentioned, since the new breed of GPU's do not appear to offer ATY,bin_image at all, even when genuine.

This made it impossible to extract the working, flashed VBIOS from a running system. Instead, I manually took the first 64k bytes from the VBIOS that I flashed, made a small Python script to print it in a MaciASL-compatible format and put that into an SSDT.

I then did two things:
- Boot with the flashed VBIOS and the SSDT, just to see if anything attaches. It did not.
- Boot with the genuine VBIOS, which led to a hang-up in the middle of the boot process.

The hangup could stem from me not taking the correct 64k bytes, or alternatively it could be because this is not something that's possible anymore at all. Unfortunately, since the cards don't have their VBIOS attached in IOReg anymore, I can't tell, since I'm operating "blind". I might try a few other things if I can think of something, but for now the night seems dark and full of terrors.
Try adding this VFCT.aml to EFI -> OC -> ACPI folder and in the config with your original VBIOS switched over.
 

Attachments

  • VFCT.aml
    36 bytes · Views: 96
Back
Top