From 32e647acf40bc11858a524e5ee73183ce0d9449b Mon Sep 17 00:00:00 2001 From: Øyvind Harboe Date: Tue, 4 May 2010 07:36:05 +0200 Subject: zy1000: wait for srst to deassert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/jtag/zy1000/zy1000.c | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) (limited to 'src/jtag/zy1000/zy1000.c') 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 #include #include +#include #include @@ -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; + } } + } } -- cgit v1.2.3