[Experimental] NVMe Option ROM

@Flaky :
Thank you very much for having done the related test with your specific mainboard and congratulations for having succeeded!

@all other possible testers:
1. The additional insertion of an originally not present Option ROM module into an AMI Aptio IV UEFI BIOS is very easy, if you follow chapter A 5 of >this< guide.
2. According to my own experiences this sort of BIOS modding is not very risky. Provided, that you don’t get a power loss during the flashing procedure, the worst case would be, that the inserted Option ROM will not work.

@Flaky : Assigning the Option ROM to another hardware is possible, but requires code additions so that it can finds the first NVMe device instead of using the the device provided by the BIOS. Probably the best option is to use the device provided by the BIOS if that is an NVMe device, and look up the first NVMe device otherwise.

There are some possible disadvantages: Right now if the Option ROM prevents booting, you can prevent it from booting by removing the NVMe device and then the Option ROM is not loaded. If you assign the Option ROM to an on-board device, then removing the device is not possible and you need to use advanced BIOS recovery methods. BIOSes might treat network and storage devices specially for booting purposes, so assigning the Option ROM to something else might result in loss of functionality. The BIOS might refuse to load Option ROMs for some built-in devices and also might not load the the correct internal driver if an Option ROM is used. If there are more device instances with the same Vendor ID:Device ID then the Option ROM will get loaded multiple times for the same NVMe device that might cause some issues.

If you can accept these risks and you are willing to test it then I will try to create an updated version.

@Ethaniel

I’d be happy to test anything you come up with :slight_smile:
I’ve got an external programmer, so no matter what happens, I am able to recover.

@Flaky :
I was able to implement finding the first NVMe device when the Option ROM is not associated with an NVMe device.

Please try the attached Option ROM and let me know whether it works as expected.

NvmeOpRom.zip (6.54 KB)

@Flaky - what I meant about "normal NVME Mod" is what Fernando linked at #20 ^^

@Lost_N_BIOS
Fernando in post 21 mentions option manipulating ROM modules in UEFI. I only had experience with UEFI NVMe modules for UEFI.
When I get my hands on a motherboard with UEFI that is easily recoverable from bad flash, I will also try this module on an UEFI.

@Ethaniel
Thanks! It seems to work fine with the Intel drive.
Unfortunately my second NVMe drive (samsung pm951, 144D_A802) does not boot with any of modules you did provide.
Additional entry in boot order appears when this SSD is present, but instead of booting there is generic "reboot and select proper boot device…" message after POST.

@Flaky
Thank you for getting back to me, I’m glad that it is working. What Device ID did you use for it that is always present on the motherboard?

When I tried it using a Samsung NVMe SSD and a UEFI motherboard, I experienced the same that you described, so I think that your Intel NVMe SSD is more tolerant of not following the NVMe standard strictly than the Samsung one and probably has nothing to do with using UEFI.

I only modded this Option ROM so unfortunately I don’t understand all the internals of it.

@Ethaniel
I assigned the module to PCIe root port of x1 slot. The motherboard seems to deactivate unused PCIe ports, so the scenarios were:
free x16, Intel in x1 -> BOOT
Intel in x16, free x1 -> NO BOOT
Intel in x16, anything (i.e. usb3 card) in x1 -> BOOT

Next time I’ll try to assign it to something that is always present and see how it goes.
I tried to use the samsung drive because I wanted to see how this module behaves with multiple NVMes present.


By the way, what is the status of this Option ROM? Are you willing - if able - to share source?

@Flaky
This is a modded version of the VMware NVMe Option ROM, so unfortunately I don’t have the source code. (See the first post for more information.)

One instance of the Option ROM has support for only one NVMe controller, and supports up to four namespaces. Multiple versions can be loaded, one for each NVMe controller.

The change you requested on the other hand results in the first NVMe controller being used, when the device is not an NVMe controller. You can try multiple Option ROMs trying to control the same NVMe device by assigning the Option ROM to a Device ID that has multiple instances or by adding two copies of the Option ROM using two different Device IDs that are not NVMe controllers. I expect only the last copy to function, but you will see multiple entries/drives.

Is there specific reason this ROM can’t be used to boot Windows XP (32-bit), with MBR type hard drive, from NVMe drive ?

I’ve tested my i5-760 and Q9400 System with Kingston 128GB NVMe SSD. and works fine!

i5 760 with ASRock H55M-LE
Q9400 with ASUS P5KPL-AM

I used the method #20. “And again, no need to do configuration using OpRomCfg, as entering vid/did in mmtool seems sufficient.”


(The USB in front is a wireless mouse receiver)

I was not able to get it working with a Samsung 991, looks like Samsung NVMEs do not like it. Is there any kind of progress?

@Flaky can you maybe link the exact model of your intel optane you were using? thank you

I have a DX79TO and I’m trying this. Is this a legacy real mode option rom, or is a EFI option rom?
EDIT: Well, your real mode legacy option rom does not work in my board. Probably lacks something, so I tried something different: I blessed the Nvmeexpress64.efi with efirom.exe and put that in a 5v parallel eprom… and IT WORKS! EFI shell shows the partition. The only extra step needed is register Windows Boot Manager again.

Some questions:

Is possible to attach an option ROM through I2C, or a PCI-E card with I2C?
Is there an “ez” mode to attach a SPI or parallel rom to PCI-E?

thanks

If you will be so kind. Modify my BIOS for the ASUS P5K board for the M2 SSD to work through the PCIe controller to make this disk bootable. My "BIOS" UEFI boot does not support, there is no support for NVME devices. Is it possible?
I do not have a programmer and I myself am afraid to modify my BIOS. I will grateful to you!

P5K-1201.ZIP (624 KB)

Shit I really missed that thread because the world rotate only for uefi - and not legacy bios.
What a great idea. I’ve just added your Nvme 1.01 ( with Auto discovery first drive ) twice to my AMICORE8 bios. Linked to 144D_A808 and second one to 144D_A804. Both are recognized as ide drives. Let me know if you need additional testing support or if you improved the code and want to test.
Platform: G34 H8DGi-F
Screenshot in attach
Thanks!

CEAE648B-B277-4CD4-BF83-011EF02C4BB9.jpeg

Hi all.
I integrated the NvmeOpRom module into the asus Z8NA-D6 BIOS, and a successful boot from the samsung 970pro followed.
But there was a problem, when the system is rebooted (win start - reboot), the BIOS does not see the nvme disk until you turn off the computer.
Maybe I’m doing something wrong when integrating rom into bios?

Could it be a problem in combination with fastboot? Can you setup the BIOS option "ROM Scan Ordering" ? ( From Onboard First > To: PCI Addon Card )


Yes, problem only with fastboot.
cold start - good start


There is no such setting in my BIOS.

Advanced > PCIPnP Configuration # PCI Option ROM Scan Order
Advanced > PCIPnP Configuration # Onboard Option ROM Scan Order

Both visible with User Access. Maybe you have luck when you play with these settings.




No it didn’t help me

Disabling this item stopped any boot.

Advanced > PCIPnP Configuration # Onboard Option ROM Scan Order