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 (nvmexpress.org). See notes in
nvme.c for additional information on capabilities.

BACKGROUND:
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
hardware.

USAGE:
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);

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

Change-Id: Ic68aff1c800145c854b2c2ea5826164b2d6a0054
Signed-off-by: Jason B. Akers <jason.b.akers@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/242308
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
4 files changed