diff options
author | Michal Simek <michal.simek@xilinx.com> | 2018-07-26 15:33:51 +0200 |
---|---|---|
committer | Michal Simek <michal.simek@xilinx.com> | 2018-09-11 11:00:54 +0200 |
commit | 8c75f7943df0e849cf1431cd1b3d3e67180a158c (patch) | |
tree | 72bf4ceba8c87ef0e96b1a0df0317559d6e2eab0 /cmd | |
parent | 2892fe801d8c3c19670782de755484624886a2a6 (diff) |
cmd: fpga: Add support for missing fpga loadmk commands
There are ways how to call fpga loadmk
1. Full command
fpga loadmk [dev] [address]
2. Dev setup via variable
set fpga [dev]
fpga loadmk [address]
3. Address setup via variable
set fpgadata [address]
fpga loadmk [dev]
4. Dev and address setup via variables
set fpga [dev]
set fpgadata [address]
fpga loadmk
Before this patch only cases 1 and 3 are working but the part of code
was trying to support also cases 2 and 4.
This patch is adding support for cases 2 and 4 to have all of
combinations supported.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/fpga.c | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/cmd/fpga.c b/cmd/fpga.c index 9cb0116af7..de9d19dd8e 100644 --- a/cmd/fpga.c +++ b/cmd/fpga.c @@ -22,7 +22,7 @@ static long do_fpga_get_device(char *arg) /* Should be strtol to handle -1 cases */ dev = simple_strtol(devstr, NULL, 16); - if (arg) + if (dev == FPGA_INVALID_DEVICE && arg) dev = simple_strtol(arg, NULL, 16); debug("%s: device = %ld\n", __func__, dev); @@ -312,29 +312,44 @@ static int do_fpga_loadmk(cmd_tbl_t *cmdtp, int flag, int argc, ulong dev = do_fpga_get_device(argv[0]); char *datastr = env_get("fpgadata"); - if (datastr) - fpga_data = (void *)simple_strtoul(datastr, NULL, 16); + debug("fpga: argc %x, dev %lx, datastr %s\n", argc, dev, datastr); + + if (dev == FPGA_INVALID_DEVICE) { + debug("fpga: Invalid fpga device\n"); + return CMD_RET_USAGE; + } + + if (argc == 0 && !datastr) { + debug("fpga: No datastr passed\n"); + return CMD_RET_USAGE; + } if (argc == 2) { + datastr = argv[1]; + debug("fpga: Full command with two args\n"); + } else if (argc == 1 && !datastr) { + debug("fpga: Dev is setup - fpgadata passed\n"); + datastr = argv[0]; + } + #if defined(CONFIG_FIT) - if (fit_parse_subimage(argv[1], (ulong)fpga_data, - &fit_addr, &fit_uname)) { - fpga_data = (void *)fit_addr; - debug("* fpga: subimage '%s' from FIT image ", - fit_uname); - debug("at 0x%08lx\n", fit_addr); - } else + if (fit_parse_subimage(datastr, (ulong)fpga_data, + &fit_addr, &fit_uname)) { + fpga_data = (void *)fit_addr; + debug("* fpga: subimage '%s' from FIT image ", + fit_uname); + debug("at 0x%08lx\n", fit_addr); + } else #endif - { - fpga_data = (void *)simple_strtoul(argv[1], NULL, 16); - debug("* fpga: cmdline image address = 0x%08lx\n", - (ulong)fpga_data); - } - debug("%s: fpga_data = 0x%lx\n", __func__, (ulong)fpga_data); - if (!fpga_data) { - puts("Zero fpga_data address\n"); - return CMD_RET_USAGE; - } + { + fpga_data = (void *)simple_strtoul(datastr, NULL, 16); + debug("* fpga: cmdline image address = 0x%08lx\n", + (ulong)fpga_data); + } + debug("%s: fpga_data = 0x%lx\n", __func__, (ulong)fpga_data); + if (!fpga_data) { + puts("Zero fpga_data address\n"); + return CMD_RET_USAGE; } switch (genimg_get_format(fpga_data)) { |