bitbang: add jtag_add_tms_seq support
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
This commit is contained in:
parent
679f6602fd
commit
030ee192dd
|
@ -126,6 +126,7 @@ struct jtag_interface at91rm9200_interface =
|
|||
{
|
||||
.name = "at91rm9200",
|
||||
|
||||
.supported = DEBUG_CAP_TMS_SEQ,
|
||||
.execute_queue = bitbang_execute_queue,
|
||||
|
||||
.speed = at91rm9200_speed,
|
||||
|
|
|
@ -91,6 +91,31 @@ static void bitbang_state_move(int skip)
|
|||
tap_set_state(tap_get_end_state());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clock a bunch of TMS (or SWDIO) transitions, to change the JTAG
|
||||
* (or SWD) state machine.
|
||||
*/
|
||||
static int bitbang_execute_tms(struct jtag_command *cmd)
|
||||
{
|
||||
unsigned num_bits = cmd->cmd.tms->num_bits;
|
||||
const uint8_t *bits = cmd->cmd.tms->bits;
|
||||
|
||||
DEBUG_JTAG_IO("TMS: %d bits", num_bits);
|
||||
|
||||
int tms = 0;
|
||||
for (unsigned i = 0; i < num_bits; i++)
|
||||
{
|
||||
tms = ((bits[i/8] >> (i % 8)) & 1);
|
||||
bitbang_interface->write(0, tms, 0);
|
||||
bitbang_interface->write(1, tms, 0);
|
||||
}
|
||||
bitbang_interface->write(CLOCK_IDLE(), tms, 0);
|
||||
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
static void bitbang_path_move(struct pathmove_command *cmd)
|
||||
{
|
||||
int num_states = cmd->num_states;
|
||||
|
@ -312,6 +337,9 @@ int bitbang_execute_queue(void)
|
|||
#endif
|
||||
jtag_sleep(cmd->cmd.sleep->us);
|
||||
break;
|
||||
case JTAG_TMS:
|
||||
retval = bitbang_execute_tms(cmd);
|
||||
break;
|
||||
default:
|
||||
LOG_ERROR("BUG: unknown JTAG command type encountered");
|
||||
exit(-1);
|
||||
|
|
|
@ -164,6 +164,7 @@ static const struct command_registration dummy_command_handlers[] = {
|
|||
struct jtag_interface dummy_interface = {
|
||||
.name = "dummy",
|
||||
|
||||
.supported = DEBUG_CAP_TMS_SEQ,
|
||||
.commands = dummy_command_handlers,
|
||||
|
||||
.execute_queue = &bitbang_execute_queue,
|
||||
|
|
|
@ -57,6 +57,7 @@ struct jtag_interface ep93xx_interface =
|
|||
{
|
||||
.name = "ep93xx",
|
||||
|
||||
.supported = DEBUG_CAP_TMS_SEQ,
|
||||
.execute_queue = bitbang_execute_queue,
|
||||
|
||||
.speed = ep93xx_speed,
|
||||
|
|
|
@ -524,6 +524,7 @@ static const struct command_registration parport_command_handlers[] = {
|
|||
|
||||
struct jtag_interface parport_interface = {
|
||||
.name = "parport",
|
||||
.supported = DEBUG_CAP_TMS_SEQ,
|
||||
.commands = parport_command_handlers,
|
||||
|
||||
.init = parport_init,
|
||||
|
|
|
@ -580,6 +580,7 @@ static const struct command_registration usb_blaster_command_handlers[] = {
|
|||
struct jtag_interface usb_blaster_interface = {
|
||||
.name = "usb_blaster",
|
||||
.commands = usb_blaster_command_handlers,
|
||||
.supported = DEBUG_CAP_TMS_SEQ,
|
||||
|
||||
.execute_queue = bitbang_execute_queue,
|
||||
|
||||
|
|
Loading…
Reference in New Issue