Better fix for TAPs violating the JTAG spec for IR-Capture.
Instead of just assuming all IDCODE-deprived TAPs violate the JTAG spec (they don't!), just require TAPs with such problems to be declared with proper ircapture/irmask values. Example, with mask and value of zero. git-svn-id: svn://svn.berlios.de/openocd/trunk@2823 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
parent
7035b37e71
commit
246ff4f601
|
@ -1108,23 +1108,25 @@ static int jtag_validate_ircapture(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tap->hasidcode)
|
|
||||||
{
|
|
||||||
/* Validate the two LSBs, which must be 01 per JTAG spec.
|
/* Validate the two LSBs, which must be 01 per JTAG spec.
|
||||||
* REVISIT we might be able to verify some MSBs too, using
|
*
|
||||||
* ircapture/irmask attributes.
|
* Or ... more bits could be provided by TAP declaration.
|
||||||
|
* Plus, some taps (notably in i.MX series chips) violate
|
||||||
|
* this part of the JTAG spec, so their capture mask/value
|
||||||
|
* attributes might disable this test.
|
||||||
*/
|
*/
|
||||||
val = buf_get_u32(ir_test, chain_pos, tap->ir_length);
|
val = buf_get_u32(ir_test, chain_pos, tap->ir_length);
|
||||||
if ((val & 0x3) != 1) {
|
if ((val & tap->ir_capture_mask) != tap->ir_capture_value) {
|
||||||
LOG_ERROR("%s: IR capture error; saw 0x%0*x not 0x..1",
|
LOG_ERROR("%s: IR capture error; saw 0x%0*x not 0x%0*x",
|
||||||
jtag_tap_name(tap),
|
jtag_tap_name(tap),
|
||||||
(tap->ir_length + 7) / tap->ir_length,
|
(tap->ir_length + 7) / tap->ir_length,
|
||||||
val);
|
val,
|
||||||
|
(tap->ir_length + 7) / tap->ir_length,
|
||||||
|
tap->ir_capture_value);
|
||||||
|
|
||||||
retval = ERROR_JTAG_INIT_FAILED;
|
retval = ERROR_JTAG_INIT_FAILED;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
LOG_DEBUG("%s: IR capture 0x%0*x", jtag_tap_name(tap),
|
LOG_DEBUG("%s: IR capture 0x%0*x", jtag_tap_name(tap),
|
||||||
(tap->ir_length + 7) / tap->ir_length, val);
|
(tap->ir_length + 7) / tap->ir_length, val);
|
||||||
chain_pos += tap->ir_length;
|
chain_pos += tap->ir_length;
|
||||||
|
|
Loading…
Reference in New Issue