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