This guide will show you how to modify your GPU’s BIOS to be able to get a bit of additional hash-rate over the stock settings. In this example we will be using a later generation AMD Radeon RX470 video card as the example, since it is currently a popular card to mine Alt coins, such as Ethereum with. Most of the procedures shown are similar for the RX480 and RX460 series as well.
Utilities used or mentioned in this guide:
ATIFlash 2.74 – download here
Polaris BIOS Editor – download here
Claymore’s Ethereum Miner – download here
Out of the box and with default settings a RX470 card will run approximate 22-23 Mhash/sec using Claymore’s latest mining program. Even if we try to adjust the core and memory clocks, we will get very little if any increase in hash-rate. The trouble it seems is in the timings programmed into the Video Card’s BIOS (VBIOS) by the manufacturer which limit the effects of any overclocking in regards to increasing mining hash-rate.
By applying a simple modification to the VBIOS, one can adjust these settings somewhat and achieve a significant gain in hash-rate, often gaining 3-4 Mhash/sec over the default VBIOS settings. Using the MSI RX470 as an example, I went from 22.5 Mhash/sec using defaults with 1145/1500 timings to just shy of 26 Mhash/sec by modifying the VBIOS. This is an increase of 3.5 Mhash/sec or nearly 15% improvement over the stock hash-rate. I was also able to reduce the core clock to 1050 MHz and increase the memory to 1850 MHz, where previously these changes would not only be unstable but would have little to no effect on the cards hash-rate.
First off though, I will start with the standard disclaimer. Modifying the VBIOS on your video card can result in permanent and unrecoverable damage to the graphics card, resulting in a card that is non-boot-able and unusable. This is also known as “bricking” in slang terms, as you essentially can turn that $200 GPU into the functional equivalent a brick. This guide is meant for informational purposes only and you assume any and all risk of any attempt to modify the VBIOS on any video graphic cards on your own.
While the risks are always present, by taking certain precautions you can minimize these to some degree. First of all before flashing or even considering flashing, make sure your system is stable. If you are experiencing random crashes or other symptoms of instability, resolve those issues before trying to modify the firmware on your video cards. Also use common sense and don’t be attempting to flash during a thunderstorm or other time when you may unexpectedly lose power. The best bet would be to have a UPS unit powering the computer you use for flashing.
Now with that out of the way let’s begin. The first thing you will need is a flashing utility. For this guide we will use the ATIFlash 2.74 (latest version) utility available from the TechPowerUp website. Download the file and extract the contents to somewhere easy to find, this can be your desktop as shown in our example below.
You will need to launch the program by opening the folder and right clicking on “ATIWinflash.exe” and selecting “Run as Administrator” as shown above. If you do not launch the program as administrator it will error out as it requires this privilege to make changes to your system, namely reading and modifying your graphic card’s VBIOS.
It may take a few moments for the ATIWinFlash program to load as it reads some information from your GPU BIOS as it loads. In some cases you may get an error message similar to “Unable to read ROM”. If this happens see the troubleshooting section at the end of this guide for some pointers.
The basic layout of the ATIWinFlash GUI is pretty straightforward. At the top in “System Video Devices” you should see a listing of your currently installed graphics cards. There is a little icon next to the graphic card with an active device, or in other words the one your screen is attached to. This helps make identifying your card order easier in the case you have multiple GPUs installed, as in this example which shows three cards.
Next we have a section “ROM details” which shows the current VBIOS for the card that is selected via radio button in the top section. This section also has three buttons to “Load Image” (BIOS from file), “Program” (only available once an image file has been selected) and a “Save” button to save the current BIOS image.
The first thing you are going to want to do is to save off a good copy of you original VBIOS ROM file. In fact it is a good idea to save this off in two places, one with which to work with and another safety copy that you put somewhere as an fail-safe backup. So go ahead and select one of your video cards with a factory unmodified BIOS and then click on the “Save” button.
A “Save As” folder browser window should appear as shown in the image above. Make sure to name your BIOS file something meaningful as in the above example. In my case I created a new folder “BIOS” inside the atiflash directory to be a working folder for my VBIOS images. I saved one copy of the original VBIOS here to work with and I also saved off another copy to a USB drive which is my safety copy as discussed above. While technically the “original BIOS” in my working folder will not be modified, mistakes do happen and it could accidentally be overwritten while opening and modifying in the next step, so I think abundance of caution is warranted, and saving off an extra copy or two only takes an extra minute, so go ahead and do it already.
Once you have copies of your original unmodified VBIOS saved, we can move on to the next part where we will modify the contents of the BIOS. For this portion we will need a BIOS editing program. For the Polaris series cards AMD RX 460, RX 470, and RX480, there is a tool appropriately named PolarisBiosEditor that we can use. You can download a copy of the latest version (1.4 as of this writing) from its GitHub page here.
This guide will only cover the basics for a simple modification, but much more information on its usage and detailed support for the PolarisBiosEditor can be found on its support thread at OverClock.net.
The PolarisBiosEditor is a standalone exe, so once you have it downloaded, you can simply double click on it to launch the program.
A disclaimer window will appear warning you of the dangers of modifying your VBIOS, so read through that warning carefully and if you accept the terms click on OK to continue. If you do not accept these terms, click on the upper right X to close the window.
Again, these tools can permanently cause damage to your video card if the instructions are not followed carefully, and even then sometimes data corruption an occur. Please be sure you are willing to assume these risks before continuing on.
Once agreeing to the terms of the disclaimer, the main program window will open as shown below.
To start you will need to load a VBIOS image by clicking on OPEN. Navigate to the folder you saved your original VBIOS to above and select the image file. In my example it is “MSI_RX470_Original_BIOS.rom”.
Once the VBIOS rom image is loaded, the Polaris BIOS Editor will show many different aspects of your GPU as can be seen in the image above. The section we are concerned about in this guide is the “Timing” section on the bottom right. Here we are going to copy the values from the memory “strap” of 1500 (highlighted in green) to the 1625,1750, and 2000 field values (highlighted in red). You can simply copy and paste these values so all the sections are the same.
I recommend copying the 1500 value string into notepad first to be sure you have the whole value copied correctly. You can use your arrow keys to navigate the whole string by inserting your cursor into the field and scrolling from the beginning to end to be sure all the copied characters are the same. Then simply delete the contents of the 1625 field and copy in the value from the 1500 field. Repeat this with the remaining 1750 and 2000 fields.
The end result should look similar to the image below, but please note that your values may be different from mine depending on your card. This is one of the reasons for modifying a copy of your own card’s VBIOS, as simply flashing a image of someone else’s mod could be substantially different that your own cards values. In this example we are simply transferring working settings from our own card to higher memory timings.
Once you have the timings copied over and verified that they are identical, you can click on SAVE to save a copy. Please be sure to name it differently so you can tell it apart from the original BIOS file that we do not want to change. In my case I usually name them something like “MSI_RX470_Modified_1500.rom”, which will indicate the manufacturer, model, that it is modified, and what modification I made, in this case transferred the 1500 timings. If you only have one make/model your naming can be simpler, but be sure to clearly differentiate the modified versus original versions.
Once this is done we can close out of the Polaris BIOS Editor and reopen the ATIWinFlash utility. This time we will be using the “Load Image” button to load in the new modified image we had just saved from the Polaris Editor above.
Now one last warning. Up until this point everything we have done hasn’t actually changed anything on our Video card. We have so far simply saved a copy of the original VBIOS and made a new Modified version of that VBIOS image, but haven’t actually made any changes to the card. This next step will perform that action, so be 100% sure of what your are doing at this point and understand that we are now going to actually be loading your modified VBIOS image into your GPUs ROM.
So with the modified image file displayed in the Filename section as shown above, the last step is to actually Program the image into the card. You do this by clicking on the “Program” button. There is not a lot of feedback on this step and your screen may even freeze up for a minute or two, but once it has completed you should get a message indicating the VBIOS has been successfully programed and you will be asked to reboot for the change to take effect.
One note of recommendation, the first time you use the utility it can be unnerving as it may appear to you that your computer has locked up. Please be patient and let the process complete. It can take well over a minute, perhaps even two, to complete and this is a critical stage in the process, so any disruptions could be catastrophic. So the best advice if you are becoming impatient is to walk away for a couple of minutes and come back to allow adequate time for the process to complete. Frantically trying to restore functionality or worse rebooting at this point will only lead to a bad outcome.
If you have multiple cards you can decline the reboot portion and image them all sequentially, but if this is your first time, I would recommend flashing them one at a time with a reboot in-between and testing each one out first before moving on to the next.
Once you are done, you should see an immediate effect when running your cards, even at default clocks. I usually go from 22.5 Mhash/sec before flashing to ~24 Mhash/sec after flashing wihout changing anything. By bumping up the memory clock to 1850 MHz and decreasing the GPU clock a bit I can usually dial in right around 26 Mhash/sec with just these changes. You could try to push harder, but I like these settings as I can then begin to adjust the default voltages down within Claymore until I see about a 10 Watt savings per card in both GPUz and the at-the-wall readings from my Kill-a-Watt meter.
A few tips I have learned along the way when I have encountered issues when trying to flash:
- When launching ATIWinFlash you get a “Unable to read BIOS” message. I have found this can be resolved by rebooting and going into your computer BIOS and looking for a PCIe speed setting. The exact location and name will vary by motherboard, but you are looking for something to change the default speed, usually from auto and lower this to Gen1, or Gen 2. Since mining doesn’t require the full bandwidth of the PCIe bus, you can get by with Gen1 speeds just fine.
- Due to the layout of the ATIWinFlash program you are usually limited to three GPUs before the additional ones run outside the console area. If you are setting up a >4 GPU rig, you may have to swap in and out cards until they are all flashed. If you are a larger miner with multiple rigs, I would suggest dedicating one smaller rig as your bench unit. I have a smaller 2-GPU rig I use for not only flashing new cards, but to test new settings and generally experiment with.
For reference here is a data table I put together in trying to find the best core/memory clock ratios to use at default voltages. This data gave me a reference point to which I could further work on finding power reductions. The VBIOS mod discussed in this guide had been applied to both cards before running tests.
Across the top are the core clocks in MHz and down the side are the memory clocks in MHz. The values within the table are the hash-rates in Mhash/sec, where two values are given the GPUs had differences of at least .3 Mhash/sec which I deemed significant. All single values were within this 0.3 Mhash range of each other.
Results are from a test rig running Windows 10 and the Claymore version 7.1 miner with two MSI RX 470 4GB GPUs.
~ Non-reproducible result, second run was similar to secondary cards results. X = Crash * = Unstable/Flashing