mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-07-23 23:33:01 +00:00
fpga: Added support to load bit stream from SD/MMC
Added support to load a bitstream image in chunks by reading it in chunks from SD/MMC. Command format: loadfs [dev] [address] [image size] [blocksize] <interface> [<dev[:part]>] <filename> Example: fpga loadfs 0 1000000 3dbafc 4000 mmc 0 fpga.bin Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
This commit is contained in:
parent
26ea9ce5b8
commit
1a897668ac
7 changed files with 182 additions and 0 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue