summaryrefslogtreecommitdiff
path: root/doc/README.nvme
blob: d2b917d61b86d219602d5df06da0b3a5aa526c05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#
# Copyright (C) 2017 NXP Semiconductors
# Copyright (C) 2017 Bin Meng <bmeng.cn@gmail.com>
#
# SPDX-License-Identifier:	GPL-2.0+
#

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