jtag: only change state if necessary

All the other drivers will only change the state if required.
This brings all the other drivers inline with this behaviour.

The original issue relates to problems on xscale commit 7989000e09

Change-Id: Ifc90ec2eef68a70a14f37c00931a07982bfa200c
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/1114
Tested-by: jenkins
Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
This commit is contained in:
Spencer Oliver 2013-01-16 11:57:57 +00:00 committed by Freddie Chopin
parent f807d6ab3d
commit f54a639b28
3 changed files with 12 additions and 3 deletions

View File

@ -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 */

View File

@ -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 */

View File

@ -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);