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>
diff --git a/include/configs/zynq-common.h b/include/configs/zynq-common.h
index fb600b8..9763245 100644
--- a/include/configs/zynq-common.h
+++ b/include/configs/zynq-common.h
@@ -194,6 +194,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
diff --git a/include/fpga.h b/include/fpga.h
index 49efd37..914024c 100644
--- a/include/fpga.h
+++ b/include/fpga.h
@@ -35,6 +35,13 @@
 	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_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);
diff --git a/include/xilinx.h b/include/xilinx.h
index 7d83ba2..aebcb3b 100644
--- a/include/xilinx.h
+++ b/include/xilinx.h
@@ -46,6 +46,7 @@
 
 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 @@
 		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
  *********************************************************************/