Yes. Provided that questions 0x2CDD and 0x2DAD are fixed too, everything’s fine now.
Doing it with FF is like a general rule. So you don’t need to check whether a certain value is within the selectable ones or not.
Yes. Provided that questions 0x2CDD and 0x2DAD are fixed too, everything’s fine now.
Doing it with FF is like a general rule. So you don’t need to check whether a certain value is within the selectable ones or not.
Yes, QuestionId: 0x2CDD (Cache SVID Voltage) supports only the values [0, 2, 3] (Auto, Offset, Adaptive). QuestionId: 0x2DAD (Switch Microcode) only allows [0, 1] (‘Current microcode’ and ‘Microcode 104’).
Thanks again!
Yeah I can wait until you are able to test it since the computer I’m doing this on is also my main work station, Thanks!
I have an i7-12700KF. I’m trying to undervolt and from the research I have done, and testing with the global svid option you can get a good result without losing too much performance if you put an offset on both the cache and the global. If you change “Actual SVID Voltage” then cinebench scores drop a little more than in half
Thanks for the clarification! I’ll go ahead and try it as well then. I just wanted to undervolt so my 14900K doesn’t overheat, but it’s interesting to learn a bit more along the way. Since my main OS currently is macOS 15, I tried booting Tiny10 to flash the new mod, but it didn’t work.
I’ll give it another shot on Windows 11 later this week, maybe I can try a bootable stick or through a Linux live CD or something.
Sounds good, thanks so much for taking a look. Ill wait until you are able to try it with windows just because I don’t want to take any risks as its hard to get new tech where I live
I tried to flash it using UEFI Interactive Shell v2.2 with FPT.EFI, but I keep getting the same error:
Error 238: The host CPU does not have write access to the target flash area. To enable write access for this operation you must modify the descriptor settings to give host access to this region.
FPT Operation failed.
Strangely, I’m also unable to flash older mods I’ve made. Maybe it’s caused by an automatic update or something? I could use my hardware flasher, but honestly, it’s too much effort right now. Especially since my system is performing well and temperatures are great. I’ll investigate this issue later. You could try flashing it yourself, I’d be surprised if your system didn’t POST, but there is always some risk.
I’ll update you when I have more information.
It’s probably the missing arguments in the command used to fpt flash.
I’ve tried to flash multiple versions, but I still can’t get this to work.
It seems like 6A16A shouldn’t be changed, only 6A1AB, 6A1BB, 6A1DA, 6A1EA, and 6A203. However, no matter what I modify, Offset Mode and Adaptive Mode still stay suppressed.
Does anyone else wants to have a look? Here’s the IFR file: B760-I_IFR-Extract.txt
That was my problem as well. I had modified the values before I reached out as well and wasn’t able to get them to appear in the bios
I fed the UEFI opcode table into Gemini 2.5, gave it the code, and asked it to explain each line step by step. At first, it gave some weird suggestions, but now it looks good enough to try. I’ll test it later and let you know.
Summary of Opcodes Used in Changes:
EFI_IFR_FALSE_OP (0x47): Pushes a boolean FALSE value onto the expression stack. Used to make a condition always evaluate to false.
EFI_IFR_EQUAL_OP (0x2F): Compares the top two expressions on the stack. Returns TRUE if they are equal, FALSE otherwise.
EFI_IFR_EQ_ID_VAL_LIST_OP (0x14): Checks if the value of a specific Question ID is present in a list of UINT16 values. Returns TRUE if found, FALSE otherwise.
EFI_IFR_NOT_OP (0x17): Logically inverts the boolean value on top of the stack (TRUE becomes FALSE, FALSE becomes TRUE).
EFI_IFR_EQ_ID_VAL_OP (0x12): Checks if the value of a specific Question ID equals a single UINT16 value. Returns TRUE if equal, FALSE otherwise.
EFI_IFR_SUPPRESS_IF_OP (0x0A): Starts a conditional block. If the following expression evaluates to TRUE, the opcodes within its scope (until the matching End 0x29) are suppressed.
Min.: 0.001V | Max.: 0.999V | Standard: By CPU | Increment: 0.001V", QuestionFlags: 0x0, QuestionId: 0x45, VarStoreId: 0x30, VarOffset: 0x169, Flags: 0x11, Size: 16, Min: 0x0, Max: 0xFFFF, Step: 0x1 { 07 94 EA 27 EB 27 45 00 30 00 69 01 00 11 00 00 FF FF 01 00 }
0x6A15B: Default DefaultId: 0x0 Value: 0 { 5B 07 00 00 01 00 00 }
0x6A162: End { 29 02 }
0x6A164: End { 29 02 }
0x6A166: End { 29 02 }
0x6A168: SuppressIf { 0A 82 }
0x6A16A: EqIdValList QuestionId: 0x2CD9, Values: [0, 1, 2] { 14 0C D9 2C 03 00 00 00 01 00 02 00 }
0x6A176: Text Prompt: "Total Adaptive Mode CPU Core Voltage", Help: "Total Adaptive Mode CPU Core Voltage", Text: "By CPU" { 03 08 EE 27 EE 27 EF 27 }
0x6A17E: End { 29 02 }
0x6A180: OneOf Prompt: "Cache SVID Voltage", Help: "Configure the Cache Voltage requested by the Ring Domain. Result may be influenced Actual VRM Vore Voltage.", QuestionFlags: 0x10, QuestionId: 0x2CDD, VarStoreId: 0x30, VarOffset: 0x183, Flags: 0x10, Size: 8, Min: 0x0, Max: 0x3, Step: 0x0 { 05 91 06 28 07 28 DD 2C 30 00 83 01 10 10 00 03 00 }
0x6A191: OneOfOption Option: "Auto" Value: 0, Default { 09 07 FC 26 10 00 00 }
0x6A198: OneOfOption Option: "Manual Mode" Value: 1 { 09 07 87 27 00 00 01 }
0x6A19F: SuppressIf { 0A 82 }
0x6A1A1: Uint64 Value: 0x0 { 45 8A 00 00 00 00 00 00 00 00 }
0x6A1AB: Uint64 Value: 0x1 { 45 0A 01 00 00 00 00 00 00 00 }
- 0x6A1B5: Equal { 2F 02 }
+ 0x6A1B5: Equal { 47 02 }
0x6A1B7: End { 29 02 }
0x6A1B9: SuppressIf { 0A 82 }
- 0x6A1BB: EqIdValList QuestionId: 0x2DAD, Values: [0] { 14 08 AD 2D 01 00 00 00 }
+ 0x6A1BB: EqIdValList QuestionId: 0x2DAD, Values: [0] { 47 08 AD 2D 01 00 00 00 }
0x6A1C3: OneOfOption Option: "Offset Mode" Value: 2 { 09 07 88 27 00 00 02 }
0x6A1CA: End { 29 02 }
0x6A1CC: End { 29 02 }
0x6A1CE: SuppressIf { 0A 82 }
0x6A1D0: Uint64 Value: 0x0 { 45 8A 00 00 00 00 00 00 00 00 }
0x6A1DA: Uint64 Value: 0x0 { 45 0A 00 00 00 00 00 00 00 00 }
- 0x6A1E4: Equal { 2F 02 }
+ 0x6A1E4: Equal { 47 02 }
0x6A1E6: End { 29 02 }
0x6A1E8: SuppressIf { 0A 82 }
0x6A1EA: EqIdVal QuestionId: 0x1574, Value: 0x7 { 12 86 74 15 07 00 }
- 0x6A1F0: Not { 17 02 }
+ 0x6A1F0: Not { 47 02 }
0x6A1F2: End { 29 02 }
0x6A1F4: OneOfOption Option: "Adaptive Mode" Value: 3 { 09 07 89 27 00 00 03 }
0x6A1FB: End { 29 02 }
0x6A1FD: End { 29 02 }
0x6A1FF: End { 29 02 }
0x6A201: SuppressIf { 0A 82 }
- 0x6A203: EqIdValList QuestionId: 0x2CDD, Values: [0, 2, 3] { 14 0C DD 2C 00 00 00 00 02 00 03 00 }
+ 0x6A203: EqIdValList QuestionId: 0x2CDD, Values: [0, 2, 3] { 12 06 DD 2C 00 00 00 00 00 00 00 00 }
0x6A20F: String Prompt: " - Cache Voltage Override", Help: "Configure the voltage for the Cache.
Perfect sounds good, thanks again for all the hard work on this it really helps. I’m interested to see how it comes out
Yeah, the code Gemini gave me didn’t work, I had to bring out the hardware flasher again, haha. Kind of expected that, result by blindly using AI instructions.
I did manage to unhide it in the end, but I went a bit overboard and unhid too much as you see in the screenshot it’s shown twice now. I’ll take another look later, do some testing, and then I’ll post the file along with the code changes.
SHA-256 Hash:
836F472574178C236D4F3B25F00C666F153A2AF7342C71CC02667AB96809F7DD
Changes
Global Core SVID Voltage:
Cache SVID Voltage:
CPU Graphics Voltage:
CPU L2 Voltage:
Hex-edits & Code:
Initial testing indicates that it behaves as expected.
Thank you so much, This is super helpful. thanks for taking the time do this
First of all, thank you for your work. Congratulations.
Yesterday, I was very entertained preparing everything to modify the BIOS, I had a great time.
I was able to flash it successfully, it’s amazing to see the GMAN at startup, you truly feel like you’ve modified something!
I’ve tested all the functions, everything works great for me, and the undervolt too.
However, I can’t get the frequency to increase by adjusting the BCLK. I’ve gone up to 103 “10300” and tried other numbers, but nothing happens.
Is there something I might be doing wrong?
PD: My processor is a 14600k.
Great to hear it all worked smoothly for you!
I have a 14900K and I’m seeing similar behavior.
Temps max out around 74°C in every stress test, so there’s definitely thermal headroom to overclock. But increasing wattage doesn’t seem to help, it keeps maxing out at Intel’s spec of 253W.
BCLK overclocking also doesn’t appear to have any effect either.
It might be due to Intel’s 0x12B microcode, which could be limiting overclocking on Raptor Lake CPUs. Maybe reverting to 0x129 would allow slight BCLK increases? From what I understand, setting the IA VR Limit to 1400 should still protect the CPU from degradation, but 0x12B might be adding extra safeguards, so I’m not sure how safe it would be.
Undervolting through ‘Global Core SVID Voltage’ works, but I’m not sure about the other undervolt settings. My system doesn’t BSOD even when the undervolt is very agressive, which it should…
I’ve been meaning to experiment more but haven’t had the time. My main goal was unlocking CFG-lock to get proper CPU power management in macOS, and that part works perfectly. The machine runs cool and scores just below a €6200 MacBook Pro in multicore benchmarks. It’d be nice to squeeze a bit more out of it given the thermal headroom, but for now I don’t need the extra power so it’s not very high on my todo list.
These are my BIOS settings at the moment:
Maybe I should ask about it on the overclocking subreddit.
I have very good temperatures by disabling ‘IA CEP’. I lowered them by 10º or more just with this, and the load wattage dropped by 50W or more, but I maintain a stable 5.3GHz on all cores.
And I updated VR voltage Limit → Offset -0.035V.
With this, I ensure that my processor doesn’t exceed 70-75°C at maximum performance with a very modest AIO cooler
I have a question ‘Global Core SVID Voltage’ only works for me when I go back to code 0x104, it doesn’t work for me with 0x12b, is that how it should work?