if ((idcode & 1) == 0)
{
/* Zero for LSB indicates a device in bypass */
- LOG_WARNING("TAP %s does not have IDCODE",
+ LOG_INFO("TAP %s does not have IDCODE",
tap->dotted_name);
idcode = 0;
tap->hasidcode = false;
/* If we're autoprobing, guess IR lengths. They must be at
* least two bits. Guessing will fail if (a) any TAP does
* not conform to the JTAG spec; or (b) when the upper bits
- * captured from some conforming TAP are nonzero.
+ * captured from some conforming TAP are nonzero. Or if
+ * (c) an IR length is longer than 32 bits -- which is only
+ * an implementation limit, which could someday be raised.
+ *
+ * REVISIT optimization: if there's a *single* TAP we can
+ * lift restrictions (a) and (b) by scanning a recognizable
+ * pattern before the all-ones BYPASS. Check for where the
+ * pattern starts in the result, instead of an 0...01 value.
*
* REVISIT alternative approach: escape to some tcl code
* which could provide more knowledge, based on IDCODE; and
if (tap->ir_length == 0) {
tap->ir_length = 2;
while ((val = buf_get_u32(ir_test, chain_pos,
- tap->ir_length + 1)) == 1) {
+ tap->ir_length + 1)) == 1
+ && tap->ir_length <= 32) {
tap->ir_length++;
}
LOG_WARNING("AUTO %s - use \"... -irlen %d\"",
if ((retval = jtag_execute_queue()) != ERROR_OK)
return retval;
- if (Jim_Eval_Named(interp, "jtag_init", __FILE__, __LINE__) != JIM_OK)
+ if (Jim_Eval_Named(cmd_ctx->interp, "jtag_init", __FILE__, __LINE__) != JIM_OK)
return ERROR_FAIL;
return ERROR_OK;