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>
This commit is contained in:
Øyvind Harboe 2010-03-16 11:40:52 +01:00
parent 1d9fba8c14
commit 7e447043cd
1 changed files with 8 additions and 5 deletions

View File

@ -839,7 +839,7 @@ void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, uint8_t *buffer,
int post_bits; int post_bits;
jtag_pre_post_bits(tap, &pre_bits, &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; int i;
for (i = 0; i < count; 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) if (post_bits == 0)
shift_end_state = end_state; shift_end_state = end_state;
shiftValueInner(TAP_DRSHIFT, TAP_DRSHIFT, pre_bits, 0);
int i; 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, TAP_DRSHIFT, 32, fast_target_buffer_get_u32(buffer, little));
shiftValueInner(TAP_DRSHIFT, shift_end_state, 6, reg_addr | (1 << 5)); shiftValueInner(TAP_DRSHIFT, shift_end_state, 6 + post_bits + pre_bits, (reg_addr | (1 << 5)));
shiftValueInner(shift_end_state, end_state, post_bits, 0);
buffer += 4; 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);
} }
} }