Patch by Michael Schwingen that
authordrath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Wed, 5 Sep 2007 06:22:37 +0000 (06:22 +0000)
committerdrath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Wed, 5 Sep 2007 06:22:37 +0000 (06:22 +0000)
 - adds support for the Altium universal JTAG cable
 - adds support for "wiggler2" cable (basically a wiggler with added LED, documentation coming soon)
 - adds LED support. The LED is turned on during data transfer - works fine on Altium and wiggler2.
 - adds PORT_EXIT pattern that is written to port when exiting, in order to turn off power on cables that get their power from parallel port data lines
 - move port writes (with the system-specific ifdefs) to one central function

- increased image cache size to 2KB (might require more adaptive cache handling, e.g. LRU)

git-svn-id: svn://svn.berlios.de/openocd/trunk@204 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/jtag/at91rm9200.c
src/jtag/bitbang.c
src/jtag/bitbang.h
src/jtag/ep93xx.c
src/jtag/parport.c
src/openocd.c
src/target/embeddedice.c
src/target/image.h

index d532e3e7434ca666c9089966ea9703cdb30fac54..b1ddb2df0fc85b66efa6ef9a83634c22f37de4f1 100644 (file)
@@ -146,7 +146,8 @@ bitbang_interface_t at91rm9200_bitbang =
 {
        .read = at91rm9200_read,
        .write = at91rm9200_write,
-       .reset = at91rm9200_reset
+       .reset = at91rm9200_reset,
+       .blink = 0
 };
 
 int at91rm9200_read(void)
index 198a741fd78ce66b98f0d2965f62d976483227ca..19afdbf0b8454397547c71949fde276c144b109e 100644 (file)
@@ -209,6 +209,9 @@ int bitbang_execute_queue(void)
         */ 
        retval = ERROR_OK;
                
+       if(bitbang_interface->blink)
+               bitbang_interface->blink(1);
+
        while (cmd)
        {
                switch (cmd->type)
@@ -278,6 +281,8 @@ int bitbang_execute_queue(void)
                }
                cmd = cmd->next;
        }
+       if(bitbang_interface->blink)
+               bitbang_interface->blink(0);
        
        return retval;
 }
index 7049f4353d596cf5be419df26da2cb8cebe3f81a..da006a166dee3af9cc99398b8472b78c8205cda1 100644 (file)
@@ -27,6 +27,7 @@ typedef struct bitbang_interface_s
        int (*read)(void);
        void (*write)(int tck, int tms, int tdi);
        void (*reset)(int trst, int srst);
+       void (*blink)(int on);
 } bitbang_interface_t;
 
 extern bitbang_interface_t *bitbang_interface;
index 88ed50c1f2fe41286931083f536e3112af3f3050..7311c19a135a812327ec7bb7457d08d4dc1be487 100644 (file)
@@ -78,7 +78,8 @@ bitbang_interface_t ep93xx_bitbang =
 {
        .read = ep93xx_read,
        .write = ep93xx_write,
-       .reset = ep93xx_reset
+       .reset = ep93xx_reset,
+       .blink = 0;
 };
 
 int ep93xx_read(void)
index b9087d9fec525d5306313a8ced6d3a3339a6da46..b666eb123aa80674bc033dff1577194c32422aa9 100644 (file)
@@ -90,20 +90,33 @@ typedef struct cable_s
        u8 OUTPUT_INVERT;       /* data port bits that should be inverted */
        u8 INPUT_INVERT;        /* status port that should be inverted */
        u8 PORT_INIT;   /* initialize data port with this value */
+       u8 PORT_EXIT;   /* de-initialize data port with this value */
+       u8 LED_MASK;    /* data port bit for LED */
 } cable_t;
 
 cable_t cables[] = 
 {      
-       /* name                                 tdo   trst  tms   tck   tdi   srst  o_inv i_inv init */
-       { "wiggler",                    0x80, 0x10, 0x02, 0x04, 0x08, 0x01, 0x01, 0x80, 0x80 },
-       { "wiggler_ntrst_inverted",     0x80, 0x10, 0x02, 0x04, 0x08, 0x01, 0x11, 0x80, 0x80 },
-       { "old_amt_wiggler",    0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x11, 0x80, 0x80 },
-       { "chameleon",                  0x80, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x80, 0x00 },
-       { "dlc5",                               0x10, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x10 },
-       { "triton",                             0x80, 0x08, 0x04, 0x01, 0x02, 0x00, 0x00, 0x80, 0x00 },
-       { "lattice",                    0x40, 0x10, 0x04, 0x02, 0x01, 0x08, 0x00, 0x00, 0x18 },
-       { "flashlink",                  0x20, 0x10, 0x02, 0x01, 0x04, 0x20, 0x30, 0x20, 0x00 },
-       { NULL,                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+       /* name                                 tdo   trst  tms   tck   tdi   srst  o_inv i_inv init  exit  led */
+       { "wiggler",                    0x80, 0x10, 0x02, 0x04, 0x08, 0x01, 0x01, 0x80, 0x80, 0x80, 0x00 },
+       { "wiggler2",                   0x80, 0x10, 0x02, 0x04, 0x08, 0x01, 0x01, 0x80, 0x80, 0x00, 0x20 },
+       { "wiggler_ntrst_inverted",
+                                                       0x80, 0x10, 0x02, 0x04, 0x08, 0x01, 0x11, 0x80, 0x80, 0x80, 0x00 },
+       { "old_amt_wiggler",    0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x11, 0x80, 0x80, 0x80, 0x00 },
+       { "chameleon",                  0x80, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00 },
+       { "dlc5",                               0x10, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00 },
+       { "triton",                             0x80, 0x08, 0x04, 0x01, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00 },
+       { "lattice",                    0x40, 0x10, 0x04, 0x02, 0x01, 0x08, 0x00, 0x00, 0x18, 0x18, 0x00 },
+       { "flashlink",                  0x20, 0x10, 0x02, 0x01, 0x04, 0x20, 0x30, 0x20, 0x00, 0x00, 0x00 },
+/* Altium Universal JTAG cable. Set the cable to Xilinx Mode and wire to target as follows:
+       HARD TCK - Target TCK
+       HARD TMS - Target TMS
+       HARD TDI - Target TDI
+       HARD TDO - Target TDO
+       SOFT TCK - Target TRST
+       SOFT TDI - Target SRST
+*/
+       { "altium",                     0x10, 0x20, 0x04, 0x02, 0x01, 0x80, 0x00, 0x00, 0x10, 0x00, 0x08 },
+       { NULL,                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
 };
 
 /* configuration */
@@ -127,6 +140,7 @@ static unsigned long statusport;
 int parport_read(void);
 void parport_write(int tck, int tms, int tdi);
 void parport_reset(int trst, int srst);
+void parport_led(int on);
 
 int parport_speed(int speed);
 int parport_register_commands(struct command_context_s *cmd_ctx);
@@ -155,7 +169,8 @@ bitbang_interface_t parport_bitbang =
 {
        .read = parport_read,
        .write = parport_write,
-       .reset = parport_reset
+       .reset = parport_reset,
+       .blink = parport_led
 };
 
 int parport_read(void)
@@ -174,9 +189,24 @@ int parport_read(void)
                return 0;
 }
 
-void parport_write(int tck, int tms, int tdi)
+static inline void parport_write_data(void)
 {
        u8 output;
+       output = dataport_value ^ cable->OUTPUT_INVERT;
+
+#if PARPORT_USE_PPDEV == 1
+       ioctl(device_handle, PPWDATA, &output);
+#else
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+       outb(dataport, output);
+#else
+       outb(output, dataport);
+#endif
+#endif
+}
+
+void parport_write(int tck, int tms, int tdi)
+{
        int i = jtag_speed + 1;
        
        if (tck)
@@ -194,24 +224,13 @@ void parport_write(int tck, int tms, int tdi)
        else
                dataport_value &= ~cable->TDI_MASK;
                
-       output = dataport_value ^ cable->OUTPUT_INVERT;
-
        while (i-- > 0)
-#if PARPORT_USE_PPDEV == 1
-               ioctl(device_handle, PPWDATA, &output);
-#else
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-       outb(dataport, output);
-#else
-       outb(output, dataport);
-#endif
-#endif
+               parport_write_data();
 }
 
 /* (1) assert or (0) deassert reset lines */
 void parport_reset(int trst, int srst)
 {
-       u8 output;
        DEBUG("trst: %i, srst: %i", trst, srst);
 
        if (trst == 0)
@@ -224,18 +243,19 @@ void parport_reset(int trst, int srst)
        else if (srst == 1)
                dataport_value &= ~cable->SRST_MASK;
        
-       output = dataport_value ^ cable->OUTPUT_INVERT;
+       parport_write_data();
+}
        
-#if PARPORT_USE_PPDEV == 1
-       ioctl(device_handle, PPWDATA, &output);
-#else
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-       outb(dataport, output);
-#else
-       outb(output, dataport);
-#endif
-#endif
+/* turn LED on parport adapter on (1) or off (0) */
+void parport_led(int on)
+{
+       u8 output;
+       if (on)
+               dataport_value |= cable->LED_MASK;
+       else
+               dataport_value &= ~cable->LED_MASK;
 
+       parport_write_data();
 }
 
 int parport_speed(int speed)
@@ -400,6 +420,7 @@ int parport_init(void)
        
        parport_reset(0, 0);
        parport_write(0, 0, 0);
+       parport_led(1);
 
        bitbang_interface = &parport_bitbang;   
 
@@ -408,7 +429,11 @@ int parport_init(void)
 
 int parport_quit(void)
 {
+       u8 output;
+       parport_led(0);
 
+       dataport_value = cable->PORT_EXIT;
+       parport_write_data();
        return ERROR_OK;
 }
 
index 26a218b9d1ac6384d7d97d1e66660120da232e77..81aae3909de5d0cd70053d5942f880192ff24fd4 100644 (file)
@@ -18,7 +18,7 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
-#define OPENOCD_VERSION "Open On-Chip Debugger (2007-08-25 12:00 CEST)"
+#define OPENOCD_VERSION "Open On-Chip Debugger (2007-09-05 09:00 CEST)"
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
index 4d76bcaf1f7760e75b87605e8f3ba6adf183250b..11f2e6c267eb89f47c3ae46ea4ec52e4f7c8ff54 100644 (file)
@@ -506,7 +506,7 @@ int embeddedice_handshake(arm_jtag_t *jtag_info, int hsbit, u32 timeout)
 
        if (hsbit == EICE_COMM_CTRL_WBIT)
                hsact = 1;
-       else if (hsbit != EICE_COMM_CTRL_RBIT)
+       else if (hsbit == EICE_COMM_CTRL_RBIT)
                hsact = 0;
        else
                return ERROR_INVALID_ARGUMENTS;
index ec52acb4ff394bdb9df636bea8e4eb88a63e2065..e8f585bbc96ba8bd54be389563689a14bafba59e 100644 (file)
@@ -34,7 +34,7 @@
 #define IMAGE_MAX_ERROR_STRING         (256)
 #define IMAGE_MAX_SECTIONS                     (128)
 
-#define IMAGE_MEMORY_CACHE_SIZE                (1024)
+#define IMAGE_MEMORY_CACHE_SIZE                (2048)
 
 typedef enum image_type
 {

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)