From c74ca40e09baebe8b86b1a77ad343f7b8ebde5d6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=98yvind=20Harboe?= Date: Mon, 11 Jan 2010 10:21:56 +0100 Subject: [PATCH] zy1000: reset bugfix MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit flush JTAG FIFO before reset. Fixes RCLK problems observed w/lpc2148, but really fixes a wider range of problems. Signed-off-by: Øyvind Harboe --- src/jtag/zy1000/zy1000.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c index e66a8b5a..9070f2e3 100644 --- a/src/jtag/zy1000/zy1000.c +++ b/src/jtag/zy1000/zy1000.c @@ -132,6 +132,13 @@ static int zy1000_power_dropout(int *dropout) void zy1000_reset(int trst, int srst) { LOG_DEBUG("zy1000 trst=%d, srst=%d", trst, srst); + + /* flush the JTAG FIFO. Not flushing the queue before messing with + * reset has such interesting bugs as causing hard to reproduce + * RCLK bugs as RCLK will stop responding when TRST is asserted + */ + waitIdle(); + if (!srst) { ZY1000_POKE(ZY1000_JTAG_BASE + 0x14, 0x00000001); @@ -156,7 +163,6 @@ void zy1000_reset(int trst, int srst) if (trst||(srst && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST))) { - waitIdle(); /* we're now in the RESET state until trst is deasserted */ ZY1000_POKE(ZY1000_JTAG_BASE + 0x20, TAP_RESET); } else -- 2.39.5