Gigabyte MD71-HB0 (also: datto siris 4 enterprise) bifurcation bios mod

Notice: Page may contain affiliate links for which we may earn a small commission through services like Amazon Affiliates or Skimlinks.

andrewbedia

Well-Known Member
Jan 11, 2013
701
260
63
A guide.

Gigabyte has chosen not to expose bifurcation capabilities on this board. This board is also found in Datto Siris 4 Enterprise appliances if you scoop them up on ebay or whatever.

Obvious warning that this is not running per the mfr specs anymore if you do this and I will not fix your board if you break it. I have not observed any issues and it's working fine with multiple U.2/M.2 drives per slot a la Supermicro AOC-SLG3-2M2 and Linkreal LRNV94N8.

Prerequisite tools you'll need:
AMIBCP 5.02.0031 from here
EEUpdate 5.30.10.00 from this post
R16 (latest at time of writing) bios image from Gigabyte here

Follow these steps carefully:
1. Use rufus to make a freedos flash drive and put eeupdate on it. Boot the machine in legacy mode and run `eeupdate /all /mac-dump` and take a picture/screenshot of the mac addresses
2. With the machine off and unplugged, use a flash programmer such as flashcat to save a copy of the existing firmware (in case things go badly).
3. Modify the BIOS image you downloaded from Gigabyte using AMIBCP as shown in the attached image and save a copy
4. Flash the modified bios image with the flash programmer
5. Boot freedos again and use eeupdate to program the mac addresses you recorded earlier. The syntax is `eeupdate /nic=# /mac=AABBCCEEFF00`
6. If all is well, the BIOS will have IOU bridge options in the IIO menu now. You have to disable auto detect. It doesn't work. Below is the list of Sockets and IOUs for each slot. Just set them to x4x4x4x4 if you want to bifurcate
From my notes:
Slot 6 = Socket 1, IOU1
Slot 5 = Socket 1, IOU0
Slot 4 = Socket 1, IOU2
Slot 3 = Socket 0, IOU2
Slot 2 = doesn't work
Slot 1 = doesn't work

If anyone has any improvements to suggest or know how to get Slot 2 and Slot 1 to work, let me know! I'm doubtful on Slot 1 ever working because I believe it goes through the PCH. I'm fairly sure you will have to use a flash programmer as earlier attempts out of boredom to do this last year flashing by IPMI rejected modified images (signing issues, probably)

At some point, I'll try this on Gigabyte MD70-HB0 (also: datto siris 3 enterprise) and report back whenever I get around to it. It should work there as well.
 

Attachments

Last edited:

silentlabber

New Member
Jan 10, 2023
12
0
1
Im new to bios modding , is the hardware programmer required ? , i take it the bios flash utility checks the bios to make sure the checksums match so you need to have it ?

Is there someone i can pay to do this ?

thanks for your time, and effort in getting this working.
 

RolloZ170

Well-Known Member
Apr 24, 2016
5,323
1,605
113
Im new to bios modding , is the hardware programmer required ?
yes for this board and other gigabyte LGA3647.
there is another way to change bifurcation hidden but working options.
 

silentlabber

New Member
Jan 10, 2023
12
0
1
yes for this board and other gigabyte LGA3647.
there is another way to change bifurcation hidden but working options.
interesting , looks intimidating. ill certainly give this a shot.

thanks!
 

RolloZ170

Well-Known Member
Apr 24, 2016
5,323
1,605
113
load the BIOS in UEFITool_NE_A58.exe
search for "IOU0 (IIO PCIe Br1)" (finds SocketSetup)
extract Body of PE32 image section.
open this file in Universal IFR Extractor and save as txt.
looks like this (cutout)

Code:
0xC7BB     Form: Socket0 Configuration, Form ID: 0x47A {01 86 7A 04 2A 01}
0xC7C1         Suppress If: {0A 82}
0xC7C3             Variable 0xC4 equals 0x0 {12 06 C4 00 00 00}
0xC7C9             Grayout If: {19 82}
0xC7CB                 Variable 0xB2 equals 0x1 {12 06 B2 00 01 00}
0xC7D1                 Setting: IOU0 (IIO PCIe Br1), Variable: 0xB4 {05 91 9B 02 AF 02 E6 00 02 00 B4 00 10 10 00 04 00}
0xC7E2                     Default: 8 Bit, Value: 0x4 {5B 06 00 00 00 04}
0xC7E8                     Option: x4x4x4x4, Value: 0x0 {09 07 BF 02 00 00 00}
0xC7EF                     Option: x4x4x8, Value: 0x1 {09 07 C0 02 00 00 01}
0xC7F6                     Option: x8x4x4, Value: 0x2 {09 07 C1 02 00 00 02}
0xC7FD                     Option: x8x8, Value: 0x3 {09 07 C2 02 00 00 03}
0xC804                     Option: x16, Value: 0x4 {09 07 B8 0D 00 00 04}
0xC80B                 End of Options {29 02}
0xC80D                 Setting: IOU1 (IIO PCIe Br2), Variable: 0xB8 {05 91 9F 02 AF 02 E7 00 02 00 B8 00 10 10 00 04 00}
0xC81E                     Default: 8 Bit, Value: 0x3 {5B 06 00 00 00 03}
0xC824                     Option: x4x4x4x4, Value: 0x0 {09 07 BF 02 00 00 00}
0xC82B                     Option: x4x4x8, Value: 0x1 {09 07 C0 02 00 00 01}
0xC832                     Option: x8x4x4, Value: 0x2 {09 07 C1 02 00 00 02}
0xC839                     Option: x8x8, Value: 0x3 {09 07 C2 02 00 00 03}
0xC840                     Option: x16, Value: 0x4 {09 07 B8 0D 00 00 04}
0xC847                 End of Options {29 02}
0xC849                 Setting: IOU2 (IIO PCIe Br3), Variable: 0xBC {05 91 A3 02 AF 02 E8 00 02 00 BC 00 10 10 00 04 00}
0xC85A                     Default: 8 Bit, Value: 0x1 {5B 06 00 00 00 01}
0xC860                     Option: x4x4x4x4, Value: 0x0 {09 07 BF 02 00 00 00}
0xC867                     Option: x4x4x8, Value: 0x1 {09 07 C0 02 00 00 01}
0xC86E                     Option: x8x4x4, Value: 0x2 {09 07 C1 02 00 00 02}
0xC875                     Option: x8x8, Value: 0x3 {09 07 C2 02 00 00 03}
0xC87C                     Option: x16, Value: 0x4 {09 07 B8 0D 00 00 04}
0xC883                 End of Options {29 02}
0xC885                 Setting: MCP0 (IIO PCIe Br4), Variable: 0xC0 {05 91 A7 02 AF 02 E9 00 02 00 C0 00 10 10 04 FF 00}
0xC896                     Option: x16, Value: 0x4 {09 07 B8 0D 00 00 04}
0xC89D                     Option: Auto, Value: 0xFF {09 07 B5 0D 30 00 FF}
0xC8A4                 End of Options {29 02}
0xC8A6                 Setting: MCP1 (IIO PCIe Br5), Variable: 0xC4 {05 91 AB 02 AF 02 EA 00 02 00 C4 00 10 10 04 FF 00}
0xC8B7                     Option: x16, Value: 0x4 {09 07 B8 0D 00 00 04}
0xC8BE                     Option: Auto, Value: 0xFF {09 07 B5 0D 30 00 FF}
0xC8C5                 End of Options {29 02}
0xC8C7             End If {29 02}
0xC8C9         End If {29 02}
Setting: IOU0 (IIO PCIe Br1), Variable: 0xB4
Default: 8 Bit, Value: 0x4 <- means x16
similar you will see if you run RU.efi from BIOS EFI-shell
search UEFI Vars for "SocketIioConfig" (can be found in the BIOS image too)
SocketIioConfig.jpg
looks similar than this in RU.efi but its other(wrong) varstore
SocketPowerManagementConfig.jpg
 

Attachments

Last edited:

silentlabber

New Member
Jan 10, 2023
12
0
1
This looks pretty straight forward.

in the end how do i load the changes? new .efi ? or is this something thats done on boot every time ?

thanks!
 

RolloZ170

Well-Known Member
Apr 24, 2016
5,323
1,605
113
in the end how do i load the changes? new .efi ? or is this something thats done on boot every time ?
RU.efi "ctrl-W" saves this in VARstore. this is cleared only with BIOS->set defaults
its like you go into BIOS and make changes (the difference is: you can't because they are hidden)

edit: there are other Tools to make scripts to make changes in EFI-Varstore.
any suggestions here are welcome.
 
Last edited:

silentlabber

New Member
Jan 10, 2023
12
0
1
ok , it seems using that worked. I have the pcie bifurcation settings like the text screenshot above. ill move forward with this.
 

silentlabber

New Member
Jan 10, 2023
12
0
1
ahh yes, mine is slightly different. probably being a md70-hbo.

piceport.png

however it does look like this is correct. mine is under platform. text file looks quite the same as the one above.
 

RolloZ170

Well-Known Member
Apr 24, 2016
5,323
1,605
113
however it does look like this is correct. mine is under platform. text file looks quite the same as the one above.
UEFI Var is "IntelSetup"
Setting: IOU2 (IIO PCIe Port 1), Variable: 0x537
Default: 8 Bit, Value: 0x1 <- x8
Code:
0x1A81A     Form: IIO 0, Form ID: 0x76 {01 86 76 00 8C 04}
0x1A820         Suppress If: {0A 82}
0x1A822             Variable 0x20F equals 0x0 {12 06 0F 02 00 00}
0x1A828             Setting: IOU2 (IIO PCIe Port 1), Variable: 0x537 {05 91 CC 04 D8 04 44 02 01 00 37 05 10 10 00 FF 00}
0x1A839                 Default: 8 Bit, Value: 0x1 {5B 06 00 00 00 01}
0x1A83F                 Option: x4x4, Value: 0x0 {09 07 DD 04 00 00 00}
0x1A846                 Option: x8, Value: 0x1 {09 07 60 0A 00 00 01}
0x1A84D                 Option: Auto, Value: 0xFF (default MFG) {09 07 87 03 20 00 FF}
0x1A854             End of Options {29 02}
0x1A856             Setting: IOU0 (IIO PCIe Port 2), Variable: 0x52F {05 91 D0 04 D8 04 45 02 01 00 2F 05 10 10 00 FF 00}
0x1A867                 Default: 8 Bit, Value: 0x4 {5B 06 00 00 00 04}
0x1A86D                 Option: x4x4x4x4, Value: 0x0 {09 07 D9 04 00 00 00}
0x1A874                 Option: x4x4x8, Value: 0x1 {09 07 DA 04 00 00 01}
0x1A87B                 Option: x8x4x4, Value: 0x2 {09 07 DB 04 00 00 02}
0x1A882                 Option: x8x8, Value: 0x3 {09 07 DC 04 00 00 03}
0x1A889                 Option: x16, Value: 0x4 {09 07 61 0A 00 00 04}
0x1A890                 Option: Auto, Value: 0xFF (default MFG) {09 07 87 03 20 00 FF}
0x1A897             End of Options {29 02}
0x1A899             Setting: IOU1 (IIO PCIe Port 3), Variable: 0x533 {05 91 D4 04 D8 04 46 02 01 00 33 05 10 10 00 FF 00}
0x1A8AA                 Default: 8 Bit, Value: 0xFF {5B 06 00 00 00 FF}
0x1A8B0                 Option: x4x4x4x4, Value: 0x0 {09 07 D9 04 00 00 00}
0x1A8B7                 Option: x4x4x8, Value: 0x1 {09 07 DA 04 00 00 01}
0x1A8BE                 Option: x8x4x4, Value: 0x2 {09 07 DB 04 00 00 02}
0x1A8C5                 Option: x8x8, Value: 0x3 {09 07 DC 04 00 00 03}
0x1A8CC                 Option: x16, Value: 0x4 {09 07 61 0A 00 00 04}
0x1A8D3                 Option: Auto, Value: 0xFF (default MFG) {09 07 87 03 20 00 FF}
0x1A8DA             End of Options {29 02}
0x1A8DC         End If {29 02}
 

RolloZ170

Well-Known Member
Apr 24, 2016
5,323
1,605
113
0x537 , how would i go about finding that in the hex editor ? im not great with hex
if you still know the VarStore you can use RU.efi
in the BIOS search for "IntelSetup" after this go one byte further, that's beginning index 0.
copy the following 0x600 bytes and insert in blank page to have this
IntelSetupMD70.jpg
copy the following 0x600 bytes and insert in blank page to have this (0x537)
IntelSetupMD70cut.jpg
 

RolloZ170

Well-Known Member
Apr 24, 2016
5,323
1,605
113
did you mean copy from the bios intel setup 0x600 bytes to the efi ? or create a whole new file ? thanks
no. you don't need anything from BIOS, just find the VarStore.
if you have the VarStore "IntelSetup" and the options index 0x537
Run RU.efi and press ALT-= to open list of UEFI variables
find "IntelSetup": change byte in index 0x537 to what you want, save and reboot.
 
Last edited:

silentlabber

New Member
Jan 10, 2023
12
0
1
no. you don't need anything from BIOS, just find the VarStore.
if you have the VarStore "IntelSetup" and the options index 0x537
run RU.efi, and look into the VarStore "IntelSetup": change byte in index 0x537 to what you want, save and reboot.
got it. so use the VarStore as the template to change the settings with ru.efi ?
 

RolloZ170

Well-Known Member
Apr 24, 2016
5,323
1,605
113
got it. so use the VarStore as the template to change the settings with ru.efi ?
correct. only visit the BIOS in HxD is you do not know the name of the UEFI VarStore.
Run RU.efi and press ALT-= to open list of UEFI variables
variables.gif