FPGA changes
Subsystems (2)
cover FPGA changes
Hi,
This series is based on FPGA changes I have sent
http://lists.denx.de/pipermail/u-boot/2014-April/178204.html
Series contain fpga chagnes for cleaning up full and partial bitstream loading. Also compressed bitstreams are supported. Bitstream detection was done based on device size but it doesn't work for compressed bitstreams. That's why user has to decide which bitstream works with. For that purpose LOADP/LOADBP commands have been created.
LOADMK was guarded to have an option to disable it for systems with limited amount of memory.
For easier testing full branch with all patches and patman description is available here.
http://git.denx.de/?p=u-boot/u-boot-microblaze.git;a=shortlog;h=refs/heads/xnext/zynq
Thanks,
Michal
Michal Simek (5):
configs: iocom: Fix typo on CMD_FPGA command
fpga: Define bitstream type based on command selection
fpga: Add support to load partial bitstreams
fpga: zynqpl: Clean partial bitstream handling
zynq: Enable fpga loadp and loadbp commands
Siva Durga Prasad Paladugu (1):
fpga: Guard the LOADMK functionality with CMD_FPGA_LOADMK
README | 13 +++++++++ board/matrix_vision/common/mv_common.c | 2 +- common/cmd_fpga.c | 51 +++++++++++++++++++++++++++++++--- drivers/fpga/fpga.c | 8 ++++-- drivers/fpga/spartan2.c | 3 +- drivers/fpga/spartan3.c | 3 +- drivers/fpga/virtex2.c | 3 +- drivers/fpga/xilinx.c | 10 ++++--- drivers/fpga/zynqpl.c | 22 ++++++--------- include/configs/GEN860T.h | 1 + include/configs/MVBC_P.h | 1 + include/configs/MVBLM7.h | 1 + include/configs/MVSMR.h | 1 + include/configs/alpr.h | 1 + include/configs/astro_mcf5373l.h | 1 + include/configs/balloon3.h | 1 + include/configs/coreboot.h | 1 + include/configs/grsim.h | 1 + include/configs/grsim_leon2.h | 1 + include/configs/iocon.h | 3 +- include/configs/mt_ventoux.h | 1 + include/configs/omap3_mvblx.h | 1 + include/configs/x600.h | 1 + include/configs/zynq-common.h | 3 ++ include/fpga.h | 11 ++++++-- include/xilinx.h | 5 ++-- 26 files changed, 116 insertions(+), 34 deletions(-)
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140502/7e36a65e/attachment.pgp>
PATCH 1/6 configs: iocom: Fix typo on CMD_FPGA command
Fix typo in CMD_FPGA command enabling.
---
include/configs/iocon.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/configs/iocon.h +1 -1
@@ -62,7 +62,7 @@* Commands additional to the ones defined in amcc-common.h */ #define CONFIG_CMD_CACHE -#define CONFIG_CMD_FPGAD +#define CONFIG_CMD_FPGA #undef CONFIG_CMD_EEPROM/*
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140502/bda3a8f7/attachment.pgp>
PATCH 1/6 configs: iocom: Fix typo on CMD_FPGA command
Argh. Just noticed this.
Quoted 3 lines
Fix typo in
CMD_FPGAcommand enabling.Signed-off-by Michal Simek <[email protected]>
CONFIG_CMD_FPGAD is *NOT* a typo, it is about enbaling our own FPGA command common/cmd_fpgad.c
So NAK for this one.
As it already got pulled to rc we have to find a solution. And there has been already a commit (64e809afeaf1572c3246a5bca198a77d0498fd89) on top of this.
How can we get rid of this?
Cheers
Dirk
PATCH 1/6 configs: iocom: Fix typo on CMD_FPGA command
Quoted 10 lines · Dirk Eibach
Argh. Just noticed this.
Quoted 3 lines
Fix typo in
CMD_FPGAcommand enabling.Signed-off-by Michal Simek <[email protected]>
CONFIG_CMD_FPGADis *NOT* a typo, it is about enbaling our own FPGA commandcommon/cmd_fpgad.cSo NAK for this one.
Ah sorry for that. I missed that there is cmd_fpgad.c. Will send fix for that.
Thanks,
Michal
Signature · 14 lines
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91 w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/ Maintainer of Linux kernel - Xilinx Zynq ARM architecture Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 263 bytes Desc: OpenPGP digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140617/3a945f69/attachment.pgp>
PATCH 2/6 fpga: Guard the LOADMK functionality with CMD_FPGA_LOADMK
In reply to Michal SimekFrom: Siva Durga Prasad Paladugu <[email protected]>
Guard the LOADMK functionality with config to provide
an option to enable or disable it.
Enable it for all platforms in mainline which enable CONFIG_CMD_FPGA.
---
README | 4 ++++ common/cmd_fpga.c | 8 ++++++++ include/configs/GEN860T.h | 1 + include/configs/MVBC_P.h | 1 + include/configs/MVBLM7.h | 1 + include/configs/MVSMR.h | 1 + include/configs/alpr.h | 1 + include/configs/astro_mcf5373l.h | 1 + include/configs/balloon3.h | 1 + include/configs/coreboot.h | 1 + include/configs/grsim.h | 1 + include/configs/grsim_leon2.h | 1 + include/configs/iocon.h | 1 + include/configs/mt_ventoux.h | 1 + include/configs/omap3_mvblx.h | 1 + include/configs/x600.h | 1 + include/configs/zynq-common.h | 1 + 17 files changed, 27 insertions(+)
README +4 -0
@@ -2508,6 +2508,10 @@ CBFS (Coreboot Filesystem) support Specify the number of FPGA devices to support. + CONFIG_CMD_FPGA_LOADMK + + Enable support for fpga loadmk command + CONFIG_SYS_FPGA_PROG_FEEDBACK Enable printing of hash marks during FPGA configuration.
common/cmd_fpga.c +8 -0
@@ -126,10 +126,12 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])if (!fpga_data || !data_size) wrong_parms =1 ;break ; +#if defined(CONFIG_CMD_FPGA_LOADMK )case FPGA_LOADMK :if (!fpga_data) wrong_parms =1 ;break ; +#endif }if (wrong_parms) {
@@ -153,6 +155,7 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) rc =fpga_loadbitstream (dev, fpga_data, data_size);break ; +#if defined(CONFIG_CMD_FPGA_LOADMK )case FPGA_LOADMK :switch (genimg_get_format (fpga_data)) {case IMAGE_FORMAT_LEGACY :
@@ -231,6 +234,7 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) break; }break ; +#endif case FPGA_DUMP : rc =fpga_dump (dev, fpga_data, data_size);
@@ -257,8 +261,10 @@ static int fpga_get_op(char *opstr) op =FPGA_LOADB ; else if (!strcmp("load", opstr)) op =FPGA_LOAD ; +#if defined(CONFIG_CMD_FPGA_LOADMK ) else if (!strcmp("loadmk", opstr)) op =FPGA_LOADMK ; +#endif else if (!strcmp("dump", opstr)) op =FPGA_DUMP ;
@@ -277,10 +283,12 @@ U_BOOT_CMD(fpga, 6, 1, do_fpga," load\t[dev] [address] [size]\tLoad device from memory buffer\n" " loadb\t[dev] [address] [size]\t" "Load device from bitstream buffer (Xilinx only)\n" +#if defined(CONFIG_CMD_FPGA_LOADMK ) " loadmk [dev] [address]\tLoad device generated with mkimage"#if defined(CONFIG_FIT )"\n" "\tFor loadmk operating on FIT format uImage address must include\n" "\tsubimage unit name in the form of addr:<subimg_uname>"#endif +#endif );
include/configs/GEN860T.h +1 -0
@@ -219,6 +219,7 @@#define CONFIG_CMD_ELF #define CONFIG_CMD_DATE #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_CMD_MII #define CONFIG_CMD_BEDBUG
include/configs/MVBC_P.h +1 -0
@@ -89,6 +89,7 @@#define CONFIG_CMD_SDRAM #define CONFIG_CMD_PCI #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_CMD_I2C #undef CONFIG_WATCHDOG
include/configs/MVBLM7.h +1 -0
@@ -267,6 +267,7 @@#define CONFIG_CMD_PCI #define CONFIG_CMD_I2C #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_CMD_USB #define CONFIG_DOS_PARTITION
include/configs/MVSMR.h +1 -0
@@ -74,6 +74,7 @@#define CONFIG_CMD_CACHE #define CONFIG_CMD_DHCP #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_CMD_I2C #define CONFIG_CMD_MII #define CONFIG_CMD_NET
include/configs/alpr.h +1 -0
@@ -222,6 +222,7 @@#define CONFIG_CMD_DHCP #define CONFIG_CMD_EEPROM #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_CMD_I2C #undef CONFIG_CMD_LOADB#undef CONFIG_CMD_LOADS
include/configs/astro_mcf5373l.h +1 -0
@@ -88,6 +88,7 @@#define CONFIG_CMD_LOADS #define CONFIG_CMD_LOADB #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_CMDLINE_EDITING #define CONFIG_SYS_HUSH_PARSER
include/configs/balloon3.h +1 -0
@@ -54,6 +54,7 @@#undef CONFIG_CMD_IMLS#define CONFIG_CMD_USB #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #undef CONFIG_LCD/*
include/configs/coreboot.h +1 -0
@@ -167,6 +167,7 @@#define CONFIG_CMD_ECHO #undef CONFIG_CMD_FLASH#define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_CMD_GPIO #define CONFIG_CMD_IMI #undef CONFIG_CMD_IMLS
include/configs/grsim.h +1 -0
@@ -55,6 +55,7 @@#define CONFIG_CMD_DIAG #define CONFIG_CMD_ECHO /* echo arguments */ #define CONFIG_CMD_FPGA /* FPGA configuration Support */ +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_CMD_IRQ #define CONFIG_CMD_ITEST /* Integer (and string) test */ #define CONFIG_CMD_LOADB /* loadb */
include/configs/grsim_leon2.h +1 -0
@@ -53,6 +53,7 @@#define CONFIG_CMD_DIAG #define CONFIG_CMD_ECHO /* echo arguments */ #define CONFIG_CMD_FPGA /* FPGA configuration Support */ +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_CMD_IRQ #define CONFIG_CMD_ITEST /* Integer (and string) test */ #define CONFIG_CMD_LOADB /* loadb */
include/configs/iocon.h +1 -0
@@ -63,6 +63,7 @@*/ #define CONFIG_CMD_CACHE #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #undef CONFIG_CMD_EEPROM/*
include/configs/mt_ventoux.h +1 -0
@@ -49,6 +49,7 @@* FPGA */ #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_FPGA #define CONFIG_FPGA_XILINX #define CONFIG_FPGA_SPARTAN3
include/configs/omap3_mvblx.h +1 -0
@@ -127,6 +127,7 @@#define CONFIG_CMD_DHCP #define CONFIG_CMD_PING #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_SYS_I2C #define CONFIG_SYS_OMAP24_I2C_SPEED 100000
include/configs/x600.h +1 -0
@@ -107,6 +107,7 @@#define CONFIG_CMD_DHCP #define CONFIG_CMD_ENV #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_CMD_GPIO #define CONFIG_CMD_I2C #define CONFIG_CMD_MEMORY
include/configs/zynq-common.h +1 -0
@@ -214,6 +214,7 @@#define CONFIG_FPGA_XILINX #define CONFIG_FPGA_ZYNQPL #define CONFIG_CMD_FPGA +#define CONFIG_CMD_FPGA_LOADMK /* Open Firmware flat tree */ #define CONFIG_OF_LIBFDT
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140502/cf88eac7/attachment.pgp>
PATCH 3/6 fpga: Define bitstream type based on command selection
In reply to Michal SimekClean up partial, full and compressed bitstream handling. U-Boot supports full bitstream loading and partial based on detection which is not 100% correct. Extending fpga_load/fpga_loadbitstream() with one more argument which stores bitstream type.
---
Preparation patch for support partial bitstream loading.
--- board/matrix_vision/common/mv_common.c | 2 +- common/cmd_fpga.c | 10 ++++++---- drivers/fpga/fpga.c | 8 +++++--- drivers/fpga/spartan2.c | 3 ++- drivers/fpga/spartan3.c | 3 ++- drivers/fpga/virtex2.c | 3 ++- drivers/fpga/xilinx.c | 10 ++++++---- drivers/fpga/zynqpl.c | 4 ++-- include/fpga.h | 10 ++++++++-- include/xilinx.h | 5 +++-- 10 files changed, 37 insertions(+), 21 deletions(-)
board/matrix_vision/common/mv_common.c +1 -1
@@ -77,7 +77,7 @@ int mv_load_fpga(void)return -1 ; } - result =fpga_load (0 , fpga_data, data_size); + result =fpga_load (0 , fpga_data, data_size,BIT_FULL );if (!result)bootstage_mark (BOOTSTAGE_ID_START );
common/cmd_fpga.c +6 -4
@@ -148,11 +148,11 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])break ;case FPGA_LOAD : - rc =fpga_load (dev, fpga_data, data_size); + rc =fpga_load (dev, fpga_data, data_size,BIT_FULL );break ;case FPGA_LOADB : - rc =fpga_loadbitstream (dev, fpga_data, data_size); + rc =fpga_loadbitstream (dev, fpga_data, data_size,BIT_FULL );break ;#if defined(CONFIG_CMD_FPGA_LOADMK )
@@ -182,7 +182,8 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) data = (ulong )image_get_data (hdr); data_size =image_get_data_size (hdr); } - rc =fpga_load (dev, (void *)data, data_size); + rc =fpga_load (dev, (void *)data, data_size, +BIT_FULL ); }break ;#if defined(CONFIG_FIT )
@@ -224,7 +225,8 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) return 1; } - rc =fpga_load (dev, fit_data, data_size); + rc =fpga_load (dev, fit_data, data_size, +BIT_FULL ); }break ;#endif
drivers/fpga/fpga.c +5 -3
@@ -173,7 +173,8 @@ int fpga_add(fpga_type devtype, void *desc)/* * Convert bitstream data and load into the fpga */ -int __weak fpga_loadbitstream (int devnum,char *fpgadata,size_t size) +int __weak fpga_loadbitstream (int devnum,char *fpgadata,size_t size, +bitstream_type bstype) {printf ("Bitstream support not implemented for this FPGA device\n" );return FPGA_FAIL ;
@@ -182,7 +183,7 @@ int __weak fpga_loadbitstream(int devnum, char *fpgadata, size_t size)/* * Generic multiplexing code */ -int fpga_load (int devnum,const void *buf,size_t bsize) +int fpga_load (int devnum,const void *buf,size_t bsize,bitstream_type bstype) {int ret_val =FPGA_FAIL ;/* assume failure */ const fpga_desc *desc = fpga_validate(devnum, buf, bsize,
@@ -192,7 +193,8 @@ int fpga_load(int devnum, const void *buf, size_t bsize)switch (desc->devtype) {case fpga_xilinx:#if defined(CONFIG_FPGA_XILINX ) - ret_val =xilinx_load (desc->devdesc, buf, bsize); + ret_val =xilinx_load (desc->devdesc, buf, bsize, + bstype);#else fpga_no_sup ((char *)__func__,"Xilinx devices" );#endif
drivers/fpga/spartan2.c +2 -1
@@ -41,7 +41,8 @@ static int spartan2_ss_dump(xilinx_desc *desc, const void *buf, size_t bsize);/* ------------------------------------------------------------------------- */ /* Spartan-II Generic Implementation */ -static int spartan2_load (xilinx_desc *desc,const void *buf,size_t bsize) +static int spartan2_load (xilinx_desc *desc,const void *buf,size_t bsize, +bitstream_type bstype) {int ret_val =FPGA_FAIL ;
drivers/fpga/spartan3.c +2 -1
@@ -45,7 +45,8 @@ static int spartan3_ss_dump(xilinx_desc *desc, const void *buf, size_t bsize);/* ------------------------------------------------------------------------- */ /* Spartan-II Generic Implementation */ -static int spartan3_load (xilinx_desc *desc,const void *buf,size_t bsize) +static int spartan3_load (xilinx_desc *desc,const void *buf,size_t bsize, +bitstream_type bstype) {int ret_val =FPGA_FAIL ;
drivers/fpga/virtex2.c +2 -1
@@ -90,7 +90,8 @@ static int virtex2_ssm_dump(xilinx_desc *desc, const void *buf, size_t bsize);static int virtex2_ss_load (xilinx_desc *desc,const void *buf,size_t bsize);static int virtex2_ss_dump (xilinx_desc *desc,const void *buf,size_t bsize); -static int virtex2_load (xilinx_desc *desc,const void *buf,size_t bsize) +static int virtex2_load (xilinx_desc *desc,const void *buf,size_t bsize, +bitstream_type bstype) {int ret_val =FPGA_FAIL ;
drivers/fpga/xilinx.c +6 -4
@@ -24,7 +24,8 @@ static int xilinx_validate(xilinx_desc *desc, char *fn);/* ------------------------------------------------------------------------- */ -int fpga_loadbitstream (int devnum,char *fpgadata,size_t size) +int fpga_loadbitstream (int devnum,char *fpgadata,size_t size, +bitstream_type bstype) {unsigned int length;unsigned int swapsize;
@@ -127,17 +128,18 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size) dataptr +=4 ;printf (" bytes in bitstream = %d\n" , swapsize); -return fpga_load (devnum, dataptr, swapsize); +return fpga_load (devnum, dataptr, swapsize, bstype); } -int xilinx_load (xilinx_desc *desc,const void *buf,size_t bsize) +int xilinx_load (xilinx_desc *desc,const void *buf,size_t bsize, +bitstream_type bstype) {if (!xilinx_validate (desc, (char *)__FUNCTION__)) {printf ("%s: Invalid device descriptor\n" , __FUNCTION__);return FPGA_FAIL ; } -return desc->operations->load (desc, buf, bsize); +return desc->operations->load (desc, buf, bsize, bstype); }int xilinx_dump (xilinx_desc *desc,const void *buf,size_t bsize)
drivers/fpga/zynqpl.c +2 -2
@@ -357,8 +357,8 @@ static int zynq_validate_bitstream(xilinx_desc *desc, const void *buf,return 0 ; } - -static int zynq_load (xilinx_desc *desc,const void *buf,size_t bsize) +static int zynq_load (xilinx_desc *desc,const void *buf,size_t bsize, +bitstream_type bstype) {unsigned long ts;/* Timestamp */ u32 partialbit =0 ;
include/fpga.h +8 -2
@@ -36,12 +36,18 @@ typedef struct { /* typedef fpga_desc */ } fpga_desc;/* end, typedef fpga_desc */ +typedef enum { +BIT_FULL =0 , +}bitstream_type ; +/* root function definitions */ extern void fpga_init (void );extern int fpga_add (fpga_type devtype,void *desc);extern int fpga_count (void ); -extern int fpga_load (int devnum,const void *buf,size_t bsize); -extern int fpga_loadbitstream (int devnum,char *fpgadata,size_t size); +extern int fpga_load (int devnum,const void *buf,size_t bsize, +bitstream_type bstype); +extern int fpga_loadbitstream (int devnum,char *fpgadata,size_t size, +bitstream_type bstype);extern int fpga_dump (int devnum,const void *buf,size_t bsize);extern int fpga_info (int devnum); extern const fpga_desc *const fpga_validate(int devnum, const void *buf,
include/xilinx.h +3 -2
@@ -45,14 +45,15 @@ typedef struct { /* typedef xilinx_desc */ } xilinx_desc;/* end, typedef xilinx_desc */ struct xilinx_fpga_op { -int (*load)(xilinx_desc *,const void *,size_t ); +int (*load)(xilinx_desc *,const void *,size_t ,bitstream_type );int (*dump)(xilinx_desc *,const void *,size_t );int (*info)(xilinx_desc *); };/* Generic Xilinx Functions *********************************************************************/ -int xilinx_load (xilinx_desc *desc,const void *image,size_t size); +int xilinx_load (xilinx_desc *desc,const void *image,size_t size, +bitstream_type bstype);int xilinx_dump (xilinx_desc *desc,const void *buf,size_t bsize);int xilinx_info (xilinx_desc *desc);
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140502/5c953981/attachment.pgp>
PATCH 4/6 fpga: Add support to load partial bitstreams
In reply to Michal SimekAdded 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).
---
README | 9 +++++++++ common/cmd_fpga.c | 33 +++++++++++++++++++++++++++++++++ include/fpga.h | 1 + 3 files changed, 43 insertions(+)
README +9 -0
@@ -2512,6 +2512,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.
common/cmd_fpga.c +33 -0
@@ -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 )
include/fpga.h +1 -0
@@ -38,6 +38,7 @@ typedef struct { /* typedef fpga_desc */typedef enum {BIT_FULL =0 , +BIT_PARTIAL , }bitstream_type ;/* root function definitions */
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140502/d7af9d94/attachment.pgp>
PATCH 5/6 fpga: zynqpl: Clean partial bitstream handling
In reply to Michal SimekDo not do partial bitstream detection based on bitstream size and use bitstream_type argument which is passed from the fpga core.
---
drivers/fpga/zynqpl.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
drivers/fpga/zynqpl.c +6 -12
@@ -194,7 +194,7 @@ static int zynq_dma_transfer(u32 srcbuf, u32 srclen, u32 dstbuf, u32 dstlen)return FPGA_SUCCESS ; } -static int zynq_dma_xfer_init (u32 partialbit) +static int zynq_dma_xfer_init (bitstream_type bstype) {u32 status, control, isr_status;unsigned long ts;
@@ -202,7 +202,7 @@ static int zynq_dma_xfer_init(u32 partialbit)/* Clear loopback bit */ clrbits_le32 (&devcfg_base->mctrl,DEVCFG_MCTRL_PCAP_LPBK ); -if (!partialbit) { +if (bstype !=BIT_PARTIAL ) {zynq_slcr_devcfg_disable ();/* Setting PCFG_PROG_B signal to high */
@@ -322,16 +322,11 @@ static u32 *zynq_align_dma_buffer(u32 *buf, u32 len, u32 swap)static int zynq_validate_bitstream (xilinx_desc *desc,const void *buf,size_t bsize,u32 blocksize,u32 *swap, -u32 *partialbit) +bitstream_type *bstype) {u32 *buf_start;u32 diff; -/* Detect if we are going working with partial or full bitstream */ -if (bsize != desc->size) { -printf ("%s: Working with partial bitstream\n" , __func__); - *partialbit =1 ; - } buf_start =check_data ((u8 *)buf, blocksize, swap);if (!buf_start)
@@ -351,7 +346,7 @@ static int zynq_validate_bitstream(xilinx_desc *desc, const void *buf,return FPGA_FAIL ; } -if (zynq_dma_xfer_init (*partialbit)) +if (zynq_dma_xfer_init (*bstype))return FPGA_FAIL ;return 0 ;
@@ -361,7 +356,6 @@ static int zynq_load(xilinx_desc *desc, const void *buf, size_t bsize, bitstream_type bstype) {unsigned long ts;/* Timestamp */ -u32 partialbit =0 ;u32 isr_status, swap;/*
@@ -369,7 +363,7 @@ static int zynq_load(xilinx_desc *desc, const void *buf, size_t bsize,* in chunks */ if (zynq_validate_bitstream (desc, buf, bsize, bsize, &swap, - &partialbit)) + &bstype))return FPGA_FAIL ; buf =zynq_align_dma_buffer ((u32 *)buf, bsize, swap);
@@ -398,7 +392,7 @@ static int zynq_load(xilinx_desc *desc, const void *buf, size_t bsize,debug ("%s: FPGA config done\n" , __func__); -if (!partialbit) +if (bstype !=BIT_PARTIAL )zynq_slcr_devcfg_enable ();return FPGA_SUCCESS ;
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140502/523e615d/attachment.pgp>
PATCH 6/6 zynq: Enable fpga loadp and loadbp commands
In reply to Michal SimekUse new fpga commands for loading partial bitstreams.
---
include/configs/zynq-common.h | 2 ++ 1 file changed, 2 insertions(+)
include/configs/zynq-common.h +2 -0
@@ -215,6 +215,8 @@#define CONFIG_FPGA_ZYNQPL #define CONFIG_CMD_FPGA #define CONFIG_CMD_FPGA_LOADMK +#define CONFIG_CMD_FPGA_LOADP +#define CONFIG_CMD_FPGA_LOADBP /* Open Firmware flat tree */ #define CONFIG_OF_LIBFDT
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140502/e7d62c5f/attachment.pgp>