[U-Boot] [PATCH 1/6] esd/common: extend cpld command with address parameter

matthias.fuchs at esd.eu matthias.fuchs at esd.eu
Wed Apr 29 09:50:56 CEST 2009


From: Matthias Fuchs <matthias.fuchs at esd-electronics.com>

This patch adds support for an address parameter to esd's
cpld command. This is in preparation to remove compiled-in
binary cpld (xsvf) bitstreams.

Signed-off-by: Matthias Fuchs <matthias.fuchs at esd.eu>
---
 board/esd/common/xilinx_jtag/micro.c |   24 ++++++++++++++++--------
 board/esd/common/xilinx_jtag/ports.c |   10 ++++------
 2 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/board/esd/common/xilinx_jtag/micro.c b/board/esd/common/xilinx_jtag/micro.c
index 9b2cf90..37ac0cc 100644
--- a/board/esd/common/xilinx_jtag/micro.c
+++ b/board/esd/common/xilinx_jtag/micro.c
@@ -66,10 +66,7 @@
 #include "lenval.h"
 #include "ports.h"
 
-
-extern const unsigned char fpgadata[];
-extern int filesize;
-
+const unsigned char *xsvfdata;
 
 /*============================================================================
  * XSVF #define
@@ -1838,12 +1835,23 @@ int do_cpld(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	unsigned long duration;
 	unsigned long long startClock, endClock;
 
+	if (argc == 2)
+		xsvfdata = (unsigned char *)simple_strtoul(argv[1], NULL, 16);
+	else {
+#ifdef CONFIG_SYS_XSVF_DEFAULT_ADDR
+		xsvfdata = (unsigned char *)CONFIG_SYS_XSVF_DEFAULT_ADDR;
+#else
+		printf("Usage:\ncpld %s\n", cmdtp->help);
+		return -1;
+#endif
+	}
+
 	iErrorCode          = XSVF_ERRORCODE( XSVF_ERROR_NONE );
 	pzXsvfFileName      = 0;
 	xsvf_iDebugLevel    = 0;
 
 	printf("XSVF Player v%s, Xilinx, Inc.\n", XSVF_VERSION);
-	printf("XSVF Filesize = %d bytes\n", filesize);
+	printf("Reading XSVF data @ %p\n", xsvfdata);
 
 	/* Initialize the I/O.  SetPort initializes I/O on first call */
 	setPort( TMS, 1 );
@@ -1858,7 +1866,7 @@ int do_cpld(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	return( iErrorCode );
 }
 U_BOOT_CMD(
-	cpld,	1,	1,	do_cpld,
-	"Program onboard CPLD",
-	NULL
+	cpld,	2,	1,	do_cpld,
+	"program onboard CPLD",
+	"<xsvf-addr>"
 	);
diff --git a/board/esd/common/xilinx_jtag/ports.c b/board/esd/common/xilinx_jtag/ports.c
index ac0d7ac..f039d04 100644
--- a/board/esd/common/xilinx_jtag/ports.c
+++ b/board/esd/common/xilinx_jtag/ports.c
@@ -42,9 +42,7 @@ static int oldstate = 0;
 static int newstate = 0;
 static int readptr = 0;
 
-extern long filesize;
-extern const unsigned char fpgadata[];
-
+extern const unsigned char *xsvfdata;
 
 /* if in debugging mode, then just set the variables */
 void setPort(short p,short val)
@@ -86,10 +84,10 @@ void pulseClock(void)
 void readByte(unsigned char *data)
 {
 	/* pretend reading using a file */
-	*data = fpgadata[readptr++];
-	newstate = (100 * filepos++) / filesize;
+	*data = xsvfdata[readptr++];
+	newstate = filepos++ >> 10;
 	if (newstate != oldstate) {
-		printf("%4d\r\r\r\r", newstate);
+		printf("%4d kB\r\r\r\r", newstate);
 		oldstate = newstate;
 	}
 }
-- 
1.5.3



More information about the U-Boot mailing list