|
|
|
@ -11,6 +11,7 @@ |
|
|
|
|
#include <common.h> |
|
|
|
|
#include <command.h> |
|
|
|
|
#include <fpga.h> |
|
|
|
|
#include <fs.h> |
|
|
|
|
#include <malloc.h> |
|
|
|
|
|
|
|
|
|
/* Local functions */ |
|
|
|
@ -25,6 +26,7 @@ static int fpga_get_op(char *opstr); |
|
|
|
|
#define FPGA_LOADMK 4 |
|
|
|
|
#define FPGA_LOADP 5 |
|
|
|
|
#define FPGA_LOADBP 6 |
|
|
|
|
#define FPGA_LOADFS 7 |
|
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------- */ |
|
|
|
|
/* command form:
|
|
|
|
@ -47,6 +49,10 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) |
|
|
|
|
const char *fit_uname = NULL; |
|
|
|
|
ulong fit_addr; |
|
|
|
|
#endif |
|
|
|
|
#if defined(CONFIG_CMD_FPGA_LOADFS) |
|
|
|
|
fpga_fs_info fpga_fsinfo; |
|
|
|
|
fpga_fsinfo.fstype = FS_TYPE_ANY; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (devstr) |
|
|
|
|
dev = (int) simple_strtoul(devstr, NULL, 16); |
|
|
|
@ -54,6 +60,14 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) |
|
|
|
|
fpga_data = (void *)simple_strtoul(datastr, NULL, 16); |
|
|
|
|
|
|
|
|
|
switch (argc) { |
|
|
|
|
#if defined(CONFIG_CMD_FPGA_LOADFS) |
|
|
|
|
case 9: |
|
|
|
|
fpga_fsinfo.blocksize = (unsigned int) |
|
|
|
|
simple_strtoul(argv[5], NULL, 16); |
|
|
|
|
fpga_fsinfo.interface = argv[6]; |
|
|
|
|
fpga_fsinfo.dev_part = argv[7]; |
|
|
|
|
fpga_fsinfo.filename = argv[8]; |
|
|
|
|
#endif |
|
|
|
|
case 5: /* fpga <op> <dev> <data> <datasize> */ |
|
|
|
|
data_size = simple_strtoul(argv[4], NULL, 16); |
|
|
|
|
|
|
|
|
@ -122,6 +136,13 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) |
|
|
|
|
case FPGA_NONE: |
|
|
|
|
case FPGA_INFO: |
|
|
|
|
break; |
|
|
|
|
#if defined(CONFIG_CMD_FPGA_LOADFS) |
|
|
|
|
case FPGA_LOADFS: |
|
|
|
|
/* Blocksize can be zero */ |
|
|
|
|
if (!fpga_fsinfo.interface || !fpga_fsinfo.dev_part || |
|
|
|
|
!fpga_fsinfo.filename) |
|
|
|
|
wrong_parms = 1; |
|
|
|
|
#endif |
|
|
|
|
case FPGA_LOAD: |
|
|
|
|
case FPGA_LOADP: |
|
|
|
|
case FPGA_LOADB: |
|
|
|
@ -171,6 +192,12 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_CMD_FPGA_LOADFS) |
|
|
|
|
case FPGA_LOADFS: |
|
|
|
|
rc = fpga_fsload(dev, fpga_data, data_size, &fpga_fsinfo); |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_CMD_FPGA_LOADMK) |
|
|
|
|
case FPGA_LOADMK: |
|
|
|
|
switch (genimg_get_format(fpga_data)) { |
|
|
|
@ -287,6 +314,10 @@ static int fpga_get_op(char *opstr) |
|
|
|
|
else if (!strcmp("loadbp", opstr)) |
|
|
|
|
op = FPGA_LOADBP; |
|
|
|
|
#endif |
|
|
|
|
#if defined(CONFIG_CMD_FPGA_LOADFS) |
|
|
|
|
else if (!strcmp("loadfs", opstr)) |
|
|
|
|
op = FPGA_LOADFS; |
|
|
|
|
#endif |
|
|
|
|
#if defined(CONFIG_CMD_FPGA_LOADMK) |
|
|
|
|
else if (!strcmp("loadmk", opstr)) |
|
|
|
|
op = FPGA_LOADMK; |
|
|
|
@ -300,7 +331,11 @@ static int fpga_get_op(char *opstr) |
|
|
|
|
return op; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_CMD_FPGA_LOADFS) |
|
|
|
|
U_BOOT_CMD(fpga, 9, 1, do_fpga, |
|
|
|
|
#else |
|
|
|
|
U_BOOT_CMD(fpga, 6, 1, do_fpga, |
|
|
|
|
#endif |
|
|
|
|
"loadable FPGA image support", |
|
|
|
|
"[operation type] [device number] [image address] [image size]\n" |
|
|
|
|
"fpga operations:\n" |
|
|
|
@ -318,6 +353,11 @@ U_BOOT_CMD(fpga, 6, 1, do_fpga, |
|
|
|
|
"Load device from bitstream buffer with partial bitstream" |
|
|
|
|
"(Xilinx only)\n" |
|
|
|
|
#endif |
|
|
|
|
#if defined(CONFIG_CMD_FPGA_LOADFS) |
|
|
|
|
"Load device from filesystem (FAT by default) (Xilinx only)\n" |
|
|
|
|
" loadfs [dev] [address] [image size] [blocksize] <interface>\n" |
|
|
|
|
" [<dev[:part]>] <filename>\n" |
|
|
|
|
#endif |
|
|
|
|
#if defined(CONFIG_CMD_FPGA_LOADMK) |
|
|
|
|
" loadmk [dev] [address]\tLoad device generated with mkimage" |
|
|
|
|
#if defined(CONFIG_FIT) |
|
|
|
|