From f54a639b28514bf8c8faabc39c6434db1e886fed Mon Sep 17 00:00:00 2001 From: Spencer Oliver Date: Wed, 16 Jan 2013 11:57:57 +0000 Subject: [PATCH] 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 7989000e0969c1ccf69acbc3ce649a020bc1ee66 Change-Id: Ifc90ec2eef68a70a14f37c00931a07982bfa200c Signed-off-by: Spencer Oliver Reviewed-on: http://openocd.zylin.com/1114 Tested-by: jenkins Reviewed-by: Freddie Chopin --- src/jtag/drivers/amt_jtagaccel.c | 5 ++++- src/jtag/drivers/arm-jtag-ew.c | 5 ++++- src/jtag/drivers/buspirate.c | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/jtag/drivers/amt_jtagaccel.c b/src/jtag/drivers/amt_jtagaccel.c index d89e5ffa91..5005e7633f 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 35b6b929f1..16245102dd 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 86b9882356..10b5e0fde6 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); -- 2.30.2