mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
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>
This commit is contained in:
parent
2892fe801d
commit
8c75f7943d
1 changed files with 35 additions and 20 deletions
55
cmd/fpga.c
55
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)) {
|
||||
|
|
Loading…
Reference in a new issue