summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/esd/common/xilinx_jtag/micro.c24
-rw-r--r--board/esd/common/xilinx_jtag/ports.c10
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;
}
}