summaryrefslogtreecommitdiff
path: root/src/jtag/zy1000
diff options
context:
space:
mode:
authorØyvind Harboe <oyvind.harboe@zylin.com>2010-05-04 07:36:05 +0200
committerØyvind Harboe <oyvind.harboe@zylin.com>2010-05-04 09:11:15 +0200
commit32e647acf40bc11858a524e5ee73183ce0d9449b (patch)
tree192981198f4b26518504d6772a29c004b0f76475 /src/jtag/zy1000
parentfe60480b7a8f5c94147e3185bae235241c33c9ce (diff)
downloadopenocd_libswd-32e647acf40bc11858a524e5ee73183ce0d9449b.tar.gz
openocd_libswd-32e647acf40bc11858a524e5ee73183ce0d9449b.tar.bz2
openocd_libswd-32e647acf40bc11858a524e5ee73183ce0d9449b.tar.xz
openocd_libswd-32e647acf40bc11858a524e5ee73183ce0d9449b.zip
zy1000: wait for srst to deassert
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>
Diffstat (limited to 'src/jtag/zy1000')
-rw-r--r--src/jtag/zy1000/zy1000.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c
index 80731aab..092e3cd2 100644
--- a/src/jtag/zy1000/zy1000.c
+++ b/src/jtag/zy1000/zy1000.c
@@ -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;
+ }
}
+
}
}