]> git.sur5r.net Git - openocd/commitdiff
zy1000: wait for srst to deassert
authorØyvind Harboe <oyvind.harboe@zylin.com>
Tue, 4 May 2010 05:36:05 +0000 (07:36 +0200)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Tue, 4 May 2010 07:11:15 +0000 (09:11 +0200)
make wait for srst deassert more long latency friendly
(JTAG over TCP/IP), print actual time if it was more than
1ms.

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

index 80731aabe207c2b80f111927e016d1da2a69e6e3..092e3cd25ce013132b0c1a50f0b469556b6c9b2e 100644 (file)
@@ -49,6 +49,7 @@
 #include <jtag/minidriver.h>
 #include <jtag/interface.h>
 #include <time.h>
+#include <helper/time_support.h>
 
 #include <netinet/tcp.h>
 
@@ -176,28 +177,41 @@ void zy1000_reset(int trst, int srst)
        }
 
        /* wait for srst to float back up */
-       if (!srst)
+       if ((!srst && ((jtag_get_reset_config() & RESET_TRST_PULLS_SRST) == 0))||
+               (!srst && !trst && (jtag_get_reset_config() & RESET_TRST_PULLS_SRST)))
        {
-               int i;
-               for (i = 0; i < 1000; i++)
-               {
+               bool first = true;
+               long long start;
+               long total = 0;
+               for (;;)
+               {       
                        // We don't want to sense our own reset, so we clear here.
                        // There is of course a timing hole where we could loose
                        // a "real" reset.
                        if (!readSRST())
+                       {
+                               if (total > 1)
+                               {
+                                 LOG_USER("SRST took %dms to deassert", (int)total);
+                               }
                                break;
+                       }
 
-                       /* wait 1ms */
-                       alive_sleep(1);
-               }
+                       if (first)
+                       {
+                           first = false;
+                           start = timeval_ms();
+                       }
 
-               if (i == 1000)
-               {
-                       LOG_USER("SRST didn't deassert after %dms", i);
-               } else if (i > 1)
-               {
-                       LOG_USER("SRST took %dms to deassert", i);
+                       total = timeval_ms() - start;
+
+                       if (total > 5000)
+                       {
+                               LOG_ERROR("SRST took too long to deassert: %dms", (int)total);
+                           break;
+                       }
                }
+
        }
 }