storage: v2 Add simple NVMe storage driver

This driver is a minimal port of the EFI NVMe driver.
It allows depthcharge to boot from an SSD supporting
the NVM Express interface ( See notes in
nvme.c for additional information on capabilities.

Based on data from Flash Memory Summit 2014 client NVMe SSDs are
forecast to account for 60%+ of the market. They offer substantial
latency, bandwidth, and power advantages over SATA drives. According
to FMS articles these drives will be available from several vendors
including Samsung and SK Hynix.

A depthcharge driver allows IHVs to test/validate their platforms
earlier by using a common NVMe implementation. It also enables
developers who want to modify existing cros devices to use new storage

There is a new CONFIG_DRIVER_NVME option in Kconfig
so one may include this driver at will.

Use this driver by adding CONFIG_DRIVER_NVME to your
.config and adding something like this to your board.c:

NvmeCtrlr *nvme = new_nvme_ctrlr(PCI_DEV(2, 0, 0));
list_insert_after(&nvme->ctrlr.list_node, &fixed_block_dev_controllers);

TEST=compiles for panther and can boot from NVMe device w/ board.c change

Change-Id: Ic68aff1c800145c854b2c2ea5826164b2d6a0054
Signed-off-by: Jason B. Akers <>
Reviewed-by: Aaron Durbin <>
4 files changed