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}
14 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.

4 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