summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-08-25 19:58:06 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-08-25 19:58:06 +0000
commit86b49612a674ec39cd2c5b1cbdfd87eef62d15e8 (patch)
tree5861c442df90ceb9790b977de11c6d0af3f7f0e1
parent6f359fba686f30fef7ef51b2996600738b66b563 (diff)
downloadopenocd+libswd-86b49612a674ec39cd2c5b1cbdfd87eef62d15e8.tar.gz
openocd+libswd-86b49612a674ec39cd2c5b1cbdfd87eef62d15e8.tar.bz2
openocd+libswd-86b49612a674ec39cd2c5b1cbdfd87eef62d15e8.tar.xz
openocd+libswd-86b49612a674ec39cd2c5b1cbdfd87eef62d15e8.zip
David Brownell <david-b@pacbell.net> More jtag_add_reset() cleanup:
Unify the handling of the req_tlr_or_trst parameter. Basically, JTAG TMS+TCK ops ("TLR") is always used ... unless TRST is a safe option in this system configuration. git-svn-id: svn://svn.berlios.de/openocd/trunk@2622 b42882b7-edfa-0310-969c-e2dbd0fdcd60
-rw-r--r--src/jtag/core.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/src/jtag/core.c b/src/jtag/core.c
index 06e015c4..611ea7d6 100644
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -588,6 +588,23 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst)
int new_srst;
int new_trst = 0;
+ /* JTAG reset (entry to TAP_RESET state) can always be achieved
+ * using TCK and TMS; that may go through a TAP_{IR,DR}UPDATE
+ * state first. TRST accelerates it, and bypasses those states.
+ *
+ * RESET_TRST_PULLS_SRST is a board or chip level quirk, which
+ * can kick in even if the JTAG adapter can't drive SRST.
+ */
+ if (req_tlr_or_trst) {
+ if (!(jtag_reset_config & RESET_HAS_TRST))
+ trst_with_tlr = 1;
+ else if ((jtag_reset_config & RESET_TRST_PULLS_SRST) != 0
+ && !req_srst)
+ trst_with_tlr = 1;
+ else
+ new_trst = 1;
+ }
+
/* FIX!!! there are *many* different cases here. A better
* approach is needed for legal combinations of transitions...
*/
@@ -614,12 +631,6 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst)
return;
}
- /* if TRST pulls SRST, we reset with TAP T-L-R */
- if (((jtag_reset_config & RESET_TRST_PULLS_SRST) && (req_tlr_or_trst)) && (req_srst == 0))
- {
- trst_with_tlr = 1;
- }
-
if (req_srst && !(jtag_reset_config & RESET_HAS_SRST))
{
LOG_ERROR("BUG: requested SRST assertion, but the current configuration doesn't support this");
@@ -627,17 +638,6 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst)
return;
}
- if (req_tlr_or_trst)
- {
- if (!trst_with_tlr && (jtag_reset_config & RESET_HAS_TRST))
- {
- new_trst = 1;
- } else
- {
- trst_with_tlr = 1;
- }
- }
-
new_srst = req_srst;
/* Maybe change TRST and/or SRST signal state */
@@ -831,6 +831,7 @@ static int jtag_reset_callback(enum jtag_event event, void *priv)
{
tap->enabled = !tap->disabled_after_reset;
+ /* current instruction is either BYPASS or IDCODE */
buf_set_ones(tap->cur_instr, tap->ir_length);
tap->bypass = 1;
}