I have found a fix for an issue discussed
here and
here
So the problem is compatibility issue between Z590 and Gigabyte Gaming RX580. I have encountered some strange behaviors: using 1 monitor connected the GPU clock is always at stock about 300MHz, but when using 2 or more monitors the GPU clock fluctuated between idle at 300MHz and boost clock (1340MHz). When fluctuating I'm experiencing this terrible audio crackling when listening to music (VLC, YouTube, etc.). When I put load to the GPU the crackling goes away and the GPU clock is always at boost (1340 MHz). So the question now is how to solve this? The only way I have found is to inject a custom PowerPlay table through OC so macOS can clock the GPU higher.
To inject our custom PowerPlay table we need the following:
- GPU-Z to backup our GPU VBIOS
- ATOMBIOSReader to find out the PowerPlay table offset and length
- Red BIOS Editor to tune the PowerPlay table
- HxD to extract the PowerPlay table
- Inject the PowerPlay data into OC
1. Backup our GPU VBIOS
Boot into Windows and backup your VBIOS using the GPU-Z - there is an extract button near the BIOS version label.
2. Tune the PowerPlay table
Open the Red BIOS Editor and tune the power play data.
From
View attachment 537648
To
View attachment 537649
As you can see I have tuned the GPU clock to be the max boost clock and the voltage as well.
Save the changes and close the window.
3. Finding the PowerPlay table offset and length
Run the ATOMBIOSReader and point to the edited BIOS file from the previous step. As a result you will find a text file with all the data we need. Open the file and search for PowerPlayInfo. You will see a row with the following data:
000f: 9be0 Len 0341
So the PowerPlay table is at offset 9be0 with length 0341.
4. Extract the PowerPlay table
Open the HxD app and load the edited BIOS file from step 2. Copy all the data from offset 9be0 with length 0341 (not more not less)
5. Inject the PowerPlay data into OC
Open your OC EFI folder and inject two properties to your GPU:
name: PP_PhmSoftPowerPlayTable
type: DATA
value: the PowerPlay table from step 4
name: PP_PowerPlayEnabled
type: DATA
value: 01000000
Save your config and reboot the machine. Using this method you can even overclock or downclock you GPU and it's macOS only. Other OSes are not affected.
After injecting the new PowerPlay table the GPU clock is always at boost and thre is no more fluctuating between the idle and the boost clock and no more audio crackling. Perfect...... but, the negative thing is the higher power consumption. As for now I have no other options... the GPU prices are crazy and this is the only way to keep my GPU and save bucks. I'm start to think for selling this GPU as soon as posible and buy a 6600XT in the near future.