fpga: Added support to load bit stream from SD/MMC
Subsystems (2)
RFC PATCH 1/1 fpga: Added support to load bit stream from SD/MMC
From: Siva Durga Prasad Paladugu <[email protected]>
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
---
We have tested just FAT case but I am sending this as RFC to give some inputs from you.
The reason for this command is that when u-boot running from OCM on zynq there is just 192kB for u-boot itself and there must be an option to load bitstream to PL because there full DDR controller.
Bitstreams are bigger and bigger and reading it with chunks is only one way how to do it.
This is also necessary to do it for u-boot SPL when we add fpga support there.
The question is if this is the way how to extend fpga command because loadfs should be fpga subcommand.
This patch is based on this branch.
http://git.denx.de/?p=u-boot/u-boot-microblaze.git;a=shortlog;h=refs/heads/xnext/zynq
Thanks for your comments,
Michal
--- common/cmd_fpga.c | 41 +++++++++++++++++++++ drivers/fpga/fpga.c | 28 ++++++++++++++ drivers/fpga/xilinx.c | 16 ++++++++ drivers/fpga/zynqpl.c | 85 +++++++++++++++++++++++++++++++++++++++++++ include/configs/zynq-common.h | 1 + include/fpga.h | 9 +++++ include/xilinx.h | 3 ++ 7 files changed, 183 insertions(+)
common/cmd_fpga.c +41 -0
@@ -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,11 @@ 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_FAT ; +#endif if (devstr) dev = (int )simple_strtoul (devstr,NULL ,16 );
@@ -54,6 +61,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 +137,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 || fpga_fsinfo.fstype ==FS_TYPE_ANY ) + wrong_parms =1 ; +#endif case FPGA_LOAD :case FPGA_LOADP :case FPGA_LOADB :
@@ -171,6 +193,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 +315,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 +332,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 +354,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 )
drivers/fpga/fpga.c +28 -0
@@ -180,6 +180,34 @@ int __weak fpga_loadbitstream(int devnum, char *fpgadata, size_t size,return FPGA_FAIL ; } +#if defined(CONFIG_CMD_FPGA_LOADFS ) +int fpga_fsload (int devnum,const void *buf,size_t size, +fpga_fs_info *fpga_fsinfo) +{ +int ret_val =FPGA_FAIL ;/* assume failure */ +const fpga_desc *desc =fpga_validate (devnum, buf, size, + (char *)__func__); + +if (desc) { +switch (desc->devtype) { +case fpga_xilinx: +#if defined(CONFIG_FPGA_XILINX ) + ret_val =xilinx_loadfs (desc->devdesc, buf, size, + fpga_fsinfo); +#else +fpga_no_sup ((char *)__func__,"Xilinx devices" ); +#endif +break ; +default : +printf ("%s: Invalid or unsupported device type %d\n" , + __func__, desc->devtype); + } + } + +return ret_val; +} +#endif +/* * Generic multiplexing code */
drivers/fpga/xilinx.c +16 -0
@@ -142,6 +142,22 @@ int xilinx_load(xilinx_desc *desc, const void *buf, size_t bsize,return desc->operations->load (desc, buf, bsize, bstype); } +#if defined(CONFIG_CMD_FPGA_LOADFS ) +int xilinx_loadfs (xilinx_desc *desc,const void *buf,size_t bsize, +fpga_fs_info *fpga_fsinfo) +{ +if (!xilinx_validate (desc, (char *)__func__)) { +printf ("%s: Invalid device descriptor\n" , __func__); +return FPGA_FAIL ; + } + +if (!desc->operations->loadfs) +return FPGA_FAIL ; + +return desc->operations->loadfs (desc, buf, bsize, fpga_fsinfo); +} +#endif +int xilinx_dump (xilinx_desc *desc,const void *buf,size_t bsize) {if (!xilinx_validate (desc, (char *)__FUNCTION__)) {
drivers/fpga/zynqpl.c +85 -0
103 lines not on this page · raw message
include/configs/zynq-common.h +1 -0
@@ -217,6 +217,7 @@#define CONFIG_CMD_FPGA_LOADMK #define CONFIG_CMD_FPGA_LOADP #define CONFIG_CMD_FPGA_LOADBP +#define CONFIG_CMD_FPGA_LOADFS /* Open Firmware flat tree */ #define CONFIG_OF_LIBFDT
include/fpga.h +9 -0
@@ -35,6 +35,13 @@ typedef struct { /* typedef fpga_desc */void *devdesc;/* real device descriptor */ } fpga_desc;/* end, typedef fpga_desc */ +typedef struct {/* typedef fpga_desc */ +unsigned int blocksize; +char *interface; +char *dev_part; +char *filename; +int fstype; +}fpga_fs_info ; typedef enum { BIT_FULL = 0,
@@ -47,6 +54,8 @@ 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,bitstream_type bstype); +extern int fpga_fsload (int devnum,const void *buf,size_t size, +fpga_fs_info *fpga_fsinfo);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);
include/xilinx.h +3 -0
@@ -46,6 +46,7 @@ typedef struct { /* typedef xilinx_desc */struct xilinx_fpga_op {int (*load)(xilinx_desc *,const void *,size_t ,bitstream_type ); +int (*loadfs)(xilinx_desc *,const void *,size_t ,fpga_fs_info *);int (*dump)(xilinx_desc *,const void *,size_t );int (*info)(xilinx_desc *); };
@@ -56,6 +57,8 @@ 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); +int xilinx_loadfs (xilinx_desc *desc,const void *buf,size_t bsize, +fpga_fs_info *fpga_fsinfo);/* Board specific implementation specific function types *********************************************************************/
--
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/b5d1fcc7/attachment.pgp>
RFC PATCH 1/1 fpga: Added support to load bit stream from SD/MMC
Hi Tom,
Quoted 33 lines · Michal Simek
From: Siva Durga Prasad Paladugu <[email protected]>
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 <[email protected]>Signed-off-by Michal Simek <[email protected]>---
We have tested just FAT case but I am sending this as RFC to give some inputs from you.
The reason for this command is that when u-boot running from OCM on zynq there is just 192kB for u-boot itself and there must be an option to load bitstream to PL because there full DDR controller.
Bitstreams are bigger and bigger and reading it with chunks is only one way how to do it.
This is also necessary to do it for u-boot SPL when we add fpga support there.The question is if this is the way how to extend fpga command because loadfs should be fpga subcommand.
This patch is based on this branch.
http://git.denx.de/?p=u-boot/u-boot-microblaze.git;a=shortlog;h=refs/heads/xnext/zynqThanks for your comments,
Michal
Quoted 9 lines
--- common/cmd_fpga.c | 41 +++++++++++++++++++++ drivers/fpga/fpga.c | 28 ++++++++++++++ drivers/fpga/xilinx.c | 16 ++++++++ drivers/fpga/zynqpl.c | 85 +++++++++++++++++++++++++++++++++++++++++++ include/configs/zynq-common.h | 1 + include/fpga.h | 9 +++++ include/xilinx.h | 3 ++ 7 files changed, 183 insertions(+)
Are you OK with this patch?
I would expect that you will have some comments regarding this because it is command extension.
If you are OK with this I will add it to my next fpga pull request with partial bitstream support.
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/20140514/fc2412dd/attachment.pgp>
RFC PATCH 1/1 fpga: Added support to load bit stream from SD/MMC
Quoted 46 lines · Michal Simek
Hi Tom,
Quoted 33 lines · Michal Simek
From: Siva Durga Prasad Paladugu <[email protected]>
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 <[email protected]>Signed-off-by Michal Simek <[email protected]>---
We have tested just FAT case but I am sending this as RFC to give some inputs from you.
The reason for this command is that when u-boot running from OCM on zynq there is just 192kB for u-boot itself and there must be an option to load bitstream to PL because there full DDR controller.
Bitstreams are bigger and bigger and reading it with chunks is only one way how to do it.
This is also necessary to do it for u-boot SPL when we add fpga support there.The question is if this is the way how to extend fpga command because loadfs should be fpga subcommand.
This patch is based on this branch.
http://git.denx.de/?p=u-boot/u-boot-microblaze.git;a=shortlog;h=refs/heads/xnext/zynqThanks for your comments,
MichalQuoted 9 lines
--- common/cmd_fpga.c | 41 +++++++++++++++++++++ drivers/fpga/fpga.c | 28 ++++++++++++++ drivers/fpga/xilinx.c | 16 ++++++++ drivers/fpga/zynqpl.c | 85 +++++++++++++++++++++++++++++++++++++++++++ include/configs/zynq-common.h | 1 + include/fpga.h | 9 +++++ include/xilinx.h | 3 ++ 7 files changed, 183 insertions(+)
Quoted 5 lines
Are you OK with this patch?
I would expect that you will have some comments regarding this because it is command extension.
If you are OK with this I will add it to my next fpga pull request with partial bitstream support.
It's a new subcommand, seems like a fine idea. Can we leverage FS_TYPE_ANY so it's not limited to FAT?
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140514/d52ee678/attachment.pgp>
RFC PATCH 1/1 fpga: Added support to load bit stream from SD/MMC
Quoted 47 lines · Tom Rini
Quoted 46 lines · Michal Simek
Hi Tom,
Quoted 42 lines · Michal Simek
From: Siva Durga Prasad Paladugu <[email protected]>
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 <[email protected]>Signed-off-by Michal Simek <[email protected]>---
We have tested just FAT case but I am sending this as RFC to give some inputs from you.
The reason for this command is that when u-boot running from OCM on zynq there is just 192kB for u-boot itself and there must be an option to load bitstream to PL because there full DDR controller.
Bitstreams are bigger and bigger and reading it with chunks is only one way how to do it.
This is also necessary to do it for u-boot SPL when we add fpga support there.The question is if this is the way how to extend fpga command because loadfs should be fpga subcommand.
This patch is based on this branch.
http://git.denx.de/?p=u-boot/u-boot-microblaze.git;a=shortlog;h=refs/heads/xnext/zynqThanks for your comments,
Michal--- common/cmd_fpga.c | 41 +++++++++++++++++++++ drivers/fpga/fpga.c | 28 ++++++++++++++ drivers/fpga/xilinx.c | 16 ++++++++ drivers/fpga/zynqpl.c | 85 +++++++++++++++++++++++++++++++++++++++++++ include/configs/zynq-common.h | 1 + include/fpga.h | 9 +++++ include/xilinx.h | 3 ++ 7 files changed, 183 insertions(+)
Quoted 9 lines
Quoted 5 lines
Are you OK with this patch?
I would expect that you will have some comments regarding this because it is command extension.
If you are OK with this I will add it to my next fpga pull request with partial bitstream support.It's a new subcommand, seems like a fine idea. Can we leverage
FS_TYPE_ANYso it's not limited to FAT?
Ok. Fixed. I don't know how to use sandbox fs but I have tried it on EXT4. It ended in error message from ext4 but first reading was fine that's why there shouldn't be any problem in flow.
Here is v2.
http://lists.denx.de/pipermail/u-boot/2014-May/179570.html
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/20140515/bc3b4765/attachment.pgp>