jtag: add wait_srst_deassert command
Useful to do something *real quick* after a SRST deassert. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
This commit is contained in:
parent
6ddcee7d20
commit
c3c6a6e1d4
|
@ -40,6 +40,8 @@
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <helper/time_support.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file
|
* @file
|
||||||
* Holds support for accessing JTAG-specific mechanisms from TCl scripts.
|
* Holds support for accessing JTAG-specific mechanisms from TCl scripts.
|
||||||
|
@ -1266,6 +1268,46 @@ COMMAND_HANDLER(handle_jtag_flush_queue_sleep)
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
COMMAND_HANDLER(handle_wait_srst_deassert)
|
||||||
|
{
|
||||||
|
if (CMD_ARGC != 1)
|
||||||
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
|
|
||||||
|
int timeout_ms;
|
||||||
|
COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], timeout_ms);
|
||||||
|
if ((timeout_ms <= 0) || (timeout_ms > 100000))
|
||||||
|
{
|
||||||
|
LOG_ERROR("Timeout must be an integer between 0 and 100000");
|
||||||
|
return ERROR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_USER("Waiting for srst assert + deassert for at most %dms", timeout_ms);
|
||||||
|
int asserted_yet;
|
||||||
|
long long then = timeval_ms();
|
||||||
|
while (jtag_srst_asserted(&asserted_yet) == ERROR_OK)
|
||||||
|
{
|
||||||
|
if ((timeval_ms() - then) > timeout_ms)
|
||||||
|
{
|
||||||
|
LOG_ERROR("Timed out");
|
||||||
|
return ERROR_FAIL;
|
||||||
|
}
|
||||||
|
if (asserted_yet)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
while (jtag_srst_asserted(&asserted_yet) == ERROR_OK)
|
||||||
|
{
|
||||||
|
if ((timeval_ms() - then) > timeout_ms)
|
||||||
|
{
|
||||||
|
LOG_ERROR("Timed out");
|
||||||
|
return ERROR_FAIL;
|
||||||
|
}
|
||||||
|
if (!asserted_yet)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static const struct command_registration jtag_command_handlers[] = {
|
static const struct command_registration jtag_command_handlers[] = {
|
||||||
|
@ -1357,6 +1399,15 @@ static const struct command_registration jtag_command_handlers[] = {
|
||||||
/* Specifically for working around DRIVER bugs... */
|
/* Specifically for working around DRIVER bugs... */
|
||||||
.usage = "['short'|'long']",
|
.usage = "['short'|'long']",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "wait_srst_deassert",
|
||||||
|
.handler = handle_wait_srst_deassert,
|
||||||
|
.mode = COMMAND_ANY,
|
||||||
|
.help = "Wait for an SRST deassert. "
|
||||||
|
"Useful for cases where you need something to happen within ms "
|
||||||
|
"of an srst deassert. Timeout in ms ",
|
||||||
|
.usage = "ms",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = "jtag",
|
.name = "jtag",
|
||||||
.mode = COMMAND_ANY,
|
.mode = COMMAND_ANY,
|
||||||
|
|
Loading…
Reference in New Issue