All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/6] FPGA changes
@ 2014-05-02 13:34 Michal Simek
  2014-05-02 13:34 ` [U-Boot] [PATCH 1/6] configs: iocom: Fix typo on CMD_FPGA command Michal Simek
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Michal Simek @ 2014-05-02 13:34 UTC (permalink / raw)
  To: u-boot

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>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 1/6] configs: iocom: Fix typo on CMD_FPGA command
  2014-05-02 13:34 [U-Boot] [PATCH 0/6] FPGA changes Michal Simek
@ 2014-05-02 13:34 ` Michal Simek
  2014-06-16  8:19   ` Dirk Eibach
  2014-05-02 13:34 ` [U-Boot] [PATCH 2/6] fpga: Guard the LOADMK functionality with CMD_FPGA_LOADMK Michal Simek
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 9+ messages in thread
From: Michal Simek @ 2014-05-02 13:34 UTC (permalink / raw)
  To: u-boot

Fix typo in CMD_FPGA command enabling.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

 include/configs/iocon.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/configs/iocon.h b/include/configs/iocon.h
index f36c2a3..b32095c 100644
--- a/include/configs/iocon.h
+++ b/include/configs/iocon.h
@@ -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>

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 2/6] fpga: Guard the LOADMK functionality with CMD_FPGA_LOADMK
  2014-05-02 13:34 [U-Boot] [PATCH 0/6] FPGA changes Michal Simek
  2014-05-02 13:34 ` [U-Boot] [PATCH 1/6] configs: iocom: Fix typo on CMD_FPGA command Michal Simek
@ 2014-05-02 13:34 ` Michal Simek
  2014-05-02 13:34 ` [U-Boot] [PATCH 3/6] fpga: Define bitstream type based on command selection Michal Simek
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Michal Simek @ 2014-05-02 13:34 UTC (permalink / raw)
  To: u-boot

From: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>

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.

Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

 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(+)

diff --git a/README b/README
index 39e05d3..ca33bdc 100644
--- a/README
+++ b/README
@@ -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.
diff --git a/common/cmd_fpga.c b/common/cmd_fpga.c
index 010cd24..68b5427 100644
--- a/common/cmd_fpga.c
+++ b/common/cmd_fpga.c
@@ -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
 );
diff --git a/include/configs/GEN860T.h b/include/configs/GEN860T.h
index 2822a08..fd6c976 100644
--- a/include/configs/GEN860T.h
+++ b/include/configs/GEN860T.h
@@ -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

diff --git a/include/configs/MVBC_P.h b/include/configs/MVBC_P.h
index 036396c..1ab2b3d 100644
--- a/include/configs/MVBC_P.h
+++ b/include/configs/MVBC_P.h
@@ -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
diff --git a/include/configs/MVBLM7.h b/include/configs/MVBLM7.h
index 27c2fa0..1ee4d7c 100644
--- a/include/configs/MVBLM7.h
+++ b/include/configs/MVBLM7.h
@@ -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

diff --git a/include/configs/MVSMR.h b/include/configs/MVSMR.h
index ad15506..27f730d 100644
--- a/include/configs/MVSMR.h
+++ b/include/configs/MVSMR.h
@@ -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
diff --git a/include/configs/alpr.h b/include/configs/alpr.h
index 7849b22..2782e55 100644
--- a/include/configs/alpr.h
+++ b/include/configs/alpr.h
@@ -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
diff --git a/include/configs/astro_mcf5373l.h b/include/configs/astro_mcf5373l.h
index d875753..fa64a68 100644
--- a/include/configs/astro_mcf5373l.h
+++ b/include/configs/astro_mcf5373l.h
@@ -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
diff --git a/include/configs/balloon3.h b/include/configs/balloon3.h
index 5228ba6..2f5a660 100644
--- a/include/configs/balloon3.h
+++ b/include/configs/balloon3.h
@@ -54,6 +54,7 @@
 #undef	CONFIG_CMD_IMLS
 #define	CONFIG_CMD_USB
 #define	CONFIG_CMD_FPGA
+#define	CONFIG_CMD_FPGA_LOADMK
 #undef	CONFIG_LCD

 /*
diff --git a/include/configs/coreboot.h b/include/configs/coreboot.h
index d1d732f..a1a63a0 100644
--- a/include/configs/coreboot.h
+++ b/include/configs/coreboot.h
@@ -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
diff --git a/include/configs/grsim.h b/include/configs/grsim.h
index 2d977ce..e1fbe79 100644
--- a/include/configs/grsim.h
+++ b/include/configs/grsim.h
@@ -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			*/
diff --git a/include/configs/grsim_leon2.h b/include/configs/grsim_leon2.h
index 36ebaf7..fe7b65c 100644
--- a/include/configs/grsim_leon2.h
+++ b/include/configs/grsim_leon2.h
@@ -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			*/
diff --git a/include/configs/iocon.h b/include/configs/iocon.h
index b32095c..79c4736 100644
--- a/include/configs/iocon.h
+++ b/include/configs/iocon.h
@@ -63,6 +63,7 @@
  */
 #define CONFIG_CMD_CACHE
 #define CONFIG_CMD_FPGA
+#define CONFIG_CMD_FPGA_LOADMK
 #undef CONFIG_CMD_EEPROM

 /*
diff --git a/include/configs/mt_ventoux.h b/include/configs/mt_ventoux.h
index e7afd07..01e395a 100644
--- a/include/configs/mt_ventoux.h
+++ b/include/configs/mt_ventoux.h
@@ -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
diff --git a/include/configs/omap3_mvblx.h b/include/configs/omap3_mvblx.h
index 8d11010..a3dcb15 100644
--- a/include/configs/omap3_mvblx.h
+++ b/include/configs/omap3_mvblx.h
@@ -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
diff --git a/include/configs/x600.h b/include/configs/x600.h
index 7405419..eae85d6 100644
--- a/include/configs/x600.h
+++ b/include/configs/x600.h
@@ -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
diff --git a/include/configs/zynq-common.h b/include/configs/zynq-common.h
index d2149b3..acf1bfd 100644
--- a/include/configs/zynq-common.h
+++ b/include/configs/zynq-common.h
@@ -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>

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 3/6] fpga: Define bitstream type based on command selection
  2014-05-02 13:34 [U-Boot] [PATCH 0/6] FPGA changes Michal Simek
  2014-05-02 13:34 ` [U-Boot] [PATCH 1/6] configs: iocom: Fix typo on CMD_FPGA command Michal Simek
  2014-05-02 13:34 ` [U-Boot] [PATCH 2/6] fpga: Guard the LOADMK functionality with CMD_FPGA_LOADMK Michal Simek
@ 2014-05-02 13:34 ` Michal Simek
  2014-05-02 13:34 ` [U-Boot] [PATCH 4/6] fpga: Add support to load partial bitstreams Michal Simek
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Michal Simek @ 2014-05-02 13:34 UTC (permalink / raw)
  To: u-boot

Clean 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.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

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(-)

diff --git a/board/matrix_vision/common/mv_common.c b/board/matrix_vision/common/mv_common.c
index 70133b5..1be5aba 100644
--- a/board/matrix_vision/common/mv_common.c
+++ b/board/matrix_vision/common/mv_common.c
@@ -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);

diff --git a/common/cmd_fpga.c b/common/cmd_fpga.c
index 68b5427..4fafed9 100644
--- a/common/cmd_fpga.c
+++ b/common/cmd_fpga.c
@@ -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
diff --git a/drivers/fpga/fpga.c b/drivers/fpga/fpga.c
index b940d9b..e770950 100644
--- a/drivers/fpga/fpga.c
+++ b/drivers/fpga/fpga.c
@@ -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
diff --git a/drivers/fpga/spartan2.c b/drivers/fpga/spartan2.c
index 7054056..859fb3c 100644
--- a/drivers/fpga/spartan2.c
+++ b/drivers/fpga/spartan2.c
@@ -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;

diff --git a/drivers/fpga/spartan3.c b/drivers/fpga/spartan3.c
index 5c9412c..b0213e6 100644
--- a/drivers/fpga/spartan3.c
+++ b/drivers/fpga/spartan3.c
@@ -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;

diff --git a/drivers/fpga/virtex2.c b/drivers/fpga/virtex2.c
index e092147..0d2d9a4 100644
--- a/drivers/fpga/virtex2.c
+++ b/drivers/fpga/virtex2.c
@@ -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;

diff --git a/drivers/fpga/xilinx.c b/drivers/fpga/xilinx.c
index 8837f5c..ab9f517 100644
--- a/drivers/fpga/xilinx.c
+++ b/drivers/fpga/xilinx.c
@@ -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)
diff --git a/drivers/fpga/zynqpl.c b/drivers/fpga/zynqpl.c
index c066f21..572c078 100644
--- a/drivers/fpga/zynqpl.c
+++ b/drivers/fpga/zynqpl.c
@@ -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;
diff --git a/include/fpga.h b/include/fpga.h
index 15e603a..a55e49f 100644
--- a/include/fpga.h
+++ b/include/fpga.h
@@ -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,
diff --git a/include/xilinx.h b/include/xilinx.h
index f06b214..9600432 100644
--- a/include/xilinx.h
+++ b/include/xilinx.h
@@ -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>

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 4/6] fpga: Add support to load partial bitstreams
  2014-05-02 13:34 [U-Boot] [PATCH 0/6] FPGA changes Michal Simek
                   ` (2 preceding siblings ...)
  2014-05-02 13:34 ` [U-Boot] [PATCH 3/6] fpga: Define bitstream type based on command selection Michal Simek
@ 2014-05-02 13:34 ` Michal Simek
  2014-05-02 13:34 ` [U-Boot] [PATCH 5/6] fpga: zynqpl: Clean partial bitstream handling Michal Simek
  2014-05-02 13:34 ` [U-Boot] [PATCH 6/6] zynq: Enable fpga loadp and loadbp commands Michal Simek
  5 siblings, 0 replies; 9+ messages in thread
From: Michal Simek @ 2014-05-02 13:34 UTC (permalink / raw)
  To: u-boot

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            |  9 +++++++++
 common/cmd_fpga.c | 33 +++++++++++++++++++++++++++++++++
 include/fpga.h    |  1 +
 3 files changed, 43 insertions(+)

diff --git a/README b/README
index ca33bdc..4f0c4ae 100644
--- a/README
+++ b/README
@@ -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.
diff --git a/common/cmd_fpga.c b/common/cmd_fpga.c
index 4fafed9..802f3ec 100644
--- a/common/cmd_fpga.c
+++ b/common/cmd_fpga.c
@@ -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)
diff --git a/include/fpga.h b/include/fpga.h
index a55e49f..49efd37 100644
--- a/include/fpga.h
+++ b/include/fpga.h
@@ -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>

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 5/6] fpga: zynqpl: Clean partial bitstream handling
  2014-05-02 13:34 [U-Boot] [PATCH 0/6] FPGA changes Michal Simek
                   ` (3 preceding siblings ...)
  2014-05-02 13:34 ` [U-Boot] [PATCH 4/6] fpga: Add support to load partial bitstreams Michal Simek
@ 2014-05-02 13:34 ` Michal Simek
  2014-05-02 13:34 ` [U-Boot] [PATCH 6/6] zynq: Enable fpga loadp and loadbp commands Michal Simek
  5 siblings, 0 replies; 9+ messages in thread
From: Michal Simek @ 2014-05-02 13:34 UTC (permalink / raw)
  To: u-boot

Do not do partial bitstream detection based on bitstream
size and use bitstream_type argument which is passed
from the fpga core.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

 drivers/fpga/zynqpl.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/fpga/zynqpl.c b/drivers/fpga/zynqpl.c
index 572c078..915f077 100644
--- a/drivers/fpga/zynqpl.c
+++ b/drivers/fpga/zynqpl.c
@@ -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>

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 6/6] zynq: Enable fpga loadp and loadbp commands
  2014-05-02 13:34 [U-Boot] [PATCH 0/6] FPGA changes Michal Simek
                   ` (4 preceding siblings ...)
  2014-05-02 13:34 ` [U-Boot] [PATCH 5/6] fpga: zynqpl: Clean partial bitstream handling Michal Simek
@ 2014-05-02 13:34 ` Michal Simek
  5 siblings, 0 replies; 9+ messages in thread
From: Michal Simek @ 2014-05-02 13:34 UTC (permalink / raw)
  To: u-boot

Use new fpga commands for loading partial bitstreams.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

 include/configs/zynq-common.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/include/configs/zynq-common.h b/include/configs/zynq-common.h
index acf1bfd..af420d1 100644
--- a/include/configs/zynq-common.h
+++ b/include/configs/zynq-common.h
@@ -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>

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 1/6] configs: iocom: Fix typo on CMD_FPGA command
  2014-05-02 13:34 ` [U-Boot] [PATCH 1/6] configs: iocom: Fix typo on CMD_FPGA command Michal Simek
@ 2014-06-16  8:19   ` Dirk Eibach
  2014-06-16 22:35     ` Michal Simek
  0 siblings, 1 reply; 9+ messages in thread
From: Dirk Eibach @ 2014-06-16  8:19 UTC (permalink / raw)
  To: u-boot

Argh. Just noticed this.

> Fix typo in CMD_FPGA command enabling.
>
> Signed-off-by: Michal Simek <michal.simek@xilinx.com>

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 1/6] configs: iocom: Fix typo on CMD_FPGA command
  2014-06-16  8:19   ` Dirk Eibach
@ 2014-06-16 22:35     ` Michal Simek
  0 siblings, 0 replies; 9+ messages in thread
From: Michal Simek @ 2014-06-16 22:35 UTC (permalink / raw)
  To: u-boot

On 06/16/2014 10:19 AM, Dirk Eibach wrote:
> Argh. Just noticed this.
> 
>> Fix typo in CMD_FPGA command enabling.
>>
>> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> 
> CONFIG_CMD_FPGAD is *NOT* a typo, it is about enbaling our own FPGA
> command common/cmd_fpgad.c
> 
> So NAK for this one.

Ah sorry for that. I missed that there is cmd_fpgad.c.
Will send fix for that.

Thanks,
Michal


-- 
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>

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-06-16 22:35 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-05-02 13:34 [U-Boot] [PATCH 0/6] FPGA changes Michal Simek
2014-05-02 13:34 ` [U-Boot] [PATCH 1/6] configs: iocom: Fix typo on CMD_FPGA command Michal Simek
2014-06-16  8:19   ` Dirk Eibach
2014-06-16 22:35     ` Michal Simek
2014-05-02 13:34 ` [U-Boot] [PATCH 2/6] fpga: Guard the LOADMK functionality with CMD_FPGA_LOADMK Michal Simek
2014-05-02 13:34 ` [U-Boot] [PATCH 3/6] fpga: Define bitstream type based on command selection Michal Simek
2014-05-02 13:34 ` [U-Boot] [PATCH 4/6] fpga: Add support to load partial bitstreams Michal Simek
2014-05-02 13:34 ` [U-Boot] [PATCH 5/6] fpga: zynqpl: Clean partial bitstream handling Michal Simek
2014-05-02 13:34 ` [U-Boot] [PATCH 6/6] zynq: Enable fpga loadp and loadbp commands Michal Simek

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.