HawaiiBiosReader 290/290X/295X2/390/390X (Hawaii Bios Editing)

HawaiiPowerPlay

Hawaii Bios Editing

When using Hawaii GPUs like the R9 290 on Linux, aticonfig does not provide the ability to change voltages. Even on Windows, utilities such as MSI Afterburner usually have limitations on how much you can increase or decrease GPU voltage. In order to reduce power consumption, I decided to create my own lower voltage BIOS for my MSI R9 290X.

The best tool I have found for Hawaii BIOS mods is Hawaii Bios Reader. To read and write BIOS to Hawaii cards, I use ATIFlash. It runs from DOS, so I can use the FreeDOS image included with SystemRescueCD.

  • In the screenshot above, I’ve circled two voltages. The first, VDDCI, is the voltage of the memory controller. Reducing it to 950 mV gives a slight decrease in power.
  • The second voltage is the GPU DPM0 core voltage. DPM0 is the lowest power state when the GPU is running at 300 MHz and powered by approximately 968 mV. I am speaking approximately because the actual voltage appears to be close to the DPM0 value, but not always accurate. This could be due to the accuracy of the voltage regulator on the card, or the BIOS could use more than just the DPM0 voltage table to control the voltage. The rest of the DPM values ​​are not voltages, but indices in a table that has a formula for the BIOS to calculate the voltage increase based on GPU leakage characteristics. I don’t change them.

For reasons I haven’t figured out yet, the DPM0 voltage in each of the limit tables must match the PowerPlay table. After modifying the four limit tables, the BIOS can be saved and written to the card.

I created modified BIOS files for MSI R9 290X 4GB card with DM0 voltages 868, 825 and 775. With 775mV BIOS, I was able to reduce power consumption by more than 20% compared to 968mV.

Note. Any modified ROM, even with a UEFI / GOP module in it, is technically not UEFI. The legacy ROM partition contains a BIOS signature, which is a hash of hashes of protected tables in ROM. Since the mods we make are in secure tables and we cannot update the signature in the legacy ROM to reflect changes that will fail UEFI checks, so you need CSM support in the motherboard BIOS to use the modified ROM.

I have used all programs related to the German sTOrM41 branch and have successfully edited my Vapor X 290X STD edition biography just the way I wanted.

The flashing was done using the method and files in the OCN 290 -> 290X Unlock branch, look under the R9 290 heading for the Unlock Guide in post 1 and use steps 1-7, skipping step 3.

Before clicking on the spoilers below, please read and follow the rules below.

  • Make a backup copy of the original BIOS on the video card for each switch position.
  • Edit copies of your original bio so you always have your original, unedited bio in case something goes wrong.
  • Do not flash both BIOS positions, at least you will be able to boot from the other if something goes wrong.
  • When you have changed the BIOS, make a copy of it, and once the checksum is fixed on one of them, using HawaiReader or HD7xxx Series UEFI Patch Tool BETA. Compare 2 copies using the compare function in a hex editor to find out only the checksum changed before flashing.

Warning: using this guide to edit your bio will void your warranty (if any on your card). This guide is provided on the condition that the user is aware of the consequences of what he is doing. I am not responsible for damages from the use of this information. Every effort is made to double check the information, but errors are possible.

Additional thanks: Netkas for configuring not to validate signatures, OneB1t helps me with AtomDis, DDSZ to speed up code markup, asder000 for providing the data, Lard for demonstrating how to make a memory timing mod, and The Stilt to create his set of mining rums with different voltages and MLU rums.

What I have achieved to improve performance with BIOS mods

My stock factory ROM set to ref 290X clocks (1000/1250)
My stock factory ROM set to factory clocks (1030/1325)
My stock factory ROM set to 1100/1525
My stock factory ROM set to 1030/1325 with Stilts timings in appropriate strap to boost RAM
My stock factory ROM set to 1100/1525 with stock 1250Mhz RAM timings in appropriate strap to boost RAM performance

What I have achieved by manually setting the VID for each DPM and EVV status

Things to explain:

  1. VID is the voltage the GPU is set to, VDDC is what it gets.
  2. Even when VID is manually set, different applications / loads mean different reported VDDC in monitoring applications, this cannot be avoided due to the way PowerTune / technology works.
  3. Unless you manually set the DPM7 voltage and adjust the GPU clock in ROM, the VID in the EVV setting will decrease as the GPU clock speed increases. Therefore, if you apply the GPU global ROM voltage offset, it will be higher than what you can use when applying the offset in the OC application with the standard ROM.

The next thing to note in my particular comparison is there is no GPU Global Offset in my ROM, but there is a PCB Voltage IC (IR3567B).

On the right is Standard ROM (1), then Standard Clock ROM (2), but only DPM7 manually installed, next is 1090/1475 ROMs (3) and 1100/1525 ROMs (4) manually installed for all DPMs.

Now 1 versus 2, DPM 2-6 is lower at EVV, so the chances of the card possibly being an artifact, say, when reaching these DPM frequencies of the GPU (range). The decrease is due to the increase in GPU frequency over the entire DPM range.

Comparing 2 and 3, we can see that DPM 5 and 6 need a higher VID than the one set by EVV to be free of artifacts at those DPM GPU frequencies (range) when tested. DPM 4 and 2 are lower and DPM 3 is unchanged, I set DPM 1 lower and no side effects so far.

Comparing 3 and 4, we see growth across the board, but the DPM frequency of the GPU has increased, as has the amount of RAM.

My main purpose for this test was to register the VDDC in standard ROM (1) and see when OC’ing (setting a higher GPU frequency on the DPM) added more voltage. If you compare 1 and 3, DPM 7 is equal, DPM6 is up (but higher GPU frequency), DPM5 is almost the same (but higher GPU frequency), DPM 4, 3, 2, 0 all end up lower plus 1 lower, even if not checked in rom 3.

As I can see, this is the standard ROM (1) versus 1090/1475 (3). I ended up with higher clock speeds on the DPM for almost the same / lower voltage as the standard EVV ROM. Even 1 versus 4 seems better as each DPM is higher than standard for really small voltage deviation.

My HML log files, file HMLGPU-Z.zip 33k .zip

Note: In the test above, I used the GPU-Z render test as a graphics load to register a stuck VDDC from a VID, this gives a more linear controlled VDDC value compared to other applications. I used MSI AB to monitor, as did the HML log file, plus set DPM frequency to test with it. My card is sensitive to 3DMark FS graphics test 1, so artifact testing was done with this loop plus Heaven and then Valley run.

Recommended Related Articles:

Leave a Reply

Your email address will not be published. Required fields are marked *