]> git.sur5r.net Git - openocd/commitdiff
debug feature: jtagtcpip, improve performance
authorØyvind Harboe <oyvind.harboe@zylin.com>
Fri, 16 Jul 2010 08:57:28 +0000 (10:57 +0200)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Fri, 16 Jul 2010 10:18:59 +0000 (12:18 +0200)
waiting for ZY1000 fifo to idle is now queued as
an asynchronous command. This radically improves
performance when waitIdle() is interspersed with
writes as no readback is required over TCP/IP.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
src/jtag/zy1000/jtag_minidriver.h
src/jtag/zy1000/zy1000.c

index d556699ab09d754826ee38bbf0ac81eb7f3664ac..f3fe5a6a247bc141443900d062a3cb34cd036d50 100644 (file)
@@ -48,6 +48,7 @@ extern uint32_t zy1000_tcpin(uint32_t address);
 
 
 
+#if BUILD_ECOSBOARD
 // FIFO empty?
 static __inline__ void waitIdle(void)
 {
@@ -57,6 +58,9 @@ static __inline__ void waitIdle(void)
                ZY1000_PEEK(ZY1000_JTAG_BASE + 0x10, empty);
        } while ((empty & 0x100) == 0);
 }
+#else
+extern void waitIdle(void);
+#endif
 
 static __inline__ void waitQueue(void)
 {
index a1104ef4f31832bf7ae22b41d20080f57463eaf2..97c94f7c2a2a2d32e0a275683a0157f9b8820a15 100644 (file)
@@ -1107,6 +1107,7 @@ enum ZY1000_CMD
        ZY1000_CMD_POKE = 0x0,
        ZY1000_CMD_PEEK = 0x8,
        ZY1000_CMD_SLEEP = 0x1,
+       ZY1000_CMD_WAITIDLE = 2
 };
 
 
@@ -1167,6 +1168,22 @@ void zy1000_tcpout(uint32_t address, uint32_t data)
        }
 }
 
+/* By sending the wait to the server, we avoid a readback
+ * of status. Radically improves performance for this operation
+ * with long ping times.
+ */
+void waitIdle(void)
+{
+       tcpip_open();
+       if (!writeLong((ZY1000_CMD_WAITIDLE << 24)))
+       {
+               fprintf(stderr, "Could not write to zy1000 server\n");
+               exit(-1);
+       }
+}
+
+
+
 uint32_t zy1000_tcpin(uint32_t address)
 {
        tcpip_open();
@@ -1241,6 +1258,11 @@ static void tcpipserver(void)
                                jtag_sleep(data);
                                break;
                        }
+                       case ZY1000_CMD_WAITIDLE:
+                       {
+                               waitIdle();
+                               break;
+                       }
                        default:
                                return;
                }