summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jtag/zy1000/jtag_minidriver.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/jtag/zy1000/jtag_minidriver.h b/src/jtag/zy1000/jtag_minidriver.h
index 3fe16ef3..afbea13a 100644
--- a/src/jtag/zy1000/jtag_minidriver.h
+++ b/src/jtag/zy1000/jtag_minidriver.h
@@ -30,8 +30,19 @@ int diag_printf(const char *fmt, ...);
#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b); diag_printf("poke 0x%08x,0x%08x\n", a, b)
#define ZY1000_PEEK(a, b) HAL_READ_UINT32(a, b); diag_printf("peek 0x%08x = 0x%08x\n", a, b)
#else
-#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b)
#define ZY1000_PEEK(a, b) HAL_READ_UINT32(a, b)
+#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b);\
+ {/* This will flush the bridge FIFO. Overflowed bridge FIFO fails. We must \
+ flush every "often". No precise system has been found, but 4 seems solid. \
+ */ \
+ static int overflow_counter = 0; \
+ if (++overflow_counter >= 1) \
+ { \
+ /* clear FIFO */ \
+ cyg_uint32 empty; ZY1000_PEEK(ZY1000_JTAG_BASE + 0x10, empty); \
+ overflow_counter = 0; \
+ } \
+ }
#endif
// FIFO empty?