Browse Source

michal smulski <michal.smulski@ooma.com> fix regression in jtag_add_pathmove() which broke arm11 in r1825. Other uses of jtag_add_pathmove are svn + xsvf + xscale...

git-svn-id: svn://svn.berlios.de/openocd/trunk@2722 b42882b7-edfa-0310-969c-e2dbd0fdcd60
tags/v0.3.0-rc0
oharboe 14 years ago
parent
commit
84f51bf50c
1 changed files with 30 additions and 18 deletions
  1. +30
    -18
      src/jtag/ft2232.c

+ 30
- 18
src/jtag/ft2232.c View File

@@ -766,33 +766,45 @@ static int ft2232_send_and_recv(jtag_command_t* first, jtag_command_t* last)
*/
static void ft2232_add_pathmove(tap_state_t* path, int num_states)
{
int tms_bits = 0;
int state_ndx;
tap_state_t walker = tap_get_state();
int state_count = 0;

assert((unsigned) num_states <= 32u); /* tms_bits only holds 32 bits */

/* this loop verifies that the path is legal and logs each state in the path */
for (state_ndx = 0; state_ndx < num_states; ++state_ndx)
while (num_states)
{
tap_state_t desired_next_state = path[state_ndx];
unsigned char tms_byte = 0; /* zero this on each MPSSE batch */

if (tap_state_transition(walker, false) == desired_next_state)
; /* bit within tms_bits at index state_ndx is already zero */
else if (tap_state_transition(walker, true) == desired_next_state)
tms_bits |= (1 << state_ndx);
else
{
LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition",
tap_state_name(walker), tap_state_name(desired_next_state));
exit(-1);
}
int bit_count = 0;

walker = desired_next_state;
}
int num_states_batch = num_states > 7 ? 7 : num_states;

/* command "Clock Data to TMS/CS Pin (no Read)" */
buffer_write(0x4b);

clock_tms(0x4b, tms_bits, num_states, 0);
/* number of states remaining */
buffer_write(num_states_batch - 1);

while (num_states_batch--)
{
if (tap_state_transition(tap_get_state(), false) == path[state_count])
buf_set_u32(&tms_byte, bit_count++, 1, 0x0);
else if (tap_state_transition(tap_get_state(), true) == path[state_count])
buf_set_u32(&tms_byte, bit_count++, 1, 0x1);
else
{
LOG_ERROR( "BUG: %s -> %s isn't a valid TAP transition", tap_state_name(
tap_get_state() ), tap_state_name(path[state_count]) );
exit(-1);
}

tap_set_state(path[state_count]);
state_count++;
num_states--;
}

buffer_write(tms_byte);
}
tap_set_end_state(tap_get_state());
}



Loading…
Cancel
Save