[Guide] Adding Bifurcation Support to ASUS X79 UEFI BIOS

Adding Bifurcation Support For ASUS X79 in UEFI BIOS Menu

Primarily for use with riser cards that split PCIe slots into multiples without a PLX chip
To avoid the cost of a PLX Riser card/PLX Multi M.2 (RAID)

For this guide I used a P9X79 Motherboard, UEFI BIOS 4701 , and a Asus Hyper M.2 x16 Card some variables may be different on other boards.

Warnings: Here be dragons.
Bifurcation is tested with an a Hyper M.2 x16 Card with 2 Samsung 500GB 970 EVO’s installed on a x8 slot bifurcated to x4x4.
Should you run into trouble with certain settings a CMOS clear should fix things.
You should have a stable bios on USB for Flashback method with the correct flashback name on hand.
At this point 4x4x4x4 bifurcation does not work properly. When testing on the second x16 slot connected to IOU 3 only the first and last NVME slot were functional in of my Asus Hyper M.2 x16 Card. On the white x16 (x8 electrical IOU/IOH1) slot in 4x4 bifurcation the first 2 NVME slots are functional.
Do not purchase more then 2 NVME drives for use on a Asus Hyper M.2 x16 Card

Files Used:
P9X79 Bios version 4701
AMIBCP v4.55
UEFITool 0.25.1
Hex Workshop 6.7 (Trial) Though any HEX-Editor like HxD (free) should work.
Universal IFR Extractor 0.7

Open the P9X79.CAP BIOS in AMIBCP in this tree of the UEFI BIOS menu you should see that there are 2 System Agent Configuration folders
If not you should search for another place in the menus where bifurcation or lane splitting with a dropdown under Optimal/Failsafe says x16 x8 or x4x4.




Open P9X79.CAP with UEFITool CTRL+F to search click Text tab Look for "IOH" text in the bios double click on one of the messages this should point to the "setup" section.
Export Freeform subtype GUID to setup.sct CTRL+E and extract it to setup.txt using Universal IFR Extractor.

You should find some lines like this there should be multiple of similar blocks:

IOU1 - PCIe Port, VarStoreInfo (VarOffset/VarName): 0x88, VarStore: 0x1, QuestionId: 0x89, Size: 1, Min: 0x0, Max 0x0, Step: 0x0 {05 A6 A9 09 C8 09 89 00 01 00 88 00 10 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00}
0xC58C3 Default: DefaultId: 0x0, Value (8 bit): 0x1 {5B 0D 00 00 00 01 00 00 00 00 00 00 00}
0xC58D0 One Of Option: x4x4, Value (8 bit): 0x0 (default MFG) {09 0E CC 09 20 00 00 00 00 00 00 00 00 00}
0xC58DE One Of Option: x8, Value (8 bit): 0x1 {09 0E CB 09 00 00 01 00 00 00 00 00 00 00}


For my own testing purposes this is the bottom x16 sized x8 port im bifurcating to x4x4.

The register to do this is 0x88 or 0088.


Testing bifurcation functionality without flashing a new bios(optional):

Disable secure boot, reboot using a fat32 USB drive with https://github.com/tianocore/edk2/raw/ma…l/X64/Shell.efi renamed to Bootx64.efi in EFI\BOOT and http://ruexe.blogspot.com/ to edit the bios registers.

Modified from davidm71’s post:

Search with [ALT] + [+=] for "setup" go to row 0080 then edit register 0088 to 0 [CTRL]+[W] writes it away and [ALT]+[Q] then reset.

You should now have bifurcation support barring a CMOS clear or battery fail.
You can check if the port in question is split with HWinfo:




Enabling the hidden System Agent Configuration Menu:

Applying the hex values in setup.sct for System Agent Configuration by referencing the earlier extracted setup.txt;

Suppress If {0A 82}
0xC29FB True {46 02}
0xC29FD Ref: System Agent Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x5, FormId: 0x41E {0F 0F 61 08 62 08 05 00 00 00 FF FF 00 1E 04}
0xC2A0C End If {29 02}


Where if 0A 82(Switches a ton things off we needent enable so were not changing it) is 46 02 (True) we disable the System Agent Configuration menu/form;
So we invert the function of Supress by changing it to False (47 02)

Search for HEX value 0F 0F 61 08 62 08 05 00 00 00 FF FF 00 1E 04 in setup.sct and lo and behold there is a 46 02 to the left of it.



Change it from 46 to 47 save the setup.sct open with UEFITool, look for "ioh" unicode text this leads to setup. Remove the Freeform subtype GUID, insert setup.sct after PE32 image and save the P9X79.cap
Optionaly open P9X79.cap with AMIBCP to disable what you dont need in the menu, save again.

Enabling the hidden PCI Subsystem Settings:

Applying the hex values in setup.sct for PCI Subsystem Settings by referencing the earlier extracted setup.txt;

Suppress If {0A 82}
0xC2995 True {46 02}
0xC2997 Ref: PCI Subsystem Settings, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x1, FormId: 0x40E {0F 0F AC 0A B2 0A 01 00 00 00 FF FF 00 0E 04}
0xC29A6 End If {29 02}


Where if 0A 82 is 46 02 (True) we disable the System Agent Configuration menu/form;
So we invert the function of Supress by changing it to False

Search for HEX value 0F 0F AC 0A B2 0A 01 00 00 00 FF FF 00 0E 04 in setup.sct and spot the 46 02 to the left of it.
Change it from 46 to 47 save the setup.sct open with UEFITool look for "ioh" unicode text this leads to setup remove the Freeform subtype GUID, insert setup.sct after PE32 image save the P9X79.cap

Optionaly open P9X79.cap with AMIBCP to disable what you dont need in the menu, save again.

Flash P9X79.cap (check asus.com for per model asus flash back naming) with the flash back method and Presto Changeo:


]





References:
1 [REQUEST] How to connect 2 M.2 SSDs to the same PCIe slot? With contributions by Lost_N_BIOS
2 [Guide] - How to Bifurcate a PCI-E slot by davidm71
3 Add option in AMI UEFI bios menu (how to?) (2)

If BSOD’s occur now and then when writing to PCIE setting BIOS > Advanced > System Agent Configuration > IOH Configuration > Gen3 Equalization Phase 2/3 WA + Equalization Phase 2/3 Supported + Gen3 Equalization Redoing WA.
Set all to enabled.

EDIT01: First edit to change into a guide
EDIT02: Updated Bios in signature with 1 System Agent Configuration + PCI Subsystem Settings + Enabled Advanced Mode No Logo + NVME boot support by @Lost_N_BIOS
EDIT03: Added Updated BIOS Pics, Caution PCI Subsystem Settings option, Layout
EDIT04: Added stability bios tweaks.
EDIT05: Readability
EDIT06: Added non functional 4x4x4x4 bifurcation warning.
EDIT07: TinyFile went the way of the dodo so I updated the link in my profile.
EDIT08: WinRaid Forums went the way of the dodo so heres a link to the bios for the ASUS P9X79 BIOS link.https://drive.google.com/file/d/11qmwG8fykSiN5fTg4XGF-UGJv5xyX1CJ/view?usp=sharing

3 Likes

@JackSted - So this is finished BIOS now? If yes, do you want me to move it to the completed BIOS mods section?

Cool, I had wanted to make use of the Asus HyperM.2 x16 Card since I heard of it.
I dont think I can create the modded file myself. I would want to use it on the latest Bios for P9X79 (4901) and P9X79E-WS (1704).
And if all goes well, on one Z9PE-D8 WS (5802).

@paranoid_android
Good luck, all the hardware should support bifurcation at least on non PLX connected motherboard PCIe Ports.
Since this is my first bios mod I think your mods are in safer hands with Lost_N_BIOS in your thread.
[REQUEST] How to connect 2 M.2 SSDs to the same PCIe slot?

@JackSted
Do you think that the presence of plx chips could cause a problem?
The P9X79E-WS Board has only one ×8 Port which is directly connected to the cpu, the others are connected to plx chips.
The P9X79-WS has no PLX chips onboard though.
I’ll ask Lost_N_Bios about that too.

I am unsure how PLX chips affect this kind of thing, you’ll have to try and google around about PLX and bifurcation and see if you can find any good info. I think someone discussed that in detail here once, in another bifurcation related thread

My instincts tell me PLX chips should be like lego in the sense that it speaks the full PCIe protocol you should even be able to stack them, provided you dont pull too much power. However PLX chip have their own firmware to configure their outgoing lane multiplexing/bifurcation so unless your bios hints that its "speaks" PLX eg: You have (hidden) options for bifurcation on all PCIe slots, you cannot bifurcate the pcie ports that connect to the 2 x16 PLX multiplexed into 2 x16 and one x8 slots, unless the PLX does some magical auto-detect bifurcation.
Finally a PCie card with a PLX chip on it should just work provided it isnt some proprietary server part like supermicro only (maybe break stuff or just not work).

@JackSted

Congrats on your success and thank you for referencing my work prior.

Thanks,
On the shoulders of giants and all that.

Very interesting. I just flashed my P9X79PRO to allow nvme support, and its working great. I wonder if it’s possible to RAID0 (with RST, or maybe VROC) with HYPER M.2 X16 on x79?

@KprW
Vroc rst raid is not possible with the HYPER M.2 X16 on X79 as far as I know, windows software raid however is.
The speed increases with software raid 0 2x EVO 970 500GB on HYPER M.2 X16 seem accepatable about 3800/4400 MB/s tho there might be room for improvement with tweaks.



Those are good speeds. sequential r/w 128 kB benchmark puts EVO 970 around 1900/2500.

HI

THX for the great GUIDE i managed to do the Bifurcation for my Asus Rampage IV Formula + I added Nvme boot option working great with HYPER M.2 X16 +2 x Samsung 970 pro

Glad to have helped :D, Performance as espected?, Any stability issues?

Hello, following the advice of [Offline] Lost_N_BIOS I came to watch the tuto.j’ai a card asus X79 sabertooth, I would like to put my PCIe port 2 forks 4x4x4x4, but on the tutorial I block "on the part of :

IOU1 - PCIe Port, VarStoreInfo (VarOffset/VarName): 0x88, VarStore: 0x1, QuestionId: 0x89, Size: 1, Min: 0x0, Max 0x0, Step: 0x0 {05 A6 A9 09 C8 09 89 00 01 00 88 00 10 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00}
0xC58C3 Default: DefaultId: 0x0, Value (8 bit): 0x1 {5B 0D 00 00 00 01 00 00 00 00 00 00 00}
0xC58D0 One Of Option: x4x4, Value (8 bit): 0x0 (default MFG) {09 0E CC 09 20 00 00 00 00 00 00 00 00 00}
0xC58DE One Of Option: x8, Value (8 bit): 0x1 {09 0E CB 09 00 00 01 00 00 00 00 00 00 00}

Today it is in place I boot on but I see only one SSD M2.

Thanks for your help

@kosh06 - you can directly edit in place with AMIBCP, like you were doing in your thread, you do not have to edit this way unless you want to.
And, as I mentioned, not all ports/slots in BIOS will be same for your board, you will have to try each one until you find which slot on your board is which slot in the BIOS, then move your drive to the slot that offers the settings you need/want to use.

Here is all your available options - the setting choice you keep mentioning, does not offer the split choices you want, so you will need to try another slot/setting position


One Of: IOU1 - PCIe Port, VarStoreInfo (VarOffset/VarName): 0x7C, VarStore: 0x1, QuestionId: 0x7C, Size: 1, Min: 0x0, Max 0x0, Step: 0x0 {05 A6 80 09 9F 09 7C 00 01 00 7C 00 10 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00}
0xC9950 Default: DefaultId: 0x0, Value (8 bit): 0x1 {5B 0D 00 00 00 01 00 00 00 00 00 00 00}
0xC995D One Of Option: x4x4, Value (8 bit): 0x0 (default MFG) {09 0E A3 09 20 00 00 00 00 00 00 00 00 00}
0xC996B One Of Option: x8, Value (8 bit): 0x1 {09 0E A2 09 00 00 01 00 00 00 00 00 00 00}
0xC9979 End One Of {29 02}

One Of: IOU2 - PCIe Port, VarStoreInfo (VarOffset/VarName): 0x8D, VarStore: 0x1, QuestionId: 0x7F, Size: 1, Min: 0x0, Max 0x0, Step: 0x0 {05 A6 81 09 A0 09 7F 00 01 00 8D 00 10 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00}
0xC9A4F One Of Option: x4x4x4x4, Value (8 bit): 0x0 {09 0E A4 09 00 00 00 00 00 00 00 00 00 00}
0xC9A5D One Of Option: x4x4x8, Value (8 bit): 0x1 {09 0E A5 09 00 00 01 00 00 00 00 00 00 00}
0xC9A6B One Of Option: x8x4x4, Value (8 bit): 0x2 {09 0E A6 09 00 00 02 00 00 00 00 00 00 00}
0xC9A79 One Of Option: x8x8, Value (8 bit): 0x3 {09 0E A7 09 00 00 03 00 00 00 00 00 00 00}
0xC9A87 One Of Option: x16, Value (8 bit): 0x4 (default) {09 0E A8 09 30 00 04 00 00 00 00 00 00 00}
0xC9A95 End One Of {29 02}

One Of: IOU3 - PCIe Port, VarStoreInfo (VarOffset/VarName): 0xAE, VarStore: 0x1, QuestionId: 0x8D, Size: 1, Min: 0x0, Max 0x0, Step: 0x0 {05 A6 82 09 A0 09 8D 00 01 00 AE 00 10 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00}
0xC9F2D One Of Option: x4x4x4x4, Value (8 bit): 0x0 {09 0E A4 09 00 00 00 00 00 00 00 00 00 00}
0xC9F3B One Of Option: x4x4x8, Value (8 bit): 0x1 {09 0E A5 09 00 00 01 00 00 00 00 00 00 00}
0xC9F49 One Of Option: x8x4x4, Value (8 bit): 0x2 {09 0E A6 09 00 00 02 00 00 00 00 00 00 00}
0xC9F57 One Of Option: x8x8, Value (8 bit): 0x3 {09 0E A7 09 00 00 03 00 00 00 00 00 00 00}
0xC9F65 One Of Option: x16, Value (8 bit): 0x4 (default) {09 0E A8 09 30 00 04 00 00 00 00 00 00 00}
0xC9F73 End One Of {29 02}

@Kosh06
Were you testing if bifurcation works with RU (which is optional) with the x16 (x8 electrical) bottom slot?
You seem to have the same layout as my P9X79 and assuming they did not change it, the bottom x16 slot is IOU1(x8 electrical) the middle one is IOU2 the top one is IOU3.

thank you for your answers I look back home tonight I come back to you to tell you if it works

@kosh06
I modified your BIOS for you to enable the options for bifurcation you can find them under Advanced > System Agent Configuration > IOH Configuration > IOU? - PCIe Port Where ? is the port number counting from the bottom up.
Download the bios
Format a USB pendrive to FAT32.
Extract the BIOS file and rename the file to SABERX79.CAP.
Put the BIOS file on your USB pendrive.
Shut Down your PC
Connect the USB pendrive to the white USB Port.
Press the Bios Flashback Button for three seconds until the LED begins to blink, then release.
Wait until the LED stops blinking.
Power on your system.

Good evening, after updating the bios, the pc can not find the SSd M2 disk.

I had to put an old disk and install windows on it to put the bios ajour with the nmve driver.
My flas back button does not work anymore I had to pass for the utility from Asus.After a little research on the downloaded file, I have not seen a driver for SSD M2, or they are hidden