]> git.sur5r.net Git - openocd/commitdiff
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
 {