summaryrefslogtreecommitdiff
path: root/src/jtag/core.c
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-09-11 18:34:15 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-09-11 18:34:15 +0000
commit4f7761828c91108d4bf4a12e78f23b6483b18ade (patch)
treef6217430dfd24eb56d033fc1196e031e13cd201a /src/jtag/core.c
parentec3015db1ab822e1245a00ce4884ef67dea6137f (diff)
downloadopenocd_libswd-4f7761828c91108d4bf4a12e78f23b6483b18ade.tar.gz
openocd_libswd-4f7761828c91108d4bf4a12e78f23b6483b18ade.tar.bz2
openocd_libswd-4f7761828c91108d4bf4a12e78f23b6483b18ade.tar.xz
openocd_libswd-4f7761828c91108d4bf4a12e78f23b6483b18ade.zip
tap post reset event added. Allows omap3530 to send 100 runtest idle tickle's after a TAP_RESET.
git-svn-id: svn://svn.berlios.de/openocd/trunk@2696 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/jtag/core.c')
-rw-r--r--src/jtag/core.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/jtag/core.c b/src/jtag/core.c
index e23cbaa2..acd84e9a 100644
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -62,6 +62,7 @@ static const char *jtag_event_strings[] =
{
[JTAG_TRST_ASSERTED] = "JTAG controller reset (TLR or TRST)",
[JTAG_TAP_EVENT_ENABLE] = "TAP enabled",
+ [JTAG_TAP_EVENT_POST_RESET] = "post reset",
[JTAG_TAP_EVENT_DISABLE] = "TAP disabled",
};
@@ -339,6 +340,8 @@ void jtag_add_ir_scan_noverify(int in_count, const scan_field_t *in_fields,
void jtag_add_ir_scan(int in_num_fields, scan_field_t *in_fields, tap_state_t state)
{
+ assert(state != TAP_RESET);
+
if (jtag_verify && jtag_verify_capture_ir)
{
/* 8 x 32 bit id's is enough for all invocations */
@@ -361,6 +364,8 @@ void jtag_add_ir_scan(int in_num_fields, scan_field_t *in_fields, tap_state_t st
void jtag_add_plain_ir_scan(int in_num_fields, const scan_field_t *in_fields,
tap_state_t state)
{
+ assert(state != TAP_RESET);
+
jtag_prelude(state);
int retval = interface_jtag_add_plain_ir_scan(
@@ -439,6 +444,8 @@ void jtag_add_dr_scan_check(int in_num_fields, scan_field_t *in_fields, tap_stat
void jtag_add_dr_scan(int in_num_fields, const scan_field_t *in_fields,
tap_state_t state)
{
+ assert(state != TAP_RESET);
+
jtag_prelude(state);
int retval;
@@ -449,6 +456,8 @@ void jtag_add_dr_scan(int in_num_fields, const scan_field_t *in_fields,
void jtag_add_plain_dr_scan(int in_num_fields, const scan_field_t *in_fields,
tap_state_t state)
{
+ assert(state != TAP_RESET);
+
jtag_prelude(state);
int retval;
@@ -460,6 +469,8 @@ void jtag_add_dr_out(jtag_tap_t* tap,
int num_fields, const int* num_bits, const uint32_t* value,
tap_state_t end_state)
{
+ assert(end_state != TAP_RESET);
+
assert(end_state != TAP_INVALID);
cmd_queue_cur_state = end_state;
@@ -473,6 +484,9 @@ void jtag_add_tlr(void)
{
jtag_prelude(TAP_RESET);
jtag_set_error(interface_jtag_add_tlr());
+
+ jtag_notify_reset();
+
jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
}
@@ -683,6 +697,8 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst)
LOG_DEBUG("TRST line released");
if (jtag_ntrst_delay)
jtag_add_sleep(jtag_ntrst_delay * 1000);
+
+ jtag_notify_reset();
}
}
}
@@ -851,7 +867,8 @@ static int jtag_examine_chain_execute(uint8_t *idcode_buffer, unsigned num_idcod
for (unsigned i = 0; i < JTAG_MAX_CHAIN_SIZE; i++)
buf_set_u32(idcode_buffer, i * 32, 32, 0x000000FF);
- jtag_add_plain_dr_scan(1, &field, TAP_RESET);
+ jtag_add_plain_dr_scan(1, &field, TAP_DRPAUSE);
+ jtag_add_tlr();
return jtag_execute_queue();
}
@@ -1065,7 +1082,9 @@ int jtag_validate_chain(void)
field.in_value = ir_test;
- jtag_add_plain_ir_scan(1, &field, TAP_RESET);
+ jtag_add_plain_ir_scan(1, &field, TAP_IRPAUSE);
+ jtag_add_tlr();
+
int retval;
retval = jtag_execute_queue();
if (retval != ERROR_OK)