From 030ee192dd9647b10ff0841a671facec9d6b833f Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=98yvind=20Harboe?= Date: Mon, 1 Mar 2010 08:25:18 +0100 Subject: [PATCH] bitbang: add jtag_add_tms_seq support MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Øyvind Harboe --- src/jtag/drivers/at91rm9200.c | 1 + src/jtag/drivers/bitbang.c | 28 ++++++++++++++++++++++++++++ src/jtag/drivers/dummy.c | 1 + src/jtag/drivers/ep93xx.c | 1 + src/jtag/drivers/parport.c | 1 + src/jtag/drivers/usb_blaster.c | 1 + 6 files changed, 33 insertions(+) diff --git a/src/jtag/drivers/at91rm9200.c b/src/jtag/drivers/at91rm9200.c index abaf3adb7e..89d7000ca7 100644 --- a/src/jtag/drivers/at91rm9200.c +++ b/src/jtag/drivers/at91rm9200.c @@ -126,6 +126,7 @@ struct jtag_interface at91rm9200_interface = { .name = "at91rm9200", + .supported = DEBUG_CAP_TMS_SEQ, .execute_queue = bitbang_execute_queue, .speed = at91rm9200_speed, diff --git a/src/jtag/drivers/bitbang.c b/src/jtag/drivers/bitbang.c index 83c2d29ecf..6159ef7a59 100644 --- a/src/jtag/drivers/bitbang.c +++ b/src/jtag/drivers/bitbang.c @@ -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); diff --git a/src/jtag/drivers/dummy.c b/src/jtag/drivers/dummy.c index 1880712a82..7cb0e33c5e 100644 --- a/src/jtag/drivers/dummy.c +++ b/src/jtag/drivers/dummy.c @@ -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, diff --git a/src/jtag/drivers/ep93xx.c b/src/jtag/drivers/ep93xx.c index 61dc76ede4..0959a56922 100644 --- a/src/jtag/drivers/ep93xx.c +++ b/src/jtag/drivers/ep93xx.c @@ -57,6 +57,7 @@ struct jtag_interface ep93xx_interface = { .name = "ep93xx", + .supported = DEBUG_CAP_TMS_SEQ, .execute_queue = bitbang_execute_queue, .speed = ep93xx_speed, diff --git a/src/jtag/drivers/parport.c b/src/jtag/drivers/parport.c index fa3373b0cd..2323ec56a9 100644 --- a/src/jtag/drivers/parport.c +++ b/src/jtag/drivers/parport.c @@ -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, diff --git a/src/jtag/drivers/usb_blaster.c b/src/jtag/drivers/usb_blaster.c index 3703323bfb..59c5715bdf 100644 --- a/src/jtag/drivers/usb_blaster.c +++ b/src/jtag/drivers/usb_blaster.c @@ -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, -- 2.30.2