Posts: 7
Threads: 1
Joined: Nov 2018
Reputation:
0
11-04-2018, 11:57 PM
(This post was last modified: 11-05-2018, 02:59 AM by Larry_Xia.)
Hey guys,
Recently I am trying to enable the PCIE ASPM and PCIE Native Control on my MSI GE62MVR which may allow CPU to get into deeper package c state and extend its battery life. I plan to do this by changing bios settings in NVRAM/COMS by a EFI Shell called GRUB, but when I am looking into the address of those setting I notice several settings are using the same address.
- I extracted Setup_PE32_image_section.sct from BIOS backup using UEFITool_0.22.1.exe
- I generate Setup_PE32_image_section IFR.txt from the .sct file above by Universal IFR Extractor.exe
Here are parts of the code in Setup_PE32_image_section IFR.txt:
Code: 0x2B01D Suppress If: {0A 82}
0x2B01F Variable 0x3D9 equals 0x0 {12 06 D9 03 00 00}
0x2B025 Setting: Native PCIE Enable, Variable: 0x4 {05 91 CC 00 CD 00 38 00 01 00 04 00 10 10 00 01 00}
0x2B036 Option: Disabled, Value: 0x0 {09 07 BC 00 30 00 00}
0x2B03D Option: Enabled, Value: 0x1 {09 07 BB 00 00 00 01}
0x2B044 End of Options {29 02}
0x2B046 End If {29 02}
Code: 0x2C05D Suppress If: {0A 82}
0x2C05F Variable 0xCA7 equals 0x0 {12 06 A7 0C 00 00}
0x2C065 Setting: SMM Use SMM en-US Indication, Variable: 0x4 {05 91 81 03 82 03 87 00 13 00 04 00 10 10 00 01 00}
0x2C076 Option: Disabled, Value: 0x0 {09 07 04 00 30 00 00}
0x2C07D Option: Enabled, Value: 0x1 {09 07 03 00 00 00 01}
0x2C084 End of Options {29 02}
0x2C086 End If {29 02}
Code: 0x47153 Suppress If: {0A 82}
0x47155 Variable 0xADC equals 0x0 {12 86 DC 0A 00 00}
0x4715B Variable 0xADA equals 0x0 {12 06 DA 0A 00 00}
0x47161 Or {16 02}
0x47163 Variable 0xAD6 equals 0x0 {12 06 D6 0A 00 00}
0x47169 Or {16 02}
0x4716B End {29 02}
0x4716D Numeric: Spread % (74872343805068669-74872343805068669) , Variable: 0x4 {07 91 05 14 06 14 B7 27 16 00 04 00 04 10 00 FF 01}
0x4717E Default: 8 Bit, Value: 0x0 {5B 06 00 00 00 00}
0x47184 End {29 02}
0x47186 End If {29 02}
Code: 0x49480 Suppress If: {0A 82}
0x49482 Variable 0xB66 equals 0x0 {12 06 66 0B 00 00}
0x49488 Numeric: PXE boot wait time (74872343805068669-74872343805068669) , Variable: 0x4 {07 91 4A 14 4B 14 69 0B 23 00 04 00 10 10 00 05 01}
0x49499 Default: 8 Bit, Value: 0x1 {5B 06 00 00 00 01}
0x4949F Default: 8 Bit, Value: 0x1 {5B 06 01 00 00 01}
0x494A5 End {29 02}
0x494A7 End If {29 02}
Code: 0x4997E Grayout If: {19 82}
0x49980 Variable 0xBC5 equals 0x1 {12 06 C5 0B 01 00}
0x49986 Setting: , Variable: 0x4 {05 91 F2 14 0E 15 77 0B 25 00 04 00 10 10 00 03 00}
0x49997 Option: Auto, Value: 0x0 {09 07 09 15 30 00 00}
0x4999E Option: Floppy, Value: 0x1 {09 07 0F 15 00 00 01}
0x499A5 Option: Forced FDD, Value: 0x2 {09 07 10 15 00 00 02}
0x499AC Option: Hard Disk, Value: 0x3 {09 07 11 15 00 00 03}
0x499B3 End of Options {29 02}
0x499B5 End If {29 02}
Code: 0x4C1F3 Numeric: en-US (74872343805068669-74872343805068669) , Variable: 0x4 {07 91 00 00 00 00 D4 0B 27 00 04 00 00 10 00 FF 00}
0x4C204 End {29 02}
As you can see they share the same variable address:0x4, I think if I directly use Steup_Var 0x4 0x1 will mess up other options. And I also use the commad Setup_Var 0x4 to read the value in it, I was surprised because it told me offset 0x4 is 0x00 and 0x01 at the same time, how can that be possible?
Do anyone can help me with this? Thanks.
Posts: 1,776
Threads: 0
Joined: Aug 2018
Reputation:
42
Upload the setup file, that looks possibly incomplete IFR. Also, to save time so I don't have to request later in case I need another part of the setup, please go ahead and upload the entire BIOS file.
You should be looking for VarName/VarOffset "Variables", not the variable shown in what you pasted above (unless you edited out the VarName/VarOffset before each of those? All that's shown above is the default used variable, what you change in grub but only along with the VarName/VarOffset variable ID
>> Random Example
One Of: PERR# Generation, VarStoreInfo (VarOffset/VarName): 0x3 (This is what You use in grub), VarStore: 0x1, QuestionId: 0xA, Size: 1, Min: 0x0, Max 0x0, Step: 0x0 {05 A6 35 0D 36 0D 0A 00 01 00 03 00 10 10 00}
One Of Option: Disabled, Value (8 bit): 0x0 (default) {09 0E 05 00 30 00 00 00 00 00 00 00 00 00}
One Of Option: Enabled, Value (8 bit): 0x1 {09 0E 04 00 00 00 01 00 00 00 00 00 00 00}
Grub Prompt >> Setup_Var 0x3 0x1 << This changes the above variable ID 0x3 to default 0x0 instead of 0x1
Ohh! Wait! I see now! Those where you have "Variable 0x4" are the values, but without a variable name ID shown in front of that.
Like this >> Numeric: Spread % (95982967058349882-95982967058349882) , Variable: 0x4 {07 91 05 14 06 14 B7 27 16 00 04 00 04 10 00 FF 01}
Above is missing the VarName/VarOffset ID, that your other ones DO show correct ID, Example >>
0x49980 Variable 0xBC5 equals 0x1 {12 06 C5 0B 01 00}
0x49986 Setting: , Variable: 0x4 {05 91 F2 14 0E 15 77 0B 25 00 04 00 10 10 00 03 00}
In the above setting, you'd type this at Grub to change >> Setup_Var 0xBC5 0x1, 0x2, or 0x3
Looks like the middle and last one are the only ones missing names/correct VarName/VarOffset ID variables. Shoot me the BIOS and I'll check it out for you, and if necessary send you an updated IFR app. Some BIOS have names/ID's removed like that, so you can't easily edit.
Your IFR may be valid and correct above, but it looks confusing how it's shown, so I posted all this just in case it's wrong, so you can see what you should be expecting to look for to change.
Posts: 7
Threads: 1
Joined: Nov 2018
Reputation:
0
11-05-2018, 02:32 AM
(This post was last modified: 11-05-2018, 03:07 AM by Larry_Xia.)
(11-05-2018, 12:56 AM)Lost_N_BIOS Wrote: Upload the setup file, that looks possibly incomplete IFR. Also, to save time so I don't have to request later in case I need another part of the setup, please go ahead and upload the entire BIOS file.
You should be looking for VarName/VarOffset "Variables", not the variable shown in what you pasted above (unless you edited out the VarName/VarOffset before each of those? All that's shown above is the default used variable, what you change in grub but only along with the VarName/VarOffset variable ID
>> Random Example
One Of: PERR# Generation, VarStoreInfo (VarOffset/VarName): 0x3 (This is what You use in grub), VarStore: 0x1, QuestionId: 0xA, Size: 1, Min: 0x0, Max 0x0, Step: 0x0 {05 A6 35 0D 36 0D 0A 00 01 00 03 00 10 10 00}
One Of Option: Disabled, Value (8 bit): 0x0 (default) {09 0E 05 00 30 00 00 00 00 00 00 00 00 00}
One Of Option: Enabled, Value (8 bit): 0x1 {09 0E 04 00 00 00 01 00 00 00 00 00 00 00}
Grub Prompt >> Setup_Var 0x3 0x1 << This changes the above variable ID 0x3 to default 0x0 instead of 0x1
Ohh! Wait! I see now! Those where you have "Variable 0x4" are the values, but without a variable name ID shown in front of that.
Like this >> Numeric: Spread % (95982967058349882-95982967058349882) , Variable: 0x4 {07 91 05 14 06 14 B7 27 16 00 04 00 04 10 00 FF 01}
Above is missing the VarName/VarOffset ID, that your other ones DO show correct ID, Example >>
0x49980 Variable 0xBC5 equals 0x1 {12 06 C5 0B 01 00}
0x49986 Setting: , Variable: 0x4 {05 91 F2 14 0E 15 77 0B 25 00 04 00 10 10 00 03 00}
In the above setting, you'd type this at Grub to change >> Setup_Var 0xBC5 0x1, 0x2, or 0x3
Looks like the middle and last one are the only ones missing names/correct VarName/VarOffset ID variables. Shoot me the BIOS and I'll check it out for you, and if necessary send you an updated IFR app. Some BIOS have names/ID's removed like that, so you can't easily edit.
Your IFR may be valid and correct above, but it looks confusing how it's shown, so I posted all this just in case it's wrong, so you can see what you should be expecting to look for to change.
There were some structral problem with the codes I post, they are correct now, sorry for the confusion.
My BIOS is in the attachment below:
afuwin.zip (Size: 3.42 MB / Downloads: 3)
Posts: 1,776
Threads: 0
Joined: Aug 2018
Reputation:
42
11-05-2018, 03:50 AM
(This post was last modified: 11-05-2018, 03:50 AM by Lost_N_BIOS.)
Thanks, I find similar! I think something has to be done with VarStore in the command, like Varstore + Var ID, but I am not sure what. I've always seen this 0x0 or 0x1, but in your BIOS, especially where there is same ID 0x4 you mentioned, the VarStore ID is different.
Here is IFR I generated, maybe with more info it can help. I also included the tool I used, probably same as yours but updated version
https://www.sendspace.com/file/2rqms4
You'll have to google around about using VarStore with VarName/VarOffset
Posts: 7
Threads: 1
Joined: Nov 2018
Reputation:
0
11-05-2018, 07:30 AM
(This post was last modified: 11-05-2018, 08:04 AM by Larry_Xia.)
(11-05-2018, 03:50 AM)Lost_N_BIOS Wrote: Thanks, I find similar! I think something has to be done with VarStore in the command, like Varstore + Var ID, but I am not sure what. I've always seen this 0x0 or 0x1, but in your BIOS, especially where there is same ID 0x4 you mentioned, the VarStore ID is different.
Here is IFR I generated, maybe with more info it can help. I also included the tool I used, probably same as yours but updated version
https://www.sendspace.com/file/2rqms4
You'll have to google around about using VarStore with VarName/VarOffset
Your IFR is very helpful! I realized that these options are stored in different segments correspond to their VarStore ID, and the VarOffset is their addresses inside their own segments, on top of the IFR document I can find each segment with their VarStore ID, Name and GUID.
For example:
Code: 0x2B025 One Of: Native PCIE Enable, VarStoreInfo (VarOffset/VarName): 0x4, VarStore: 0x1, QuestionId: 0x38, Size: 1, Min: 0x0, Max 0x1, Step: 0x0
' VarStore: 0x1' means this option is stored in the segment whose VarStore ID=0x1
Code: 0x29D19 VarStore: VarStoreId: 0x1 [EC87D643-EBA4-4BB5-A1E5-3F3E36B20DA9], Size: 0xFFA, Name: Setup
Find it!, the name of this segment is 'Setup', its GUID is 'EC87D643-EBA4-4BB5-A1E5-3F3E36B20DA9', you can see it perfectly matches the green underline in my screenshot below.
But wait! it says there is another ‘setup’ whose GUID is '80e1202e....' , but I can't find this GUID anywhere in IFR, it also mentioned GUID does not match expected GUID, what command should I use in order to specify one? I checked the grub help command, the structure is like this:
setup_var setup_var offset [setval]
Posts: 1,776
Threads: 0
Joined: Aug 2018
Reputation:
42
I have seen the GUID does not match error and had no problems before, but as we've noted this BIOS is different due to the way it's setup.
The alternate Setup is probably one contained in NVRAM, which does not dump IFR and needs to be changed via SCEWin, or by using a modified grub loader
Here is two modified grub's to try, one has a config_var, and you can use Setup_Var2 which will correspond to the hidden GUID setups hopefully
https://github.com/datasone/grub-mod-setup_var
Link to second modified one with Setup_Var2 is in first sentence, one with Setup_var3 is in releases tab
Actually, here's the link, you'll have to translate page - https://habr.com/post/190354/
I will send you PM about the other mentioned tool
Posts: 7
Threads: 1
Joined: Nov 2018
Reputation:
0
11-05-2018, 10:51 AM
(This post was last modified: 11-05-2018, 11:22 AM by Larry_Xia.)
But for now everything I want to edit is in the first setup (GUID: EC87D643-EBA4-4BB5-A1E5-3F3E36B20DA9) , I don't know what is it in the hidden one, but if I simply use Setup_Var command it will change both setup, which is the situation I am trying to prevent.
Update:
Code: 0xD4B9 VarStore: VarStoreId: 0x1 [80E1202E-2697-4264-9CC9-80762C3E5863], Size: 0x7, Name: Setup
0xD4D5 VarStore: VarStoreId: 0x2 [80E1202E-2697-4264-9CC9-80762C3E5863], Size: 0x1, Name: Setup2
I find where the second setup is, it's in the Section_PE32_image_ReFlash_ReFlash.sct, I put it to the attachment below:
Section_PE32_image_ReFlash_ReFlash IFR.txt (Size: 10.31 KB / Downloads: 1)
Posts: 1,776
Threads: 0
Joined: Aug 2018
Reputation:
42
Run the tool I sent you in PM, maybe you can change that way and not have to worry about doing this grub stuff.
As for grub, there must be some way to specify Varstore ID when entering a command, but I don't know enough about that. Maybe some of the Russian linked info above can help, did you translate it yet?
What I think you may be able to do, use normal grub to edit one (effectively editing both) then use setup_Grub2 modified one to edit only the hidden one back to what you want it to be, last.
Posts: 7
Threads: 1
Joined: Nov 2018
Reputation:
0
11-06-2018, 12:36 AM
(This post was last modified: 11-06-2018, 12:37 AM by Larry_Xia.)
I tried all of the SCEWIN with 32/64 command in admin, but none of them work, some said driver not accessable and others said not support BIOS, most of them output an nvram.txt file only with head like below:
Code: // Script File Name : nvram.txt
// Created on 11/06/18 at 13:14:15
// Copyright (c)2013 American Megatrends, Inc.
// AMISCE Utility. Ver 5.00.1048
The modified grub I am using right now is the first one by brainsucker, I tried the Stup_var2 command but it will still change both offset. I haven't tried the second one yet. but I find another efi shell called RU.EFI, is it possible to help?
Posts: 1,776
Threads: 0
Joined: Aug 2018
Reputation:
42
11-06-2018, 01:03 AM
(This post was last modified: 11-06-2018, 01:11 AM by Lost_N_BIOS.)
I don't know about the RU.EFI. I did think of something though, if you only want one changed, you can simply direct edit the setup module and put back in BIOS to reflash. Then only that one will have the changed values.
Example - Swap enabled/disabled values (Only part of the value, as shown)
One Of: SMM Use SMM en-US Indication, VarStoreInfo (VarOffset/VarName): 0x4, VarStore: 0x13, QuestionId: 0x87, Size: 1, Min: 0x0, Max 0x1, Step: 0x0 {05 91 81 03 82 03 87 00 13 00 04 00 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}
Change to via hex edit to setup module file, this will change the "Default" value, you can verify by new IFR output on the edited module
One Of: SMM Use SMM en-US Indication, VarStoreInfo (VarOffset/VarName): 0x4, VarStore: 0x13, QuestionId: 0x87, Size: 1, Min: 0x0, Max 0x1, Step: 0x0 {05 91 81 03 82 03 87 00 13 00 04 00 10 10 00 01 00}
One Of Option: Disabled, Value (8 bit): 0x0 (default) {09 07 04 00 00 00 01} << Will no longer be default, value will be 0x1, see IFR output below
One Of Option: Enabled, Value (8 bit): 0x1 {09 07 03 00 30 00 00} << Will now be default and 0x0, see IFR output below
If you then find, you don't want this one to be "The one" changed, put back default setup module instead, and then make same change in AMIBCP instead (This changes the other one, stored in NVRAM)
And, along those lines, you could also just edit the BIOS itself, to enable all these settings to be visible for you in the BIOS instead of messing with it all like this, that would probably be a lot easier for you in the long run
If you want to do that, please zip some images of your BIOS for me, one showing Main section, another showing all visible sub-sections/sub-menu entries in Advanced (If you have advanced), and chipset if you have that one.
Make sure at least one or all of the images also show all current visible tabs/sections you have in the BIOS, I'll see what I can do to enable it all to be visible for you.
|