> A closer look, for configured taps not in the list of taps used in the > scan_field array passed to the function the default values should be > > scan_size = tap->ir_length; > (*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].in_value = NULL; > <============================ set default > (*last_cmd)->cmd.scan->fields[nth_tap].in_handler = NULL; /* > disable verification by default */ > > > not > > scan_size = tap->ir_length; > (*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].in_value = > fields[nth_tap].in_value; <============= this does not exist ! > > > Compare to the original.
Ah. Gotit. How is the attached patch? Ouch. I'm turning into a pumpkin and the attached patch is only half a fix, because it seems to have uncovered some other problem when I connect to STM32... Error: BUG: all the scan fields where not filled out 1 2! -- Øyvind Harboe Embedded software and hardware consulting services http://consulting.zylin.com
### Eclipse Workspace Patch 1.0 #P openocd Index: src/jtag/jtag.c =================================================================== --- src/jtag/jtag.c (revision 1676) +++ src/jtag/jtag.c (working copy) @@ -45,6 +45,7 @@ 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 that implement the jtag_xxx() minidriver layer */ @@ -541,7 +542,6 @@ u32 id[8]; int modified[8]; - /* 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. * @@ -621,10 +621,16 @@ break; } nth_tap++; + + if (nth_tap >= x ) + { + LOG_ERROR("BUG: not enough fields allocated!"); + } + scan_size = tap->ir_length; (*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].in_value = fields[nth_tap].in_value; + (*last_cmd)->cmd.scan->fields[nth_tap].in_value = NULL; /* search the list */ for (j = 0; j < num_fields; j++) @@ -632,6 +638,7 @@ if (tap == fields[j].tap) { 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); tap->bypass = 0; @@ -649,6 +656,10 @@ /* update device information */ buf_cpy((*last_cmd)->cmd.scan->fields[nth_tap].out_value, tap->cur_instr, scan_size); } + if (nth_tap != x ) + { + LOG_ERROR("BUG: all the scan fields where not filled out %d %d!", nth_tap, x); + } return ERROR_OK; } @@ -1450,7 +1461,7 @@ /* each flush can take as much as 1-2ms on high bandwidth low latency interfaces. * E.g. a JTAG over TCP/IP or USB.... */ - jtag_flush_queue_count++; + jtag_flush_queue_count++; int retval=interface_jtag_execute_queue(); /* we keep the first error */
_______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development