diff options
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 |
commit | 32e647acf40bc11858a524e5ee73183ce0d9449b (patch) | |
tree | 192981198f4b26518504d6772a29c004b0f76475 /src | |
parent | fe60480b7a8f5c94147e3185bae235241c33c9ce (diff) | |
download | openocd_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')
-rw-r--r-- | src/jtag/zy1000/zy1000.c | 40 |
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; + } } + } } |