fix gaffe in 1672

git-svn-id: svn://svn.berlios.de/openocd/trunk@1677 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
oharboe 2009-05-08 18:12:43 +00:00
parent 820da73f79
commit 5ff0317aa3
1 changed files with 8 additions and 3 deletions

View File

@ -45,6 +45,7 @@
int jtag_flush_queue_count; /* count # of flushes for profiling / debugging purposes */ int jtag_flush_queue_count; /* count # of flushes for profiling / debugging purposes */
/* note that this is not marked as static as it must be available from outside jtag.c for those /* note that this is not marked as static as it must be available from outside jtag.c for those
that implement the jtag_xxx() minidriver layer that implement the jtag_xxx() minidriver layer
*/ */
@ -541,7 +542,6 @@ void jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state)
u32 id[8]; u32 id[8];
int modified[8]; int modified[8];
/* if we are to run a verification of the ir scan, we need to get the input back. /* if we are to run a verification of the ir scan, we need to get the input back.
* We may have to allocate space if the caller didn't ask for the input back. * We may have to allocate space if the caller didn't ask for the input back.
* *
@ -621,10 +621,13 @@ int MINIDRIVER(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields,
break; break;
} }
nth_tap++; nth_tap++;
assert(nth_tap < x );
scan_size = tap->ir_length; scan_size = tap->ir_length;
(*last_cmd)->cmd.scan->fields[nth_tap].tap = tap; (*last_cmd)->cmd.scan->fields[nth_tap].tap = tap;
(*last_cmd)->cmd.scan->fields[nth_tap].num_bits = scan_size; (*last_cmd)->cmd.scan->fields[nth_tap].num_bits = scan_size;
(*last_cmd)->cmd.scan->fields[nth_tap].in_value = fields[nth_tap].in_value; (*last_cmd)->cmd.scan->fields[nth_tap].in_value = NULL; /* do not collect input for tap's in bypass */
/* search the list */ /* search the list */
for (j = 0; j < num_fields; j++) for (j = 0; j < num_fields; j++)
@ -632,6 +635,7 @@ int MINIDRIVER(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields,
if (tap == fields[j].tap) if (tap == fields[j].tap)
{ {
found = 1; found = 1;
(*last_cmd)->cmd.scan->fields[nth_tap].in_value = fields[j].in_value;
(*last_cmd)->cmd.scan->fields[nth_tap].out_value = buf_cpy(fields[j].out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size); (*last_cmd)->cmd.scan->fields[nth_tap].out_value = buf_cpy(fields[j].out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
tap->bypass = 0; tap->bypass = 0;
@ -649,6 +653,7 @@ int MINIDRIVER(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields,
/* update device information */ /* update device information */
buf_cpy((*last_cmd)->cmd.scan->fields[nth_tap].out_value, tap->cur_instr, scan_size); buf_cpy((*last_cmd)->cmd.scan->fields[nth_tap].out_value, tap->cur_instr, scan_size);
} }
assert(nth_tap == (x-1));
return ERROR_OK; return ERROR_OK;
} }
@ -1450,7 +1455,7 @@ void jtag_execute_queue_noclear(void)
/* each flush can take as much as 1-2ms on high bandwidth low latency interfaces. /* each flush can take as much as 1-2ms on high bandwidth low latency interfaces.
* E.g. a JTAG over TCP/IP or USB.... * E.g. a JTAG over TCP/IP or USB....
*/ */
jtag_flush_queue_count++; jtag_flush_queue_count++;
int retval=interface_jtag_execute_queue(); int retval=interface_jtag_execute_queue();
/* we keep the first error */ /* we keep the first error */