From bbd84417f63837008f56e791df9005e26457ff60 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=98yvind=20Harboe?= <oyvind.harboe@zylin.com>
Date: Fri, 5 Aug 2011 09:57:46 +0200
Subject: [PATCH] arm11: disable broken optimization for setting current scan
 chain

---
 src/target/arm11_dbgtap.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/target/arm11_dbgtap.c b/src/target/arm11_dbgtap.c
index 5c671cc5f..a5dc37687 100644
--- a/src/target/arm11_dbgtap.c
+++ b/src/target/arm11_dbgtap.c
@@ -199,11 +199,17 @@ int arm11_add_debug_SCAN_N(struct arm11_common *arm11,
 	 * NOTE:  the ITRSEL instruction fakes SCREG changing;
 	 * but leaves its actual value unchanged.
 	 */
+#if 0
+	// FIX!!! the optimization below is broken because we do not
+	// invalidate the cur_scan_chain upon a TRST/TMS. See arm_jtag.c
+	// for example on how to invalidate cur_scan_chain. Tested patches gladly
+	// accepted!
 	if (arm11->jtag_info.cur_scan_chain == chain) {
 		JTAG_DEBUG("SCREG <= %d SKIPPED", chain);
 		return jtag_add_statemove((state == ARM11_TAP_DEFAULT)
 					? TAP_DRPAUSE : state);
 	}
+#endif
 	JTAG_DEBUG("SCREG <= %d", chain);
 
 	arm11_add_IR(arm11, ARM11_SCAN_N, ARM11_TAP_DEFAULT);
-- 
GitLab