]> git.sur5r.net Git - u-boot/commitdiff
fpga: Add support to load partial bitstreams
authorMichal Simek <michal.simek@xilinx.com>
Fri, 2 May 2014 11:43:39 +0000 (13:43 +0200)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 20 May 2014 13:23:46 +0000 (15:23 +0200)
Added support to load partial bitstreams.
The partial bitstreams can be loaded using the below commands
Commands:
fpga loadp <dev> <addr> <size>
fpga loadbp <dev> <addr> <size>
The full bit streams can be loaded using the
old commands(fpga load and fpga loadb).

Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
README
common/cmd_fpga.c
include/fpga.h

diff --git a/README b/README
index d362880c7254847ba123f0f55aa6a761206cf430..13cdac410937320ca805ce3c9df23bd18af6393e 100644 (file)
--- a/README
+++ b/README
@@ -2554,6 +2554,15 @@ CBFS (Coreboot Filesystem) support
 
                Enable support for fpga loadmk command
 
+               CONFIG_CMD_FPGA_LOADP
+
+               Enable support for fpga loadp command - load partial bitstream
+
+               CONFIG_CMD_FPGA_LOADBP
+
+               Enable support for fpga loadbp command - load partial bitstream
+               (Xilinx only)
+
                CONFIG_SYS_FPGA_PROG_FEEDBACK
 
                Enable printing of hash marks during FPGA configuration.
index 4fafed9df2d55ac6f931f4221c0e4d900bd6f3e2..802f3ecfffd8092f2372d756a0f39cd58106b5e9 100644 (file)
@@ -23,6 +23,8 @@ static int fpga_get_op(char *opstr);
 #define FPGA_LOADB  2
 #define FPGA_DUMP   3
 #define FPGA_LOADMK 4
+#define FPGA_LOADP  5
+#define FPGA_LOADBP 6
 
 /* ------------------------------------------------------------------------- */
 /* command form:
@@ -121,7 +123,9 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
        case FPGA_INFO:
                break;
        case FPGA_LOAD:
+       case FPGA_LOADP:
        case FPGA_LOADB:
+       case FPGA_LOADBP:
        case FPGA_DUMP:
                if (!fpga_data || !data_size)
                        wrong_parms = 1;
@@ -151,10 +155,22 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
                rc = fpga_load(dev, fpga_data, data_size, BIT_FULL);
                break;
 
+#if defined(CONFIG_CMD_FPGA_LOADP)
+       case FPGA_LOADP:
+               rc = fpga_load(dev, fpga_data, data_size, BIT_PARTIAL);
+               break;
+#endif
+
        case FPGA_LOADB:
                rc = fpga_loadbitstream(dev, fpga_data, data_size, BIT_FULL);
                break;
 
+#if defined(CONFIG_CMD_FPGA_LOADBP)
+       case FPGA_LOADBP:
+               rc = fpga_loadbitstream(dev, fpga_data, data_size, BIT_PARTIAL);
+               break;
+#endif
+
 #if defined(CONFIG_CMD_FPGA_LOADMK)
        case FPGA_LOADMK:
                switch (genimg_get_format(fpga_data)) {
@@ -263,6 +279,14 @@ static int fpga_get_op(char *opstr)
                op = FPGA_LOADB;
        else if (!strcmp("load", opstr))
                op = FPGA_LOAD;
+#if defined(CONFIG_CMD_FPGA_LOADP)
+       else if (!strcmp("loadp", opstr))
+               op = FPGA_LOADP;
+#endif
+#if defined(CONFIG_CMD_FPGA_LOADBP)
+       else if (!strcmp("loadbp", opstr))
+               op = FPGA_LOADBP;
+#endif
 #if defined(CONFIG_CMD_FPGA_LOADMK)
        else if (!strcmp("loadmk", opstr))
                op = FPGA_LOADMK;
@@ -283,8 +307,17 @@ U_BOOT_CMD(fpga, 6, 1, do_fpga,
           "  dump\t[dev]\t\t\tLoad device to memory buffer\n"
           "  info\t[dev]\t\t\tlist known device information\n"
           "  load\t[dev] [address] [size]\tLoad device from memory buffer\n"
+#if defined(CONFIG_CMD_FPGA_LOADP)
+          "  loadp\t[dev] [address] [size]\t"
+          "Load device from memory buffer with partial bitstream\n"
+#endif
           "  loadb\t[dev] [address] [size]\t"
           "Load device from bitstream buffer (Xilinx only)\n"
+#if defined(CONFIG_CMD_FPGA_LOADBP)
+          "  loadbp\t[dev] [address] [size]\t"
+          "Load device from bitstream buffer with partial bitstream"
+          "(Xilinx only)\n"
+#endif
 #if defined(CONFIG_CMD_FPGA_LOADMK)
           "  loadmk [dev] [address]\tLoad device generated with mkimage"
 #if defined(CONFIG_FIT)
index a55e49f9589dbe919afc5de8fd45f3b6a42d5a60..49efd375f7473b0675a3e83e7b20b1b0c6deec66 100644 (file)
@@ -38,6 +38,7 @@ typedef struct {              /* typedef fpga_desc */
 
 typedef enum {
        BIT_FULL = 0,
+       BIT_PARTIAL,
 } bitstream_type;
 
 /* root function definitions */