2. This thread has been designed by me just for users, who want to do the required BIOS modification themselves by following this guide.
Users, who want to get an already modded BIOS, may search for it within >this< Sub-Forum or post their request into >this< one.
5. The main topic of this thread is the procedure of the NVMe specific BIOS modification and the support in case of appearing problems.
Users, who don’t know how to flash a modded BIOS or how to avoid a clean OS installation, should search for a guide/solution by using the Forum’s “Search” box and post their request into the related specific thread.
Here is a short description of NVMe given by Wikipedia (look >here<):
NVMe is a specification for accessing Solid-State Drives (SSDs), which are attached through the PCI Express (PCIe) bus. “NVM” stands as an acronym for “Non-Volatile Memory”, which is used in SSDs.
While Advanced Host Controller Interface (AHCI) interface has the benefit of legacy software compatibility, it does not deliver optimal performance when an SSD is connected via PCI Express bus. This is because AHCI was developed back at the time when the purpose of a host bus adapter (HBA) in a system was to connect the CPU/memory subsystem with a much slower storage subsystem based on rotating magnetic media. Such an interface has some inherent inefficiencies when applied to SSD devices, which behave much more like DRAM than like spinning media.
NVMe has been designed from the ground up, capitalizing on the low latency and parallelism of PCI Express SSDs, and fulfilling the parallelism of contemporary CPUs, platforms and applications. At a high level, the basic advantages of NVMe over AHCI relate to its ability to exploit parallelism in host hardware and software, manifested by differences in depth of command queues, interrupts processing, the number of uncacheable register accesses etc., resulting in various performance improvements.:p. 17–18
The table below summarizes high-level differences between the basic NVMe and AHCI device interfaces:
Everything seems to be prepared for a drastical SSD performance boost by the upcoming new data transfer standard named NVMe:
- The latest Windows Operating Systems from Win8.1 up natively do support NVMe. For Win7 and Server 2008 R2 users I recommend to read the start post of >this< thread.
- Nearly all mainboard manufacturers are meanwhile offering new BIOS versions with full NVMe support for their mainboards with an Intel 9-Series or X99 Chipset.
- Many consumer SSDs with NVMe support are already available or will be available soon.
There is no doubt, that users with an up-to-date mainboard, whose original BIOS contains the required NVMe modules, will benefit from the performance boost initiated by a new NVMe supporting SSD.
What about Intel or AMD Chipset Series mainboards with an AMI UEFI BIOS, but without native NVMe support given by the mainboard manufacturer?
- If yes, which modules have to be inserted and how has it to be done?
These were the main questions, when I started this thread in April 2015.
Although we do not yet know everything, we made in December 2015 big progress in finding answers to the related questions. That is why I have completely updated the below part of this start post.
Since February 2017 we know, that the method works for AMD Chipset systems as well (look >here< for the report written by our Forum member AntiBear).
(valid for all Intel/AMD chipset systems with an AMI UEFI BIOS)
(last updated: 01/31/2022)
Replaced: “normal” NVMe module (now: NvmExpressDxe_5.ffs)
This is what you should know:
It is no problem to get a PCIe or M.2 connected NVMe SSD working with any Intel Chipset system from 6-Series up without modifying the mainboard BIOS, if
a) the NVMe SSD will be used for the storage of data (as drive D:, E: etc.) and
b) an appropriate NVMe driver is present within the Operating System (either natively or loaded/integrated),
but the usage of such SSD as bootable system drive C: (incl. the boot sector) usually requires a special mainboard BIOS EFI module, which has to be loaded while booting.
Note: Some NVMe SSDs like Samsung’s 950 Pro SSD are natively bootable in LEGACY mode (CSM and loading of Option ROMs has to be enabled within the BIOS), because their Controller chip contains its own NVMe supporting Option ROM module.
These are the best pre-conditions for a successful implementation and configuration of an NVMe SSD as bootable system drive:
- The desired OS should be Win10 (due to its native NVMe support).
- The mainboard BIOS should offer the required UEFI boot settings.
- It should be possible to get a modded BIOS successfully flashed into the system’s BIOS chip.
- The on-board Intel SATA Controller should not been set to “RAID” mode within the BIOS.
Tip: Before you start with the preparations, I recommend to read >this< report written by our Forum member Paulos7.
Alternative methods to use an NVMe SSD as bootable drive with older systems (no BIOS modding required):
1. “Clover-EFI Bootloader Method” (the related guide written by our Forum member Nyctophilia can be found >here<)
2. “DUET-USB Boot Method” (the related guides written by our Forum members noInk resp. mireque can be found >here<, >here< and >here<)
This is what you need:
(Note: You have to use WinRAR v5.xx or 7-Zip from v18xx up to be able to unzip the offered RAR archives!)
A mainboard with an AMI Aptio UEFI BIOS
An up-to-date BIOS for the related mainboard (original or already pre-modified)
An appropriate UEFI BIOS modding tool. These are the alternatives:
a) AMI’s Aptio UEFI MMTool (best choice for AMI Aptio IV BIOSes: v188.8.131.52)
This tool is not free available. Tips: Do a Google search for “MMTool Aptio 4.50.0023”, join the listed TweakTown site, scroll down to the “AMI (UEFI) BIOS Tools” section and download the desired tool.
b) CodeRush’s UEFITool, which can be downloaded from here (as RAR archive): >UEFITool v0.28.0< (>MIRROR<)
Advantage: This tool is free available, works very reliable and can be used with all AMI UEFI BIOSes without any restrictions.
Attention:The UEFITool should not be used, if the opened BIOS contains one or more listed “Pad Files”. A possible BIOS modding issue (removal of a natively present “Pad File”) is caused by a wrong BIOS configuration and not by the UEFITool.
- a) AMI’s Aptio UEFI MMTool (best choice for AMI Aptio IV BIOSes: v184.108.40.206)
An appropriate EFI NVME BIOS module, which has to be inserted into the “DXE Driver Volume” of the mainboard’s UEFI BIOS.
You have the choice between 2 different NVMe files:
- a) NvmExpressDxe_5.ffs dated 09/20/2021 (uncompressed size: 18 KB, best choice for systems without native NVMe support) and
b) NvmExpressDxe_Small.ffs dated 04/01/2018 (uncompressed size: only 6 KB, recommended for BIOSes with limited DXE Driver Volume space)
Both sorts of NVMe modules have been compiled and optimized by our Forum member Ethaniel on the basis of the currently latest source code UDK2018, which had been built by the EDK2/Clover Team for rather different purposes regarding the NVMe usage.
The file named “NvmExpress_Small.ffs” contains just the required code to support booting off an NVMe SSD and should be taken, if there is not enough space available within the BIOS (resp. its DXE Driver Volume) for the insertion of the bigger sized “NvmExpressDxe_5” module.
Both NVMe modules have been successfully tested. For details look >here< and >here<.
Here are the download links to the latest NVMe EFI modules, which demonstrably worked for all users, who inserted them, and support the NVMe Controllers of all currently available NVMe SSDs:
a) “NvmExpressDxe_5” module (newer and smaller sized than the previously offered “NvmExpressDxe_4” module and completely optimized for the purpose of this thread):
b) “NvmExpressDxe_Small” module (much smaller sized, but nevertheless with full functionality):
- The “Small” variant should be taken, if the BIOS tool gives you the message “File size exceeds the BIOS volume size” while trying to insert one of the above mentioned uncompressed modules.
- After having successfully inserted any of the above offered NVMe modules the relate name “NvmExpressDxe_5” resp. “NvmExpressDxe_Small” will be shown by the related BIOS tool.
- Credits go
- a) to the EDK2 Team resp. the Clover Team at InsanelyMac (>LINK<) for the source file UDK2018,
- b) to our Forum member davidm71 for his efforts to make the source file usable as additionally insertable EFI NVMe BIOS module, which is loaded while booting off an NVMe SSD in UEFI mode and
- c) to our Forum member Ethaniel for having completely re-structured, optimized, shrinked and re-compiled the NVMe modules.
- Since these special NVMe modules worked until now with all tested mainboards, whose BIOS is an AMI UEFI one, there is no doubt for me, that it will properly work with your special mainboard UEFI BIOS as well.
- Create a separate folder within the root of any PC partition, name it anyhow (here: D:\Source BIOS) and copy the “pure” (completely extracted) source BIOS file into that folder.
Additionally you should create another, but currently empty folder for the later created modded BIOS (example: D:\Mod BIOS).
*Only for ASUS BIOSes with the suffix .CAP:
To avoid problems while trying to flash later on the modded *.CAP file via the ASUS USB Flashback method, it is recommended to extract the “Body” of the original *.CAP BIOS. This can easily be done with the UEFITool by opening the *.CAP file, doing a right-click onto the “AMI Aptio Capsule”, choosing the “Extract body…” option and saving it as *.ROM file. >Here< you can find the complete instructions layed down by Lost_N_BIOS.
- Unzip the downloaded AMI Aptio MMTool resp. the UEFITool and the chosen NvmExpressDxE module into the “Source BIOS” folder.
(easiest and very safe method for AMI Aptio IV BIOSes, recommended for BIOS modding newbies)
Double-click onto the file named MMTool.exe.
Click onto the “Load Image” button and navigate to the folder, where the source BIOS is located. If it should not yet been shown within the pop-up window, choose the file type option "All files ()", which is located at the bottom of the “MM Open” window.*
After having double-clicked onto the BIOS file, which you want to get modified, you will see a picture similar to this one:
Scroll down within the great MMTool window until you find the module with the FileName “CSMCORE”.
Click onto the line with the FileName “CSMCORE”. After having done that, the number of the Volume will be shown within the box named “Vol. Index” in the upper part of the MMTool GUI.
Here is the related picture of my test BIOS:
In my test BIOS it was the Volume “1”, but this is just an example. In other BIOSes the CSMCORE module may be within a Volume with another number (e.g. “4” or “02:01.00”).
Since the CSMCORE module is present within nearly all AMI UEFI BIOSes and always located within the DXE Volume, where the NVMe module has to be inserted, you are now within the target Volume,
Note: In the very rare case, that the MMTool doesn’t show any module named “CSMCORE”, you should scroll down the MMTool window with the listed modules until you find the first ones with the letters “DXE” within its name. This way you can be sure, that you are within the correct “DXe Driver Volume”, where the NVMe module has to be inserted.
Make sure, that the correct DXE Driver Volume number (usually with the CSMCORE module within it) has been written into the Vol. Index box.
Click onto the “Insert” tab on the on-top MMTool menu bar.
Here is the related picture:
Click onto the “Browse” button and navigate the folder, where your desired NVMe module as “pure” *.ffs file is located.
*Double-click onto the *.ffs file you want to get inserted.
*Now you will see a picture like this:
You can choose within the “Insert FFS Options” area of the MMTool GUI, whether you want to get the previously chosen module inserted “as it is” (normal option) or in “compressed” form (option in case of limited space within the DXE Volume).
Note: Don’t touch the “For Option ROM only” area of the MMTool GUI!
Now you can click onto the “Insert” button, which is on the upper right hand side below the “Browse” button (see above picture).
After having done that, the insertion of the desired NVMe module should be done automaticly and correctly by the MMTool.
Note: If the MMTool should not be able to insert the desired module properly, the MMTool will give you a meaningful error message (e.g. “Not enough space within the Volume”). In this case you should try to get the “small” variant of the NVMe module in “compressed” form inserted. If there should not even be enough space for this small sized module, I recommend to post your specific BIOS modding problem into this thread and to attach the related original BIOS as *.ZIP or *.RAR archive file (if it should be bigger sized than 6 MB, post the download link). Then we will try to help you.
As final step you have to store the modded BIOS:
Click onto the button “Save Image as…”, navigate to the previously created folder for the modded BIOS (e.g. D:\Mod BIOS) and give the modded BIOS a meaningful name (with the same extension as the original BIOS).
Now you have stored your modded BIOS within the related folder.
- Open the modded BIOS as written above by running the MMTool.
- Scroll down the content of the MMTool window showing the various modules of the DXE Volume (where the CSMCORE is located) until you come to bottom of that Volume.
- The last (undermost) module of the related Volume Number should now be new and named either “NvmExpressDxe_4” or “NvmExpressDxe_small” (depending on the module variant you had previously inserted.
- A picture like this is the proof, that the NVMe module has been successfully inserted:
Very rarely even AMI’s AptioIV MMTool may touch a “Pad-file” of the BIOS while executing its NVMe module insertion task. To avoid later problems after having flashed the modded BIOS, I recommend insistently to compare the entire “DXE Driver Volume” of the original and the just modified BIOS regarding the presence and location of Pad-files by using the UEFITool (the MMTool doesn’t show the “Pad-files”). The best visual way for such comparison is to open the original and modded BIOS side by side. For details look >here<). The only difference between the original and the modded BIOS should be, that a new DXE driver named “NvmExpressDxe_4” resp. “NvmExpressDxe_small” has been added. All other listed modules and Pad-files should stay untouched by the BIOS modification.
If you should realize, that a natively present Pad-file module is missing within the modded BIOS or a natively not present Pad-file has been added within the modded BIOS, post a report into this thread, but don’t flash this modded BIOS!
If everything looks fine, you can be sure, that the related module has been properly inserted into the correct GUID section, and you can save the modded BIOS and give it an appropriate name and suffix (usually similar to the original BIOS).
Only for ASUS BIOSes, whose capsule had been removed by extracting the “Body”, but shall be flashed by using the ASUS USB Flashback feature:
Don’t forget to re-insert the original capsule and to save the modded BIOS as *.CAP file according to >this< guide written by Lost_N_BIOS.
(only recommended for users with advanced BIOS modding knowledge)
- Double-click onto the file named UEFITool.exe.
- Use the full size option to see the complete content of the UEFITool GUI.
- Click onto “File” from the UEFITool menu bar, choose the option “Open image file…” and navigate to the folder, where the source BIOS is located. If it should not yet been shown within the pop-up window, choose the file type option “All files (*)”, which is located just above the “Open” button.
- After having double-clicked onto the BIOS file, which you want to get modified, you will see a picture similar to one of these:
- Expand the shown image resp. capsule by clicking onto the right-direction arrow in front of them. Now you should see the main contents of the BIOS inclusive the most important “BIOS region”.
After having expanded the “BIOS region” by hitting onto the right-direction arrow in front of it, you will see a picture like one of these:
- Due to the complicated and mainboard specific internal structure of the “BIOS region”, it may be rather time consuming to find the DXE Volume, where all the EFI modules are located and where an additional EFI module like the NVMe one has to be inserted. The easiest way to find it, is to use the “Search” option of the UEFITool.
This is what I recommend to do after having opened the source BIOS with the UEFITool:
[li]Click onto the menu tab “File” and choose the option “Search…”. Now you will get access to the UEFITool “Search” pop-up window.* Click onto the tab “Text” and enter the word “DXE” into the Text box (the “Unicode” option will be checked by default). This is the related picture:
- Once you have hit the “OK” button, you will get a picture like this:
- Double click onto any line of the “Messages” you can see at the bottom of the UEFITool GUI. The result is a picture like this one:
As you can see, you are now within the “Compressed section” of a “DXE driver” (which one doesn’t matter).
This verifies, that you are now within the DXE Volume of the BIOS (= location, where the EFI modules are stored and can be inserted).
- If you close the sub-folders of the related DXE driver GUID by clicking onto the downside arrow in front of it, you will get a picture like this, where all the GUIDs are listed, which are inside the DXE Volume:
- Important: Make sure, that the target DXE Volume contains a module named “CSMCORE”.
Reason: Some BIOSes contain more than 1 DXE Volume, but only the one with the CSMCORE module is suitable for the insertion of a natively not present EFI module.
Note: In the very rare case, that no module named CSMCORE is listed, you have to search for the upmost Volume, which contains modules with the letters “DXE” within their name.
- Once you have expanded the DXE Volume, scroll down to the undermost module, which is listed within the DXE Volume and has a GUID (no matter, whether its Subtype is “DXE driver” or “Freeform” and whether it is listed at the rightmost column with a “text”).
Here is the related picture (in this example it is the DXE File named “PcieLaneDXE”, but - depending on the specific BIOS - it may have any other or even no name):
- Right-click onto the GUID of the undermost listed “DXE driver” or “Freeform” module, choose the option “Insert after…”, navigate to the EFI NVMe module file you want to insert (must have the suffix *.ffs!), and double-click onto it.
After having done that, you hopefully will see a picture like this:
Note: If there should not be enough space within the DXE Volume for the insertion of the additional module, you will get the message “File size exceeds the Volume size”. In this case it may be necessary to remove another “DXE driver” to get the required free space within the DXE Volume. >Here< is a tip given by our BIOS Guru CodeRush about which “DxE drivers” can be safely removed.
- Don’t forget to save the modded BIOS as final step of the modding procedure. You can start it either by clicking onto “File” > “Save image file…” or by hitting CTRL+S. Then you can navigate to the folder, which has been designed for the modded BIOS (e.g. D:\Mod BIOS), choose a meaningful BIOS file name with an appropriate suffix (you can use any suffix, if you choose the “All files” option) and click onto the “Save” button.
- Immediately after you have saved the modded BIOS the UEFITool will offer you the option to open the reconstructed file. Click onto “Yes”.
If you had already closed the UEFITool, you will have to re-run the tool as written above.
- Expand the content of the “BIOS region” and its GUIDs until you have found the specific GUID again, which contains the modules of the Subtype “DXE driver”.
- Scroll down and search for the “DXE driver” with the right hand text “NvmExpressDxE_5” resp. “NvmExpressDxe_small” (depending on what you had inserted).
- Expand the sub-sections of the freshly inserted NVMe module by clicking onto the downside arrows.
This is, what you should see:
In some cases the UEFITool may remove an existing “Pad-file” of the BIOS or create a natively not present Pad-file while executing its NVMe module insertion task (trying to “repair” a supposedly wrong BIOS structure). To avoid later problems after having flashed the modded BIOS, I recommend insistently to compare the entire “DXE Driver Volume” of the original and the just modified BIOS regarding the presence and location of Pad-files by using the UEFITool (the MMTool doesn’t show the “Pad-files”). The best visual way for such comparison is to open the original and modded BIOS side by side. For details look >here<). The only difference between the original and the modded BIOS should be, that a new DXE driver named “NvmExpressDxe_5” resp. “NvmExpressDxe_small” has been added. All other listed modules should be untouched by the BIOS modification.
If you should realize, that within the modded BIOS a natively present Pad-file module is missing resp. has been moved or a natively not present Pad-file has been added by the UEFITool, post a report into this thread, but don’t flash this modded BIOS!
Don’t forget to re-insert the original capsule and to save the modded BIOS as *.CAP file according to >this< guide written by Lost_N_BIOS.
Please keep in mind, that this is the risky part of the whole procedure (and not the BIOS modding itself).
Consequence: Before you are going to flash a modded BIOS, you should make sure, that you followed exactly the above guide regarding the BIOS modification. >This< thread demonstrates, what may happen, if the user doesn’t do it.
If you are unsure, post your request into this thread and don’t forget to attach or to add links to the original and to your modded BIOS.
- The preparation of the modded BIOS and the flashing procedure itself depends on the mainboard manufacturer and the mainboard’s model.
- If you do not know how to prepare a modded UEFI BIOS or how to get it properly flashed, please read the start post of >this< thread. Since the BIOS flashing procedure itself is not the topic of this thread, you should post all the BIOS flashing related questions/problems into the linked thread.
- As medium for the modded BIOS during the flashing procedure you should take a 100% working and freshly FAT32 formatted USB 2.0 Flash Drive. It should contain just the modded “pure” BIOS file and nothing else.
- It is not recommended to flash a modded BIOS from within the OS.
- After having successfully flashed the modded BIOS, don’t forget to re-enter the BIOS, to redo your personal BIOS settings and to make sure, that your system will be able to boot in UEFI mode.
- Tip: Users, who don’t know where to find the specific BIOS settings, which are mentioned within this Guide, should set the BIOS language to “English”.
- Enter the “BOOT” section of the BIOS and make sure, that “CSM” has been set to “Enabled”. Then look for the listed bootable Disk Drives.
If you now can see a new disk drive named “PATA” or “PATA SS”, you can be sure,
a) that you have correctly inserted the NVMe module into the BIOS and
b) that the modded BIOS has been successfully flashed.
Note: Don’t try to boot off the listed disk drive named “PATA” or “PATA SS”! You will not succeed, because the required Option ROM is usually missing within the NVMe SSD. Nobody (except the user of a Samsung 950 PRO) is able to boot off an NVMe SSD in LEGACY mode.
If not already done, you can now insert the NVMe SSD resp. its M.2>PCIe adapter into the M.2 port resp. PCIe slot, which offers the best possible performance and doesn’t share the PCI lanes with other devices (please look into your mainboard manual).
- The “BOOT” section of the UEFI BIOS and the shortcut to the “Bootable Devices” will not show the NVMe SSD, although it may be bootable!
- After having installed the NVMe supporting OS in UEFI mode onto the PCIe/M.2 connected SSD, you will see the new bootable system drive listed as “Windows Boot Manager”.
Here are some advices about how to get Win10 properly installed onto an M.2 or PCIe connected NVMe SSD:
- Save the important data, which are currently on the NVMe SSD.
- Create an UEFI mode bootable USB Flash drive containing the desired Win10 image by using the latest version of the tool Rufus (important: choose the UEFI mode partition table = GPT).
Here is a picture, which shows the most important Rufus settings:
Important note: Usually the USB Flash Drive has to be FAT32 formatted to be bootable in UEFI mode, but this file system cannot be created, if any file within the ISO file (e.g. the install.wim) is bigger sized than 4 GB. In this case the tool Rufus will automaticly format the USB Flash Drive by using the NTFS file system, but nevertheless makes it possible to boot the USB Flash Drive in UEFI mode (provided, that the “Secure Boot” option within the BIOS has been set to “Disabled”).
- Enter the BIOS and navigate to the “BOOT” section and - if applicable - the “SECURITY” or “Keys” section.
Make sure, that the “Secure Boot” and “Fast Boot” options are disabled. The “Compatibility Support Module” (CSM) can either be set to “Disabled” as well (better option, but requires full UEFI compatibility of the graphics adapter) or to “Enabled” with the ability/preference to load EFI BIOS modules for the Storage Disk Drives. If you see BIOS options for the “OS type”, choose “other OS”. This will disable the Secure Boot setting.
Tip to avoid SATA/NVMe interferences during the OS installation:
It is recommended to temporarily unplug all SATA connected devices and additionally to disable the on-board SATA Controller(s) within the “Storage Configuration” section of the BIOS before starting the OS installation.
These measures of precaution can/should be reversed once the OS installation onto the NVMe SSD has been successfully completed.
- Insert the prepared USB Flash drive and boot off it in UEFI mode (the related bootable USB drive should be shown by the Boot Manager with the prefix “[UEFI]”).
- When you come to the point, where you have to decide onto which Drive and which partition the OS shall be installed, delete all existing partitions from your NVME supporting SSD. After having done that, let the Win10 Setup create a new partition for your future drive C: on the related SSD. Then point to this just created partition as the desired future OS location.
- The rest should be done by the Setup automaticly. You will get a message, that some additional partitions have to be created. Accept that and follow the advice of the Setup where to install the OS.
- Once the OS is up and running, shut down the computer, remove the bootable USB Flash driver and reconnect all your previously used storage drives.
- Before you restart cour computer, make sure, that the NVMe SSD resp. its listed “Windows Boot Manager” is on top of the bootable storage drives.
Another option is to do a clean OS installation in UEFI mode onto any SATA connected SSD (a suitable NVMe driver should be available for the OS!) and to clone the complete disk drive content onto the NVMe SSD. After having inserted the NVMe EFI module into the BIOS, the formerly used SSD should be removed and the NVMe SSD inserted.
This is what you hopefully will get:
Here are some benchmark results I got with my Z68 system running 2 different NVMe supporting SSDs:
400 GB Intel 750 PCIe SSD:
256 GB Samsung 950 Pro M.2 SSD (connected via M.2>PCIe adapter card):
256 GB Samsung SM951 NVMe M.2 SSD (connected via M.2>PCIe adapter card):
Any feedback is much appreciated!
If you are satisfied with my work/support, you can send a donation to my personal Win-RAID CA PayPal account by clicking onto >this< link.
Dieter (alias Fernando)