summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorØyvind Harboe <oyvind.harboe@zylin.com>2010-03-16 11:40:52 +0100
committerØyvind Harboe <oyvind.harboe@zylin.com>2010-03-17 07:40:00 +0100
commit7e447043cd7967bd9b8976d829d5cb79bf359d3c (patch)
tree8c509eba3047c60e0698dc4ead31fa7e89b324f4 /src
parent1d9fba8c1488c3774c8bde737c2d658b1f525d09 (diff)
downloadopenocd+libswd-7e447043cd7967bd9b8976d829d5cb79bf359d3c.tar.gz
openocd+libswd-7e447043cd7967bd9b8976d829d5cb79bf359d3c.tar.bz2
openocd+libswd-7e447043cd7967bd9b8976d829d5cb79bf359d3c.tar.xz
openocd+libswd-7e447043cd7967bd9b8976d829d5cb79bf359d3c.zip
zy1000: tweak the DCC inner loop a tiny bit
Uses FIFO a bit more efficiently now. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src')
-rw-r--r--src/jtag/zy1000/zy1000.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c
index 005a4e02..177d286d 100644
--- a/src/jtag/zy1000/zy1000.c
+++ b/src/jtag/zy1000/zy1000.c
@@ -839,7 +839,7 @@ void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, uint8_t *buffer,
int post_bits;
jtag_pre_post_bits(tap, &pre_bits, &post_bits);
- if ((pre_bits > 32) || (post_bits > 32))
+ if (pre_bits + post_bits + 6 > 32)
{
int i;
for (i = 0; i < count; i++)
@@ -854,15 +854,18 @@ void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, uint8_t *buffer,
if (post_bits == 0)
shift_end_state = end_state;
+ shiftValueInner(TAP_DRSHIFT, TAP_DRSHIFT, pre_bits, 0);
int i;
- for (i = 0; i < count; i++)
+ for (i = 0; i < count - 1; i++)
{
- shiftValueInner(TAP_DRSHIFT, TAP_DRSHIFT, pre_bits, 0);
+ /* Fewer pokes means we get to use the FIFO more efficiently */
shiftValueInner(TAP_DRSHIFT, TAP_DRSHIFT, 32, fast_target_buffer_get_u32(buffer, little));
- shiftValueInner(TAP_DRSHIFT, shift_end_state, 6, reg_addr | (1 << 5));
- shiftValueInner(shift_end_state, end_state, post_bits, 0);
+ shiftValueInner(TAP_DRSHIFT, shift_end_state, 6 + post_bits + pre_bits, (reg_addr | (1 << 5)));
buffer += 4;
}
+ shiftValueInner(TAP_DRSHIFT, TAP_DRSHIFT, 32, fast_target_buffer_get_u32(buffer, little));
+ shiftValueInner(TAP_DRSHIFT, shift_end_state, 6, reg_addr | (1 << 5));
+ shiftValueInner(shift_end_state, end_state, post_bits, 0);
}
}