Sunday, September 11, 2016
Hawaii BIOS voltage modding
When using Hawaii GPUs such as the R9 290 on Linux, aticonfig does not provide the ability to modify voltages. Even under windows, utilities such as MSI Afterburner usually have limits on how much the GPU voltage can be increased or decreased. In order to reduce power consumption I decided to create a custom BIOS with lower voltages for my MSI R9 290X.
The best tool I have found for Hawaii BIOS mods is Hawaii Bios Reader. For reading and writing the BIOS to Hawaii cards, I use ATIFlash 2.71. It woks from DOS, so I can use the FreeDOS image included in SystemRescueCD.
In the screen shot above, I've circled two voltages. The first, VDDCI, is the memory controller voltage. Reducing it to 950mV gives a slight power reduction.
The second voltage is the DPM0 GPU core voltage. DPM0 is the lowest power state, when the GPU is clocked at 300Mhz, and powered at approximately 968mV. I say approximately because the actual voltage seems to be close to the DPM0 value, but not always exact. This may be related to the precision of the voltage regulator on the card, or the BIOS may be using more than just the DPM0 voltage table to control the voltage. The rest of the DPM values are not voltages, but indexes into a table that has a formula for the BIOS to calculate the increase in voltage based on the leakage characteristics of the GPU. I do not change them.
For reasons I have not yet figured out, the DPM0 voltage in each of the limit tables has to match the PowerPlay table. After modifying the four limit tables, the BIOS can be saved and flashed to the card.
I've created modified BIOS files for a MSI R9 290X 4GB card with DM0 voltages of 868, 825, and 775. With the 775mV BIOS I was able to reduce power consumption by over 20% compared to 968mV.