The one thing that gave me some scary moments at the beginning was the dead UEFI/GOP POST when modding VBIOS. I've found some random RX480 GOP image @ overclock.net and to my utter surprise, injecting it over the existing one fixed pure-UEFI POST. However, I don't feel very comfortable with having some unverified GOP code sitting in UEFI memory space, so if you know a reliable & trusted way to fix/replace UEFI GOP, or general Polaris VBIOS modding advice, please do not hesitate to share.
Err, why not restore from your stock VBIOS image - although anyone reckless enough to mod their BIOS w/o taking a snapshot first I suppose deserves whatever they get.
In seriousness, none of my mods have ever touched/messed w/ the GOP/bootup process so not sure what happened. There are only a few hex values you really needs to touch if you're looking solely to lower power usage. I'd recommend doing all tweaking with a tool like WattTool / monitoring in GPU-Z in Windows before burning it into VBIOS (there are no tools to monitor VDDC / exact fan RPM, or to exactly adjust voltage / voltage offsets in Linux). Note, you can do some rough voltage control in Linux since you can select P-states easily and adjust clocks. Also it looks like you can use OhGodATool to do state modifications as well although I haven't dug into it since it was only released recently and I've already hardcoded my numbers into VBIOS; note you can also directly edit the amdgpu kernel memory and specify exact numbers but that doesn't seem like it has an advantage over the alternatives). Note, there is a Linux atiflash executable, although you need to get it either through some mining distros like ethOS, Simplemining.net or from a Russian message board (not the best source for running binaries as root.
So you know, my changes have pretty much been for optimizing mining efficiency, but most of the stuff is pretty applicable so I'll go through my list:
- VDDC offset for the Nitros are default 4 (25mV) - I've changed it to 0, make math easier?
- You can optimize in a bunch of ways, but for my use case, I aimed for maximum RAM-speed at 1500-strap memory timings (memory Voltage is hardware controlled at about 1.5V and you can't change it, the VDDCi adjustment is only for the memory controller voltage) and then I work from there. For me, mostly I can get reliably around 1940-1960MHz (although one of my cards does 2080MHz w/o breaking a sweat) and I can usually lower memory core voltage to 960mV w/o issues
- From there I lower my clocks to the point where I am still at 100% controller load (or looking at reported performance and calculating against GPU-Z's GPU W and VDDC) - there's a sweet spot where you're trading off several percent power usage for each 0.1% perf gain. In any case, for my use cases I usually end up clocking my P7 around 1160-1240 at around 900-960mV. You can get much lower w/ sometimes slightly lower clocks but for a general low power use case, I'd just pick a voltage/desired power consumption level and optimize clocks from there. For those reading along, Sapphire clocks their stock Nitro+ 470s at something like 1260MHz/1130mV
- These basic changes should be it, but I noticed that very occasionally on some cards sometimes VDDC is way higher than it should be (like maxed out) so I've done my best to limit the impact of that - I lower my PowerPlay percentage to 0% (disabling it basically) and for Powertune I've locked down Max Power to slightly above my GPU-Z W reading and also lowered the max temp (from 90 to 85) which should reduce any chance of thermal runaway - if you're passively cooling, maybe lowering the shutdown temp a few degrees might also be a good idea.
- Although in your case it doesn't apply, just for completeness listing changes, I've adjusted my fan curves a bit - target temp I've lowered from 75 to 72, min PWM I've set to 25% and Max RPM I've increased from 2200 to 2400 although
For some more concrete numbers, I have an A1638 Nitro+ 470 that has a decent 78.3 ASIC score / Elpida RAM that I run w/ GPU 1280MHz/960mV and Memory 2080MHz/960mV that averages measured GPU W of 86.2W, VDDC 0.9815V and fan RPM 965 @ 72C at full memory workload.
I just picked up an A1639 Nitro+ 470 w/ a crap 72.5 ASIC score / Elipida RAM. The memory doesn't go above 1950 MHz w/o starting to get some screen corruption, so I run i at GPU 1180MHz/900mV Memory 1940MHz/960mV. Measured GPU W is 71.3W and VDDC 0.9501, fanspeed also around 1000RPM.
(GPU-Z's GPU-only W of 70-75W equals about 100W or so total card usage)
Oh, while the Linux AMD drivers don't do a BIOS signature check, you'll need to run atikmdag-patcher to run w/ customized BIOSes w/ most recent Windows Drivers (like 16.4 and up or something like that).