[Solved] IdeaCentre Gaming 5 17IAB7 - XMP unlock

On the motherboard there are only 2 slots of 4, alternate, the missing ones are not soldered

I’m following the guide you linked but I can’t find FPT Tool v11, my Intel ME version is 16.0. In which way we can dump a BIOS with this ME version? I previously used Universal BIOS Backup ToolKit 2.0.exe but this tool is not mentioned anywhere (this is why initially I can’t dump my BIOS)

FPTW-16.0.15_16.1.25.zip (4.7 MB)

1 Like

Ok I followed the guide present at this link on GitHub because the guide present at the link you posted is confusionary (for me), some tools are missing and it is not clear if it is a full guide or if some parts excluded some others.

By the way I report here the process and at the end I have a question.

With ifrextractor.exe I got 2 files (“0” and “1”), the “0” file seems totally unuseful (full of Invalid) while “1” is good. I attach here the “1” extracted with ifrextractor.exe and the one “elaborated” with “IFR-Formatter.js”.

In the first one there is this piece of “code” related to XMP:

0xACBB7: 			OneOf Prompt: "Memory profile", Help: "Select DIMM timing profile. The below values start with the currently running values and don't auto populate.", QuestionFlags: 0x14, QuestionId: 0x276C, VarStoreId: 0x5, VarOffset: 0x18D, Flags: 0x10, Size: 8, Min: 0x0, Max: 0x6, Step: 0x0 { 05 91 54 08 55 08 6C 27 05 00 8D 01 14 10 00 06 00 }
0xACBC8: 				OneOfOption Option: "Default SPD Profile" Value: 0, Default, MfgDefault { 09 07 56 08 30 00 00 }
0xACBCF: 				OneOfOption Option: "Custom Profile" Value: 1 { 09 07 5A 08 00 00 01 }
0xACBD6: 				SuppressIf  { 0A 82 }
0xACBD8: 					Get VarStoreId: 0x5, VarStoreInfo: 0x2, VarStoreType: 0x0 { 2B 87 05 00 02 00 00 }
0xACBDF: 						Uint64 Value: 0x1 { 45 0A 01 00 00 00 00 00 00 00 }
0xACBE9: 						BitwiseAnd  { 35 02 }
0xACBEB: 						Uint64 Value: 0x0 { 45 0A 00 00 00 00 00 00 00 00 }
0xACBF5: 						Equal  { 2F 02 }
0xACBF7: 						Uint64 Value: 0x0 { 45 0A 00 00 00 00 00 00 00 00 }
0xACC01: 						Uint64 Value: 0x1 { 45 0A 01 00 00 00 00 00 00 00 }
0xACC0B: 						Conditional  { 50 02 }
0xACC0D: 					End  { 29 02 }
0xACC0F: 					OneOfOption Option: "XMP Profile 1" Value: 2 { 09 07 57 08 00 00 02 }
0xACC16: 				End  { 29 02 }
0xACC18: 				SuppressIf  { 0A 82 }
0xACC1A: 					Get VarStoreId: 0x5, VarStoreInfo: 0x2, VarStoreType: 0x0 { 2B 87 05 00 02 00 00 }
0xACC21: 						Uint64 Value: 0x2 { 45 0A 02 00 00 00 00 00 00 00 }
0xACC2B: 						BitwiseAnd  { 35 02 }
0xACC2D: 						Uint64 Value: 0x0 { 45 0A 00 00 00 00 00 00 00 00 }
0xACC37: 						Equal  { 2F 02 }
0xACC39: 						Uint64 Value: 0x0 { 45 0A 00 00 00 00 00 00 00 00 }
0xACC43: 						Uint64 Value: 0x1 { 45 0A 01 00 00 00 00 00 00 00 }
0xACC4D: 						Conditional  { 50 02 }
0xACC4F: 					End  { 29 02 }
0xACC51: 					OneOfOption Option: "XMP Profile 2" Value: 3 { 09 07 58 08 00 00 03 }
0xACC58: 				End  { 29 02 }
0xACC5A: 				SuppressIf  { 0A 82 }
0xACC5C: 					Get VarStoreId: 0x5, VarStoreInfo: 0x2, VarStoreType: 0x0 { 2B 87 05 00 02 00 00 }
0xACC63: 						Uint64 Value: 0x4 { 45 0A 04 00 00 00 00 00 00 00 }
0xACC6D: 						BitwiseAnd  { 35 02 }
0xACC6F: 						Uint64 Value: 0x0 { 45 0A 00 00 00 00 00 00 00 00 }
0xACC79: 						Equal  { 2F 02 }
0xACC7B: 						Uint64 Value: 0x0 { 45 0A 00 00 00 00 00 00 00 00 }
0xACC85: 						Uint64 Value: 0x1 { 45 0A 01 00 00 00 00 00 00 00 }
0xACC8F: 						Conditional  { 50 02 }
0xACC91: 					End  { 29 02 }
0xACC93: 					OneOfOption Option: "XMP Profile 3" Value: 4 { 09 07 59 08 00 00 04 }
0xACC9A: 				End  { 29 02 }
0xACC9C: 				SuppressIf  { 0A 82 }
0xACC9E: 					Get VarStoreId: 0x5, VarStoreInfo: 0x2, VarStoreType: 0x0 { 2B 87 05 00 02 00 00 }
0xACCA5: 						Uint64 Value: 0x8 { 45 0A 08 00 00 00 00 00 00 00 }
0xACCAF: 						BitwiseAnd  { 35 02 }
0xACCB1: 						Uint64 Value: 0x0 { 45 0A 00 00 00 00 00 00 00 00 }
0xACCBB: 						Equal  { 2F 02 }
0xACCBD: 						Uint64 Value: 0x0 { 45 0A 00 00 00 00 00 00 00 00 }
0xACCC7: 						Uint64 Value: 0x1 { 45 0A 01 00 00 00 00 00 00 00 }
0xACCD1: 						Conditional  { 50 02 }
0xACCD3: 					End  { 29 02 }
0xACCD5: 					OneOfOption Option: "XMP User Profile 4" Value: 5 { 09 07 5B 08 00 00 05 }
0xACCDC: 				End  { 29 02 }
0xACCDE: 				SuppressIf  { 0A 82 }
0xACCE0: 					Get VarStoreId: 0x5, VarStoreInfo: 0x2, VarStoreType: 0x0 { 2B 87 05 00 02 00 00 }
0xACCE7: 						Uint64 Value: 0x10 { 45 0A 10 00 00 00 00 00 00 00 }
0xACCF1: 						BitwiseAnd  { 35 02 }
0xACCF3: 						Uint64 Value: 0x0 { 45 0A 00 00 00 00 00 00 00 00 }
0xACCFD: 						Equal  { 2F 02 }
0xACCFF: 						Uint64 Value: 0x0 { 45 0A 00 00 00 00 00 00 00 00 }
0xACD09: 						Uint64 Value: 0x1 { 45 0A 01 00 00 00 00 00 00 00 }
0xACD13: 						Conditional  { 50 02 }
0xACD15: 					End  { 29 02 }
0xACD17: 					OneOfOption Option: "XMP User Profile 5" Value: 6 { 09 07 5C 08 00 00 06 }
0xACD1E: 				End  { 29 02 }
0xACD20: 			End  { 29 02 }
0xACD22: 			GrayOutIf  { 19 82 }
0xACD24: 				EqIdValList QuestionId: 0x276C, Values: [0, 1, 5, 6] { 14 8E 6C 27 04 00 00 00 01 00 05 00 06 00 }
0xACD32: 					EqIdVal QuestionId: 0xC3, Value: 0x1 { 12 06 C3 00 01 00 }
0xACD38: 					Or  { 16 02 }
0xACD3A: 				End  { 29 02 }

The first line is this:

0xACBB7: 			OneOf Prompt: "Memory profile", Help: "Select DIMM timing profile. The below values start with the currently running values and don't auto populate.", QuestionFlags: 0x14, QuestionId: 0x276C, VarStoreId: 0x5, VarOffset: 0x18D, Flags: 0x10, Size: 8, Min: 0x0, Max: 0x6, Step: 0x0 { 05 91 54 08 55 08 6C 27 05 00 8D 01 14 10 00 06 00 }

where I see this info:

VarStoreId: 0x5, VarOffset: 0x18D, Flags: 0x10, Size: 8

I suppose that Size is expressed in bit but we pass it in byte with the command setup_var_cv.

Now if I search for VarStoreId: 0x5 I find this line:

0xA8FC6: 	VarStore Guid: 72C5E28C-7783-43A1-8767-FAD73FCCAFA4, VarStoreId: 0x5, Size: 0x4A7, Name: "SaSetup" { 24 1E 8C E2 C5 72 83 77 A1 43 87 67 FA D7 3F CC AF A4 05 00 A7 04 53 61 53 65 74 75 70 00 }

so SaSetup is declared here but its Size is 0x4A7. It may be confusing because if I understood well it is the total size.

For a newbie like me it is better to use “IFR-Formatter.js” and search for “VarStore: SaSetup | VarOffset: 0x18D” (with values from the previous output data) where the output is this one:

                                                                                                                        Memory Overclocking Menu
Memory profile | VarStore: SaSetup | VarOffset: 0x18D | Size: 0x1
    Default SPD Profile: 0x0
    Custom Profile: 0x1
    XMP Profile 1: 0x2
    XMP Profile 2: 0x3
    XMP Profile 3: 0x4
    XMP User Profile 4: 0x5
    XMP User Profile 5: 0x6

I hope that this will be useful for someone.

So my question now is:
with this approach I can change some other features without corrupt motherboard? If I understand better the use of setup_var_cv command changes only the current values that are maintained by the battery, it’s almost impossible to damage the motherboard or corrput the BIOS itself, isn’t it?

Indeed.

You can change other features, but very little of CPU features since it’s alder lake platform.

Not a 100% agreed. This is your backup. Those stores are part of the NVRAM- “NV” here meaning NonVolatile- which is part of the bios region of your firmware (=“bios”) and stored in the SPI Chip, same place as firmware with its bios code:

There are examples of both behaviours:

  • Resetteable via removing the battery (“CMOS- reset”)
  • Salvageable only via programmer

So you can’t corrupt the bios code, but you might put in values in the area where the bios (ans OS) stores its values which may put the machine (temporarily) in a bricked state.

Good point but if we avoid to change values in NVRAM area we are safe, aren’t we?

In order to avoid an accidentally update can I disable System Firmware? I read this on GitHub but I don’t understand if this is only a point of access for OS or if it is necessary

Set a supervisor password for the bios/ firmware and check this option to avoid windows update from flashing a newer bios:

(But NVRAM normally don’t get overwritten / reset)

Lenovo bios simulator

1 Like

I would like to enable Resizable BAR (I have an NVIDIA GPU), I found this, is it safe to try?



setup_var_cv SaSetup 0x42B 0x1 0x1

@lfb6 scared me!

XMP-3596
image

What dose it means 3596? Can I use XMP profile 3? A few minutes ago I got a BSOD using Flight Simulator, maybe I have to change other parameters?

What profiles… are we serious here or not?
Where are we gonna get any other XMP profiles when the modules dont have any more profiles on it… this is a medium/cheap DDR4 kit XMP2.0 based with only ONE profile of 3600Mhz, the bios can have a menu for other speeds but from 2133 to 3600 range and thats it, the system bios will look on the module for profiles and their capabilities, no matter whats XMP slots you unlock in the bios mod.

The display of 3596 (3600/2) is usually due to Spread spectrum/MB-Lenovo tune settings.

A BSOD is not related to RAM OC specifically, its a result of an overall setting of the whole system components, their current state of functionality, the loaded device drivers and the current app/game that the system was running at the time.

EDIT: Your welcome, you can always count on me for a “straight” and honest answer.
By the way, no BSOD without XMP… then an advice, dont mess with things you really dont know nothing about and ruin a perfect system.
Im sure that Corsair did their homework and didnt promised nothing more than what was sold.
Still… again, all the best to you and your endeavor.

EDIT: “I’m an aerospace engineer…” Sorry to hear that…Im a farmer…with poor culture.

Without XMP no BSOD occurs, it is always reproducible.

Always elegant, a Lord in your replies, thanks

I’m an aerospace engineer and I can learn what you learn in years in a week. I asked for the meaning of XMP 3596 because I didn’t connect the value with 3600 of my RAM modules and the 3 at start of the string put me on the wrong direction (XMP profile 3). I was tired after a day of work.

I asked here for a fast reply, not for your frustrated answer, the next time I’ll check on internet. Stay fine, you’re not Linus.

I see:

“don’t != dont”

Come back to primary school, learn how to write and how to act as a man

You are a very bad person

There is a chance that 3600 gives that instability. Download MemTest
If memtest reports failures, then try with 3200 MHz.

Before, make sure Above 4G decoding is Enabled.

1 Like

Ok, I made a test on other 2 modules (same vendor as the previous ones, I have 4 modules) and all was ok, memtest reports 0 errors. So maybe I have a fault module

Also if test with 3600 was fine I decided to return the 3600 modules that has a problem and change them with a 3200 model that is the target for the Intel i5 12400

I’ll update you for Resizable BAR hack

Tried XMP with 3200 RAM and it didn’t boot :joy: Don’t understand why with 3200 RAM, theoretical limit of my CPU, it doesn’t work but it works with 3600 modules :face_with_raised_eyebrow:

Enabled these options:

Above 4GB MMIO BIOS assignment
setup_var_cv SaSetup 0x7E 0x1 0x1

PCIE Resizable BAR Support
setup_var_cv SaSetup 0x42B 0x1 0x1

Unfortunately I see this in GPU-Z:

There is also the option Memory Remap with this description:
“Enable/Disable Memory Remap above 4GB”

Could it be related to the not working Resizable BAR option? But I think that it is related to map RAM over 4GB

This setting may be one of those with no effect unless it is configured via bios setup and not GRUB.

Correct.

I tried to read the value with this command:
setup_var_cv SaSetup 0x42B 0x1

and it replies with 0x1. So it seems Enabled but maybe you’re correct.

So have I to give up? Sad

Ok, I found the Maximum Memory Frequency parameter in the UEFI and I set it to 3200 MHz on 3600 RAM modules.

Now it works at 3200 MT/s, Windows indicates 3200 MHz and on CPU-Z DRAM frequency and memory controller frequency are the same value of 1596.1 MHz.

Currently don’t understand why with 3200 modules it doesn’t work at all, some expert of Intel UEFI chipset in order to manually try to overclock the RAM?

P.S.: I see that if I make some mistakes and the PC won’t boot if I remove the battery the PC let me power it up for changing modified values but reading the values with setup_var_cv command it reports no changes. Infact if I reboot without changing back the values it doesn’t boot. So I don’t understand how it can boot without battery if the problem is still there and why if I don’t change the values the second boot doesn’t work. Any explanations?

There are one VarStore with default values and another with custom. When you try to boot without battery the firmware detect it and enters safe mode. Default VarStore is used in this case.