esd/common: extend cpld command with address parameter
authorMatthias Fuchs <matthias.fuchs@esd-electronics.com>
Wed, 29 Apr 2009 07:50:56 +0000 (09:50 +0200)
committerWolfgang Denk <wd@denx.de>
Fri, 12 Jun 2009 18:39:46 +0000 (20:39 +0200)
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@esd.eu>
Signed-off-by: Stefan Roese <sr@denx.de>
board/esd/common/xilinx_jtag/micro.c
board/esd/common/xilinx_jtag/ports.c

index 9b2cf90d4311dca139386452a508e2f5cb249e40..37ac0cc4eb791b34f792a53a75aac9712141a6b0 100644 (file)
 #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>"
        );
index ac0d7ac2bbc863781bac33c74bfa4ef434d5c77c..f039d04c5dc00217fbf35e84b2fc2d518725068a 100644 (file)
@@ -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;
        }
 }