[Guide] How to Modify a Polaris (Radeon RX Series) GPU

I can’t see it being anything else. Vendors knowing samsung takes more power could’ve simply put mid-power components or worse, built PWM firmwares with power limit on memory phase, to avoid overheating, damages and too many RMAs.

If i worked with desktop card, i’d try to find a real single 80A mosfet, remove the two in parallel and use only one. Already got a pair of 39A mosfets for my system (should be enough since there are 4 VRAM chips) but still need to find inductor. Not in a hurry as i won’t have time for this untill october.

PWM firmwares are rarely discussed, probably because most of users can’t flash these. Russian servicemen know which hw/sw tools can program these if needed.

While the general impression was that raising core clocks on polaris doesn’t do much, i found this isn’t really true.
Recently been testing 1400core/1900mem profile, and indeed furmark results indicate there is maybe 1FPS more gained when OCed core from 1200 to 1400 mhz, either windowed or fullscreen mode.

In UT4 i tested this in FR-Fort, every time i was getting about 3FPS more with 1400mhz clock, it wasn’t a coincidence.

So i ran valley benchmark (opengl rendering, vsync off, highest graphic settings) at 1200/1900 mhz profile and got 34.2 FPS, OCed to 1400/1900mhz and repeated benchmark, higher frame rates noticed immediately during a couple of first few scenes, the end result was 38.2 FPS which is full 4 FPS better after just raising core by 200mhz.

Temperatures do get in 70-80C range, but I’m quite sure i can lower them by 10C with new cooling compound for memory/VRM and small cooling modifications

Added screenshot to know which test the preset/max values belong to

You’re dealing with a mobile part, goalposts for optimal performance to power/heat output will be different to that of a desktop 400/500 series part. In the case of desktop parts it’s entirely possible to get a lower clocked RX580 to perform the same as an RX590 the 580 just requires more power to do it so on average it’s not worth doing. Only Polaris desktop card worth seeking out these days is an RX590 but if you REALLY can’t find one, or not at a sensible price at least, then an 8GB RX580 isn’t a completely horrible choice. The bottom line remains the same though the vast majority of RX580s optimal performance to power/heat output will be in the region of 1.35-1.4GHz while the RX590 will be 1.5-1.55GHz. In terms of memory on average unless you get Samsung both cards will do 8.8-9GHz with very good timings.

Hi buddy, I’m talking to you and to anybody who could give a hand here… I really need to boot uefi, since my lack of gop drivers on my rx 580 8gb is preventing me from using an additional screen like a tv, and the display port does not send signal at all. It also gives me a lot of trouble when installing different oses other than windows. Which I am using at the moment.
Honestly you all speak like you can use the magic gop updater no problem, but there is no guide on how to actually make it work, and I feel a lot stupid but that is the reality of things.
So I dumped my vbios with Gpu-z. When I drop the .rom file on the gopupd.bat, being both on the same folder, that’s what i get:

Then I don’t know what to do with the GOPupd.zip file:

So, after extracting the files in his subfolder: ~\GOPupd x.xx.x\GOPupd\

I get the same result.

After extracting all the files in the same folder: ~\GOPupd x.xx.x
Same result again.
Apparently I miss some knowledge here, but you’d be very kind if you could explain a few more steps to get the rom updated with the gop drivers. Then flashing it on the gpu shouldn’t be a (big) problem.
This issue is really starting to giving me headaches!!
Thanks in advance to anybody willing to help.
Have a good night everybody.

@SauceCatto I never bothered with magic GOP but I do know there are two versions, one for nvidia, one for AMD, make sure you have the one for AMD. TBH I never saw the point or need to do the GOP so never bothered with it when I was using/messing with Polaris cards. One day I might pick up an RX590 for the sake of posterity though - last card you could truly mod and customise.

It can’t detect multiple monitors, and it can’t boot oses in uefi mode, just csm.
So Basically every linux distro that doesn’t have legacy support. That is what is missing. Gop drivers for the mobo. I don’t know if the prior user of this card modded it and then sold it as it was fully fuctional or not, but many have this particular issue with this card. That is why I need to mod the vbios. I don’t even care about bricking it, because it’s messy on windows 10 as well. A lot of glitches!
Thanks for your contribute, though.
To anyone willing to help,
That’s my request thread:

@SauceCatto to the extent I did bother to check even with a modded vBIOS the cards I messed with worked with dual monitors (HDMI & DP) with and without UEFI mode enabled in the mainboards firmware but that was on Windows and TBH I think MSI have a severely broken UEFI mode on their boards, when in the system firmware setup the resolution doesn’t change when enabling\disabling UEFI mode even with my 6800XT and when I raised the issue with MSI they basically brushed it aside with a feeble excuse. The issue could probably be resolved by simply having an option that forces the resolution you want alongside the UEFI mode toggle but as far as I’ve seen even on boards that have that option it is bizarrely hidden from the user. Dumbassery at its finest right there.

I confirm all about the dumbassery. I also contacted MSI support… It got me nowhere. So, just about now a guy answered my request with the vbios I need… At least I can try and see if it changes anything, since bricking it or not, the card is unusable anyway for me…

Hello, i have a Sapphire RX 590 Nitro and i only changed a couple fan settings and applied one click timings patch just to see how the card reacts to a modded bios before going deeper. It flashed without a problem, but now AMD adrenaline does not work anymore, saying that the current AMD software is not compatible with the driver installed and im also getting code 43 in device manager. Any ideas how to fix it? I also tried the Pixel Clock Patcher, but it made no difference

RX590 has a driver level lock, you need to change the vBIOS so the card thinks it’s a RX580. The driver will install and run without issue then.

How do i change it to RX 580?

btw ket is right, i’m using rx 580 with modded vbios and everything works.

@karalux I show people in the guide how to change the GPUs identity, or you can use Radeon BIOS Editor to do it if you’re more of a novice.

Hello @ket , and everybody !
I’m a user of an Sapphire RX 580 8GB Nitro + card with Hynix memory. I used to use this card tuned in the Adrenalin software as like this : Core at default 1411 Mhz, and Memory was at 2050 and Memory timing level 1, which was resulting in a 210-212GB in POCLMemBench. But recently in Windows 11 and 23.11.1 Drivers I’m faced with couple of issues. First if I want to adjust my core voltage for state 4 - 1215Mhz to less than the default 1193mv, which sits strange, I receive a black, blue screen, and I have to cold reboot the system. Other issue is whenever I normally reboot or startup the system in the morning I receive a message which states that the system has crashed therefore my settings in the Adrenalin driver are back to default. Nevertheless that my system has never crashed.

So I decided to try and modify my BIOS and tune the memory with better timings at 2000Mhz, and just run it like that and stop messing with the Adrenalin software, because all of this Windows 11 and Driver issue is very annoying.

My card has a ASIC Quality of 73.3%. I took the default strap for 2000Mhz and followed this guide, and the part where @ket is explaining the memory timings and I just copy the values that he is suggesting. So my question is, are these settings good, am I safe to flash this rom back to the card. I’m afraid that I might crash the card and not be able to boot in to Windows and undo the changes.

These are the settings that I did :
777000000000000022889D0073EE7D4BA0551514418DC60B0047A4000E0A14204A8900A0030071241A143840BC324418
####SEQ_WR_CTL_D1####
DAT_DLY = 7
DQS_DLY = 7
DQS_XTR = 0
DAT_2Y_DLY = 0
ADR_2Y_DLY = 0
CMD_2Y_DLY = 0
OEN_DLY = 7
OEN_EXT = 0
OEN_SEL = 0
ODT_DLY = 0
ODT_EXT = 0
ADR_DLY = 0
CMD_DLY = 0
####SEQ_WR_CTL_2####
DAT_DLY_H_D0 = 0
DQS_DLY_H_D0 = 0
OEN_DLY_H_D0 = 0
DAT_DLY_H_D1 = 0
DQS_DLY_H_D1 = 0
OEN_DLY_H_D1 = 0
WCDR_EN = 0
####SEQ_PMG_TIMING####
TCKSRE = 2
TCKSRX = 2
TCKE_PULSE = 8
TCKE = 24
SEQ_IDLE = 7
TCKE_PULSE_MSB = 1
SEQ_IDLE_SS = 0
####SEQ_RAS_TIMING####
TRCDW = 19
TRCDWA = 19
TRCDR = 27
TRCDRA = 27
TRRD = 7
TRC = 75
####SEQ_CAS_TIMING####
TNOPW = 0
TNOPR = 0
TR2W = 26
TCCDL = 2
TCCDS = 5
TW2R = 21
TCL = 20
####SEQ_MISC_TIMING####
TRP_WRA = 65
TRP_RDA = 26
TRP = 26
TRFC = 188
####SEQ_MISC_TIMING2####
PA2RDATA = 0
PA2WDATA = 0
TFAW = 7
TCRCRL = 2
TCRCWL = 4
T32AW = 5
TWDATATR = 0
####ARB_DRAM_TIMING####
ACTRD = 26
ACTWR = 20
RASMACTRD = 56
RASMACTWR = 64
####ARB_DRAM_TIMING2####
RAS2RAS = 188
RP = 50
WRPLUSRP = 68
BUS_TURN = 24
####MC_SEQ_MISC####
MC_SEQ_MISC1 = 0x20140A0E
MC_SEQ_MISC3 = 0xA000894A
MC_SEQ_MISC8 = 0x24710003

This is the default settings :
####SEQ_WR_CTL_D1####
DAT_DLY = 11
DQS_DLY = 11
DQS_XTR = 0
DAT_2Y_DLY = 0
ADR_2Y_DLY = 0
CMD_2Y_DLY = 0
OEN_DLY = 11
OEN_EXT = 0
OEN_SEL = 0
ODT_DLY = 0
ODT_EXT = 0
ADR_DLY = 0
CMD_DLY = 0
####SEQ_WR_CTL_2####
DAT_DLY_H_D0 = 0
DQS_DLY_H_D0 = 0
OEN_DLY_H_D0 = 0
DAT_DLY_H_D1 = 0
DQS_DLY_H_D1 = 0
OEN_DLY_H_D1 = 0
WCDR_EN = 0
####SEQ_PMG_TIMING####
TCKSRE = 2
TCKSRX = 2
TCKE_PULSE = 8
TCKE = 24
SEQ_IDLE = 7
TCKE_PULSE_MSB = 1
SEQ_IDLE_SS = 0
####SEQ_RAS_TIMING####
TRCDW = 19
TRCDWA = 19
TRCDR = 27
TRCDRA = 27
TRRD = 8
TRC = 83
####SEQ_CAS_TIMING####
TNOPW = 0
TNOPR = 0
TR2W = 26
TCCDL = 2
TCCDS = 5
TW2R = 21
TCL = 23
####SEQ_MISC_TIMING####
TRP_WRA = 67
TRP_RDA = 30
TRP = 27
TRFC = 219
####SEQ_MISC_TIMING2####
PA2RDATA = 0
PA2WDATA = 0
TFAW = 14
TCRCRL = 2
TCRCWL = 4
T32AW = 9
TWDATATR = 0
####ARB_DRAM_TIMING####
ACTRD = 28
ACTWR = 20
RASMACTRD = 56
RASMACTWR = 64
####ARB_DRAM_TIMING2####
RAS2RAS = 219
RP = 50
WRPLUSRP = 68
BUS_TURN = 24
####MC_SEQ_MISC####
MC_SEQ_MISC1 = 0x20140A0E
MC_SEQ_MISC3 = 0xA000894A
MC_SEQ_MISC8 = 0x24710003

I really would appreciate any help, suggestion.

P.S In the BIOS editor I want to set a manual voltage for state 4 1215MHz to 1135mv, is it safe to just manually type it like this : 1135 ? I know that this setting is stable in general.

Thank you in advance.

This strap is just wonderful. I’ve managed to hit 2150MHz at this point, will test further, but even like this is very good. POCLMembench hits 220-226GB. Thank you so much ! This is with Sapphire Rx 580 Nitro+ 8GB with Hynix Memory.

Regarding editing the IMC voltages using the Hex editor and finding the “B6 03” value and change it for the “00 3C”, in backwards, “00 3C” is not correct. This should give you 960mv, but I ended up with completely unreal value : 15 360. I was not sure about “00 3C” but I tried it, and Adrenalin Driver crashed. So HeX “3C0” is 960. To write this backwards in the BIOS the correct way is : “C0 03”. So I did that and now I have 0.960v reported i AIDA64, and all is well.

@Vlad00n those sequential ras timings are still very relaxed. 16-16-26-26-6 should work absolutely fine up to 2150-2250MHz. sequential cas and misc timings can also be improved quite a bit and the arbitrary dram timings as well. Voltages are numerical only with no decimal points. 0.9v would be 900, 1.1v = 1100, etc.

Hello @ket
With this strap and 2150 Mhz on the memory for 2 hours of gaming FH5 I had 24 memory errors in HWinfo64. Then I’ve decided to change the Memory controller voltage from 0.950 to 0.960 and the memory errors for now are gone. About decimal point, I know, sorry about that. My point with the HeX was that I tried the value suggested by you 00 3C but that crashed my video Driver. Then I put C0 03 and this was equal to 960mv, and all was working correctly. I’ll appreciate any other suggestions regarding the strap, If you could share a new one, better one. At this point I’m happy at 2150, but I might test with 2175 Mhz on the memory.

Thank you for your time.

@Vlad00n memory timings are subjective depending on if you are aiming for highest possible frequency with lowest possible timings or simply running stock frequency with tight timings. If you want the latter start with a TRRD of 5 or 6 and IMC between 0.9v - 0.96v. If you want the latter start with a TRRD of 7 (8 is only really needed when pushing for 2300MHz+ but efficiency starts taking a hit at this point). Any 580/590 card I tested I generally settled on 2200MHz as that was always the optimal speed to efficiency barrier but not all memory is going to be able to hit 2200MHz it’s a pretty hard slog getting a card stable at that speed, 2150MHz is much easier and if you are looking for maximum speed at lowest possible voltage for power efficiency then definitely aim for 2150MHz as the IMC should be perfectly happy running that speed on 0.85v-0.9v.

@ket I’m not aiming for higher clocks, 2150-2175 is the max that I want. At this point I have 1411 Mhz Core with 1085mv, and memory with the strap that I thanked you about with 2150 and 960mv on the Mem controller. Don’t want to push more voltages to the memory, neither to the core, these settings are good for me. I would like to keep the card cool and efficient as you said. If you have any suggestions for a bit better timings, I would happily test them. And this will be my final tuning of this card :slight_smile: