summaryrefslogtreecommitdiff
path: root/src/jtag
diff options
context:
space:
mode:
authorØyvind Harboe <oyvind.harboe@zylin.com>2009-12-04 08:20:38 +0100
committerØyvind Harboe <oyvind.harboe@zylin.com>2009-12-04 08:21:25 +0100
commit24551b7b92725fb2b26d042c2e88330e3d1d4d21 (patch)
tree631b0855d8b01acd1f65d1fac174c0eccd5bf8c4 /src/jtag
parented59dfc80aa6fc48a0894c8e46cee675f38ac949 (diff)
downloadopenocd+libswd-24551b7b92725fb2b26d042c2e88330e3d1d4d21.tar.gz
openocd+libswd-24551b7b92725fb2b26d042c2e88330e3d1d4d21.tar.bz2
openocd+libswd-24551b7b92725fb2b26d042c2e88330e3d1d4d21.tar.xz
openocd+libswd-24551b7b92725fb2b26d042c2e88330e3d1d4d21.zip
zy1000: FPGA revC wip
The bug in revC register memory access is pretty much cornered now. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src/jtag')
-rw-r--r--src/jtag/zy1000/jtag_minidriver.h24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/jtag/zy1000/jtag_minidriver.h b/src/jtag/zy1000/jtag_minidriver.h
index afbea13a..536c6770 100644
--- a/src/jtag/zy1000/jtag_minidriver.h
+++ b/src/jtag/zy1000/jtag_minidriver.h
@@ -18,6 +18,7 @@
***************************************************************************/
#include <cyg/hal/hal_io.h> // low level i/o
+#include <cyg/hal/hal_intr.h> // low level i/o
//#define VERBOSE(a) a
#define VERBOSE(a)
@@ -31,10 +32,16 @@ int diag_printf(const char *fmt, ...);
#define ZY1000_PEEK(a, b) HAL_READ_UINT32(a, b); diag_printf("peek 0x%08x = 0x%08x\n", a, b)
#else
#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. \
- */ \
+
+#ifdef CYGPKG_HAL_NIOS2
+#define ZY1000_POKE(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. \
+ This code goes away once the FPGA has been fixed. */ \
+\
+CYG_INTERRUPT_STATE _old_; \
+HAL_DISABLE_INTERRUPTS(_old_); \
+HAL_WRITE_UINT32(a, b);\
static int overflow_counter = 0; \
if (++overflow_counter >= 1) \
{ \
@@ -42,7 +49,14 @@ int diag_printf(const char *fmt, ...);
cyg_uint32 empty; ZY1000_PEEK(ZY1000_JTAG_BASE + 0x10, empty); \
overflow_counter = 0; \
} \
- }
+ /* NB! interrupts must be restored *after* read */ \
+ HAL_RESTORE_INTERRUPTS(_old_); \
+}\
+
+#else
+#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b)
+#endif
+
#endif
// FIFO empty?