# SPDX-License-Identifier: GPL-2.0+
#
# Copyright (C) 2017 NXP Semiconductors
# Copyright (C) 2017 Bin Meng <bmeng.cn@gmail.com>

What is NVMe
============

NVM Express (NVMe) is a register level interface that allows host software to
communicate with a non-volatile memory subsystem. This interface is optimized
for enterprise and client solid state drives, typically attached to the PCI
express interface. It is a scalable host controller interface designed to
address the needs of enterprise and client systems that utilize PCI express
based solid state drives (SSD). The interface provides optimized command
submission and completion paths. It includes support for parallel operation by
supporting up to 64K I/O queues with up to 64K commands per I/O queue.

The device is comprised of some number of controllers, where each controller
is comprised of some number of namespaces, where each namespace is comprised
of some number of logical blocks. A namespace is a quantity of non-volatile
memory that is formatted into logical blocks. An NVMe namespace is equivalent
to a SCSI LUN. Each namespace is operated as an independent "device".

How it works
------------
There is an NVMe uclass driver (driver name "nvme"), an NVMe host controller
driver (driver name "nvme") and an NVMe namespace block driver (driver name
"nvme-blk"). The host controller driver is supposed to probe the hardware and
do necessary initialization to put the controller into a ready state at which
it is able to scan all available namespaces attached to it. Scanning namespace
is triggered by the NVMe uclass driver and the actual work is done in the NVMe
namespace block driver.

Status
------
It only support basic block read/write functions in the NVMe driver.

Config options
--------------
CONFIG_NVME	Enable NVMe device support
CONFIG_CMD_NVME	Enable basic NVMe commands

Usage in U-Boot
---------------
To use an NVMe hard disk from U-Boot shell, a 'nvme scan' command needs to
be executed for all NVMe hard disks attached to the NVMe controller to be
identified.

To list all of the NVMe hard disks, try:

  => nvme info
  Device 0: Vendor: 0x8086 Rev: 8DV10131 Prod: CVFT535600LS400BGN
	    Type: Hard Disk
	    Capacity: 381554.0 MB = 372.6 GB (781422768 x 512)

and print out detailed information for controller and namespaces via:

  => nvme detail

Raw block read/write to can be done via the 'nvme read/write' commands:

  => nvme read a0000000 0 11000

  => tftp 80000000 /tftpboot/kernel.itb
  => nvme write 80000000 0 11000

Of course, file system command can be used on the NVMe hard disk as well:

  => fatls nvme 0:1
	32376967   kernel.itb
	22929408   100m

	2 file(s), 0 dir(s)

  => fatload nvme 0:1 a0000000 /kernel.itb
  => bootm a0000000

Testing NVMe with QEMU x86
--------------------------
QEMU supports NVMe emulation and we can test NVMe driver with QEMU x86 running
U-Boot. Please see README.x86 for how to build u-boot.rom image for QEMU x86.

Example command line to call QEMU x86 below with emulated NVMe device:
$ ./qemu-system-i386 -drive file=nvme.img,if=none,id=drv0 -device nvme,drive=drv0,serial=QEMUNVME0001 -bios u-boot.rom
