void jtag_sleep(u32 us)
{
- usleep(us);
+ alive_sleep(us/1000);
}
/* Try to examine chain layout according to IEEE 1149.1 ยง12
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;
}
break;
}
- if (device)
- {
- device->idcode = idcode;
- device = device->next;
- }
- device_count++;
-
manufacturer = (idcode & 0xffe) >> 1;
part = (idcode & 0xffff000) >> 12;
version = (idcode & 0xf0000000) >> 28;
bit_count += 32;
}
+ if (device)
+ {
+ device->idcode = idcode;
+ device = device->next;
+ }
+ device_count++;
}
/* see if number of discovered devices matches configuration */
static int jtag_init_inner(struct command_context_s *cmd_ctx)
{
- int validate_tries = 0;
jtag_device_t *device;
int retval;
LOG_ERROR("trying to validate configured JTAG chain anyway...");
}
- while (jtag_validate_chain() != ERROR_OK)
+ if (jtag_validate_chain() != ERROR_OK)
{
- validate_tries++;
-
- if (validate_tries > 5)
- {
- LOG_ERROR("Could not validate JTAG chain");
- return ERROR_JTAG_INVALID_INTERFACE;
- }
- usleep(10000);
+ LOG_ERROR("Could not validate JTAG chain, continuing anyway...");
}
return ERROR_OK;
static int default_speed_div(int speed, int *khz)
{
+ LOG_ERROR("Translation from jtag_speed to khz not implemented");
return ERROR_FAIL;
}
{
} else
{
- retval=ERROR_COMMAND_SYNTAX_ERROR;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
command_print(cmd_ctx, "jtag_speed: %d", jtag_speed);
{
} else
{
- retval=ERROR_COMMAND_SYNTAX_ERROR;
+ return ERROR_COMMAND_SYNTAX_ERROR;
+ }
+
+ if (jtag!=NULL)
+ {
+ if ((retval=jtag->speed_div(jtag_speed, &speed_khz))!=ERROR_OK)
+ return retval;
}
+
command_print(cmd_ctx, "jtag_khz: %d", speed_khz);
return retval;