diff --git a/src/jtag/drivers/amt_jtagaccel.c b/src/jtag/drivers/amt_jtagaccel.c index d89e5ffa9..5005e7633 100644 --- a/src/jtag/drivers/amt_jtagaccel.c +++ b/src/jtag/drivers/amt_jtagaccel.c @@ -264,7 +264,10 @@ static void amt_jtagaccel_scan(bool ir_scan, enum scan_type type, uint8_t *buffe else amt_jtagaccel_end_state(TAP_DRSHIFT); - amt_jtagaccel_state_move(); + /* Only move if we're not already there */ + if (tap_get_state() != tap_get_end_state()) + amt_jtagaccel_state_move(); + amt_jtagaccel_end_state(saved_end_state); /* handle unaligned bits at the beginning */ diff --git a/src/jtag/drivers/arm-jtag-ew.c b/src/jtag/drivers/arm-jtag-ew.c index 35b6b929f..16245102d 100644 --- a/src/jtag/drivers/arm-jtag-ew.c +++ b/src/jtag/drivers/arm-jtag-ew.c @@ -355,7 +355,10 @@ static void armjtagew_scan(bool ir_scan, /* Move to appropriate scan state */ armjtagew_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT); - armjtagew_state_move(); + /* Only move if we're not already there */ + if (tap_get_state() != tap_get_end_state()) + armjtagew_state_move(); + armjtagew_end_state(saved_end_state); /* Scan */ diff --git a/src/jtag/drivers/buspirate.c b/src/jtag/drivers/buspirate.c index 86b988235..10b5e0fde 100644 --- a/src/jtag/drivers/buspirate.c +++ b/src/jtag/drivers/buspirate.c @@ -520,7 +520,10 @@ static void buspirate_scan(bool ir_scan, enum scan_type type, saved_end_state = tap_get_end_state(); buspirate_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT); - buspirate_state_move(); + + /* Only move if we're not already there */ + if (tap_get_state() != tap_get_end_state()) + buspirate_state_move(); buspirate_tap_append_scan(scan_size, buffer, command);