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