Attempting to enable 2x8 bifurcation in MSI B450 ITX Gaming Plus AC

So far as I know:

1. The Ryzen chips support this inherently
2. That the B450 and B550 chipsets don’t enable this, except the Fatal1ty B450 Gaming-ITX/ac
3. That this is purely a marketing differention managed by the BIOS (I.e. no physical changes needed)

Interestingly, in a recent BIOS update, the 2x8 option DOES now appear - however, enabling currently does the same thing as the 4 x 4x option (I.e. shows 4 x PCIE x4 roots in the OS)

So I therefore think it was just a mistake on their part to put it in the menu, BUT hoping it’s possible to just mod a conditional in the module.

I downloaded the two latest BIOSes:

1.My board: https://www.msi.com/Motherboard/support/…US-AC#down-bios
2.The board that has this feature officially: https://www.asrock.com/MB/AMD/Fatal1ty%2…/index.asp#BIOS

I find the same module in both the roms, that’s titled:

1
2
3
4
5
6
7
8
 

Form Sets
--------------------------------------------------------------------------------
Offset: Title:
--------------------------------------------------------------------------------
0x80A8 AMD PBS (0x2 from string package 0x0)
 

 


And lower down I find the option (in the one for mine):

1
2
3
4
5
6
7
8
9
10
11
12
13
 

0x82E2 Suppress If {0A 82}
0x82E4 QuestionId: 0x2D equals value in list (0x1) {14 88 2D 00 01 00 01 00}
0x82EC QuestionId: 0x2 equals value in list (0x1, 0x3, 0x4) {14 0C 02 00 03 00 01 00 03 00 04 00}
0x82F8 Not {17 02}
0x82FA Or {16 02}
0x82FC End {29 02}
0x82FE One Of: PCIe x16/2x8 Switch, VarStoreInfo (VarOffset/VarName): 0xD, VarStore: 0x1, QuestionId: 0x9, Size: 1, Min: 0x0, Max 0x1, Step: 0x0 {05 91 19 00 1A 00 09 00 01 00 0D 00 10 10 00 01 00}
0x830F One Of Option: 2X8, Value (8 bit): 0x0 {09 07 1B 00 00 00 00}
0x8316 One Of Option: 1X16, Value (8 bit): 0x1 (default) {09 07 1C 00 10 00 01}
0x831D End One Of {29 02}
0x831F End If {29 02}
 
 


This looks virtually identical to the ASRock bios - the only differences are:

1. The offsets (as expected)
2. The question ID is different: 0x32 instead of 0x2D - I assume this is some kind of index to table of options

I clearly don't know quite enough yet, but looking at other tutorials, and trying to apply this here, so far as I know I somehow need to do two or three things:

1. Unsupress the option, by determining the hex for 'false', and replacing that in the preceding two bytes of the matching byte sequence for the question
2. Do something similar to choose the option itself
3.(Optionally?) connect up the item properly to the menu item that's already there (but seems to switch to 4 x 4x). Normally I'd expect the menu item to not be there at all, rather than broken. I'm not fussed about being able to dynamically set this, but it would be nice to know how to do it)

Would anyone be able to help me with this please?

I found a guide for an Intel-based chipset by @davidm71 : [Guide] - How to Bifurcate a PCI-E slot - but obviously that won't apply at all to the Ryzen.

In case it helps, the full header is:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 

UEFI Protocol Detected
--------------------------------------------------------------------------------
 

String Packages
--------------------------------------------------------------------------------
Offset: Language:
--------------------------------------------------------------------------------
0x3FC8 en-US (0x0)
 

Form Sets
--------------------------------------------------------------------------------
Offset: Title:
--------------------------------------------------------------------------------
0x80A8 AMD PBS (0x2 from string package 0x0)
 

Internal Forms Representation
--------------------------------------------------------------------------------
Offset: Instruction:
--------------------------------------------------------------------------------
0x80AC Form Set: AMD PBS [B863B959-0EC6-4033-99C1-8FD89F040222], ClassGuid0 [93039971-8545-4B04-B45E-32EB8326040E] {0E A7 59 B9 63 B8 C6 0E 33 40 99 C1 8F D8 9F 04 02 22 02 00 03 00 01 71 99 03 93 45 85 04 4B B4 5E 32 EB 83 26 04 0E}
0x80D3 Guid: [0F0B1735-87A0-4193-B266-538C38AF48CE] {5F 15 35 17 0B 0F A0 87 93 41 B2 66 53 8C 38 AF 48 CE 03 01 00}
0x80E8 Guid: [0F0B1735-87A0-4193-B266-538C38AF48CE] {5F 15 35 17 0B 0F A0 87 93 41 B2 66 53 8C 38 AF 48 CE 04 00 00}
0x80FD Default Store: en-US, DefaultId: 0x0 {5C 06 00 00 00 00}
0x8103 Default Store: en-US, DefaultId: 0x1 {5C 06 00 00 01 00}
0x8109 VarStore: VarStoreId: 0x1 [A339D746-F678-49B3-9FC7-54CE0F9DF226], Size: 0x91, Name: AMD_PBS_SETUP {24 24 46 D7 39 A3 78 F6 B3 49 9F C7 54 CE 0F 9D F2 26 01 00 91 00 41 4D 44 5F 50 42 53 5F 53 45 54 55 50 00}
0x812D Form: AMD PBS Option, FormId: 0xB {01 86 0B 00 04 00}
0x8133 Ref: AMD Firmware Version, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x1, FormId: 0xC {0F 0F E4 00 E5 00 01 00 00 00 FF FF 00 0C 00}
...
 
 


Have also attached the full file.

msi1.txt (58.6 KB)

I’ve done this mod on my MSI B450 Gaming Plus to get access to AMD CBS and PBS: [OFFER] Gigabyte GA-AX370-Aorus Gaming 5 BIOS mod (12)
That should allow you to enable bifurcation in AMD PBS



Thanks @jason098

May I just clarify please.

Do you mean where in the IFR file I see:

1
2
3
4
5
6
7
8
9
10
11
 

Internal Forms Representation
--------------------------------------------------------------------------------
Offset: Instruction:
--------------------------------------------------------------------------------
0x80AC Form Set: AMD PBS [B863B959-0EC6-4033-99C1-8FD89F040222], ClassGuid0 [93039971-8545-4B04-B45E-32EB8326040E] {0E A7 59 B9 63 B8 C6 0E 33 40 99 C1 8F D8 9F 04 02 22 02 00 03 00 01 71 99 03 93 45 85 04 4B B4 5E 32 EB 83 26 04 0E}
0x80D3 Guid: [0F0B1735-87A0-4193-B266-538C38AF48CE] {5F 15 35 17 0B 0F A0 87 93 41 B2 66 53 8C 38 AF 48 CE 03 01 00}
0x80E8 Guid: [0F0B1735-87A0-4193-B266-538C38AF48CE] {5F 15 35 17 0B 0F A0 87 93 41 B2 66 53 8C 38 AF 48 CE 04 00 00}
0x80FD Default Store: en-US, DefaultId: 0x0 {5C 06 00 00 00 00}
0x8103 Default Store: en-US, DefaultId: 0x1 {5C 06 00 00 01 00}
 
 


I should then set the bytes:

1
2
3
4
 

5F 15 35 17 0B 0F A0 87 93 41 B2 66 53 8C 38 AF 48 CE 03 01 00
5F 15 35 17 0B 0F A0 87 93 41 B2 66 53 8C 38 AF 48 CE 04 00 00
 
 


To zero in the extracted binary:

Screenshot from 2019-11-02 15-15-11.png



2: Do you know how/why that works?

3: Do you know what PBS stands for? It seems to be an AMD term for ‘advanced’ GPU settings.

You should do it like this: open your BIOS in UEFITool and do a GUID search for B1DA0ADF (AMITSE), then just do Extract as is… on the PE32 image https://i.imgur.com/NvGBmMZ.png
Open the file you just extracted with your favorite hex editor and search for “59 B9 63 B8 C6 0E 33 40 99 C1 8F D8 9F 04 02 22” and overwrite that with zeroes. Once you’ve done that you just gotta do Replace as is… on the PE32 image and select the file you modified

Edit: Here’s a modified AMITSE from the “B450I GAMING PLUS AC” BIOS 7A40vAA https://drive.google.com/open?id=1xz8k1G…PsIQYqHcI999iTT

Thanks again @jason098

So I extracted that section - the IFR of that looks almost empty, with no forms:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 

UEFI Protocol Detected
--------------------------------------------------------------------------------
 

String Packages
--------------------------------------------------------------------------------
Offset: Language:
--------------------------------------------------------------------------------
0x38FEF8 en-US (0x0)
0x3A21D2 ko-KR (0x1)
0x3A4BC3 ja-JP (0x2)
0x3A7DDC de-DE (0x3)
0x3ABF29 ru-RU (0x4)
0x3B03D4 fr-FR (0x5)
 

Form Sets
--------------------------------------------------------------------------------
Offset: Title:
--------------------------------------------------------------------------------
 

Internal Forms Representation
--------------------------------------------------------------------------------
Offset: Instruction:
--------------------------------------------------------------------------------
 
 


However, in the binary I do see the bytes you mention above (and in your linked post).

I see now that the same bytes are in the PBS section I linked in my second post, it's the start of the curly braces in the "Form Set" line:

1
2
3
4
 

0x80AC Form Set: AMD PBS [B863B959-0EC6-4033-99C1-8FD89F040222], ClassGuid0 [93039971-8545-4B04-B45E-32EB8326040E] {0E A7 59 B9 63 B8 C6 0E 33 40 99 C1 8F D8 9F 04 02 22 02 00 03 00 01 71 99 03 93 45 85 04 4B B4 5E 32 EB
83 26 04 0E}
 
 


I will try doing as you say - but can I ask again:

1) Do you know why zeroing out the PBS GUID, in the AMITSE section, achieves this effect
2) Do you know what PBS stands for?

Thanks again so much for you help.

I assume that MSI set in AMITSE to hide these menus so zeroing the GUIDs makes them appear again. As to what PBS and CBS means, I have no idea. Nowhere does anyone or anything tell what the abbreviations mean

@jason098 - thanks so much - that has enabled the PBS menu for me!

WhatsApp Image 2019-11-02 at 16.53.50.jpeg


WhatsApp Image 2019-11-02 at 16.53.51.jpeg



The downside is 2x8 doesn’t seem to work - won’t even post. I have to clear the CMOS to get back in.

So I guess the story continues.

Glad I could help. Well I just tried enabling 2x8 on my B450 Gaming Plus and it posted (no idea if it actually has any effect though)

Perhaps it’s something to do with whether the graphics card is compatible. I’ve got a Sapphire Radeon RX580 Nitro+

For anyone looking at this in the future, I’m also seeking help at https://hardforum.com/threads/pcie-bifur…1870298/page-21

Not sure what the next step is. I’d planned to get a second cheap GPU anyway, so perhaps I’ll go ahead and do so.

Regarding what effect you should see - your graphics card should report running on x8 (rather than x16) lanes. I think something like GPU-Z should show that. In Linux I use lspci to view what the actual PCI roots there are and what bandwidth.

So I don’t think that had any effect. Linux still reports a Width of x16 on my RX 570

What BIOS version did you modify from? What AGESA version are you seeing in PBS-> AMD firmware version?

8ECBACFF-5D3D-4BF0-AA96-B348A1CDC28B.jpeg

7B86v1C with 1.0.0.3abba

Edit: don’t forget that I have this motherboard: https://www.msi.com/Motherboard/B450-GAMING-PLUS/Overview

I have the ITX version of that board. With the ATX version I suspect the bifurcation is on another slot.

Regarding the AGESA version - I see the same as you on the bios download page: https://www.msi.com/Motherboard/support/…US-AC#down-bios

What I was curious about in particular were the versions listed on your BIOS screen under the PBS menu. For me I see the AGESA version minus the abba qualifier.

Yeah it’s the same for me in the “AMD Firmware Version” menu. On what other slot would the bifurcation be though?

Not familiar with that board, but looks like it’s got 2 x16 slots?

As you have Linux, regardless you should see an extra PCIe bridge with ‘lspci | grep GPP’.

lspci -vvv would show what bandwidth

No new PCI Bridge shows up when I activate bifurcation

Oh well - thanks for checking.

Perhaps I do indeed just have to change board.

Certainly learned a lot, so thanks.

News flash - found a combination that worked.

1. Download A40vA6 2019-03-07 - the version just before Ryzen 3 / Zen 2 support http://download.msi.com/bos_exe/mb/7A40vA6.zip
2. Modify as per this thread
3. Flash from a flash utility of your choice (M-FLASH on BIOS will refuse to downgrade)

This time choosing the 2x8 option does the right thing!