Maxwell Bios Editing Guide

Maxwell is the last GPU architecture that allows for vBios tweaking without breaking drivers / uefi boot; while it does perform worst than AMD GCN with DX12 and has the nVidia driver overhead issue adding up to the performance penality in modern games, it’s very power-efficient as it was designed for laptop space dominance in the form of the mighty GM107 (wich was also helped by a massive cache to cuda cores ratio in that) featured as 860m, 960m, 750ti. In fact, with bios undervolting some SKUs can be more efficient than the 14nm AMD Polaris architecture cards like the 570/580/590 even in DX12 titles (and massively so in dx11 ones).
I had to dig up and dive into this to get the best out of the beasts that i recently received – Tesla M40s. I already wrote on the subjet – speficially about recovery with dual GPU setups – in this post.

The app we use is called Maxwell Bios Tweaker; it will also work with most Kepler vBios, as far as i know all the 7xx series mawell cards, and most of the 6xx ones aswell. Sadly, some of the informations in this guide only apply to this specific vbios, mostly in the “D” area.

This guide is designed to be read after the super basic one on Xtremesystems

First page shows some basic information and some frequencies. The most important one is the memory clock, wich is also one of the values that requires most testing as its stability can differ wildly between different applications and based on the vram temps. You should be very safe when writign this value to bios and always keep it at least 50mhz lower than the highest stable value you found 🙂
The boost limit can be set in two different areas, A and B ; some cards allow both values to be manually adjusted and it is still not clear to me wich one the driver will enforce over the other. I just like to leave them at the same value, but if you want to overclock, make sure to set the highest value you are looking for also in the boost table (value F) and clock states (value G). In my experience, the boost table is the one that is mostly responsable for this.

The Voltage Table is the longest one to setup. Sadly, some of the actual details of this part change between different cards; i just like to undervolt every value until my card gets to error 43 in the device manager, wich for some value like the first one will be just 2 values lower, some other parts like the D area seem to set the low and high voltage limits. In my case, as i did undervolt the card massively, i set the limit to .943 v only.
The table has a long list of values wich are the voltage curve that is applied to the frequencies in the next tab, wich is the Boost Clocks Table. The voltages will have to grow exponentially with frequency. They can start almost flat, with the first 10 frequency point in a 3 steps voltage space up to 0.85, then go linear for a while until 1v, then start to grow 2 voltage steps per frequency step, then growing 3 at a time after 1,1 and keep getting worst up to 1.268 (max voltage on maxwell); the exact values will depend on the card, and i will show you how to find them in the next part. This means that efficiency will be terrible after 1,1v; it has been also reported that Maxwell refuses to show any improvement after around 1.25 wich would be hard to reach on any standard card anyway.

The last voltage E seem to be the memory controller; i am still testing this area, seem to bring very subtle power and performance improvement wen lowered to around 1.12 in my samples, and then cause some slight performance regressions when lower than 1.1. I am still testing, and di not get any actual crash even going as low as 1.075

UPDATE – On Quadro M2000M i experienced crashes lowering the value under 1.125

The clock table is used if you want to overclock; it’s best to decide first your target frequency there (and set accordingly on A, B and G) and then work on the voltages, but you can also go the other way round.

The power table has been covered perfectly in the XS guide, but i have to note one VERY important thing here: you should use TDP (and temperature, on the first page) limiting as a last, failsafe value, and set a maximum frequency and voltage table that does not get there by default (unless using power virus apps like furmark). This is because even if these limit mechanisms do work, they are not very smart and will just go up/down from highest to lowest voltage, causing terrible stuttering instead of just setting a lower stable point below TDP. Keep it safe and leave TDP and thermal headroom for hot days (and much longer lifespan of your card). One note here is that by default reference maxwell cards (blower style) are operating with very quiet fan curves wich can lead to unneccessary thermal throttling expecially if the cooler has never been cleaned.

A stable sustained frequency is much better than a verge of throttling one that goes a little bit better in the benchmark but actually gives a worst gameplay experience. It will also give worst benchmark result if the test is long enough to stress the cooling system – let the whole 3dmark run with demo intro for reference.

The last value that you will want to check are the clock values; it is useful to be sure there are no values that are lower than the overclock you want to get (or in my case higher than the limit i wanted my card to fit in).