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