Is a BIOS Region Migration to a bigger sized Chip possible?

Hey guys,
I’m wishing to migrate the UEFI bios ROM file from the 128 MXIC MX Chip to a bigger one, so i’m thinking on the 256 to have more room inside, because i need to add some EFI modules insides.
Would it be possible?
My Motherboard is a GA-Z87X-UD3H that have a duale BIOS chips with a switch:
-MXIC MX
-25L12873F
-M2I-10G
-8A257300A1
- L131904
chip.

Edit by Fernando: Thread title customized

This is possible. Can you let us know more about what DXE modules you want to add? More specifically the sizes of those modules.

Thanks @IntelModder for the reply! How would it be possiible to do it, i mean, do i have to script the whole files: Descriptor region, GbE region, ME region and BIOS region Without the Intel Image to Specify more space?
I’m hackintosh user, and i specially like the Ozmosis bootloader, which allows us to put itself, with it’s dependent stuffs “usually preferences settings, Theme, SHELL Application”, allongside with required Apple’s EFI DXE Stuff, including FileSystem, inside the AMI UEFI BIOS injected in the nested/Boot volume.
I also need to add Wireless Broadcom WiFi DXE, NetLoad Application, and testing some other stuffs from Apples Firmware as well.
As more files to add, the image size grows, and it require more space, and this is my point, for migrating the whole Volumes into a bigger chip and on a bigger UEFI image FD/ROM, as GIGABYTE board doesn’t care for FD/ROM/FV/BIN/…etc firmware image when flashing. But it only have to be correct, for it to work.

Yep, I understand. I’ve used Ozmosis in the past.

I’ve attached an example bios where I’ve replaced a smaller bios chip with a larger one (for an admittedly very different motherboard), but it should be illustrative of what I’ve written below. In this case I went from 2MB to 8MB and added an Apple HFS+ module and an NvmExpress module. It’s not easy. I was in the process of writing a full tutorial for this procedure when I heard the forum was closing down.

Broadly, you have to pick a specific bios chip you want to target and add it to the VSCC Table (check UEFITool on your image under Descriptor region) in your UEFI image. This is done using Intel FIT (check the Management Engine thread). Then change the flash component density in the component section to 32MB or 64MB depending on the hardware you purchased, after which you can build a new image.

This process will only add padding at the start of the bios region (when looking at the built image in UEFITool). This new FF padding is where you can add an additional firmware volume (I did it using a hex editor) and then instruct the original DXE Volume to jump to it.

>>In the example in the modified image you can see I added a Winbond W25Q64, grew the image to 8MB, and added a new FV. If you check the modified image, the FV at header address FFE90000 contains a DXE driver called fvloader. <<

Next, you need to build Fvloader from source (I used Linux for this, I know nothing about compilation on Windows or Mac). It must be built from source separately for each firmware project because it must specify the specific address and length of the FV you just added to your UEFI image. It must be placed last in the volume with the DXE Core.

Fvloader is a component of the Linuxboot project on Github (Linuxboot Github). Clone the repo, enter the DXE folder, edit the fvloader.c and makefile and build the module.

If all of that worked, you add Fvloader to your image in the existing DXE volume, and then all the new modules to your newly created FV.

To check your work:

1. Make sure it boots.

2. Enter a shell, and type “drivers”. If all went to plan you should see your HFS+/new DXE drivers listed in the shell.

Example DP55SB.zip (2.32 MB)

I was expecting that it will be a little bit easier, but as i can see, it will be like rebuilting the entire image from scratch? It’s very interesting, since i have dual bios, but a lot of work to do here, and i never used the VSCC. So basicly, the BIOS itself remain as is, only infos inside are changed, to have it grow, or the entire image is build with the wanted size, then i have to insert GbE, ME, Descriptor and BIOS image volume one by one, and last the newest volume i need to insert inside, and run the linuxboot?
As i’ve seen in your firmware as it is an Intel MoBo, the firmware structure is pretty much the same as APPLE, only Modules language code change, from Standard EFI to APPLE EFI.
Would it be possible for you, to describe more and clear the steps, like a tutorial? It will help too much, because i still don’t know if i’ll be able to do it, because i need to add an entire FV Volume from iMac15,1 firmware but some modules needs to be maybe coded in order to work under my MoBo!
The Chip soldered in my MoBo is the MXIC MX-25L12873F, and i maybe need the same serie for better results, the MXIC MX-25L25673G, both are 8-PIN SOP (200mil).

No no, not from scratch. The build function of Intel FIT will build an entire UEFI image to the size and specifications you input (automatically including the Descriptor, GBE, ME etc). All we’re doing with Intel FIT is adding some padding in the bios region of the image, which then gets turned into our new FV.

I recommend you give this part a go with your image and see what I mean.

maybe you can do this via FITc,
1st, open your original ROM file with UEFITool, click "Descriptor region",find which chips ware supported
2nd, select one chip you want to use, rebuild the rom with a big rom size via FITc

i also wanted to replace the big chip before, but after the replacement, the partition inside the bios was the same as before the replacement, and the free space was the same as before, so it didn’t work!

FITC will only update the size of the flash chip by padding the difference between the size of the existing chip and the new, larger one at the beginning of the bios region - it won’t update the size of the firmware volumes in the bios region

1 Like