git-svn-id: svn://svn.berlios.de/openocd/trunk@2628 b42882b7-edfa-0310-969c-e2dbd0fdcd60tags/v0.3.0-rc0
@@ -117,7 +117,10 @@ https://lists.berlios.de/pipermail/openocd-development/2009-July/009206.html | |||||
- ARM923EJS: | - ARM923EJS: | ||||
- reset run/halt/step is not robust; needs testing to map out problems. | - reset run/halt/step is not robust; needs testing to map out problems. | ||||
- ARM11 improvements (MB?) | - ARM11 improvements (MB?) | ||||
- fix single stepping (reported by ØH) | |||||
- fix single stepping (reported by ØH). Michael Bruck explained | |||||
that what's required is to emulate the current instruction(just like the | |||||
arm7 code) to know what address to set the breakpoint at for single | |||||
stepping an instruction. | |||||
- implement missing functionality (grep FNC_INFO_NOTIMPLEMENTED ...) | - implement missing functionality (grep FNC_INFO_NOTIMPLEMENTED ...) | ||||
- Cortex A8 support (ML) | - Cortex A8 support (ML) | ||||
- add target implementation (ML) | - add target implementation (ML) | ||||
@@ -939,7 +939,7 @@ static bool jtag_examine_chain_match_tap(const struct jtag_tap_s *tap) | |||||
/* If none of the expected ids matched, log an error */ | /* If none of the expected ids matched, log an error */ | ||||
if (ii != tap->expected_ids_cnt) | if (ii != tap->expected_ids_cnt) | ||||
{ | { | ||||
LOG_INFO("JTAG Tap/device matched"); | |||||
LOG_DEBUG("JTAG Tap/device matched"); | |||||
return true; | return true; | ||||
} | } | ||||
jtag_examine_chain_display(LOG_LVL_ERROR, "got", | jtag_examine_chain_display(LOG_LVL_ERROR, "got", | ||||
@@ -978,11 +978,13 @@ int jtag_examine_chain(void) | |||||
for (unsigned bit_count = 0; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;) | for (unsigned bit_count = 0; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;) | ||||
{ | { | ||||
uint32_t idcode = buf_get_u32(idcode_buffer, bit_count, 32); | uint32_t idcode = buf_get_u32(idcode_buffer, bit_count, 32); | ||||
tap->hasidcode = true; | |||||
if ((idcode & 1) == 0) | if ((idcode & 1) == 0) | ||||
{ | { | ||||
/* LSB must not be 0, this indicates a device in bypass */ | /* LSB must not be 0, this indicates a device in bypass */ | ||||
LOG_WARNING("Tap/Device does not have IDCODE"); | LOG_WARNING("Tap/Device does not have IDCODE"); | ||||
idcode = 0; | idcode = 0; | ||||
tap->hasidcode = false; | |||||
bit_count += 1; | bit_count += 1; | ||||
} | } | ||||
@@ -1074,7 +1076,8 @@ int jtag_validate_chain(void) | |||||
} | } | ||||
val = buf_get_u32(ir_test, chain_pos, 2); | val = buf_get_u32(ir_test, chain_pos, 2); | ||||
if (val != 0x1) | |||||
/* Only fail this check if we have IDCODE for this device */ | |||||
if ((val != 0x1)&&(tap->hasidcode)) | |||||
{ | { | ||||
char *cbuf = buf_to_str(ir_test, total_ir_length, 16); | char *cbuf = buf_to_str(ir_test, total_ir_length, 16); | ||||
LOG_ERROR("Could not validate JTAG scan chain, IR mismatch, scan returned 0x%s. tap=%s pos=%d expected 0x1 got %0x", cbuf, jtag_tap_name(tap), chain_pos, val); | LOG_ERROR("Could not validate JTAG scan chain, IR mismatch, scan returned 0x%s. tap=%s pos=%d expected 0x1 got %0x", cbuf, jtag_tap_name(tap), chain_pos, val); | ||||
@@ -144,7 +144,7 @@ typedef struct jtag_tap_event_action_s jtag_tap_event_action_t; | |||||
/* this is really: typedef jtag_tap_t */ | /* this is really: typedef jtag_tap_t */ | ||||
/* But - the typedef is done in "types.h" */ | /* But - the typedef is done in "types.h" */ | ||||
/* due to "forward decloration reasons" */ | |||||
/* due to "forward declaration reasons" */ | |||||
struct jtag_tap_s | struct jtag_tap_s | ||||
{ | { | ||||
const char* chip; | const char* chip; | ||||
@@ -161,6 +161,7 @@ struct jtag_tap_s | |||||
uint32_t ir_capture_mask; | uint32_t ir_capture_mask; | ||||
uint8_t* expected_mask; /**< Capture-IR expected mask */ | uint8_t* expected_mask; /**< Capture-IR expected mask */ | ||||
uint32_t idcode; | uint32_t idcode; | ||||
bool hasidcode; /* not all devices have idcode, we'll discover this during chain examination */ | |||||
/**< device identification code */ | /**< device identification code */ | ||||
/// Array of expected identification codes */ | /// Array of expected identification codes */ | ||||