diff options
author | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-06-04 06:56:22 +0000 |
---|---|---|
committer | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-06-04 06:56:22 +0000 |
commit | 9ab49135c639e6ed5e3997356b54c6cf79d04985 (patch) | |
tree | 74aae898df694a9470aae207146078d3c2df7127 /src | |
parent | de7cb1c76b8279b9f1f08b5b26447efdb444b519 (diff) | |
download | openocd+libswd-9ab49135c639e6ed5e3997356b54c6cf79d04985.tar.gz openocd+libswd-9ab49135c639e6ed5e3997356b54c6cf79d04985.tar.bz2 openocd+libswd-9ab49135c639e6ed5e3997356b54c6cf79d04985.tar.xz openocd+libswd-9ab49135c639e6ed5e3997356b54c6cf79d04985.zip |
JTAG_TRST_ASSERTED event cleanup. More clear where and when it is invoked and some duplicate(harmless) invocations avoided.
git-svn-id: svn://svn.berlios.de/openocd/trunk@2040 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src')
-rw-r--r-- | src/jtag/jtag.c | 14 | ||||
-rw-r--r-- | src/jtag/jtag.h | 11 |
2 files changed, 17 insertions, 8 deletions
diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c index fca60365..0733789f 100644 --- a/src/jtag/jtag.c +++ b/src/jtag/jtag.c @@ -385,17 +385,14 @@ int jtag_call_event_callbacks(enum jtag_event event) return ERROR_OK; } -static void jtag_prelude1(void) +static void jtag_checks(void) { assert(jtag_trst == 0); - - if (cmd_queue_end_state == TAP_RESET) - jtag_call_event_callbacks(JTAG_TRST_ASSERTED); } static void jtag_prelude(tap_state_t state) { - jtag_prelude1(); + jtag_checks(); if (state != TAP_INVALID) jtag_add_end_state(state); @@ -596,6 +593,8 @@ void jtag_add_tlr(void) retval=interface_jtag_add_tlr(); if (retval!=ERROR_OK) jtag_error=retval; + + jtag_call_event_callbacks(JTAG_TRST_ASSERTED); } void jtag_add_pathmove(int num_states, const tap_state_t *path) @@ -628,7 +627,7 @@ void jtag_add_pathmove(int num_states, const tap_state_t *path) cur_state = path[i]; } - jtag_prelude1(); + jtag_checks(); retval = interface_jtag_add_pathmove(num_states, path); cmd_queue_cur_state = path[num_states - 1]; @@ -663,7 +662,7 @@ void jtag_add_clocks( int num_cycles ) if( num_cycles > 0 ) { - jtag_prelude1(); + jtag_checks(); retval = interface_jtag_add_clocks(num_cycles); if (retval != ERROR_OK) @@ -755,7 +754,6 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst) LOG_DEBUG("JTAG reset with RESET instead of TRST"); jtag_add_end_state(TAP_RESET); jtag_add_tlr(); - jtag_call_event_callbacks(JTAG_TRST_ASSERTED); return; } diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h index 04eefaad..5fbe7dc1 100644 --- a/src/jtag/jtag.h +++ b/src/jtag/jtag.h @@ -218,6 +218,17 @@ enum reset_line_mode { LINE_PUSH_PULL = 0x1, }; +/* + * There are three cases when JTAG_TRST_ASSERTED callback is invoked. The + * event is invoked *after* TRST is asserted(or queued rather). It is illegal + * to communicate with the JTAG interface during the callback(as there is + * currently a queue being built). + * + * - TMS reset + * - SRST pulls TRST + * - TRST asserted + * + **/ enum jtag_event { JTAG_TRST_ASSERTED }; |