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",
|
.name = "at91rm9200",
|
||||||
|
|
||||||
|
.supported = DEBUG_CAP_TMS_SEQ,
|
||||||
.execute_queue = bitbang_execute_queue,
|
.execute_queue = bitbang_execute_queue,
|
||||||
|
|
||||||
.speed = at91rm9200_speed,
|
.speed = at91rm9200_speed,
|
||||||
|
|
|
@ -91,6 +91,31 @@ static void bitbang_state_move(int skip)
|
||||||
tap_set_state(tap_get_end_state());
|
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)
|
static void bitbang_path_move(struct pathmove_command *cmd)
|
||||||
{
|
{
|
||||||
int num_states = cmd->num_states;
|
int num_states = cmd->num_states;
|
||||||
|
@ -312,6 +337,9 @@ int bitbang_execute_queue(void)
|
||||||
#endif
|
#endif
|
||||||
jtag_sleep(cmd->cmd.sleep->us);
|
jtag_sleep(cmd->cmd.sleep->us);
|
||||||
break;
|
break;
|
||||||
|
case JTAG_TMS:
|
||||||
|
retval = bitbang_execute_tms(cmd);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
LOG_ERROR("BUG: unknown JTAG command type encountered");
|
LOG_ERROR("BUG: unknown JTAG command type encountered");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
|
|
|
@ -164,6 +164,7 @@ static const struct command_registration dummy_command_handlers[] = {
|
||||||
struct jtag_interface dummy_interface = {
|
struct jtag_interface dummy_interface = {
|
||||||
.name = "dummy",
|
.name = "dummy",
|
||||||
|
|
||||||
|
.supported = DEBUG_CAP_TMS_SEQ,
|
||||||
.commands = dummy_command_handlers,
|
.commands = dummy_command_handlers,
|
||||||
|
|
||||||
.execute_queue = &bitbang_execute_queue,
|
.execute_queue = &bitbang_execute_queue,
|
||||||
|
|
|
@ -57,6 +57,7 @@ struct jtag_interface ep93xx_interface =
|
||||||
{
|
{
|
||||||
.name = "ep93xx",
|
.name = "ep93xx",
|
||||||
|
|
||||||
|
.supported = DEBUG_CAP_TMS_SEQ,
|
||||||
.execute_queue = bitbang_execute_queue,
|
.execute_queue = bitbang_execute_queue,
|
||||||
|
|
||||||
.speed = ep93xx_speed,
|
.speed = ep93xx_speed,
|
||||||
|
|
|
@ -524,6 +524,7 @@ static const struct command_registration parport_command_handlers[] = {
|
||||||
|
|
||||||
struct jtag_interface parport_interface = {
|
struct jtag_interface parport_interface = {
|
||||||
.name = "parport",
|
.name = "parport",
|
||||||
|
.supported = DEBUG_CAP_TMS_SEQ,
|
||||||
.commands = parport_command_handlers,
|
.commands = parport_command_handlers,
|
||||||
|
|
||||||
.init = parport_init,
|
.init = parport_init,
|
||||||
|
|
|
@ -580,6 +580,7 @@ static const struct command_registration usb_blaster_command_handlers[] = {
|
||||||
struct jtag_interface usb_blaster_interface = {
|
struct jtag_interface usb_blaster_interface = {
|
||||||
.name = "usb_blaster",
|
.name = "usb_blaster",
|
||||||
.commands = usb_blaster_command_handlers,
|
.commands = usb_blaster_command_handlers,
|
||||||
|
.supported = DEBUG_CAP_TMS_SEQ,
|
||||||
|
|
||||||
.execute_queue = bitbang_execute_queue,
|
.execute_queue = bitbang_execute_queue,
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue