summaryrefslogtreecommitdiff
path: root/src/jtag
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-08-19 13:55:14 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-08-19 13:55:14 +0000
commitdc33cb668d64e9ab3720b09db653f40c914efcde (patch)
tree67cc263508f3896cd34ab72a61916d7bf1b96071 /src/jtag
parent0960cbeeddd3023f45ed5541907819798e62dc1b (diff)
downloadopenocd+libswd-dc33cb668d64e9ab3720b09db653f40c914efcde.tar.gz
openocd+libswd-dc33cb668d64e9ab3720b09db653f40c914efcde.tar.bz2
openocd+libswd-dc33cb668d64e9ab3720b09db653f40c914efcde.tar.xz
openocd+libswd-dc33cb668d64e9ab3720b09db653f40c914efcde.zip
DANGER: committed work-in-progress to handle examination of jtag devices without IDCODE. I think this works, but I may have to pull that change out again...
added alive_sleep() to avoid warnings when resetting target(fixes incomprehensible error timeout error messages in GDB). git-svn-id: svn://svn.berlios.de/openocd/trunk@941 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/jtag')
-rw-r--r--src/jtag/jtag.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c
index d1ee1bbb..d5158126 100644
--- a/src/jtag/jtag.c
+++ b/src/jtag/jtag.c
@@ -1311,7 +1311,7 @@ int jtag_reset_callback(enum jtag_event event, void *priv)
void jtag_sleep(u32 us)
{
- usleep(us);
+ alive_sleep(us/1000);
}
/* Try to examine chain layout according to IEEE 1149.1 §12
@@ -1364,9 +1364,8 @@ int jtag_examine_chain(void)
if ((idcode & 1) == 0)
{
/* LSB must not be 0, this indicates a device in bypass */
- device_count++;
-
- LOG_WARNING("Device was in bypass after TRST/TMS reset");
+ LOG_WARNING("Device does not have IDCODE");
+ idcode=0;
bit_count += 1;
}
@@ -1403,13 +1402,6 @@ int jtag_examine_chain(void)
break;
}
- if (device)
- {
- device->idcode = idcode;
- device = device->next;
- }
- device_count++;
-
manufacturer = (idcode & 0xffe) >> 1;
part = (idcode & 0xffff000) >> 12;
version = (idcode & 0xf0000000) >> 28;
@@ -1419,6 +1411,12 @@ int jtag_examine_chain(void)
bit_count += 32;
}
+ if (device)
+ {
+ device->idcode = idcode;
+ device = device->next;
+ }
+ device_count++;
}
/* see if number of discovered devices matches configuration */
@@ -1591,7 +1589,7 @@ static int jtag_init_inner(struct command_context_s *cmd_ctx)
LOG_ERROR("Could not validate JTAG chain");
return ERROR_JTAG_INVALID_INTERFACE;
}
- usleep(10000);
+ alive_sleep(10);
}
return ERROR_OK;