I have created a patch that allows AMD RX6600/RX6800/RX6900 cards to work on a Mac Pro 4,1/5,1 (and maybe a 3,1? I have no idea if that's even possible). I examined ROM dumps of RX6600/6600XT and RX6800/6800XT/6900XT from various manufacturers, and every one I looked at used the same (broken) AMD reference code in the x86_64 EFI section (the manufacturer-specific differences are in the non-EFI section). While it's certainly possible that some cards won't do that, it looks like a one-size-fits-all patch may be possible here. (
As with all such things, this comes without any warranty, use at your own risk, the usual caveats apply.)
I do not possess an RX6x00 card to test with. @caingraywood was generous enough to perform tests on his XFX SWFT309 RX6800XT and Sapphire Nitro+ RX6900XT cards. Many
thanks to
him.
(
NOTE that this has been tested on RX6800XT and RX6900XT, but the RX6600/6600XT has NOT yet been tested. There is no reason it shouldn't work, but you should be aware that if you try it, you're the tester. Please let me know if you do try an RX6600/6600XT.)
Because I don't have one of these cards, I can't offer any real assistance with the flashing process. As I understand it, the ATIflash/AMDVBFlash utilities will work with the RX6x00 cards, but you'll need to investigate this on your own (and hopefully post your findings here, so others can benefit as well). (Note that
@caingraywood was using a hardware flasher for his tests, so I don't think he can offer software flashing advice, either.)
Attached is a ZIP file containing a MacOS program named
FixRX6x00ROM
. It's a command-line program you run from a Terminal session. You should not need any special permissions; however, programs sometimes lose their executable mode bits when using ZIP, so you may need to execute
chmod 755 FixRX6x00ROM
after unzipping.
You'll need to acquire a dump of your current ROM, using whatever means you have available (ATIflash/AMDVBFlash/other). Once you have that,
make a copy and put it somewhere safe, then you can run
./FixRX6x00ROM {filename}
from a Terminal session (e.g.
./FixRX6x00ROM RX6800XT.XFX.SWFT309.original.BIN
)
FixRX6x00ROM
does the following:
- Reads the dump of your current ROM, verifies that it's of the expected format
- Searches the dump of your current ROM for the AMD Reference code (6600 or 6800/6900).
- If the AMD Reference code is found, replaces it with the correct (6600 or 6800/6900) patched code.
- Creates a patched file named the same as the original, but with ".PATCHED" appended (e.g.
RX6800XT.XFX.SWFT309.original.BIN.PATCHED
). Your original ROM dump file is left unmodified.
If your current ROM does not appear to be properly formatted, or it does not contain the AMD Reference code,
FixRX6x00ROM
will display an appropriate message and do nothing else. If the patcher fails for your ROM, please zip up the ROM dump and
PM it to me. I'll take a look at it when I can.
If
FixRX6x00ROM
successfully patches your ROM, you can then flash the patched ROM back to your video card (again, using whatever means you determine to be appropriate), and it should then work with MacOS.
IMPORTANT NOTE: apparently, for the RX6x00(XT) to work with MacOS, you'll need to be running OpenCore, WhateverGreen, Lilu,
and include
agdpmod=pikera
in your boot-args. Failure to do this will almost certainly result in a black screen after booting. (Again, I don't have a card to play with, so any questions regarding the boot-args or the specific configuration of OpenCore, WhateverGreen, and/or Lilu need to be asked of someone else.)
The patch itself is only five bytes. The EFI code in the ROM is compressed, though, so making any change causes the entire EFI section to change - that's why, if you compare your original ROM file and the patched ROM file, you'll see a lot more than 5 bytes changed.
IMPORTANT: This patch does not attempt to provide pre-boot support (e.g. it won't let you see the native Apple boot picker). If you require that, MVC apparently provides that functionality. This patch simply fixes the bug in the AMD code that prevented the card from booting properly. With the patch, these cards should behave just like any other non-Mac video card - black screen until either OpenCore initializes or the MacOS drivers load.
ALSO: The patch does not modify clock speeds, temperature thresholds, timing data, or anything other than the EFI initialization process - if you've tweaked your card, the tweaks should still be there after patching (alternatively, you can tweak the card after patching as well, assuming your tweak program doesn't overwrite the patch).
The patched ROMs have also been tested on a non-Mac system. The nature of the patch is such that it shouldn't affect operation on non-Mac systems (i.e. it should work just fine on a Windows or Linux system), and small-scale testing supports that. I'm interested to hear if anyone finds an exception where a non-Mac doesn't work properly.
And before anyone asks: even though patching the Mac Pro BootROM seems like the cleaner solution (which would allow these cards to work unmodified), that's a much larger project that creates some new problems of its own. In this case, patching individual cards is actually the better solution, at least IMHO.
[EDIT: to cut down on the back-and-forth between MacOS and Windows during this process,
in a later post I attached both a Windows (command-line) version of the patcher program and copies of various RX6x00 ROMs from TechPowerUp, already pre-patched.]
Courtesy of
@caingraywood:
And now, back to the AVX integration problem that's been driving me up the wall...
[EDIT (for clarity): that last sentence refers to my AVX emulator, which is an entirely separate project that has nothing to do with the RX6x00 patch. I only detoured into the RX6x00 code because I was frustrated with the AVX project.]