Unhide advanced BIOS (UEFI) settings

The BIOS (UEFI) menu seems quite locked down in terms of what settings are exposed to the user (cf. BIOS Guide).

While this is on par with most devices by other manufacturers, since the Framework Laptop is targeted towards advanced users, it’d be great if the menu forms included more settings to play with, such as for example the ability to set custom or XMP memory timings.

These settings are apparently already included in Framework’s BIOS setup implementation, so it’s simply a question of flipping a switch just to show them to (i.e. not hide them from) the user. Allowing this is unlikely to require significant workload on Framework’s part.

As these perhaps shouldn’t be shown by default so as not to intimidate casual users and avoid unnecessary customer support workload, there are a number ways this could be implemented on an opt-in basis:

  • a “secret” key combination to be pressed from within the BIOS setup (one vendor uses Ctrl-Alt-Shift-F7 for this purpose)
  • an alternate BIOS file to be flashed instead of the regular one
  • a flag to be toggled with H2OUVE (Insyde H2O UEFI Variable Editor, a command-line utility)

To see for yourself what options are already available, just hidden, in the laptop’s BIOS, you can download a dump of the internal forms representation (IFR) within the SetupUtility attached to this post (edit: as a new user I’m apparently not allowed to add attachments) or, if you prefer to start from the source:

  1. Download: https://downloads.frame.work/bios/Framework_Laptop_BIOS_3.06.exe
  2. Extract the file isflash.bin from within the executable archive.
  3. Download UEFI Tool: https://github.com/LongSoft/UEFITool/releases
  4. Run, open isflash.bin, search for GUID: FE3542FE-C1D3-4EF8-657C-8048606FF670 (SetupUtility), right-click on it, and extract the file as, say, SetupUtility.efi.
  5. Download Universal IFR Extractor: https://github.com/LongSoft/Universal-IFR-Extractor/releases
  6. Run, open the extracted file, save as SetupUtility_IFR.txt, and see for yourself what’s in it.

Would be great to be able to access this menu and all the other settings, for those who would want it, of course:

                                   Form Sets
--------------------------------------------------------------------------------
Offset:		Title:
--------------------------------------------------------------------------------
0xA17C4		Power_Hidden (0x1A6E from string package 0x0)
0xA2A74		Advanced (0x1A8C from string package 0x0)
0xB5CA4		Advanced_Hidden (0x1A6D from string package 0x0)
0xE1954		Security (0x30 from string package 0x4)
0xF1B54		Main_Hidden (0x123 from string package 0x4)
0xF2D94		Boot (0x50 from string package 0x4)
0xF43F4		Boot_Hidden (0x124 from string package 0x4)
0xF5EB4		Security (0x30 from string package 0x4)
0xF7824		Main (0x5 from string package 0x4)
0xF8AB4		Exit (0x94 from string package 0x4)

For example, the memory timing settings:

Form: Memory Overclocking Menu, FormId: 0x101C {01 86 1C 10 49 11}
  Suppress If {0A 82}
    QuestionId: 0x5B4 equals value 0x4 {12 06 B4 05 04 00}
    Text: Statement.Prompt: Memory Profile:, TextTwo: Default Custom  XMP1  XMP2 {03 08 4A 11 5F 05 4B 11}
    Text: Statement.Prompt: tCK [MHz], TextTwo: 0000000 0000000 0000000 0000000 {03 08 4C 11 5F 05 4D 11}
    Text: Statement.Prompt: tCL, TextTwo: 00000  00000  00000  00000 {03 08 4E 11 5F 05 4F 11}
    Text: Statement.Prompt: tRCD/tRP, TextTwo: 00000  00000  00000  00000 {03 08 50 11 5F 05 51 11}
    Text: Statement.Prompt: tRAS, TextTwo: 00000  00000  00000  00000 {03 08 52 11 5F 05 53 11}
    Text: Statement.Prompt: tCWL, TextTwo: 00000  00000  00000  00000 {03 08 54 11 5F 05 55 11}
    Text: Statement.Prompt: tFAW, TextTwo: 00000  00000  00000  00000 {03 08 56 11 5F 05 57 11}
    Text: Statement.Prompt: tREFI, TextTwo: 00000  00000  00000  00000 {03 08 58 11 5F 05 59 11}
    Text: Statement.Prompt: tRFC, TextTwo: 00000  00000  00000  00000 {03 08 5A 11 5F 05 5B 11}
    Text: Statement.Prompt: tRRD, TextTwo: 00000  00000  00000  00000 {03 08 5C 11 5F 05 5D 11}
    Text: Statement.Prompt: tRTP, TextTwo: 00000  00000  00000  00000 {03 08 5E 11 5F 05 5F 11}
    Text: Statement.Prompt: tWR, TextTwo: 00000  00000  00000  00000 {03 08 60 11 5F 05 61 11}
    Text: Statement.Prompt: tWTR, TextTwo: 00000  00000  00000  00000 {03 08 62 11 5F 05 63 11}
    Text: Statement.Prompt: NMode, TextTwo: 00000  00000  00000  00000 {03 08 64 11 5F 05 65 11}
    Text: Statement.Prompt: VDD [mV], TextTwo: 00000  00000  00000  00000 {03 08 66 11 5F 05 67 11}
    Subtitle: Statement.Prompt: , Flags: 0x0 {02 87 02 00 00 00 00}
    End {29 02}
    One Of: Dynamic Memory Timings, VarStoreInfo (VarOffset/VarName): 0x427, VarStore: 0x2, QuestionId: 0xA1, Size: 1, Min: 0x0, Max 0x1, Step: 0x0 {05 91 68 11 69 11 A1 00 02 00 27 04 10 10 00 01 00}
      One Of Option: Disabled, Value (8 bit): 0x0 (default) {09 07 04 00 30 00 00}
      One Of Option: Enabled, Value (8 bit): 0x1 {09 07 03 00 00 00 01}
    End One Of {29 02}
    One Of: Memory profile, VarStoreInfo (VarOffset/VarName): 0x13B, VarStore: 0x2, QuestionId: 0x112B, Size: 1, Min: 0x0, Max 0x3, Step: 0x0 {05 91 6A 11 6B 11 2B 11 02 00 3B 01 14 10 00 03 00}
      One Of Option: Default profile, Value (8 bit): 0x0 (default) {09 07 6C 11 30 00 00}
      One Of Option: Custom profile, Value (8 bit): 0x1 {09 07 6F 11 00 00 01}
      Suppress If {0A 82}
        QuestionId: 0x5B6 equals value 0x0 {12 06 B6 05 00 00}
        One Of Option: XMP profile 1, Value (8 bit): 0x2 {09 07 6D 11 00 00 02}
        One Of Option: XMP profile 2, Value (8 bit): 0x3 {09 07 6E 11 00 00 03}
      End If {29 02}
    End One Of {29 02}
20 Likes

The ASUS motherboard I have implements this by showing the easy settings by default and switching to advanced mode by pressing F7. I don’t think there’s any need for the key combo to be hidden if there are enough disclaimers (e.g. in the BIOS itself or in the guides).

8 Likes

My thoughts EXACTLY.

There should be disclaimers in both the BIOS and in manuals/ guides imo.

4 Likes

I think more control over my hardware is always a good thing.

I want fan control in the BIOS. They always kick in when I would rather lose some FPS instead of standing in a wind tunnel.

But I would like to add:

How about providing useful info in the BIOS?

One specific option, CPU Flex Ratio… The info provided… And googling… I had no idea what this actually does.

I do now; after a few chats on the Discord, but that could’ve easily been resolved by adding two more lines of text in the BIOS.

I guess I expected the BIOS to have more options and built in guides, by virtue of being repairable? :: shrug ::

2 Likes

If you’re on linux, you can use ectool The Framework Laptop's Embedded Controller (EC) :: HowettNET to set custom fan speeds, from there you could pretty write a script that effectively creates a custom fan curve. As for windows, the ectool there isn’t quite as far along, https://github.com/DHowett/FrameworkWindowsUtils/releases , but with some work it could still be done.

5 Likes

Awesome! I’ll check that out later. :+1::grin:

Edit: checked it out. Think this is a bit over my head at this time :disappointed_relieved: I feel like I walked into the middle of a conversation; not sure what is even being suggested in the directions. I’ll check back in that project periodically; maybe it’ll be easier to follow in the future.

1 Like

I’m bumping this as I’d greatly like to see memory tuning options in the upcoming Framework 16 that’ll have dGPU options. Good memory tuning can always uplift performance quite a bit regardless if you’re on a Intel or AMD CPU (lot of people seem to think memory tuning is good for AMD CPUs only). This is especially true in laptops where the default secondary/ternary timings are more loose then what one would find on a desktop. Even some primaries arent that great for SODIMM.

There are some laptops that allow for memory tuning. I know MSI is one of them for a decent bit if not all of their modern gaming laptops. Having actual control over my hardware is the last step I need from Framework to be able to say I actually own my hardware. Without actual control over my hardware I cant say with 100% confidence I actually own it as well as the fact I also generally lose performance due to lack of the ability to tune it.

1 Like

Also bumping this, because I feel like it´s kinda a shame that in such an open-source laptop already in its 3rd generation, we cannot adjust TDP/turbo limits (not even with throttlestop), create custom fan curves in Windows (half of the people complain about fan kicking in too much, half about not enough), fiddle with memory timings and all sorts of stuff that could be easily enabled by FW team.

2 Likes

That is pretty unfortunate tbh. For the FW16 specifically, which has the option for a 7940HS for 230€ extra, whose main point is advanced configuration (e.g. undervolting with curve optimizer voltage offsets). Adjusting TDP, fan curves and memory timings just go hand in hand with that, to either maximise performance or runtime. Without all this exposed, that option is not worth the extra you pay for the 7940HS. With all these options, perhaps it is worth it.

3 Likes

Would this fix the issue with an external keyboard (through a dock?) not being able to wake the machine? The troubleshooting stuff I found trying to work through this kept telling me to enable “wake from USB” in the BIOS but we don’t have that option with the BIOS as issued.

Other thread on this from a while back: Feature Request: Wake from USB support in BIOS

I just paid my deposit and ordered a 13” 7640 for Q4 delivery.
I was about to go order my own ram etc and thought I’d better check what I can squeeze.
I will be mighty disappointed if I can’t throw in some 6000 (or better, Adie 6400c38) and at least tighten down timings to 5600c30 if not faster.
Not exposing ram timings is server-grade castration, not worthy of a “DIY”-friendly device.
If these (yes, and PBO, fan curve etc) options are not enabled please do so, or confirm it’s in the works, as I won’t complete the order without knowing I can optimise my system.
I’m prepared to put up with the junk screen for now until you can find some help out of the corner you painted yourselves into with 3:2 AR, but locking down the bios is intolerable and unnecessary cruelty I won’t put myself through….

2 Likes

This thread is genuinely worrying from the perspective of a pc hardware enthusiast who currently has a FW16 as their first framework system on pre-order.

This very much could do with some official response detailing why locking the BIOS down and perhaps what is in the pipeline to put more control in the users hands which I feel is a big part of the appeal to these systems.

1 Like