Doc update:  say "jtag newtap ... -disable" records the
state after exiting the RESET state, matching the only
implementation we're working with so far (TI ICEpick-C).

Matching code updates.  Now we can be sure that the 
"enabled" flag value is correct after JTAG resets.
---
 doc/openocd.texi |    7 ++++---
 src/jtag/core.c  |    2 ++ 
 src/jtag/jtag.h  |    6 ++++--
 src/jtag/tcl.c   |   10 +++++----- 
 4 files changed, 15 insertions(+), 10 deletions(-)

Doc update:  say "jtag newtap ... -disable" records the
state after exiting the RESET state, matching the only
implementation we're working with so far (TI ICEpick-C).

Matching code updates.  Now we can be sure that the
"enabled" flag value is correct after JTAG resets.
---
 doc/openocd.texi |    7 ++++---
 src/jtag/core.c  |    2 ++
 src/jtag/jtag.h  |    6 ++++--
 src/jtag/tcl.c   |   10 +++++-----
 4 files changed, 15 insertions(+), 10 deletions(-)

--- a/doc/openocd.texi
+++ b/doc/openocd.texi
@@ -2309,8 +2309,9 @@ A TAP may also provide optional @var{con
 
 @itemize @bullet
 @item @code{-disable} (or @code{-enable})
-...@*use the @code{-disable} paramater to flag a TAP which is not
-linked in to the scan chain when it is declared.
+...@*use the @code{-disable} parameter to flag a TAP which is not
+linked in to the scan chain after a reset using either TRST
+or the JTAG state machine's @sc{reset} state.
 You may use @code{-enable} to highlight the default state
 (the TAP is linked in).
 @xref{Enabling and Disabling TAPs}.
@@ -5074,7 +5075,7 @@ and @command{irscan} commands are:
 @end itemize
 
 Note that only six of those states are fully ``stable'' in the
-face of TMS fixed (usually low)
+face of TMS fixed (low except for @sc{reset})
 and a free-running JTAG clock.  For all the
 others, the next TCK transition changes to a new state.
 
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -792,6 +792,8 @@ static int jtag_reset_callback(enum jtag
 
 	if (event == JTAG_TRST_ASSERTED)
 	{
+		tap->enabled = !tap->disabled_after_reset;
+
 		buf_set_ones(tap->cur_instr, tap->ir_length);
 		tap->bypass = 1;
 	}
--- a/src/jtag/jtag.h
+++ b/src/jtag/jtag.h
@@ -151,8 +151,10 @@ struct jtag_tap_s
 	const char* tapname;
 	const char* dotted_name;
 	int abs_chain_position;
-	/// Is this TAP enabled?
-	int enabled;
+	/// Is this TAP disabled after JTAG reset?
+	bool disabled_after_reset;
+	/// Is this TAP currently enabled?
+	bool enabled;
 	int ir_length; /**< size of instruction register */
 	u32 ir_capture_value;
 	u8* expected; /**< Capture-IR expected value */
--- a/src/jtag/tcl.c
+++ b/src/jtag/tcl.c
@@ -359,9 +359,6 @@ static int jim_newtap_cmd( Jim_GetOptInf
 	LOG_DEBUG("Creating New Tap, Chip: %s, Tap: %s, Dotted: %s, %d params",
 			  pTap->chip, pTap->tapname, pTap->dotted_name, goi->argc);
 
-	/* default is enabled */
-	pTap->enabled = 1;
-
 	/* deal with options */
 #define NTREQ_IRLEN      1
 #define NTREQ_IRCAPTURE  2
@@ -379,10 +376,10 @@ static int jim_newtap_cmd( Jim_GetOptInf
 		LOG_DEBUG("Processing option: %s", n->name );
 		switch( n->value ){
 		case NTAP_OPT_ENABLED:
-			pTap->enabled = 1;
+			pTap->disabled_after_reset = false;
 			break;
 		case NTAP_OPT_DISABLED:
-			pTap->enabled = 0;
+			pTap->disabled_after_reset = true;
 			break;
 		case NTAP_OPT_EXPECTED_ID:
 		{
@@ -446,6 +443,9 @@ static int jim_newtap_cmd( Jim_GetOptInf
 		} /* switch(n->value) */
 	} /* while( goi->argc ) */
 
+	/* default is enabled-after-reset */
+	pTap->enabled = !pTap->disabled_after_reset;
+
 	/* Did all the required option bits get cleared? */
 	if (0 == reqbits)
 	{
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to