aboutsummaryrefslogtreecommitdiff
path: root/src/jtag
diff options
context:
space:
mode:
authorFranck Jullien <franck.jullien@gmail.com>2013-10-03 23:22:32 +0200
committerSpencer Oliver <spen@spen-soft.co.uk>2013-10-15 20:39:28 +0000
commit7ef6a54da2cf7ab0e0473a4fdf62d701fffbc34a (patch)
treecf0616eed852bb7838c0a38f00408fe97e72ce7b /src/jtag
parenta58f294ac49c0b499e9eb427f81fe85a6e7a4338 (diff)
jtag_vpi: fix path move function
Change-Id: I82bf6f733e0d9cb5c86553d0827c558fa98aa247 Signed-off-by: Franck Jullien <franck.jullien@gmail.com> Reviewed-on: http://openocd.zylin.com/1672 Tested-by: jenkins Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Diffstat (limited to 'src/jtag')
-rw-r--r--src/jtag/drivers/jtag_vpi.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/src/jtag/drivers/jtag_vpi.c b/src/jtag/drivers/jtag_vpi.c
index 84cd9470..d0e90e2a 100644
--- a/src/jtag/drivers/jtag_vpi.c
+++ b/src/jtag/drivers/jtag_vpi.c
@@ -123,23 +123,17 @@ static int jtag_vpi_tms_seq(const uint8_t *bits, int nb_bits)
static int jtag_vpi_path_move(struct pathmove_command *cmd)
{
- uint16_t trans = 0;
- int retval;
- int i;
+ uint8_t trans[DIV_ROUND_UP(cmd->num_states, 8)];
+
+ memset(trans, 0, DIV_ROUND_UP(cmd->num_states, 8));
- for (i = 0; i < cmd->num_states; i++) {
+ for (int i = 0; i < cmd->num_states; i++) {
if (tap_state_transition(tap_get_state(), true) == cmd->path[i])
- trans = trans | 1;
- trans = trans << 1;
+ buf_set_u32(trans, i, 1, 1);
+ tap_set_state(cmd->path[i]);
}
- retval = jtag_vpi_tms_seq((uint8_t *)&trans, 1);
- if (retval != ERROR_OK)
- return retval;
-
- tap_set_state(cmd->path[i]);
-
- return ERROR_OK;
+ return jtag_vpi_tms_seq(trans, cmd->num_states);
}
/**