xref: /rk3399_rockchip-uboot/cmd/nvme.c (revision 9d9df2d6ee10ab9418ae11ada00759016aa62589)
10adc38beSZhikang Zhang /*
20adc38beSZhikang Zhang  * Copyright (C) 2017 NXP Semiconductors
30adc38beSZhikang Zhang  * Copyright (C) 2017 Bin Meng <bmeng.cn@gmail.com>
40adc38beSZhikang Zhang  *
50adc38beSZhikang Zhang  * SPDX-License-Identifier:	GPL-2.0+
60adc38beSZhikang Zhang  */
70adc38beSZhikang Zhang 
80adc38beSZhikang Zhang #include <common.h>
90adc38beSZhikang Zhang #include <command.h>
100adc38beSZhikang Zhang #include <dm.h>
110adc38beSZhikang Zhang #include <nvme.h>
120adc38beSZhikang Zhang 
13fceadc14SBin Meng static int nvme_curr_dev;
140adc38beSZhikang Zhang 
do_nvme(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])15fceadc14SBin Meng static int do_nvme(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
160adc38beSZhikang Zhang {
170adc38beSZhikang Zhang 	int ret;
180adc38beSZhikang Zhang 
19fceadc14SBin Meng 	if (argc == 2) {
20fceadc14SBin Meng 		if (strncmp(argv[1], "scan", 4) == 0) {
210adc38beSZhikang Zhang 			ret = nvme_scan_namespace();
220adc38beSZhikang Zhang 			if (ret)
230adc38beSZhikang Zhang 				return CMD_RET_FAILURE;
240adc38beSZhikang Zhang 
25fceadc14SBin Meng 			return ret;
260adc38beSZhikang Zhang 		}
27fceadc14SBin Meng 		if (strncmp(argv[1], "deta", 4) == 0) {
280adc38beSZhikang Zhang 			struct udevice *udev;
290adc38beSZhikang Zhang 
30fceadc14SBin Meng 			ret = blk_get_device(IF_TYPE_NVME, nvme_curr_dev,
31fceadc14SBin Meng 					     &udev);
320adc38beSZhikang Zhang 			if (ret < 0)
330adc38beSZhikang Zhang 				return CMD_RET_FAILURE;
340adc38beSZhikang Zhang 
350adc38beSZhikang Zhang 			nvme_print_info(udev);
360adc38beSZhikang Zhang 
37fceadc14SBin Meng 			return ret;
38fceadc14SBin Meng 		}
390adc38beSZhikang Zhang 	}
400adc38beSZhikang Zhang 
41fceadc14SBin Meng 	return blk_common_cmd(argc, argv, IF_TYPE_NVME, &nvme_curr_dev);
420adc38beSZhikang Zhang }
430adc38beSZhikang Zhang 
440adc38beSZhikang Zhang U_BOOT_CMD(
45fceadc14SBin Meng 	nvme, 8, 1, do_nvme,
460adc38beSZhikang Zhang 	"NVM Express sub-system",
47fceadc14SBin Meng 	"scan - scan NVMe devices\n"
48fceadc14SBin Meng 	"nvme detail - show details of current NVMe device\n"
49fceadc14SBin Meng 	"nvme info - show all available NVMe devices\n"
50fceadc14SBin Meng 	"nvme device [dev] - show or set current NVMe device\n"
51fceadc14SBin Meng 	"nvme part [dev] - print partition table of one or all NVMe devices\n"
52e88af282SShawn Lin 	"nvme erase blk# cnt - erase 'cnt' blocks strating at block\n"
53fceadc14SBin Meng 	"nvme read addr blk# cnt - read `cnt' blocks starting at block\n"
54fceadc14SBin Meng 	"     `blk#' to memory address `addr'\n"
55fceadc14SBin Meng 	"nvme write addr blk# cnt - write `cnt' blocks starting at block\n"
56fceadc14SBin Meng 	"     `blk#' from memory address `addr'"
57*9d9df2d6SShawn Lin 	"nvme write_zeroes blk# cnt - write `cnt' blocks of zeroes starting at block\n"
580adc38beSZhikang Zhang );
59