diff options
author | Michal Simek <michal.simek@xilinx.com> | 2018-06-04 14:57:34 +0200 |
---|---|---|
committer | Michal Simek <michal.simek@xilinx.com> | 2018-09-11 10:58:42 +0200 |
commit | f4c7a4aea261e9eab3068f91a08f3c84bd58d89f (patch) | |
tree | be35f2539f5f85532740b485bbdf4a03c9b07e8f | |
parent | 9657d97cf5f0284dbab36915654fb5d082332281 (diff) |
cmd: fpga: Extract fpga info command to separate function
Move fpga info to U_BOOT_CMD_MKENT subcommand.
Also use strtol instead of simple_strtoul. The reason is that if -1 is
passed (or fpga info without "fpga" variable) the list of all fpgas is
shown.
This functionality is in the fpga core but it couldn't be performed.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | cmd/fpga.c | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/cmd/fpga.c b/cmd/fpga.c index ac12af2fa0..039803870b 100644 --- a/cmd/fpga.c +++ b/cmd/fpga.c @@ -13,10 +13,26 @@ #include <fs.h> #include <malloc.h> +static long do_fpga_get_device(char *arg) +{ + long dev = FPGA_INVALID_DEVICE; + char *devstr = env_get("fpga"); + + if (devstr) + /* Should be strtol to handle -1 cases */ + dev = simple_strtol(devstr, NULL, 16); + + if (arg) + dev = simple_strtol(arg, NULL, 16); + + debug("%s: device = %ld\n", __func__, dev); + + return dev; +} + /* Local defines */ enum { FPGA_NONE = -1, - FPGA_INFO, FPGA_LOAD, FPGA_LOADB, FPGA_DUMP, @@ -35,9 +51,7 @@ static int fpga_get_op(char *opstr) { int op = FPGA_NONE; - if (!strcmp("info", opstr)) - op = FPGA_INFO; - else if (!strcmp("loadb", opstr)) + if (!strcmp("loadb", opstr)) op = FPGA_LOADB; else if (!strcmp("load", opstr)) op = FPGA_LOAD; @@ -194,10 +208,6 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) } switch (op) { - case FPGA_INFO: - rc = fpga_info(dev); - break; - case FPGA_LOAD: rc = fpga_load(dev, fpga_data, data_size, BIT_FULL); break; @@ -331,7 +341,16 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) return rc; } +static int do_fpga_info(cmd_tbl_t *cmdtp, int flag, int argc, + char * const argv[]) +{ + long dev = do_fpga_get_device(argv[0]); + + return fpga_info(dev); +} + static cmd_tbl_t fpga_commands[] = { + U_BOOT_CMD_MKENT(info, 1, 1, do_fpga_info, "", ""), }; static int do_fpga_wrapper(cmd_tbl_t *cmdtp, int flag, int argc, |