xref: /openbmc/u-boot/cmd/nvme.c (revision e8f80a5a)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
20adc38beSZhikang Zhang /*
30adc38beSZhikang Zhang  * Copyright (C) 2017 NXP Semiconductors
40adc38beSZhikang Zhang  * Copyright (C) 2017 Bin Meng <bmeng.cn@gmail.com>
50adc38beSZhikang Zhang  */
60adc38beSZhikang Zhang 
70adc38beSZhikang Zhang #include <common.h>
80adc38beSZhikang Zhang #include <command.h>
90adc38beSZhikang Zhang #include <dm.h>
100adc38beSZhikang Zhang #include <nvme.h>
110adc38beSZhikang Zhang 
12fceadc14SBin Meng static int nvme_curr_dev;
130adc38beSZhikang Zhang 
do_nvme(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])14fceadc14SBin Meng static int do_nvme(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
150adc38beSZhikang Zhang {
160adc38beSZhikang Zhang 	int ret;
170adc38beSZhikang Zhang 
18fceadc14SBin Meng 	if (argc == 2) {
19fceadc14SBin Meng 		if (strncmp(argv[1], "scan", 4) == 0) {
200adc38beSZhikang Zhang 			ret = nvme_scan_namespace();
210adc38beSZhikang Zhang 			if (ret)
220adc38beSZhikang Zhang 				return CMD_RET_FAILURE;
230adc38beSZhikang Zhang 
24fceadc14SBin Meng 			return ret;
250adc38beSZhikang Zhang 		}
26fceadc14SBin Meng 		if (strncmp(argv[1], "deta", 4) == 0) {
270adc38beSZhikang Zhang 			struct udevice *udev;
280adc38beSZhikang Zhang 
29fceadc14SBin Meng 			ret = blk_get_device(IF_TYPE_NVME, nvme_curr_dev,
30fceadc14SBin Meng 					     &udev);
310adc38beSZhikang Zhang 			if (ret < 0)
320adc38beSZhikang Zhang 				return CMD_RET_FAILURE;
330adc38beSZhikang Zhang 
340adc38beSZhikang Zhang 			nvme_print_info(udev);
350adc38beSZhikang Zhang 
36fceadc14SBin Meng 			return ret;
37fceadc14SBin Meng 		}
380adc38beSZhikang Zhang 	}
390adc38beSZhikang Zhang 
40fceadc14SBin Meng 	return blk_common_cmd(argc, argv, IF_TYPE_NVME, &nvme_curr_dev);
410adc38beSZhikang Zhang }
420adc38beSZhikang Zhang 
430adc38beSZhikang Zhang U_BOOT_CMD(
44fceadc14SBin Meng 	nvme, 8, 1, do_nvme,
450adc38beSZhikang Zhang 	"NVM Express sub-system",
46fceadc14SBin Meng 	"scan - scan NVMe devices\n"
47fceadc14SBin Meng 	"nvme detail - show details of current NVMe device\n"
48fceadc14SBin Meng 	"nvme info - show all available NVMe devices\n"
49fceadc14SBin Meng 	"nvme device [dev] - show or set current NVMe device\n"
50fceadc14SBin Meng 	"nvme part [dev] - print partition table of one or all NVMe devices\n"
51fceadc14SBin Meng 	"nvme read addr blk# cnt - read `cnt' blocks starting at block\n"
52fceadc14SBin Meng 	"     `blk#' to memory address `addr'\n"
53fceadc14SBin Meng 	"nvme write addr blk# cnt - write `cnt' blocks starting at block\n"
54fceadc14SBin Meng 	"     `blk#' from memory address `addr'"
550adc38beSZhikang Zhang );
56