From d243e641d3169674082f3cdae2d9a7242b96f2c2 Mon Sep 17 00:00:00 2001
From: David Brownell <dbrownell@users.sourceforge.net>
Date: Mon, 19 Oct 2009 22:50:51 -0700
Subject: [PATCH] jtag_add_statemove() always uses TLR to get to RESET

As decided a while back, this isn't a transition we want to chance.
Whenever someone wants to got to RESET, force it.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
---
 src/jtag/core.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/jtag/core.c b/src/jtag/core.c
index 415d1e824..7c85839b0 100644
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -567,12 +567,14 @@ int jtag_add_statemove(tap_state_t goal_state)
 		tap_state_name(goal_state));
 
 
-	if (goal_state == cur_state)
-		;	/* nothing to do */
-	else if (goal_state == TAP_RESET)
-	{
+	/* If goal is RESET, be paranoid and force that that transition
+	 * (e.g. five TCK cycles, TMS high).  Else trust "cur_state".
+	 */
+	if (goal_state == TAP_RESET)
 		jtag_add_tlr();
-	}
+	else if (goal_state == cur_state)
+		/* nothing to do */ ;
+
 	else if (tap_is_state_stable(cur_state) && tap_is_state_stable(goal_state))
 	{
 		unsigned tms_bits  = tap_get_tms_path(cur_state, goal_state);
-- 
GitLab