982388eaa9
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. This adds a U-Boot driver support of devices that follow the NVMe standard [1] and supports basic read/write operations. Tested with a 400GB Intel SSD 750 series NVMe card with controller id 8086:0953. [1] http://www.nvmexpress.org/resources/specifications/ Signed-off-by: Zhikang Zhang <zhikang.zhang@nxp.com> Signed-off-by: Wenbin Song <wenbin.song@nxp.com> Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Tom Rini <trini@konsulko.com>
43 lines
1.8 KiB
Plaintext
43 lines
1.8 KiB
Plaintext
#
|
|
# 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
|