It feels like a very long time ago when all we had to do to gain additional features in the Steam Deck bios, was to run a compiled C program.
There is a lot of detail in the original blog post I wrote on this, and you should read it.
Since then as a community we have found ways to recover the Steam Deck BIOS, whether that is through binary editing, or looking through code to find the recovery mechanism.
Valve have also, very clearly and evidently, prevented people from tinkering with the Steam Deck BIOS. I have no doubt that the vast majority of people that found out how to unlock these options, in the innocent pursuit of gaining more performance, bricked their Steam Deck by going too far, and then pulled Valve up on their RMA and warranty claim to have it repaired. A lot of these guides did not cover how to backup your BIOS, and that you would need a chip programmer to recover from a bricked condition with the Steam Deck. While we do have a crisis mode that can recover from settings the majority of the time, there are still occasions when it will and cannot recover.
Though we now have a method of getting access to these forms again, it works on each current Steam Deck BIOS version, F7A0131 and F7G0109 / F7G0110 / F7G0112. SteamOS’ latest update of 3.6.19 came with an updated Steam Deck BIOS that allows for overclock settings on the Steam Deck LCD, too.
I Don’t Understand – What’re We Doing Here?
The Steam Deck BIOS prevents you from raising the power limit for Fast/Slow PPT above 15w, the BIOS has also hidden the AMD PBS and AMD CBS ‘forms’ that allow you to change settings such as RAM timings, TDP, EDC, and other fancy features that give you full control over the power consumption of the Steam Deck.
What we are doing here, is patching the BIOS temporarily so that you can raise the power limits above 15w, and also access these hidden forms. Though there are currently less features in them than in previous BIOS versions. There are benefits to having a more up to date version of the BIOS, such as the ability to recover from faulty BIOS settings, and generally the overclock and undervolt features are readily available. However, because of the ‘advanced’ form which Valve created and put in the BIOS, this imposes artificial limits on some of these settings (another example is that undervolting is limited to -50mv). So yes, you will have to ‘boot’ into this runtime patcher every time you want to change the settings. If you have the LCD Steam Deck, you can revert your BIOS version and use other methods.
Before I go into detail about how we can get these options back into your BIOS, I am going to say the same again.
Backup your Steam Deck BIOS Before Tinkering With It
Boot your Steam Deck, press the STEAM button, and choose the Power option. If you have Family View turned on, then enter the pass code. Then do it again and choose Switch to Desktop.
When you are in the desktop, open up a Konsole terminal and type in the following:
sudo /usr/share/jupiter_bios_updater/h2offt /home/deck/biosbkp.fd -O
Steam Deck BIOS Backup command
This will backup your BIOS in your home folder. If you do not know what ‘sudo‘ is, then you should read this wiki article: https://wiki.archlinux.org/title/sudo
To use the ‘sudo’ command, before the ‘h2offt’ backup program command, you have to set a password for your ‘deck’ user account in linux. You do this from a konsole terminal by typing:
passwd
Be careful what you type, and make a note of the password. It will not show you what you are typing while you are typing it.
Then, make sure you copy and backup the file ‘biosbkp.fd‘ somewhere safe, that is not on your Steam Deck, and do not share it with others.
Settings that you Should Avoid
If you want to avoid bricking your Steam Deck into a state where you definitely need to use a chip programmer, then yes, there are settings you will want to avoid.
This isn’t a comprehensive list at all, but you may get the ‘feel’ for the settings you shouldn’t change from this. The rule of thumb is to not go too extreme on settings, and to not ‘force’ a setting. Even while incrementing values you could still brick your steam deck and need a chip programmer, there’s a rule of thumb to at least abide by.
Undervolting: Setting your undervolt too low can result in a ‘brick’ that can be difficult to recover from. Going beyond -50 can cause general instability and problems, someone set theirs to -100 and it was an instant ‘brick’.
pstate(0): Any of the pstate settings can result in an instant ‘brick’, this is basically forcing your processor to run in a manner that may or will not work, especially with no other changes. It simply is not worth changing this option at all.
ForceCclkFrequency / ForceGfxclkFrequency: This is similar to pstate in the sense that you’re forcing the processors to run at a set frequency, this can also result in a brick. It is better to use CclkFmaxOverride Control and GfxclkFmaxOverride Control because then the hardware can auto adjust.
I have Backed up my BIOS – Can I Unlock the Options Now?
I thank SmokeyCPU for the tools used for this, and to ‘vinegar_sigma’, ‘sub5ist’ and mytrixx for sharing their knowledge, time, effort, and being interested (that goes a longer way than you think). We have this thanks to each of them and ‘vinegar_sigma’ for putting it together.
You will need either a Steam Deck Dock, or a USB-A to USB-C adapter for your USB Storage, or a USB-C capable USB Storage for this to work.
Let us go through the steps that you need to do to prepare
- Format a USB storage drive to FAT32
- Download this ZIP file.
- Extract the files to your USB storage drive
- For simplicity, put the files in the root directory of your drive, rather than in the sub folder
These files will now be on your USB Storage:
- runtime-patcher.efi
- srep_config.cfg
You require the above stated files as a minimum. You will also have a couple of additional files:
- _readme.txt
The readme.txt gives you similar steps and instructions that you will find in this blog post, along with credits. It also covers a few caveats about the alterations.
Note:
Previously there were two files available to download, for an LCD Steam Deck, or OLED Steam Deck. Now that we have had more feedback this is no longer required, but the zip files also had a timings.jpg image with RAM settings provided by Sub5ist. These settings are also provided later in the blog. Sub5ist tested these settings presented in the to tweak and alter RAM timings for the OLED Steam Deck in hexadecimal, and they helped improve system performance and frame-rate. You can see the results of these tweaks in a geekbench report for your comparison.
From various feedback I had also included a cbs-full.efi in the LCD/OLED 7zip file, as the file I was using worked without crashing, but the one in the zip file had problems for people. This is now removed from the zip file, if you want you may try these that are from other versions of the BIOS for OLED and LCD along with the old config for the runtime patcher tool.
The hanging/crashing may be because it is attempting to save to other form(s) or varstore(s) that need to be recovered/reinstated. So therefore, use it at your own risk. Not all features may currently be supported on the ‘full’ form, but some may be, by all means provide any feedback on your findings while we all look into it.
Booting into the BIOS
There are a few simple steps to this process now that we have the USB Storage setup. It matters which order you do them. Here they are:
- Turn off your Steam Deck
- Connect your USB Storage to the Steam Deck
- Press the Volume + and Power buttons together
- Navigate the Steam Deck menu with the directional pad
- Press A on “Boot From File“
You should now see a list of your efi options.
This may be different on your Steam Deck, if you dual boot with Windows, have a number of different Operating Systems installed, etc. If you have not labelled your USB Storage, you should see it listed here as ‘NO VOLUME LABEL’, or as your label if it has it.
Loading the Overrides
- Use the directional pad to highlight your USB Storage
- Either press A or press Right on the directional pad
Now we should see a list of the files:
I have more files here because it is possible to load extracted BIOS forms manually.
Now we perform the following steps:
- Use the directional pad to highlight runtime-patcher.efi
- Press the A button
This will run SmokeyCPU’s Smokeless Runtime EFI Patcher (SREP). I will go into detail about what it is doing later.
The system then returns you to the file explorer.
Now press the B button to quit out of the menu, and select the Setup Utility with the A button.
Now, you should see that the AMD CBS and AMD PBS menu have been loaded, and under the Advanced menu, you can also change the Fast PPT Limit, and Slow PPT Limit to higher than the stated 15000mW.
Note: You do not need Smokeless UMAF, you are directly raising the limits above 15000mW
When you boot into Steam OS, you can run the following commands from a Konsole Terminal to check that these limits are raised:
sudo cat /sys/class/hwmon/hwmon6/power1_cap_default
sudo cat /sys/class/hwmon/hwmon6/power2_cap_default
or
sudo cat /sys/class/hwmon/hwmon4/power1_cap_default
sudo cat /sys/class/hwmon/hwmon4/power2_cap_default
The hwmon value (4, 5, 6) may change depending on whether or not your Steam Deck is docked/connected to a hub.
These values are read from what the BIOS reports, and you cannot typically change them from within SteamOS. You will still be limited if you do not change power[1/2]_cap – these are reinforced to be 15w by the performance tab in SteamOS on game load. You can set the value manually or use PowerTools in the Decky plugin. There is more information on this in my other blog.
You will also see that the AMD CBS and AMD PBS menu are accessible from the left hand side menu in setup.
The Steam Deck OLED BIOS also introduced the ability to overclock the GPU and CPU in BIOS F7G0109. That functionality is also accessible in the F7G0110 BIOS via the Advanced menu. The Steam Deck LCD BIOS recently introduced the same ability in BIOS F7A0131. You should update to this BIOS to take advantage of the ability to increase the TDP with the efi runtime patcher.
Undervolting is limited to ‘-50’ in the advanced BIOS form, even if you change it in the AMD CBS menu, this can be over-ridden with custom SREP settings.
Note: If you want to alter or change any settings again, you must follow the steps to load the .efi files from the USB Storage again. Loading the menus are temporary changes, but changing settings in the menus make permanent changes that are only cleared by a Valve BIOS update or Crisis Mode recovery or manually changing the options back.
Help, I Need to Recover My Steam Deck!
Try as we may, it is still possible to break your Steam Deck by changing settings in these menus. If you have a BIOS backup you can recover using it. Or you can recover using Crisis Mode.
Please refer to my other blog post and search through it for Crisis Mode recovery.
How do I Overclock my RAM on the Steam Deck?
Your RAM in the Steam Deck is under-clocked, unless you have an early version of the Steam Deck LCD with 5500mt/s timed RAM, the typical Steam Deck LCD has RAM (Samsung or Micron) that should run at 6400mt/s. The OLED Steam Deck Micron RAM is also under-clocked, it has a max speed of 8533mt/s, but the Steam Deck APU cannot push it high enough, there have been some experiments with editing the BIOS to try to allow it to go higher, and so far those have been unsuccessful.
With the cut-down CBS form injected into the BIOS you can set faster RAM timings for both the Steam Deck LCD and Steam Deck OLED. I have recently discovered that the Steam Deck OLED can have Samsung (K3KL3L30CM-MGCT) and Micron RAM (MT62F1G64D4AH-023 WT).
You can find out which type of RAM your Steam Deck runs by typing the following command at a konsole terminal:
sudo dmidecode –type 17
Here are timings you can use for the Steam Deck LCD with Samsung RAM (K3LKBKB0BM-MGCP / K3LK7K70BM-BGCP000):
Steam Deck LCD – Samsung
crash2032, Steam Deck Discord – invite link
Clock speed 3200 Mhz
Trcdrd 0Сh Clk.
Trcdwr 0Eh Clk.
TrrdS 4 clk
TrrdL 4 clk
Tfaw 10
Trp 9 Clk. (Bh)
Tras 16h Clk.
Trc Ctrl Manual
Trc 0x20
TwtrS 4 Clk.
TwtrL 6 Clk.
Tcke 5 Clk.
Trdwr 0Dh Clk. (Eh)
Twrrd 7 Clk. (8)
Steam Deck LCD – Samsung
Ew Meh, Steam Deck Discord, invite link
Clock Speed 3200 Mhz
Trcdrd 0Сh Clk
Trcdwr 0Eh Clk
Trp 0Bh Clk
Trc 0x28
TwtrS 4 Clk
TwtrL 6 Clk
TrdrdScL 0x3
TwrwrScL 0x3
Trtp 5 Clk.
Tras 17h
Trdwr 0Eh
Steam Deck LCD – Micron MT62F1G32D4DR-031 WT
Ew Meh, Steam Deck Discord, invite link
Clock Speed 3200 Mhz
Tcrdrd – 0Bh clk
tcrdwr – 0D clk
trp – 0Bh clk
tras – 17h clk
trc – 0x23
twtrS – 4 clk
twtrL – 6 clk
trtp – 5 clk
Steam Deck OLED – Micron MT62F1G64D4AH-023 WT
sub5ist, Steam Deck Discord – invite link
TRCDRD 0Ch
TRCDWR 8
TRP 9
TRAS 15
TRC (MANUAL) 0x20
TRRDS 4*
TRRDL 4*
TFAW (MANUAL) 0x10
TWTRS 2
TWTRL 6
TWR (MANUAL) 1A
TRTP 5
TRDWR 0Dh
TWRWRSD 5
TWRWRDD 2
TRDRDSD 1
TRDRDDD 1
Steam Deck OLED – Samsung K3KL3L30CM-DGCT
sigma male, Steam Deck Discord – invite link
TRCDRD 0Dh
TRCDWR 8Clk
TRP 0Ch
TRC (MANUAL) 0x21
TRAS 15h
TRDWR 0Dh
TWRWRSD 1
TRDRDSD 1
TRDRDDD 1
You may find the Samsung OLED timings to be unstable, the Samsung RAM is sensitive to voltage, for example decreasing MEM VDD2H/APU VDDIO to 6 can increase stability and reduce errors in memtester and memtest86.
Any overclock should be tested with software to see if it is stable and works without error. Software such as memtest86/memtest86+ should do this.
What are the Default RAM Timings for the Steam Deck RAM?
You can run ZenTimings in Windows to determine most of these.
Where Are These EFI Files From?
You are probably wondering how this is done, and where the .efi files are from? The simple answer is: they are from the Steam Deck BIOS released by Valve, and they are from SmokeyCPU that has been configured by ‘vinegar_sigma’.
The Steam Deck BIOS files are all available from Valve directly in their repositories, these have been mirrored by the evlaV repo, but they are also directly available in locations such as:
https://steamdeck-packages.steamos.cloud/archlinux-mirror/jupiter-main/os/x86_64
Here, we have the ‘hardware support files’ which are named something like:
jupiter-hw-support-xxxxxxx.x-x-any.pkg.tar.xz or
jupiter-hw-support-xxxxxxx.x-x-any.pkg.tar.zst
Where “xxxxxxx” is the date, in the format of yyymmdd (year, month, date) and then a version. When you extract these files, you get the BIOS update files that your Steam Deck downloads, and these files go way back in versions.
You can also find your Steam Deck BIOS in the following folder, both the LCD and OLED BIOS are stored here:
/usr/share/jupiter_bios/
That does not entirely answer the question though, you see the Steam Deck uses a UEFI BIOS, and these are almost becoming like a ‘Real Time Operating System’ themselves, they have drivers, configurations, and a virtual ‘cmos’ or ‘nvram’ is used with an embedded micro-controller (as it is in the Steam Deck) where these settings are stored.
To dissect these BIOS files, we need to understand the file and their structures, and thanks to some open source tools such as UEFI Tool, we can open them up.
Inside the UEFI BIOS we have what are called ‘forms’, along with drivers and other files. What we are interested in are the ‘CBS’ and ‘PBS’ forms, and using the search capabilities in UEFI Tool we can find these forms, and it’s the ‘PE32 image section’ we are interested in for it to work with Smokeless EFI Runtime Patcher.
When we store these .efi files on the USB Storage, and load them after running the Smokeless EFI Runtime Patcher, we allow the forms to load and override what is already loaded by the BIOS (or not loaded as the case may be).
Therefore, if you do not trust what is in the zip file here, you can go and find your Steam Deck BIOS and extract these forms yourself, from the current version or previous, and load them up.
What About Smokeless EFI Runtime Patcher (SERP)?
SmokeyCPU wrote a tool that allows for two fundamental components:
- We unlock the forms that we want to show
- We load, or reload the forms so we can change the contents
If you open up SREP_Config.cfg you will see exactly what we are doing with this tool, once you open the file up you will see some commands, so to explain what they do:
- Open the H2OFormBrowserDxe form
- Patch the H2OFormBrowserDxe so that it will enable AMD CBS and AMD PBS
- Open the SetupUtility form
- Patch the SetupUtility so that it allows for a higher TDP for PPT Fast and Slow to be set
- Load the SetupUtility from FV
- Open the SetupUtility form
- Load the AmdPbsSetupDxe form
- Open the AmdPbsSetupDxe form
- Load the CbsSetupDxeFF3 form
- Open the CbsSetupDxeFF3 form
The patches refer to the UEFI Forms that we want to enable in hexadecimal, these are the hexadecimal conversions of the UEFI Form GUID as seen in UEFI Tool, and they are an alternate method of performing the SmokeyCPU unlock that we ran as a compiled executable.
We also then patch the SetupUtility form, because Valve hard-coded a limit of 15000mW for the maximum Fast PPT, and Slow PPT. There is a caveat with this, for some reason insydeh2obios is compiled little endian, that means the bit pattern is reversed. This means that the hexadecimal patch in the code also had to be reversed, referring to 15000 as 983A, as opposed to 3A98. The rest of the hexadecimal in the line is kept ‘as it is’ in the form.
If you want to align and see how these hexadecimal modifications align with the .efi files, then use UEFITool to extract the forms from the BIOS and use HxD to search for the values and you will see where the amendments are made for yourself.
Why Doesn’t my CPU Go Above 3.5GHz When It’s Set Higher in the BIOS?
If you manually alter the GPU frequency, with PowerTools or otherwise, the CPU frequency will go no higher than 3.5Ghz.
You need to join in on this gitlab thread, and this SteamOS thread (yes even if it means registering for an account on either site), especially after CPPC / amd_pstate has been partly addressed with the latest BIOS versions.
There is an issue with amdgpu, which is used to control the CPU and GPU for the Vangogh AMD APU in the Steam Deck.
I check this with my team, the max frequency of Vangogh support is 3.5GHz, it will not allow to change the cpu max frequency higher than 3.5GHz, so any applications trying to OC the APU will be failed.
(…)
The OC function needs amdgpu driver and lowlevel PM firmware changed, it needs to request the feature support from Valve officially.
Perry Yuan, gitlab @ freedesktop.org
It is possible to mod amdgpu to remove this limit when manually setting the frequencies, but really we should all be jumping on the linked gitlab and github issue to get Valve to raise this limit.