[HowTo] Get full NVMe Support for all Systems with an AMI UEFI BIOS

Hi Everybody,

Feedback:

First timer here. Thanks for this guide Fernando. I had a lot of difficulties understanding the guide in the OP because I thought the picture links were broken and not updated. Only now that I’ve signed up I realized that I needed to do so in order to see the pictures. Perhaps a word at the start of the guide saying “Log in to see pictures” would help out hapless fellows like me.

Because of that difficulty, I ended up following the guide here: http://www.overclock.net/t/1571271/tutor…n-intel-chipset And it worked. (I got MMTOOL from here in case anyone needs it http://voltground.com/haven/threads/13/ I found it very difficult to find it)

Information before questions:
I have the ASUS MAXIMUS V FORMULA Z77 motherboard and so I modded its latest .cap bios file with the Nvme.ffs, NVMEINT13.ffs and NvmeSmm.ffs extracted from the ASUS MAXIMUS VII FORMULA Z97 motherboard’s latest .cap file. I flashed the modded bios using the usb flashback method which worked well.

Z77 doesn’t have the m.2 slot but it does have PCIE gen 3.0 support.

So, I installed my new Samsung 960 EVO Nvme m.2 ssd using an M.2 to PCI-E adapter. I installed it in the second PCI-E X8 slot, ie. the slot where the second GPU in SLi would go. This dropped my gpu pcie slot speed to x8 as verified using GPU-Z (and I know this doesn’t matter for performance).

Questions:

1. My Sequential Read speed is 1549 MB/s and Sequential Write speed is 1478 MB/s according to the performance test that comes with the latest version of Samsung Magician (V5.1.0). The speeds are supposed to be 3200 read and 1900 write.

So, my first question is what am I doing wrong that makes the speeds low?
I have already installed the driver from Samsung and checked in device manager under storage controllers for “Samsung NVMe Controller”. But the “properties” of my new ssd under Device Manager>Disk drives shows that the driver provider is microsoft. Is this how it is supposed to be?

Here is a picture of the adapter I am using if that helps: https://i.imgur.com/2MbGLlA.jpg

2. Please take a look at this picture of the bios screen even before I installed the new ssd (before flashing or anything else): https://i.imgur.com/ehS7tlz.jpg
You can see that under Boot Override, I have three options: Windows Boot Manager, P6: M4 and P1: Samsung 840 EVO (the boot drive to be replaced).

Now take a look at this picture after installing the new drive, removing the old 840 EVO and flashing for NVME support: https://i.imgur.com/A2FJgRK.jpg
Now there are only two options under Boot Override: Windows Boot Manager and the P6: M4. I don’t see the NVME drive separately listed here. The same goes for Boot options.

I tried toggling CSM’s “Boot from PCIe/PCIE Expansion Devices” from “Legacy OpROM first” and “UEFI driver first” to see if the drive would be detected separately. But it did not work.

So, my question is: why is only the windows boot manager detected and not the drive? Did I get this working by fluke? What am I doing wrong?

@Mountainlifter :
Welcome to the Win-RAID Forum!

Since we want active Forum members and no pure “leechers”, guests can only read the text and have no further rights. This is valid for the complete Forum. So if I would follow your advice, I would have to add this notice to each post, which contains a picture or an attachment.

Provided, that you have inserted the NVMe SSD into the fastest PCIe slot (you will have to check it yourself), you can boost the performance of your NVMe SSD by various actions/settings. Please have a look into the start post of >this< thread.

Yes, only the generic in-box MS driver named disk.sys is able to manage the Disk Drives (especially the detection of the specific model and its abilities). On the other hand only the related Storage Controller (here: NVMe NVMe Controller) and its storage driver (here: NVMe) are responsable for the performance of the connected Disk Drive (here: NVMe SSD).

This is absolutely normal - you haven’t done a mistake. The NMe SSD is not listed, because you are not able to boot into the SSD in LEGACY mode (using a Master Boot Record) due to the missing Option ROM module. So the only option you have is to boot the NVMe SSD in UEFI mode via “Windows Boot Manager”, which is within a usually hidden partition of your NVMe SSD.

Enjoy your NVMe SSD!
Regards
Dieter (alias Fernando)

@Mountainlifter

In answer to your first question, if you have an Ivy Bridge CPU, make sure the PCIe slot that you put the NVMe adapter card in is configured in the BIOS for PCIe 3.0. Sandy Bridge CPU’s won’t give you the PCIe 3.0 speed you need to get the full performance of the SSD. Also, if you purchased your 960 Pro recently and it has the 3B6QCXP7 firmware (3B7QCXE7 for the 960 EVO your picture shows), your performance issues may be related to the firmware. Many 960 Pro and EVO owners (but mostly PRO) have complained about performance issues after updating the firmware, or purchasing a 960 series SSD that had the latest firmware pre-installed. You can find Samsung’s official response here

https://us.community.samsung.com/t5/Memo…-p/221328#M1003

Regarding your second question, it looks like you had originally installed your 840 EVO in UEFI mode, which gave you “Windows Boot Manager”. If your BIOS shows the name of the SSD installed in UEFI mode separate from “Windows Boot Manager”, you must select “Windows Boot Manager” or you OS will not boot. Most people that do the BIOS mod get “PATA” (or some variant of it) instead of the name of the SSD. I’m assuming that you either cloned the UEFI OS from the 840 EVO to the 960 EVO, or you installed a fresh OS onto the 960 EVO in UEFI mode (?). Windows Boot Manager is installed by the OS in UEFI mode on the SSD, regardless of whether it’s NVMe or SATA (as it did with your 840 EVO). The 840 EVO is probably shown separately in the first pic because it is an SATA SSD (I’m guessing).

Thanks for this very fast reply, Fernando. I understand and appreciate the rationale.

Thanks. I will take a close look at the thread and read carefully.

Appreciate the knowledge and information. Good to know I didn’t do anything wrong in this process.

EDIT: Unneeded blank lines removed (to save space)

That was one of the first things I did after flashing the new BIOS. That is, I configured the PCIe slots to be gen3.0 as opposed to leaving them on “auto”. I previously had faced a problem with SLi where it was stuttering and giving poor performance in benchmarks because the slots were simply left at “auto” causing them to jump between gens.

I read about the Samsung news just after I first posted. Luckily, I did not update my firmware and it is still version 2B7QCXE7.

You guessed correctly. I used Samsung’s data migration tool to clone my previous boot drive (the 840 EVO and it is a SATA drive). And thanks for the info.

@Fernando @CodeRush @Morlock
Want to stop for a minute and say thanks to all of you guys.
After I’ve bricked my mobo I bought SPI programmer. Flashed bios and viola. Now I’m writing you from machine with NVMe SSD =) A different experience I’d say.

Mobo is Asus P8Z77-V LK and Samsung 960 EVO SSD. Asus Hyper M.2 X4 mini adapter inserted into PCIe 3 x4
Mobo doesn’t have USB Flashback feature.

So some things that could help:

0) EZ Flash doesn’t work due to security reasons. Doesn’t matter what file you want to run. .CAP .ROM .BIN. With proper file name or not.
1) I’ve tried almost all things to flash modded bios and no one helped.
- AFUDOS (/p /b /k didn’t work at all due to security reasons). /GAN was successful but modification were not added.
- Reverting to earliest bios version and tried to flash it since there were some thoughts about added security in later releases
- Playing with .cap .rom .bin files
- Flashing with different caps (backup and official. since sizes were different)
- Don’t flash with AFUDOS /gan not latest bios. That’s the one who bricked my bios =)

2) Added NVMe module version 3. Samsung Magician results: 3150MBps read and 1740MBps write. Latest NVMe and Samsung drivers. Latest Win 10 version (insider preview)
3) Was succeed with Official .CAP latest (v.1402) + NVMe module v3 and then converted to .bin -> SPI Programmer
4) Cheapest CH341A SPI programmer was used. Around $3.
5) Turned off all fast boot & Security Boot and all stuff mentioned in article.
6) Make sure you run Win install in UEFI mode. It took me about 10mins to understand what’s going wrong and why I’m facing black screen.

I found out the reason why my ssd could be slow thanks to you. I went back and checked the PCIE settings in the BIOS: https://i.imgur.com/jKC7F9W.jpg Although all slots have been sent to Gen3, slot one sets itself to x8 (GPU) and slot 2 sets itself to x2 only. Does anyone know of a way to get around this? Or is this due to the adapter I’m using? (The cheap adapter claims Gen3.0 x4 support)

EDIT by Fernando: Unneeded parts of the fully quoted post removed (to save space)

@InsFi :
Thanks for your report.
It is fine, that you finally succeeded and now can boot off your NVMe SSD.

@Mountainlifter :
I suspect, that it is not your M.2>PCIe adapter, but your graphics card, which lowers the performance of the related PCIe slot. Maybe there are not enough lanes available for your NVMe SSD.

@Mountainlifter

Your motherboard’s manual shows PCIe slot 2 as “PCIe 3.0/2.0 x8/x4”, so it shouldn’t only give you Gen2 x2. Did you try the video card in #2 and the SSD in #1 just to see what it would do?

The only thing I can think of is the way you modded the BIOS. You stated “I modded its latest .cap bios file with the Nvme.ffs, NVMEINT13.ffs and NvmeSmm.ffs extracted from the ASUS MAXIMUS VII FORMULA Z97 motherboard’s latest .cap file”. You should try Fernando’s guide and only integrate the “NvmExpressDxE_2” or “NvmExpressDxe_3” module using UEFITool rather than MMTool. I used MMTool the first time I modded my BIOS, but I found that UEFITool was easier and more efficient to use. The modules that you extracted from the Z97 BIOS may have introduced the issue you’re experiencing.

Also, have you checked with Asus for a BIOS to support your Z77 motherboard? I had to try all of ASRock’s worldwide offices until I found that the Taiwan office had the latest working BIOS with NVMe support for my Z77 motherboard.


I can do two GPUs in SLi with each one at Gen3.0 x8. (Plus I have a separate audio card on an x1 slot).
So, I think x8, x4 (plus audio card in the x1 slot) in this new configuration should be possible.


I did the speed test before flashing and before cloning (drive just empty) and I was getting the poor speeds I reported (Sequential Read speed is 1549MB/s and Sequential Write speed is 1478MB/s). So, for this test, the settings in the BIOS must have been Gen3.0 too but I didn’t check the speeds it had set.

I did the speed test once again after cloning. BIOS PCIE settings must have been the same as above.

And then once again I did the speed test after flashing the BIOS. BIOS PCIE settings as shown in the picture https://i.imgur.com/jKC7F9W.jpg .

Each time the ssd’s read/write speeds were exactly the same. So, in this way, what I would hypothesize is that both the Z77 BIOS (as it was) and the Z97’s extracted modules may have this issue of setting x2 instead of x4. So, I will try your suggestion of the UEFITool method later today.

EDIT: Also, I never bothered to check if ASUS released an updated BIOS. It is certainly not on the official support page of the ASUS M-V FORMULA Z77 motherboard. I will try searching for this as well but so far, I have only noticed ASRock owners say that they were given an updated BIOS.

@Mountainlifter

If it did the same thing with the unmodded BIOS, it would seem that it’s not a result of the mod. If you had SLI at Gen3 x8 and x8 then a lack of PCIe lanes isn’t the problem.

Did you try it in each of the 3 PCIe slots?
Have you checked the Gen3 Preset option shown in the picture (I couldn’t find it in the manual)?
I personally haven’t heard of the cheaper PCIe adapters not working in Gen3, unless it’s made to support M.2, but not NVMe (?). If your other video card had no problem in PCIe slot 2 @ Gen3 @ x8, to me it would imply it’s the adapter.

@Mountainlifter



ASRock doesn’t show the updated NVMe supported BIOS’ for older motherboards on their website either. I asked their tech support in USA, Europe, and Taiwan, and all three had a different BIOS. USA and Europe had M.2 support, but only the Taiwan version had NVMe support. And though the ASRock modded BIOS worked like it should and even showed the name of the SSD in the Boot section of the BIOS (you still have to select "Windows Boot Manager"), it doesn’t work any better than BIOS I modded using Fernando’s guide.


No, I haven’t yet tried the SSD in different slots. No, I haven’t yet tried the Gen3 presets.

So, I will try the following in this order today:
1. Changing Gen3 presets.
2. Changing the ssd to different slot. Interchanging GPU and SSD.
3. Emailing ASUS for Z77 bios with nvme support. (Already emailed them. Waiting for their response.)
4. Flashing a modded bios made using UEFITool.
5. Buying new adapter.

I will report back once I have tried the first two options today.

Hi @Paulos7 and @Fernando

I solved the issue. Long story short. It was the adapter that was the problem. Serves me right for trying to cut corners using cheap knockoffs.

New adapter: https://i.imgur.com/QBZwrAt.jpg This is the ASUS HYPER M.2 X4 MINI CARD. https://www.asus.com/us/Motherboard-Acce…2_X4_MINI_CARD/
Old adapter: https://i.imgur.com/2MbGLlA.jpg Some cheap knockoff device. Claims NVMe support and all that.

So, today evening I first removed all my PCI-E devices (GPU and Audio card) and tried the SSD (with the old adapter) in each of the three X16 slots one by one. The first slot gave me Gen3 x1, the second one gave me Gen3 x2 and the last one gave me Gen2 x2 (as seen in the BIOS and samsung magician). This seemed so strange to me that I decided to guess that it was the adapter that was the problem.

I quickly went out and purchased the high quality ASUS adapter and it was immediately detected as Gen3 x4 in the BIOS and samsung magician. See here: https://i.imgur.com/MKPXJ3b.jpg Problem Solved!

With the knockoff adapter I had obtained Sequential Read speed of 1549MB/s and Sequential Write speed of 1478MB/s.
Now, I have a Sequential Read speed of 1906MB/s and Sequential Write speed of 1671MB/s. It is still not where it should be but atleast the PCIE gen and speed are correct now.

Thanks to you both for your help and wonderful support.

This is the reply I got from ASUS. The usual cut and paste response.

I really appreciate everyones work on this (especially Fernando!), im just looking for a bit of clarification. Im trying to enable bootable support for a Samsung 960 EVO on an ASRock Z68E3G3. In the past I have had great success with modifying the BIOS on this (and other) boards, but ive always used a Samsung PM851 as my weapon of choice. Apparently I got lucky, as that SSD probobly has its own OROM supplied onboard. On the first page there are links two two .rar’s containing NVME_DXE files. One is labeled _2 and the other is _3, what is the difference between these packages, and which should I try to use to get this drive bootable? I saw on page 90 of this thread that someone with a very similar board to mine was able to get it working as a boot drive by using the _2 package, but im wondering if that is still the recommended approach for my situation.

Thank you


EDIT - For clarification, the method I used to get the PM851 working was to use AptioV to insert NVMe modules extracted directly from an ASRock Z97 Extreme6/AC, by inserting them into the CSMCORE section of the ROM. Would these DXE files be inserted in a similar way, and would I also still need to insert nvme, nvmesmm and NVMEINT13?

@Smoblikat :
Welcome to the Win-RAID Forum!
Here are my answers to your questions:

  1. Both NvmExpressDxE modules, which I am offering within the start post, will work for you. Since the NvmExpressDxE_3.ffs is newer than the other and may support more NVMe SSDs, I recommend to take that one.
  2. The method how to insert a natively not present EFI module into an AMI Aptio IV UEFI BIOS is always the same. So if you want, you can do it like you did it previously. Nevertheless I generally recommend to follow the guide, which is within the start post of this thread.
  3. According to my own experiences the users do not benefit from the insertion of 3 NVMe modules, which have been extracted from another BIOS, but may run into additional problems, because within the “DXE driver” Volume of your mainboard BIOS may not be enough free space for all 3 modules.

Regards
Dieter (alias Fernando)

@Mountainlifter

Glad to hear you got it working. Yeah, it’s that old saying, “You get what you pay for”.

Like you said, your read speed is still low. I know that your BIOS shows Gen3 x4, but I’ve had trouble in the past with “Auto” settings, including my Z77 board when it came to PCIe slot settings. I had an issue with setting the PCIe slots to “Auto” instead of Gen2 (560Ti) and my video card would not work at all - until I set it manually (the only time Intel’s integrated graphics was a good thing to have on the 3770K). I could be wrong, but the “Preset” setting looks like it may be similar to an auto setting. Is there no way to set each individual slot setting manually, without lumping them all together in a preset setting? Just a thought.

Also, you are using the Samsung NVMe driver in Windows, right? I understand that using the Microsoft driver would cause the speed issues you have.

Thanks for the reply, I made a new BIOS based off of a clean Z68E3G3 BIOS and the DXE_3 package you supplied, im waiting on a new adapter card to come in, so ill let you know how it goes once that arrives.

Hi @Paulos7 I am actually not using the Auto setting anywhere. Let me clarify with some pictures.

I have three Gen3.0 capable PCI-E X16 slots (Capital X for size, small x for speed henceforth). (I am on the i7 3770K by the way).

Pic1: https://i.imgur.com/KYjsoxW.jpg In this picture, in the BIOS, I have clicked on the “Link Speed” setting for slot PCIE_X16_1. This pops us a window where I can choose between Auto, Gen1, Gen2 or Gen3. For each of the three slots, I always set this manually to match the gen of the device that is inserted in that slot. When I had set “Auto” for slots PCIE_X16_1 and PCIE_X16_2, SLi gave me stuttering and poor performance. Since then I’ve been setting this option manually.

What I cannot set manually are the speeds within that gen. The speed can be seen as x8 for my GPU and as x4 for my 960EVO above the black selection boxes in the above-linked picture. These speeds are set automatically and I have no control over them. It was this speed that I was referring to when I said that the knockoff adapter was setting itself to x2.

Pic2: https://i.imgur.com/77rRY15.jpg In this picture, I have clicked on the “Gen3 Preset” option. In the popup window, I can choose between Auto, Preset1, Preset2, and Preset3. I have no idea what the differences between them are.

Pic3: https://i.imgur.com/vD0p922.jpg The description for the “Gen3 Preset” option in the BIOS only states “Selecting Different Presets may improve the stability of PCIE Gen 3.0”. I just leave it on Preset3 for no particular reason.

Finally, yes, I have the Samsung NVMe driver installed and I have verified that samsung’s NVMe driver is used under DeviceManager>StorageControllers.

EDIT: So, the reason for the slow read speed I am getting could be because I cloned the drive. Or it could be because I have used up 90% of the capacity already. Or both. (Some users have reported problems with speed drops from cloning and capacity here: http://www.tomshardware.com/answers/id-3…low-speeds.html). I am not completely sure that these are the reasons, however.

EDIT by Fernando: Unneeded fully quoted post removed (to save space)