|
From: oharboe at B. <oh...@ma...> - 2009-06-04 08:56:25
|
Author: oharboe
Date: 2009-06-04 08:56:22 +0200 (Thu, 04 Jun 2009)
New Revision: 2040
Modified:
trunk/src/jtag/jtag.c
trunk/src/jtag/jtag.h
Log:
JTAG_TRST_ASSERTED event cleanup. More clear where and when it is invoked and some duplicate(harmless) invocations avoided.
Modified: trunk/src/jtag/jtag.c
===================================================================
--- trunk/src/jtag/jtag.c 2009-06-04 01:22:23 UTC (rev 2039)
+++ trunk/src/jtag/jtag.c 2009-06-04 06:56:22 UTC (rev 2040)
@@ -385,17 +385,14 @@
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 @@
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 @@
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 @@
if( num_cycles > 0 )
{
- jtag_prelude1();
+ jtag_checks();
retval = interface_jtag_add_clocks(num_cycles);
if (retval != ERROR_OK)
@@ -755,7 +754,6 @@
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;
}
Modified: trunk/src/jtag/jtag.h
===================================================================
--- trunk/src/jtag/jtag.h 2009-06-04 01:22:23 UTC (rev 2039)
+++ trunk/src/jtag/jtag.h 2009-06-04 06:56:22 UTC (rev 2040)
@@ -218,6 +218,17 @@
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
};
|