Booting Samsung SM961 on ASUS P6T SE mainboard

I've been on the SSD bandwagon since the very first introduction of SATA SSD disks to consumers market and have been using them ever since.

Times have of course changed and now we have NVMe SSD disks in tiny M.2 format. NVMe protocol is a new standard for high-performance PCIe SSD disks directly attached to PCI-Express bus.

The truth is you cannot easily boot an NVMe M.2 SSD on a legacy X58 chipset, unless the disk has a legacy option ROM built in. This tutorial will show you how to make such NVMe M.2 SSD bootable on a legacy X58 chipset.

This has been done on an ASUS P6T SE motherboard with Samsung SM961 NVMe M.2 SSD to boot Windows 10 Pro x64 (Windows 8.1 Pro also works), but I think that the process described here is so universal that it should work on every X58 motherboard out there and even with different NVMe M.2 SSDs - please do share your comments if you succeed with something different than my setup, thank you.

Let's start!

Updates

2017-01-01: Added video of the boot process ;)
2017-01-02: Some people have suggested to keep Windows USB installation stick plugged in even during Windows post install process (after reboot), just in case Windows installer would want to access it.
2017-01-03: Added explanation of the overall boot process, since some have asked how this works. I hope it's better understandable now. And yes, Samsung's official Windows NVMe driver works under Windows 8.1/10 Pro correctly with SM961.
2017-01-04: I've added a post install procedure regarding "hiding" DUET USB 2.0 stick from the Windows OS (for pure convenience). I've been also asked if using USB 3.0 in this tutorial is purely OPTIONAL and if USB 2.0 is sufficient for Windows installation - the answer is YES.
2017-01-06: I've finally managed to compile the latest stable TianoCore EDK2 sources (the UDK2015 release, UEFI v2.5) with UEFI drivers (NVMe + XHCI) compiled directly into DUET (no need to load drivers now). If this proves stable over time (I'm currently running / testing it now), I'll most probably release it - then the whole tutorial / process will be much easier to do.

Prerequisites

  1. X58 mainboard of your choice (tested and working on ASUS P6T SE)
  2. USB 2.0 (!!) stick with MBR partition layout for bootloader
  3. OPTIONAL - PCIe USB 3.0 addon card (I am using a very cheap one with NEC / Renesas chipset, VIA didn't work for me)
  4. USB 2.0 (3.0 is OPTIONAL) stick (at least 8GB) used for Windows 10 Pro x64 installation
  5. Windows 10 Pro x64 Installation ISO Media with valid license key
  6. NVMe M.2 SSD of your choice (I'm using Samsung SM961)
  7. M.2 to PCIe adapter of your choice
  8. Do not use any other disk drives (only have the NVMe SSD present on your X58 system)
  9. Disable Intel RST for SATA Mode in BIOS and select AHCI mode instead
  10. Enable booting from USB sticks
  11. For the best possible NVMe SSD performance, disable Intel C-States in your BIOS settings (refer to your BIOS manual)

Preparing the bootloader

The main trick here is to use DUET. It is a little tool that boots from and sits on top of your legacy BIOS and provides generic UEFI interface, which can utilize the very latest hardware, including bootable NVMe SSDs. Think of it as an expansion of your current legacy BIOS.

  1. Download DUET here (md5sum 6c50e8a1a06e6665c81cdc7ac50cac57, VirusTotal scan log here)
  2. Verify md5sum and unpack it
  3. Plugin your USB stick
  4. Format your USB stick
  5. Open command line prompt (with admin privileges)
  6. CD to unpacked DUET folder
  7. Run CreateUSB.cmd DRIVE: (where DRIVE: is your DUET's USB stick drive letter)
  8. Watch out if CreateUSB.cmd command succeeded in all steps (it can fail when using GPT partition layout)
  9. Replug your USB stick
  10. Run CreateUSB.cmd DRIVE: UDK_X64 (where DRIVE: is your DUET's USB stick drive letter)
  11. Watch out if CreateUSB.cmd command succeeded in all steps (it can fail when using GPT partition layout)

So the basic DUET is now installed on your USB stick, but it doesn't yet contain any UEFI drivers needed to access your NVMe SSD (and optionally if you plan using USB 3.0 stick for Windows 10 installation). Let's download and install those drivers:

  1. Download NvmExpressDxe-64.efi here (md5sum fb4751da24f2d3ce2f7c08f27025821b, VirusTotal scan log here)
  2. On your DUET USB stick, create folder called EFI\Drivers
  3. Put NvmExpressDxe-64.efi into EFI\Drivers folder
  4. OPTIONAL - Download XhciDxe-64.efi here (md5sum 5c65d686ed9fb881801a9ccb6fbf36f5, VirusTotal scan log here)
  5. OPTIONAL - Put XhciDxe-64.efi into EFI\Drivers folder

Now we have our required UEFI drivers installed. The last thing we need is UEFI Shell, which will be used to load UEFI drivers and execute the UEFI Windows 10 installation bootloader (and ultimately, after installation, it will be used to boot the Windows 10 using its UEFI bootloader too):

  1. Download Bootx64.efi here (8bf5ce3348832731e35cb8732998b20a, VirusTotal scan log here)
  2. On your DUET USB stick, create folder called EFI\Boot (if it doesn't already exist)
  3. Put Bootx64.efi into EFI\Boot folder

And that's it. DUET for your NVMe SSD is fully prepared. Let's install Windows now.

Installing Windows OS

I won't cover how to prepare Windows 10 installation USB disk with UEFI support, as there is a very good tutorial for it here. Assuming you have already prepared the installation USB disk and read all of the prerequisites, let's boot DUET from your DUET USB stick for the first time (keep your DUET and Windows install USB stick both plugged in upon first boot).

If everything goes fine, you'll see DUET booting and a screen like this:

DUET Booting

If everything you can see is a red, console-type text saying something like "MBR Start", then probably you have wrong DUET USB stick partition layout - it must be MBR, not GPT (or anything else).

Then, if everything goes fine, you'll be presented with UEFI Shell and a screen like this:

UEFI Shell

The Mapping table you see here is actually a list of block devices present on your system, together with filesystems accessible from these block devices. You should see your DUET USB disk here and a filesystem called FS0 already (this is the FAT partition of the DUET USB stick). Let's load the NVMe UEFI driver now (and optionally XHCI / USB 3.0 UEFI driver if you plan on using USB 3.0 stick for Windows installation):

  1. In the UEFI Shell prompt, type load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
  2. OPTIONAL - Then type load fs0:\EFI\Drivers\XhciDxe-64.efi
  3. Then type map -r

You should see now that the mapping table has been updated and you should see new block device for your NVMe SSD. If you use Windows USB 3.0 installation stick, you'll also see that the new block device has been added for it and a new filesystem is present called FS1 (that's the partition of the Windows installation stick).

NOTE: In case you'd be using USB 2.0 stick for Windows installation, the filesystem mapping for it will be already present. And because you're using two USB 2.0 sticks at once and it's up to the X58 chipset who decides which USB stick will get initialized first, it's possible that fs0 filesystem can incorrectly map to the Windows USB installation stick. In such case, trying to load drivers from fs0 will fail due to non-existent NvmExpressDxe-64.efi file on fs0 filesystem. If this is the case, then simply change the fs0 to fs1 in the load command and try again (do not forget to run map -r command too).

Now, let's proceed to install Windows by typing fs1:\EFI\Boot\Bootx64.efi in the UEFI Shell prompt (or fs0 if using USB 2.0 Windows installation stick and the filesystems got swapped).

If everything goes fine, you'll see the Windows OS installer. It should detect your NVMe SSD as the only disk on your system and you should be able to do a clean install on it. Proceed with installation as usual. Windows installer will want to reboot your system and when it reboots, boot to your DUET USB stick again. Leave your Windows USB installation stick still plugged in for now.

Finishing Windows install

After DUET boots and everything is fine, you'll be presented with UEFI Shell again. Windows will need to finish the installation, but this time from your NVMe SSD disk:

  1. In the UEFI Shell prompt, type load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
  2. Then type map -r

NOTE: If you plan on using USB 2.0 stick for Windows installation, the filesystems could be swapped. If that's the case (loading NvmExpressDxe-64.efi from fs0 fails), you will need to change fs0 to fs1 in the above command.

The mapping table will be updated again and you should see the NVMe block device. At this moment, you'll also see new filesystem present (that's the hidden partition of the NVMe SSD used for booting the Windows UEFI bootloader). The filesystem will be mapped as follows - if you're using USB 3.0 stick for Windows installation, the NVMe filesystem will be FS1, if USB 2.0, it will be FS2.

Finish installing Windows by typing fs1:\EFI\Boot\Bootx64.efi in the UEFI Shell prompt (or fs2 if using USB 2.0 installation stick).

Have your fingers crossed now and if everything works fine, in a short while you'll be presented with that nice, freshly installed Windows 10 desktop screen. Congratulations!

NOTE: When installed, please unplug your Windows USB installation stick.

Automating boot process

Okay, you've got your NVMe SSD bootable, but you may ask if you will have to manually load UEFI drivers and execute Windows UEFI bootloader every time you boot from the DUET USB stick. Of course not!

UEFI Shell supports running startup script that will automatically execute your predefined commands. So we can use this to automate the boot process (load NVMe UEFI driver - remap block devices - boot Windows UEFI bootloader).

To automate the boot process, create a file called startup.nsh and put it in folder EFI\Boot on your DUET USB stick. It should contain following commands:

  1. load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
  2. map -r
  3. fs1:\EFI\Boot\Bootx64.efi

NOTE: You may wonder why I don't mention filesystems being swapped here - at this moment, you've already got your Windows 10 successfully installed and you have unplugged the Windows USB installation stick. There's only one USB stick plugged in (the DUET USB stick - that's fs0 and NVMe SSD maps to fs1). But do not forget to have your DUET USB disk plugged in all the time, otherwise you will not be able to boot.

Post installation procedures

For your convenience, you can hide the DUET USB disk from your Windows OS by removing its drive letter (this can be done under the Windows Disk Management).

If you plan on using Samsung NVMe SSDs (just like SM961), I fully recommend to try to install the latest Samsung NVMe driver, for performance reasons.

Boot process explained (the easy way)

The final boot process can be explained and summarized this way:

  1. Computer powers on
  2. Legacy BIOS boots / initializes
  3. DUET boots from the USB stick
  4. DUET executes UEFI Shell
  5. UEFI Shell loads generic NvmExpressDxe-64.efi driver and remaps system block devices
  6. UEFI Shell now sees Windows 10 hidden FAT partition DIRECTLY on the NVMe
  7. UEFI Shell executes Windows 10 UEFI bootloader from that hidden NVMe FAT partion directly (\EFI\Boot\Bootx64.efi image)
  8. Windows 10 is now booting and is in full control of your computer (under UEFI mode, of course)

Simple, isn't it? :)

Booting your NVMe SSD

Still not convinced? Watch here:

Some benchmark numbers

It's extremely fast. And it seems stable. I have never seen something like this before possible on 8+ years old legacy X58 platform. This is on ASUS P6T SE, Core i7-920 @ 3.6GHz and Samsung SM961:

Benchmark

Credits

Of course, all of this wouldn't be possible with the help / inspiration from various people. Give credit where credit is due:

  • Intel - for open-sourcing and giving us wonderful UEFI standard
  • TianoCore - for providing DUET installer
  • Clover - for being able to compile TianoCore EDK II sources thus providing us with NVMe and XHCI UEFI drivers
  • MrLithium - for providing inspiration and hope that running NVMe SSDs on legacy platform is possible (link here)
  • Nyctophilia - for providing inspiration and hope that running NVMe SSDs on legacy platform is possible (link here)
  • NVMe SSD Disk Makers - for providing us with wonderful NVMe SSD drives ;)

Conclusion

Please share your feedback / comments / thoughts. I will try to update this article whenever somebody succeeds. It would be really nice to have a complete list of X58 legacy platforms that work with the newest NVMe SSDs using this tutorial.

lsguru85

Read more posts by this author.

Subscribe to Audio Cricket Blog

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!