zy1000: reset bugfix
authorØyvind Harboe <oyvind.harboe@zylin.com>
Mon, 11 Jan 2010 09:21:56 +0000 (10:21 +0100)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Mon, 11 Jan 2010 09:25:13 +0000 (10:25 +0100)
flush JTAG FIFO before reset. Fixes RCLK problems observed
w/lpc2148, but really fixes a wider range of problems.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
src/jtag/zy1000/zy1000.c

index e66a8b5a31ba6904ef864b917f72079ea74f9764..9070f2e382c6e385184572516d17cd928fc7b08c 100644 (file)
@@ -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