How to: Fix RX 480 & RX 580 sleep issue in 10.13.2

AMD Polaris graphics cards have been a blessing for Mac Pro users since their release last summer. My RX 480 macOS installation how-to detailed progress of driver development as early as Sierra 10.12 beta. There was good news and bad news along the way. Overall Radeon RX GPUs have served Mac users well in both the Mac Pro towers and external graphics enclosures.

With the release of macOS High Sierra 10.13.2 this week, there’s a sleep issue with RX 480/580. macOS can still detect these cards at boot and most features work well, but sleep and wake-up present problems in the Mac Pro tower. The sleep light by the Power button pulsates like expected when the Mac is in sleep mode. However, the GPU itself remains running. Upon waking, you’ll be faced with a black screen and unresponsiveness from the Mac Pro. A force shutdown by holding the Power button is the only way to get it going again.

I found a workaround. I’ve done this modification prior to 10.13.2 to make macOS High Sierra recognize all RX 470/480/570/580 as “Radeon RX 580” in About this Mac. This was strictly a cosmetic procedure. With 10.13.2 though, it helps prevent sleep and wake-up issues in the Mac Pro tower by tricking the system into believing a Sapphire RX 580 Pulse 8GB is installed.

The Sapphire RX 580 Pulse 8GB is the only current generation AMD GPU identified correctly in macOS. This is due to it being used in the Apple external graphics dev kit. There are two part numbers for this particular RX 580, 113-4E353BU-O4E and 113-4E3531U-O4V. macOS checks for either of these part numbers in order to show “Radeon RX 580” instead of “AMD R9 XXX” in About this Mac. This workaround essentially borrows the identity of the Sapphire RX 580 Pulse 8GB so that all Polaris 10 and 20 cards are treated equally in macOS High Sierra 10.13.2. Here’s the procedure:

1. Save the original VBIOS of your RX 470/480/570/580 with ATIWinFlash in Windows. Make an extra copy of the ROM to restore the original VBIOS to your GPU should things go wrong. I used a reference cooler RX 480 8GB for this guide.

2. Take note of the part number in the original VBIOS. In my case, it’s 113-D0090501-101. Open the VBIOS in a Hex Editor of your choice and search for this part number (I used HxD). Replace it with either part number that macOS identifies as “Radeon RX 580”. You’ll notice I added an extra character “1” to the end of 113-4E353BU-O4E because the original part number has one more character than the part number of the Sapphire RX 580 8GB. If the part number of your RX 480/580 has fewer characters, try matching 113-4E353BU-O4E as closely as possible.

3. The new VBIOS ROM will have an invalid checksum and you won’t be able to flash your card with ATIWinFlash just yet. Open this modified VBIOS in PolarisBIOSEditor. It will tell you to save the VBIOS in order to fix this error.

4. Once this is done you can flash your RX 480/580 8GB with this modded VBIOS. If all goes well, macOS will detect your RX 480/580 correctly as “Radeon RX 580” in About this Mac and System Information for as long as Apple supports the Sapphire RX 580 Pulse 8GB.

Keep in mind there are drawbacks to this modification. The first one is BIOS signature enforcement in Windows that prevents AMD drivers from loading (error 43). If you don’t intend to use it with Windows, this is a non-issue. You can also get a card with dual-VBIOS for dual booting. The second issue is video output from the ports. If your RX 470/480/570/580 does not have the same port arrangement as the Sapphire RX 580 Pulse 8GB, some of the ports may not work. On my reference RX 480, one of the three DisplayPort has no output after the modification.

A less involved alternative to fix this issue is to edit the info.plist file inside AMD9500Controller.kext. In macOS 10.13.2, the video output port number for Polaris graphics cards somehow is set to 6. Once you set this port number to a value that matches your RX 480/580, it will resolve the sleep issue in 10.13.2.

1a. Locate AMD9500Controller.kext in /System/Library/Extensions then right click to show package content. Copy Info.plist to the Desktop so that you can edit this file. Keep in mind SIP needs to be disabled.

2a. Find the key CFG_FB_LIMIT in this Info.plist file. Change the value from 0 to a number that matches your GPU’s number of ports. My reference RX 480 has 3 DisplayPort and one HDMI port so that value I used is 4.