remote bitbang, flush resets.

Waiting until the next execute_queue() might mean the target doesn't see
the reset signal asserted for a significant amount of time.

Change-Id: Id8514ddb30e88040131a6dba2b90b65463f10b76
Signed-off-by: Tim Newsome <tim@sifive.com>
This commit is contained in:
Tim Newsome 2021-05-17 12:19:57 -07:00
parent 621e6e43d2
commit 4e6fe83f83
1 changed files with 7 additions and 1 deletions

View File

@ -203,7 +203,9 @@ static int remote_bitbang_write(int tck, int tms, int tdi)
static int remote_bitbang_reset(int trst, int srst)
{
char c = 'r' + ((trst ? 0x2 : 0x0) | (srst ? 0x1 : 0x0));
return remote_bitbang_queue(c, false);
/* Always flush the send buffer on reset, because the reset call need not be
* followed by jtag_execute_queue(). */
return remote_bitbang_queue(c, true);
}
static int remote_bitbang_blink(int on)
@ -354,6 +356,10 @@ static const struct command_registration remote_bitbang_command_handlers[] = {
static int remote_bitbang_execute_queue(void)
{
/* safety: the send buffer must be empty, no leftover characters from
* previous transactions */
assert(remote_bitbang_send_buf_used == 0);
/* process the JTAG command queue */
int ret = bitbang_execute_queue();
if (ret != ERROR_OK)