You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(75) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(70) |
Feb
(20) |
Mar
(52) |
Apr
(149) |
May
(387) |
Jun
(466) |
Jul
(133) |
Aug
(87) |
Sep
(122) |
Oct
(140) |
Nov
(185) |
Dec
(105) |
2010 |
Jan
(85) |
Feb
(45) |
Mar
(75) |
Apr
(17) |
May
(41) |
Jun
(52) |
Jul
(33) |
Aug
(29) |
Sep
(36) |
Oct
(15) |
Nov
(26) |
Dec
(34) |
2011 |
Jan
(26) |
Feb
(25) |
Mar
(26) |
Apr
(29) |
May
(20) |
Jun
(27) |
Jul
(15) |
Aug
(32) |
Sep
(13) |
Oct
(64) |
Nov
(60) |
Dec
(10) |
2012 |
Jan
(64) |
Feb
(63) |
Mar
(39) |
Apr
(43) |
May
(54) |
Jun
(11) |
Jul
(30) |
Aug
(45) |
Sep
(11) |
Oct
(70) |
Nov
(24) |
Dec
(23) |
2013 |
Jan
(17) |
Feb
(8) |
Mar
(35) |
Apr
(40) |
May
(20) |
Jun
(24) |
Jul
(36) |
Aug
(25) |
Sep
(42) |
Oct
(40) |
Nov
(9) |
Dec
(21) |
2014 |
Jan
(29) |
Feb
(24) |
Mar
(60) |
Apr
(22) |
May
(22) |
Jun
(46) |
Jul
(11) |
Aug
(23) |
Sep
(26) |
Oct
(10) |
Nov
(14) |
Dec
(2) |
2015 |
Jan
(28) |
Feb
(47) |
Mar
(33) |
Apr
(58) |
May
(5) |
Jun
(1) |
Jul
|
Aug
(8) |
Sep
(12) |
Oct
(25) |
Nov
(58) |
Dec
(21) |
2016 |
Jan
(12) |
Feb
(40) |
Mar
(2) |
Apr
(1) |
May
(67) |
Jun
(2) |
Jul
(5) |
Aug
(36) |
Sep
|
Oct
(24) |
Nov
(17) |
Dec
(50) |
2017 |
Jan
(14) |
Feb
(16) |
Mar
(2) |
Apr
(35) |
May
(14) |
Jun
(16) |
Jul
(3) |
Aug
(3) |
Sep
|
Oct
(19) |
Nov
|
Dec
(16) |
2018 |
Jan
(55) |
Feb
(11) |
Mar
(34) |
Apr
(14) |
May
(4) |
Jun
(20) |
Jul
(39) |
Aug
(16) |
Sep
(17) |
Oct
(16) |
Nov
(20) |
Dec
(30) |
2019 |
Jan
(29) |
Feb
(24) |
Mar
(37) |
Apr
(26) |
May
(19) |
Jun
(21) |
Jul
(2) |
Aug
(3) |
Sep
(9) |
Oct
(12) |
Nov
(12) |
Dec
(12) |
2020 |
Jan
(47) |
Feb
(36) |
Mar
(54) |
Apr
(44) |
May
(37) |
Jun
(19) |
Jul
(32) |
Aug
(13) |
Sep
(16) |
Oct
(24) |
Nov
(32) |
Dec
(11) |
2021 |
Jan
(14) |
Feb
(5) |
Mar
(40) |
Apr
(32) |
May
(42) |
Jun
(31) |
Jul
(29) |
Aug
(47) |
Sep
(38) |
Oct
(17) |
Nov
(74) |
Dec
(33) |
2022 |
Jan
(11) |
Feb
(15) |
Mar
(40) |
Apr
(21) |
May
(39) |
Jun
(44) |
Jul
(19) |
Aug
(46) |
Sep
(79) |
Oct
(35) |
Nov
(21) |
Dec
(15) |
2023 |
Jan
(56) |
Feb
(13) |
Mar
(43) |
Apr
(28) |
May
(60) |
Jun
(15) |
Jul
(29) |
Aug
(28) |
Sep
(32) |
Oct
(21) |
Nov
(42) |
Dec
(39) |
2024 |
Jan
(35) |
Feb
(17) |
Mar
(28) |
Apr
(7) |
May
(14) |
Jun
(35) |
Jul
(30) |
Aug
(35) |
Sep
(30) |
Oct
(28) |
Nov
(38) |
Dec
(18) |
2025 |
Jan
(21) |
Feb
(28) |
Mar
(36) |
Apr
(35) |
May
(34) |
Jun
(58) |
Jul
(9) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <zw...@ma...> - 2009-05-10 22:10:16
|
Author: zwelch Date: 2009-05-10 22:10:11 +0200 (Sun, 10 May 2009) New Revision: 1693 Modified: trunk/configure.in Log: Extend configure script to check for environ declaration in stdlib.h. Patch contributed by Martin Thomas <mt...@rh...>. Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-05-10 19:48:09 UTC (rev 1692) +++ trunk/configure.in 2009-05-10 20:10:11 UTC (rev 1693) @@ -788,11 +788,12 @@ AM_PROG_CC_C_O AC_PROG_RANLIB -# Look for environ alternatives. Possibility #1: is environ in unistd.h? -AC_MSG_CHECKING([for environ in unistd.h]) +# Look for environ alternatives. Possibility #1: is environ in unistd.h or stdlib.h? +AC_MSG_CHECKING([for environ in unistd.h and stdlib.h]) AC_COMPILE_IFELSE([ #define _GNU_SOURCE #include <unistd.h> +#include <stdlib.h> int main(int argc, char **argv) { char **ep = environ; } ], [ AC_MSG_RESULT([yes]) |
From: oharboe at B. <oh...@ma...> - 2009-05-10 21:48:13
|
Author: oharboe Date: 2009-05-10 21:48:09 +0200 (Sun, 10 May 2009) New Revision: 1692 Modified: trunk/src/jtag/jtag.c trunk/src/jtag/jtag.h zy1000/trunk/build/include/jtag_minidriver.h Log: Wrote up post processing JTAG API. Not used yet, but reference implementation will be used in subsequent explanations of new scheme + patches to use it. Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-05-10 19:44:38 UTC (rev 1691) +++ trunk/src/jtag/jtag.c 2009-05-10 19:48:09 UTC (rev 1692) @@ -76,6 +76,24 @@ int jtag_trst = 0; int jtag_srst = 0; +#ifndef HAVE_JTAG_MINIDRIVER_H +struct jtag_callback_entry +{ + struct jtag_callback_entry *next; + + jtag_callback_t callback; + u8 *in; + jtag_callback_data_t data1; + jtag_callback_data_t data2; + +}; + + +static struct jtag_callback_entry *jtag_callback_queue_head = NULL; +static struct jtag_callback_entry *jtag_callback_queue_tail = NULL; +#endif + + jtag_command_t *jtag_command_queue = NULL; jtag_command_t **last_comand_pointer = &jtag_command_queue; static jtag_tap_t *jtag_all_taps = NULL; @@ -1434,8 +1452,47 @@ return type; } -int MINIDRIVER(interface_jtag_execute_queue)(void) + +#ifndef HAVE_JTAG_MINIDRIVER_H +/* add callback to end of queue */ +void jtag_add_callback3(jtag_callback_t callback, u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2) { + struct jtag_callback_entry *entry=cmd_queue_alloc(sizeof(struct jtag_callback_entry)); + + entry->next=NULL; + entry->callback=callback; + entry->in=in; + entry->data1=data1; + entry->data2=data2; + + if (jtag_callback_queue_head==NULL) + { + jtag_callback_queue_head=entry; + jtag_callback_queue_tail=entry; + } else + { + jtag_callback_queue_tail->next=entry; + jtag_callback_queue_tail=entry; + } +} + + +static int jtag_convert_to_callback3(u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2) +{ + ((jtag_callback1_t)data1)(in); + return ERROR_OK; +} + +void jtag_add_callback(jtag_callback1_t callback, u8 *in) +{ + jtag_add_callback3(jtag_convert_to_callback3, in, (jtag_callback_data_t)callback, 0); +} +#endif + +#ifndef HAVE_JTAG_MINIDRIVER_H + +int interface_jtag_execute_queue(void) +{ int retval; if (jtag==NULL) @@ -1446,13 +1503,28 @@ retval = jtag->execute_queue(); + if (retval == ERROR_OK) + { + struct jtag_callback_entry *entry; + for (entry=jtag_callback_queue_head; entry!=NULL; entry=entry->next) + { + retval=entry->callback(entry->in, entry->data1, entry->data2); + if (retval!=ERROR_OK) + break; + } + } + cmd_queue_free(); + jtag_callback_queue_head = NULL; + jtag_callback_queue_tail = NULL; + jtag_command_queue = NULL; last_comand_pointer = &jtag_command_queue; return retval; } +#endif void jtag_execute_queue_noclear(void) { Modified: trunk/src/jtag/jtag.h =================================================================== --- trunk/src/jtag/jtag.h 2009-05-10 19:44:38 UTC (rev 1691) +++ trunk/src/jtag/jtag.h 2009-05-10 19:48:09 UTC (rev 1692) @@ -568,6 +568,70 @@ extern void jtag_add_plain_dr_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); extern int interface_jtag_add_plain_dr_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); + +/* Simplest/typical callback - do some conversion on the data clocked in. + * This callback is for such conversion that can not fail. + * For conversion types or checks that can + * fail, use the jtag_callback_t variant */ +typedef void (*jtag_callback1_t)(u8 *in); + +#ifndef HAVE_JTAG_MINIDRIVER_H +/* A simpler version of jtag_add_callback3 */ +extern void jtag_add_callback(jtag_callback1_t, u8 *in); +#else +/* implemented by minidriver */ +#endif + +/* This type can store an integer safely by a normal cast on 64 and + * 32 bit systems. */ +typedef void *jtag_callback_data_t; + +/* The generic callback mechanism. + * + * The callback is invoked with three arguments. The first argument is + * the pointer to the data clocked in. + */ +typedef int (*jtag_callback_t)(u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2); + + +/* This callback can be executed immediately the queue has been flushed. Note that + * the JTAG queue can either be executed synchronously or asynchronously. Typically + * for USB the queue is executed asynchronously. For low latency interfaces, the + * queue may be executed synchronously. + * + * These callbacks are typically executed *after* the *entire* JTAG queue has been + * executed for e.g. USB interfaces. + * + * The callbacks are guaranteeed to be invoked in the order that they were queued. + * + * The strange name is due to C's lack of overloading using function arguments + * + * The callback mechansim is very general and does not really make any assumptions + * about what the callback does and what the arguments are. + * + * in - typically used to point to the data to operate on. More often than not + * this will be the data clocked in during a shift operation + * + * data1 - an integer that is big enough to be used either as an 'int' or + * cast to/from a pointer + * + * data2 - an integer that is big enough to be used either as an 'int' or + * cast to/from a pointer + * + * Why stop at 'data2' for arguments? Somewhat historical reasons. This is + * sufficient to implement the jtag_check_value_mask(), besides the + * line is best drawn somewhere... + * + * If the execution of the queue fails before the callbacks, then the + * callbacks may or may not be invoked depending on driver implementation. + */ +#ifndef HAVE_JTAG_MINIDRIVER_H +extern void jtag_add_callback3(jtag_callback_t, u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2); +#else +/* implemented by minidriver */ +#endif + + /* run a TAP_RESET reset. End state is TAP_RESET, regardless * of start state. */ Modified: zy1000/trunk/build/include/jtag_minidriver.h =================================================================== --- zy1000/trunk/build/include/jtag_minidriver.h 2009-05-10 19:44:38 UTC (rev 1691) +++ zy1000/trunk/build/include/jtag_minidriver.h 2009-05-10 19:48:09 UTC (rev 1692) @@ -208,3 +208,6 @@ } } +#define jtag_add_callback(callback, in) callback(in) + +#define jtag_add_callback3(callback, in, data1, data2) jtag_set_error(callback(in, data1, data2)) |
From: <zw...@ma...> - 2009-05-10 21:44:49
|
Author: zwelch Date: 2009-05-10 21:44:38 +0200 (Sun, 10 May 2009) New Revision: 1691 Added: trunk/src/helper/tclapi.c trunk/src/helper/tclapi.h Modified: trunk/src/helper/Makefile.am trunk/src/openocd.c Log: Revive tclapi.c from r1650: * Remove superfluous #include directives. * Fix warnings and API usage to cure its bit rot. * Build into libhelper library (for now). Add tclapi.h to export tclapi_register_commands(). Register tclapi commands in openocd.c:setup_command_handler(). Modified: trunk/src/helper/Makefile.am =================================================================== --- trunk/src/helper/Makefile.am 2009-05-10 19:02:07 UTC (rev 1690) +++ trunk/src/helper/Makefile.am 2009-05-10 19:44:38 UTC (rev 1691) @@ -15,7 +15,9 @@ -libhelper_a_SOURCES = binarybuffer.c $(CONFIGFILES) configuration.c log.c command.c time_support.c \ +libhelper_a_SOURCES = \ + binarybuffer.c $(CONFIGFILES) configuration.c \ + log.c command.c time_support.c tclapi.c \ replacements.c fileio.c startup_tcl.c if IOUTIL Copied: trunk/src/helper/tclapi.c (from rev 1650, trunk/src/helper/tclapi.c) =================================================================== --- trunk/src/helper/tclapi.c 2009-05-07 20:19:04 UTC (rev 1650) +++ trunk/src/helper/tclapi.c 2009-05-10 19:44:38 UTC (rev 1691) @@ -0,0 +1,516 @@ +/*************************************************************************** + * Copyright (C) 2007,2008 vind Harboe * + * Copyright (C) 2008 Duane Ellis * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tclapi.h" +#include "../target/target.h" +#include "../jtag/jtag.h" +#include "../flash/flash.h" + +#include <string.h> + + +static int new_int_array_element(Jim_Interp * interp, const char *varname, int idx, u32 val) +{ + char *namebuf; + Jim_Obj *nameObjPtr, *valObjPtr; + int result; + + namebuf = alloc_printf("%s(%d)", varname, idx); + if (!namebuf) + return JIM_ERR; + + nameObjPtr = Jim_NewStringObj(interp, namebuf, -1); + valObjPtr = Jim_NewIntObj(interp, val); + if (!nameObjPtr || !valObjPtr) + { + free(namebuf); + return JIM_ERR; + } + + Jim_IncrRefCount(nameObjPtr); + Jim_IncrRefCount(valObjPtr); + result = Jim_SetVariable(interp, nameObjPtr, valObjPtr); + Jim_DecrRefCount(interp, nameObjPtr); + Jim_DecrRefCount(interp, valObjPtr); + free(namebuf); + /* printf("%s(%d) <= 0%08x\n", varname, idx, val); */ + return result; +} + +static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ + target_t *target; + command_context_t *context; + long l; + u32 width; + int len; + u32 addr; + unsigned count; + u32 v; + const char *varname; + u8 buffer[4096]; + unsigned i, n; + int e, retval; + + /* argv[1] = name of array to receive the data + * argv[2] = desired width + * argv[3] = memory address + * argv[4] = count of times to read + */ + if (argc != 5) { + Jim_WrongNumArgs(interp, 1, argv, "varname width addr nelems"); + return JIM_ERR; + } + varname = Jim_GetString(argv[1], &len); + /* given "foo" get space for worse case "foo(%d)" .. add 20 */ + + e = Jim_GetLong(interp, argv[2], &l); + width = l; + if (e != JIM_OK) { + return e; + } + + e = Jim_GetLong(interp, argv[3], &l); + addr = l; + if (e != JIM_OK) { + return e; + } + e = Jim_GetLong(interp, argv[4], &l); + len = l; + if (e != JIM_OK) { + return e; + } + switch (width) { + case 8: + width = 1; + break; + case 16: + width = 2; + break; + case 32: + width = 4; + break; + default: + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + Jim_AppendStrings( interp, Jim_GetResult(interp), "Invalid width param, must be 8/16/32", NULL ); + return JIM_ERR; + } + if (len == 0) { + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: zero width read?", NULL); + return JIM_ERR; + } + if ((addr + (len * width)) < addr) { + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: addr + len - wraps to zero?", NULL); + return JIM_ERR; + } + /* absurd transfer size? */ + if (len > 65536) { + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: absurd > 64K item request", NULL); + return JIM_ERR; + } + + if ((width == 1) || + ((width == 2) && ((addr & 1) == 0)) || + ((width == 4) && ((addr & 3) == 0))) { + /* all is well */ + } else { + char buf[100]; + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + sprintf(buf, "mem2array address: 0x%08x is not aligned for %d byte reads", addr, width); + Jim_AppendStrings(interp, Jim_GetResult(interp), buf , NULL); + return JIM_ERR; + } + + context = Jim_GetAssocData(interp, "context"); + if (context == NULL) + { + LOG_ERROR("mem2array: no command context"); + return JIM_ERR; + } + target = get_current_target(context); + if (target == NULL) + { + LOG_ERROR("mem2array: no current target"); + return JIM_ERR; + } + + /* Transfer loop */ + + /* index counter */ + n = 0; + /* assume ok */ + e = JIM_OK; + while (len) { + /* Slurp... in buffer size chunks */ + + count = len; /* in objects.. */ + if (count > (sizeof(buffer)/width)) { + count = (sizeof(buffer)/width); + } + + retval = target->type->read_memory( target, addr, width, count, buffer ); + if (retval != ERROR_OK) { + /* BOO !*/ + LOG_ERROR("mem2array: Read @ 0x%08x, w=%d, cnt=%d, failed", addr, width, count); + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: cannot read memory", NULL); + e = JIM_ERR; + len = 0; + } else { + v = 0; /* shut up gcc */ + for (i = 0 ;i < count ;i++, n++) { + switch (width) { + case 4: + v = target_buffer_get_u32(target, &buffer[i*width]); + break; + case 2: + v = target_buffer_get_u16(target, &buffer[i*width]); + break; + case 1: + v = buffer[i] & 0x0ff; + break; + } + new_int_array_element(interp, varname, n, v); + } + len -= count; + } + } + + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + + return JIM_OK; +} + +static int get_int_array_element(Jim_Interp * interp, const char *varname, int idx, u32 *val) +{ + char *namebuf; + Jim_Obj *nameObjPtr, *valObjPtr; + int result; + long l; + + namebuf = alloc_printf("%s(%d)", varname, idx); + if (!namebuf) + return JIM_ERR; + + nameObjPtr = Jim_NewStringObj(interp, namebuf, -1); + if (!nameObjPtr) + { + free(namebuf); + return JIM_ERR; + } + + Jim_IncrRefCount(nameObjPtr); + valObjPtr = Jim_GetVariable(interp, nameObjPtr, JIM_ERRMSG); + Jim_DecrRefCount(interp, nameObjPtr); + free(namebuf); + if (valObjPtr == NULL) + return JIM_ERR; + + result = Jim_GetLong(interp, valObjPtr, &l); + /* printf("%s(%d) => 0%08x\n", varname, idx, val); */ + *val = l; + return result; +} + +static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ + target_t *target; + command_context_t *context; + long l; + u32 width; + int len; + u32 addr; + u32 count; + u32 v; + const char *varname; + u8 buffer[4096]; + int n, e, retval; + + /* argv[1] = name of array to get the data + * argv[2] = desired width + * argv[3] = memory address + * argv[4] = count to write + */ + if (argc != 5) { + Jim_WrongNumArgs(interp, 1, argv, "varname width addr nelems"); + return JIM_ERR; + } + varname = Jim_GetString(argv[1], &len); + /* given "foo" get space for worse case "foo(%d)" .. add 20 */ + + e = Jim_GetLong(interp, argv[2], &l); + width = l; + if (e != JIM_OK) { + return e; + } + + e = Jim_GetLong(interp, argv[3], &l); + addr = l; + if (e != JIM_OK) { + return e; + } + e = Jim_GetLong(interp, argv[4], &l); + len = l; + if (e != JIM_OK) { + return e; + } + switch (width) { + case 8: + width = 1; + break; + case 16: + width = 2; + break; + case 32: + width = 4; + break; + default: + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + Jim_AppendStrings( interp, Jim_GetResult(interp), "Invalid width param, must be 8/16/32", NULL ); + return JIM_ERR; + } + if (len == 0) { + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + Jim_AppendStrings(interp, Jim_GetResult(interp), "array2mem: zero width read?", NULL); + return JIM_ERR; + } + if ((addr + (len * width)) < addr) { + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + Jim_AppendStrings(interp, Jim_GetResult(interp), "array2mem: addr + len - wraps to zero?", NULL); + return JIM_ERR; + } + /* absurd transfer size? */ + if (len > 65536) { + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + Jim_AppendStrings(interp, Jim_GetResult(interp), "array2mem: absurd > 64K item request", NULL); + return JIM_ERR; + } + + if ((width == 1) || + ((width == 2) && ((addr & 1) == 0)) || + ((width == 4) && ((addr & 3) == 0))) { + /* all is well */ + } else { + char buf[100]; + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + sprintf(buf, "array2mem address: 0x%08x is not aligned for %d byte reads", addr, width); + Jim_AppendStrings(interp, Jim_GetResult(interp), buf , NULL); + return JIM_ERR; + } + + context = Jim_GetAssocData(interp, "context"); + if (context == NULL) + { + LOG_ERROR("array2mem: no command context"); + return JIM_ERR; + } + target = get_current_target(context); + if (target == NULL) + { + LOG_ERROR("array2mem: no current target"); + return JIM_ERR; + } + + /* Transfer loop */ + + /* index counter */ + n = 0; + /* assume ok */ + e = JIM_OK; + while (len) { + /* Slurp... in buffer size chunks */ + + count = len; /* in objects.. */ + if (count > (sizeof(buffer)/width)) { + count = (sizeof(buffer)/width); + } + + v = 0; /* shut up gcc */ + for (unsigned i = 0 ;i < count ;i++, n++) { + get_int_array_element(interp, varname, n, &v); + switch (width) { + case 4: + target_buffer_set_u32(target, &buffer[i*width], v); + break; + case 2: + target_buffer_set_u16(target, &buffer[i*width], v); + break; + case 1: + buffer[i] = v & 0x0ff; + break; + } + } + len -= count; + + retval = target->type->write_memory(target, addr, width, count, buffer); + if (retval != ERROR_OK) { + /* BOO !*/ + LOG_ERROR("array2mem: Write @ 0x%08x, w=%d, cnt=%d, failed", addr, width, count); + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: cannot read memory", NULL); + e = JIM_ERR; + len = 0; + } + } + + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + + return JIM_OK; +} + +int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args) +{ + int retval; + scan_field_t *fields; + int num_fields; + int field_count = 0; + int i, e; + long device; + + /* args[1] = device + * args[2] = num_bits + * args[3] = hex string + * ... repeat num bits and hex string ... + */ + if ((argc < 4) || ((argc % 2)!=0)) + { + Jim_WrongNumArgs(interp, 1, args, "<device> <num_bits1> <value1> <num_bits2> <value2> ..."); + return JIM_ERR; + } + + for (i = 2; i < argc; i+=2) + { + long bits; + + e = Jim_GetLong(interp, args[i], &bits); + if (e != JIM_OK) + return e; + } + + e = Jim_GetLong(interp, args[1], &device); + if (e != JIM_OK) + return e; + + num_fields=(argc-2)/2; + fields = malloc(sizeof(scan_field_t) * num_fields); + for (i = 2; i < argc; i+=2) + { + long bits; + int len; + const char *str; + + Jim_GetLong(interp, args[i], &bits); + str = Jim_GetString(args[i+1], &len); + + fields[field_count].num_bits = bits; + fields[field_count].out_value = malloc(CEIL(bits, 8)); + str_to_buf(str, len, fields[field_count].out_value, bits, 0); + fields[field_count].in_value = fields[field_count].out_value; + } + + jtag_add_dr_scan(num_fields, fields, TAP_INVALID); + retval = jtag_execute_queue(); + if (retval != ERROR_OK) + { + Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); + Jim_AppendStrings(interp, Jim_GetResult(interp), "drscan: jtag execute failed", NULL); + return JIM_ERR; + } + + field_count=0; + Jim_Obj *list = Jim_NewListObj(interp, NULL, 0); + for (i = 2; i < argc; i+=2) + { + long bits; + char *str; + + Jim_GetLong(interp, args[i], &bits); + str = buf_to_str(fields[field_count].in_value, bits, 16); + free(fields[field_count].out_value); + + Jim_ListAppendElement(interp, list, Jim_NewStringObj(interp, str, strlen(str))); + free(str); + field_count++; + } + + Jim_SetResult(interp, list); + + free(fields); + + return JIM_OK; +} + +static int jim_flash_banks(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ + + if (argc != 1) { + Jim_WrongNumArgs(interp, 1, argv, "no arguments to flash_banks command"); + return JIM_ERR; + } + + unsigned flash_banks = flash_get_bank_count(); + if (!flash_banks) + { + return JIM_ERR; + } + + Jim_Obj *list=Jim_NewListObj(interp, NULL, 0); + for (unsigned i = 0; i < flash_banks; i++) + { + flash_bank_t *p = get_flash_bank_by_num(i); + Jim_Obj *elem=Jim_NewListObj(interp, NULL, 0); + + Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "name", -1)); + Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, p->driver->name, -1)); + Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "base", -1)); + Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->base)); + Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "size", -1)); + Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->size)); + Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "bus_width", -1)); + Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->bus_width)); + Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "chip_width", -1)); + Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->chip_width)); + + Jim_ListAppendElement(interp, list, elem); + } + + Jim_SetResult(interp, list); + + return JIM_OK; +} + +int tclapi_register_commands(struct command_context_s *cmd_ctx) +{ + register_jim(cmd_ctx, "ocd_mem2array", &jim_mem2array, + "read memory and return as a TCL array for script processing"); + register_jim(cmd_ctx, "ocd_array2mem", &jim_array2mem, + "convert a TCL array to memory locations and write the values"); + register_jim(cmd_ctx, "drscan", &Jim_Command_drscan, + "execute DR scan <device> <num_bits> <value> <num_bits1> <value2> ..."); + register_jim(cmd_ctx, "ocd_flash_banks", &jim_flash_banks, + "return information about the flash banks"); + return ERROR_OK; +} Added: trunk/src/helper/tclapi.h =================================================================== --- trunk/src/helper/tclapi.h 2009-05-10 19:02:07 UTC (rev 1690) +++ trunk/src/helper/tclapi.h 2009-05-10 19:44:38 UTC (rev 1691) @@ -0,0 +1,26 @@ +/*************************************************************************** + * Copyright (C) 2009 by Zachary T Welch <zw...@su...> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef TCLAPI_H +#define TCLAPI_H + +#include "command.h" + +int tclapi_register_commands(struct command_context_s *ctx); + +#endif // TCLAPI_H Modified: trunk/src/openocd.c =================================================================== --- trunk/src/openocd.c 2009-05-10 19:02:07 UTC (rev 1690) +++ trunk/src/openocd.c 2009-05-10 19:44:38 UTC (rev 1691) @@ -41,6 +41,7 @@ #include "mflash.h" #include "command.h" +#include "tclapi.h" #include "server.h" #include "telnet_server.h" #include "gdb_server.h" @@ -202,6 +203,7 @@ telnet_register_commands(cmd_ctx); gdb_register_commands(cmd_ctx); tcl_register_commands(cmd_ctx); /* tcl server commands */ + tclapi_register_commands(cmd_ctx); /* misc tcl commands */ log_register_commands(cmd_ctx); jtag_register_commands(cmd_ctx); xsvf_register_commands(cmd_ctx); |
From: oharboe at B. <oh...@ma...> - 2009-05-10 21:02:10
|
Author: oharboe Date: 2009-05-10 21:02:07 +0200 (Sun, 10 May 2009) New Revision: 1690 Modified: trunk/src/target/arm720t.c trunk/src/target/arm7_9_common.c trunk/src/target/arm7_9_common.h trunk/src/target/arm7tdmi.c trunk/src/target/arm920t.c trunk/src/target/arm926ejs.c trunk/src/target/arm9tdmi.c trunk/src/target/armv4_5.c trunk/src/target/armv4_5.h trunk/src/target/armv4_5_cache.c trunk/src/target/armv4_5_mmu.c Log: David Brownell <da...@pa...> whitespace fixes. Modified: trunk/src/target/arm720t.c =================================================================== --- trunk/src/target/arm720t.c 2009-05-10 19:01:03 UTC (rev 1689) +++ trunk/src/target/arm720t.c 2009-05-10 19:02:07 UTC (rev 1690) @@ -113,13 +113,12 @@ fields[0].num_bits = 1; fields[0].out_value = &instruction_buf; fields[0].in_value = NULL; - fields[1].tap = jtag_info->tap; fields[1].num_bits = 32; fields[1].out_value = out_buf; fields[1].in_value = NULL; - + if (in) { u8 tmp[4]; Modified: trunk/src/target/arm7_9_common.c =================================================================== --- trunk/src/target/arm7_9_common.c 2009-05-10 19:01:03 UTC (rev 1689) +++ trunk/src/target/arm7_9_common.c 2009-05-10 19:02:07 UTC (rev 1690) @@ -1287,7 +1287,7 @@ /* iterate through processor modes (User, FIQ, IRQ, SVC, ABT, UND) * SYS shares registers with User, so we don't touch SYS */ - for(i = 0; i < 6; i++) + for (i = 0; i < 6; i++) { u32 mask = 0; u32* reg_p[16]; Modified: trunk/src/target/arm7_9_common.h =================================================================== --- trunk/src/target/arm7_9_common.h 2009-05-10 19:01:03 UTC (rev 1689) +++ trunk/src/target/arm7_9_common.h 2009-05-10 19:02:07 UTC (rev 1690) @@ -41,10 +41,10 @@ typedef struct arm7_9_common_s { u32 common_magic; - + arm_jtag_t jtag_info; reg_cache_t *eice_cache; - + u32 arm_bkpt; u16 thumb_bkpt; int sw_breakpoints_added; @@ -58,32 +58,32 @@ int dbgreq_adjust_pc; int use_dbgrq; int need_bypass_before_restart; - + etm_context_t *etm_ctx; - + int has_single_step; int has_monitor_mode; int has_vector_catch; - + int debug_entry_from_reset; - + struct working_area_s *dcc_working_area; - + int fast_memory_access; int dcc_downloads; int (*examine_debug_reason)(target_t *target); - + void (*change_to_arm)(target_t *target, u32 *r0, u32 *pc); - + void (*read_core_regs)(target_t *target, u32 mask, u32 *core_regs[16]); void (*read_core_regs_target_buffer)(target_t *target, u32 mask, void *buffer, int size); void (*read_xpsr)(target_t *target, u32 *xpsr, int spsr); - + void (*write_xpsr)(target_t *target, u32 xpsr, int spsr); void (*write_xpsr_im8)(target_t *target, u8 xpsr_im, int rot, int spsr); void (*write_core_regs)(target_t *target, u32 mask, u32 core_regs[16]); - + void (*load_word_regs)(target_t *target, u32 mask); void (*load_hword_reg)(target_t *target, int num); void (*load_byte_reg)(target_t *target, int num); @@ -91,22 +91,22 @@ void (*store_word_regs)(target_t *target, u32 mask); void (*store_hword_reg)(target_t *target, int num); void (*store_byte_reg)(target_t *target, int num); - + void (*write_pc)(target_t *target, u32 pc); void (*branch_resume)(target_t *target); void (*branch_resume_thumb)(target_t *target); - + void (*enable_single_step)(target_t *target, u32 next_pc); void (*disable_single_step)(target_t *target); - + void (*set_special_dbgrq)(target_t *target); void (*pre_debug_entry)(target_t *target); void (*post_debug_entry)(target_t *target); - + void (*pre_restore_context)(target_t *target); void (*post_restore_context)(target_t *target); - + armv4_5_common_t armv4_5_common; void *arch_info; Modified: trunk/src/target/arm7tdmi.c =================================================================== --- trunk/src/target/arm7tdmi.c 2009-05-10 19:01:03 UTC (rev 1689) +++ trunk/src/target/arm7tdmi.c 2009-05-10 19:02:07 UTC (rev 1690) @@ -115,13 +115,11 @@ fields[0].num_bits = 1; fields[0].out_value = NULL; fields[0].in_value = &breakpoint; - fields[1].tap = arm7_9->jtag_info.tap; fields[1].num_bits = 32; fields[1].out_value = NULL; fields[1].in_value = databus; - if((retval = arm_jtag_scann(&arm7_9->jtag_info, 0x1)) != ERROR_OK) { @@ -194,15 +192,12 @@ fields[0].num_bits = 1; fields[0].out_value = NULL; fields[0].in_value = NULL; - - fields[1].tap = jtag_info->tap; fields[1].num_bits = 32; fields[1].out_value = NULL; u8 tmp[4]; fields[1].in_value = tmp; - jtag_add_dr_scan_now(2, fields, TAP_INVALID); @@ -286,14 +281,12 @@ fields[0].num_bits = 1; fields[0].out_value = NULL; fields[0].in_value = NULL; - fields[1].tap = jtag_info->tap; fields[1].num_bits = 32; fields[1].out_value = NULL; u8 tmp[4]; fields[1].in_value = tmp; - jtag_add_dr_scan_now(2, fields, TAP_INVALID); Modified: trunk/src/target/arm920t.c =================================================================== --- trunk/src/target/arm920t.c 2009-05-10 19:01:03 UTC (rev 1689) +++ trunk/src/target/arm920t.c 2009-05-10 19:02:07 UTC (rev 1690) @@ -114,25 +114,21 @@ fields[0].num_bits = 1; fields[0].out_value = &access_type_buf; fields[0].in_value = NULL; - fields[1].tap = jtag_info->tap; fields[1].num_bits = 32; fields[1].out_value = NULL; fields[1].in_value = NULL; - fields[2].tap = jtag_info->tap; fields[2].num_bits = 6; fields[2].out_value = ®_addr_buf; fields[2].in_value = NULL; - fields[3].tap = jtag_info->tap; fields[3].num_bits = 1; fields[3].out_value = &nr_w_buf; fields[3].in_value = NULL; - jtag_add_dr_scan(4, fields, TAP_INVALID); @@ -171,43 +167,23 @@ fields[0].tap = jtag_info->tap; fields[0].num_bits = 1; fields[0].out_value = &access_type_buf; - fields[0].in_value = NULL; - - - - fields[1].tap = jtag_info->tap; fields[1].num_bits = 32; fields[1].out_value = value_buf; - fields[1].in_value = NULL; - - - - fields[2].tap = jtag_info->tap; fields[2].num_bits = 6; fields[2].out_value = ®_addr_buf; - fields[2].in_value = NULL; - - - - fields[3].tap = jtag_info->tap; fields[3].num_bits = 1; fields[3].out_value = &nr_w_buf; - fields[3].in_value = NULL; - - - - jtag_add_dr_scan(4, fields, TAP_INVALID); #ifdef _DEBUG_INSTRUCTION_EXECUTION_ @@ -238,43 +214,23 @@ fields[0].tap = jtag_info->tap; fields[0].num_bits = 1; fields[0].out_value = &access_type_buf; - fields[0].in_value = NULL; - - - - fields[1].tap = jtag_info->tap; fields[1].num_bits = 32; fields[1].out_value = cp15_opcode_buf; - fields[1].in_value = NULL; - - - - fields[2].tap = jtag_info->tap; fields[2].num_bits = 6; fields[2].out_value = ®_addr_buf; - fields[2].in_value = NULL; - - - - fields[3].tap = jtag_info->tap; fields[3].num_bits = 1; fields[3].out_value = &nr_w_buf; - fields[3].in_value = NULL; - - - - jtag_add_dr_scan(4, fields, TAP_INVALID); arm9tdmi_clock_out(jtag_info, arm_opcode, 0, NULL, 0); @@ -621,7 +577,7 @@ arm920t_common_t *arm920t = arm9tdmi->arch_info; reg_t *dbg_stat = &arm7_9->eice_cache->reg_list[EICE_DBG_STAT]; - if((retval = target_halt(target)) != ERROR_OK) + if ((retval = target_halt(target)) != ERROR_OK) { return retval; } @@ -633,7 +589,7 @@ if (buf_get_u32(dbg_stat->value, EICE_DBG_STATUS_DBGACK, 1) == 0) { embeddedice_read_reg(dbg_stat); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -676,7 +632,7 @@ arm920t->armv4_5_mmu.armv4_5_cache.d_u_cache_enabled = 0; arm920t->armv4_5_mmu.armv4_5_cache.i_cache_enabled = 0; - if((retval = target_call_event_callbacks(target, TARGET_EVENT_HALTED)) != ERROR_OK) + if ((retval = target_call_event_callbacks(target, TARGET_EVENT_HALTED)) != ERROR_OK) { return retval; } @@ -814,7 +770,7 @@ /* disable MMU and Caches */ arm920t_read_cp15_physical(target, ARM920T_CP15_PHYS_ADDR(0, 0x1, 0), &cp15_ctrl); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -877,7 +833,7 @@ /* read D RAM and CAM content */ arm9tdmi_read_core_regs(target, 0x3fe, regs_p); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -963,7 +919,7 @@ /* read I RAM and CAM content */ arm9tdmi_read_core_regs(target, 0x3fe, regs_p); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -1066,7 +1022,7 @@ /* disable MMU and Caches */ arm920t_read_cp15_physical(target, ARM920T_CP15_PHYS_ADDR(0, 0x1, 0), &cp15_ctrl); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -1076,7 +1032,7 @@ /* read CP15 test state register */ arm920t_read_cp15_physical(target, ARM920T_CP15_PHYS_ADDR(0, 0xf, 0), &cp15c15); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -1097,7 +1053,7 @@ /* read D TLB lockdown stored to r1 */ arm9tdmi_read_core_regs(target, 0x2, regs_p); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -1126,7 +1082,7 @@ /* read D TLB CAM content stored to r2-r9 */ arm9tdmi_read_core_regs(target, 0x3fc, regs_p); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -1161,7 +1117,7 @@ /* read D TLB RAM content stored to r2 and r3 */ arm9tdmi_read_core_regs(target, 0xc, regs_p); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -1193,7 +1149,7 @@ /* read I TLB lockdown stored to r1 */ arm9tdmi_read_core_regs(target, 0x2, regs_p); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -1222,7 +1178,7 @@ /* read I TLB CAM content stored to r2-r9 */ arm9tdmi_read_core_regs(target, 0x3fc, regs_p); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -1257,7 +1213,7 @@ /* read I TLB RAM content stored to r2 and r3 */ arm9tdmi_read_core_regs(target, 0xc, regs_p); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -1347,7 +1303,7 @@ command_print(cmd_ctx, "couldn't access reg %i", address); return ERROR_OK; } - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } Modified: trunk/src/target/arm926ejs.c =================================================================== --- trunk/src/target/arm926ejs.c 2009-05-10 19:01:03 UTC (rev 1689) +++ trunk/src/target/arm926ejs.c 2009-05-10 19:02:07 UTC (rev 1690) @@ -133,7 +133,7 @@ buf_set_u32(address_buf, 0, 14, address); jtag_add_end_state(TAP_IDLE); - if((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK) + if ((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK) { return retval; } @@ -151,20 +151,16 @@ fields[1].out_value = &access; fields[1].in_value = &access; - fields[2].tap = jtag_info->tap; fields[2].num_bits = 14; fields[2].out_value = address_buf; fields[2].in_value = NULL; - - fields[3].tap = jtag_info->tap; fields[3].num_bits = 1; fields[3].out_value = &nr_w_buf; fields[3].in_value = NULL; - jtag_add_dr_scan(4, fields, TAP_INVALID); /*TODO: add timeout*/ @@ -177,7 +173,7 @@ *value=le_to_h_u32(tmp); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -209,7 +205,7 @@ buf_set_u32(value_buf, 0, 32, value); jtag_add_end_state(TAP_IDLE); - if((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK) + if ((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK) { return retval; } @@ -218,43 +214,23 @@ fields[0].tap = jtag_info->tap; fields[0].num_bits = 32; fields[0].out_value = value_buf; - fields[0].in_value = NULL; - - - - fields[1].tap = jtag_info->tap; fields[1].num_bits = 1; fields[1].out_value = &access; - fields[1].in_value = &access; - - - - fields[2].tap = jtag_info->tap; fields[2].num_bits = 14; fields[2].out_value = address_buf; - fields[2].in_value = NULL; - - - - fields[3].tap = jtag_info->tap; fields[3].num_bits = 1; fields[3].out_value = &nr_w_buf; - fields[3].in_value = NULL; - - - - jtag_add_dr_scan(4, fields, TAP_INVALID); /*TODO: add timeout*/ do @@ -263,7 +239,7 @@ access = 0; nr_w_buf = 0; jtag_add_dr_scan(4, fields, TAP_INVALID); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -595,7 +571,7 @@ arm926ejs_common_t *arm926ejs = arm9tdmi->arch_info; reg_t *dbg_stat = &arm7_9->eice_cache->reg_list[EICE_DBG_STAT]; - if((retval = target_halt(target)) != ERROR_OK) + if ((retval = target_halt(target)) != ERROR_OK) { return retval; } @@ -607,7 +583,7 @@ if (buf_get_u32(dbg_stat->value, EICE_DBG_STATUS_DBGACK, 1) == 0) { embeddedice_read_reg(dbg_stat); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -812,7 +788,7 @@ command_print(cmd_ctx, "couldn't access register"); return ERROR_OK; } - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } Modified: trunk/src/target/arm9tdmi.c =================================================================== --- trunk/src/target/arm9tdmi.c 2009-05-10 19:01:03 UTC (rev 1689) +++ trunk/src/target/arm9tdmi.c 2009-05-10 19:02:07 UTC (rev 1690) @@ -128,41 +128,26 @@ fields[0].tap = arm7_9->jtag_info.tap; fields[0].num_bits = 32; fields[0].out_value = NULL; - fields[0].in_value = databus; - - - - fields[1].tap = arm7_9->jtag_info.tap; fields[1].num_bits = 3; fields[1].out_value = NULL; - fields[1].in_value = &debug_reason; - - - - fields[2].tap = arm7_9->jtag_info.tap; fields[2].num_bits = 32; fields[2].out_value = NULL; - fields[2].in_value = instructionbus; - - - - - if((retval = arm_jtag_scann(&arm7_9->jtag_info, 0x1)) != ERROR_OK) + if ((retval = arm_jtag_scann(&arm7_9->jtag_info, 0x1)) != ERROR_OK) { return retval; } arm_jtag_set_instr(&arm7_9->jtag_info, arm7_9->jtag_info.intest_instr, NULL); jtag_add_dr_scan(3, fields, TAP_DRPAUSE); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -206,7 +191,7 @@ buf_set_u32(&sysspeed_buf, 2, 1, 1); jtag_add_end_state(TAP_DRPAUSE); - if((retval = arm_jtag_scann(jtag_info, 0x1)) != ERROR_OK) + if ((retval = arm_jtag_scann(jtag_info, 0x1)) != ERROR_OK) { return retval; } @@ -217,20 +202,16 @@ fields[0].num_bits = 32; fields[0].out_value = out_buf; fields[0].in_value = NULL; - fields[1].tap = jtag_info->tap; fields[1].num_bits = 3; fields[1].out_value = &sysspeed_buf; fields[1].in_value = NULL; - - fields[2].tap = jtag_info->tap; fields[2].num_bits = 32; fields[2].out_value = instr_buf; fields[2].in_value = NULL; - if (in) { @@ -249,7 +230,7 @@ #ifdef _DEBUG_INSTRUCTION_EXECUTION_ { - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -273,7 +254,7 @@ scan_field_t fields[3]; jtag_add_end_state(TAP_DRPAUSE); - if((retval = arm_jtag_scann(jtag_info, 0x1)) != ERROR_OK) + if ((retval = arm_jtag_scann(jtag_info, 0x1)) != ERROR_OK) { return retval; } @@ -285,19 +266,16 @@ fields[0].out_value = NULL; u8 tmp[4]; fields[0].in_value = tmp; - fields[1].tap = jtag_info->tap; fields[1].num_bits = 3; fields[1].out_value = NULL; fields[1].in_value = NULL; - fields[2].tap = jtag_info->tap; fields[2].num_bits = 32; fields[2].out_value = NULL; fields[2].in_value = NULL; - jtag_add_dr_scan_now(3, fields, TAP_INVALID); @@ -307,7 +285,7 @@ #ifdef _DEBUG_INSTRUCTION_EXECUTION_ { - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -338,7 +316,7 @@ scan_field_t fields[3]; jtag_add_end_state(TAP_DRPAUSE); - if((retval = arm_jtag_scann(jtag_info, 0x1)) != ERROR_OK) + if ((retval = arm_jtag_scann(jtag_info, 0x1)) != ERROR_OK) { return retval; } @@ -350,19 +328,16 @@ fields[0].out_value = NULL; u8 tmp[4]; fields[0].in_value = tmp; - fields[1].tap = jtag_info->tap; fields[1].num_bits = 3; fields[1].out_value = NULL; fields[1].in_value = NULL; - fields[2].tap = jtag_info->tap; fields[2].num_bits = 32; fields[2].out_value = NULL; fields[2].in_value = NULL; - jtag_add_dr_scan_now(3, fields, TAP_INVALID); @@ -373,7 +348,7 @@ #ifdef _DEBUG_INSTRUCTION_EXECUTION_ { - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -435,7 +410,7 @@ /* NOP fetched, BX in Execute (1) */ arm9tdmi_clock_out(jtag_info, ARMV4_5_T_NOP, 0, NULL, 0); - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return; } @@ -1047,7 +1022,7 @@ for (i = 0; i < argc; i++) { /* go through list of vectors */ - for(j = 0; arm9tdmi_vectors[j].name; j++) + for (j = 0; arm9tdmi_vectors[j].name; j++) { if (strcmp(args[i], arm9tdmi_vectors[j].name) == 0) { Modified: trunk/src/target/armv4_5.c =================================================================== --- trunk/src/target/armv4_5.c 2009-05-10 19:01:03 UTC (rev 1689) +++ trunk/src/target/armv4_5.c 2009-05-10 19:02:07 UTC (rev 1690) @@ -428,23 +428,23 @@ for (i = 0; i < count; i++) { - if(thumb) + if (thumb) { - if((retval = target_read_u16(target, address, &thumb_opcode)) != ERROR_OK) + if ((retval = target_read_u16(target, address, &thumb_opcode)) != ERROR_OK) { return retval; } - if((retval = thumb_evaluate_opcode(thumb_opcode, address, &cur_instruction)) != ERROR_OK) + if ((retval = thumb_evaluate_opcode(thumb_opcode, address, &cur_instruction)) != ERROR_OK) { return retval; } } else { - if((retval = target_read_u32(target, address, &opcode)) != ERROR_OK) + if ((retval = target_read_u32(target, address, &opcode)) != ERROR_OK) { return retval; } - if((retval = arm_evaluate_opcode(opcode, address, &cur_instruction)) != ERROR_OK) + if ((retval = arm_evaluate_opcode(opcode, address, &cur_instruction)) != ERROR_OK) { return retval; } @@ -502,7 +502,7 @@ int retval; armv4_5_common_t *armv4_5 = target->arch_info; - if((retval = target_wait_state(target, TARGET_HALTED, timeout_ms)) != ERROR_OK) + if ((retval = target_wait_state(target, TARGET_HALTED, timeout_ms)) != ERROR_OK) { return retval; } @@ -564,7 +564,7 @@ for (i = 0; i < num_mem_params; i++) { - if((retval = target_write_buffer(target, mem_params[i].address, mem_params[i].size, mem_params[i].value)) != ERROR_OK) + if ((retval = target_write_buffer(target, mem_params[i].address, mem_params[i].size, mem_params[i].value)) != ERROR_OK) { return retval; } @@ -585,7 +585,7 @@ exit(-1); } - if((retval = armv4_5_set_core_reg(reg, reg_params[i].value)) != ERROR_OK) + if ((retval = armv4_5_set_core_reg(reg, reg_params[i].value)) != ERROR_OK) { return retval; } @@ -616,7 +616,7 @@ return ERROR_TARGET_FAILURE; } - if((retval = target_resume(target, 0, entry_point, 1, 1)) != ERROR_OK) + if ((retval = target_resume(target, 0, entry_point, 1, 1)) != ERROR_OK) { return retval; } @@ -631,7 +631,7 @@ for (i = 0; i < num_mem_params; i++) { if (mem_params[i].direction != PARAM_OUT) - if((retvaltemp = target_read_buffer(target, mem_params[i].address, mem_params[i].size, mem_params[i].value)) != ERROR_OK) + if ((retvaltemp = target_read_buffer(target, mem_params[i].address, mem_params[i].size, mem_params[i].value)) != ERROR_OK) { retval = retvaltemp; } Modified: trunk/src/target/armv4_5.h =================================================================== --- trunk/src/target/armv4_5.h 2009-05-10 19:01:03 UTC (rev 1689) +++ trunk/src/target/armv4_5.h 2009-05-10 19:02:07 UTC (rev 1690) @@ -29,10 +29,10 @@ typedef enum armv4_5_mode { - ARMV4_5_MODE_USR = 16, - ARMV4_5_MODE_FIQ = 17, - ARMV4_5_MODE_IRQ = 18, - ARMV4_5_MODE_SVC = 19, + ARMV4_5_MODE_USR = 16, + ARMV4_5_MODE_FIQ = 17, + ARMV4_5_MODE_IRQ = 18, + ARMV4_5_MODE_SVC = 19, ARMV4_5_MODE_ABT = 23, ARMV4_5_MODE_UND = 27, ARMV4_5_MODE_SYS = 31, @@ -58,7 +58,7 @@ cache->reg_list[armv4_5_core_reg_map[mode][num]] /* offsets into armv4_5 core register cache */ -enum +enum { ARMV4_5_CPSR = 31, ARMV4_5_SPSR_FIQ = 32, @@ -85,7 +85,7 @@ typedef struct armv4_5_algorithm_s { int common_magic; - + enum armv4_5_mode core_mode; enum armv4_5_state core_state; } armv4_5_algorithm_t; @@ -113,7 +113,7 @@ case ARMV4_5_MODE_UND: return 5; break; case ARMV4_5_MODE_SYS: return 6; break; case ARMV4_5_MODE_ANY: return 0; break; /* map MODE_ANY to user mode */ - default: + default: LOG_ERROR("invalid mode value encountered"); return -1; } @@ -122,7 +122,7 @@ /* map linear number to mode bits */ static __inline enum armv4_5_mode armv4_5_number_to_mode(int number) { - switch(number) + switch (number) { case 0: return ARMV4_5_MODE_USR; break; case 1: return ARMV4_5_MODE_FIQ; break; @@ -131,7 +131,7 @@ case 4: return ARMV4_5_MODE_ABT; break; case 5: return ARMV4_5_MODE_UND; break; case 6: return ARMV4_5_MODE_SYS; break; - default: + default: LOG_ERROR("mode index out of bounds"); return ARMV4_5_MODE_ANY; } @@ -149,7 +149,7 @@ /* ARM mode instructions */ - + /* Store multiple increment after * Rn: base register * List: for each bit in list: store register @@ -239,7 +239,7 @@ * CRm: second coprocessor operand * op2: Second coprocessor opcode */ -#define ARMV4_5_MRC(CP, op1, Rd, CRn, CRm, op2) (0xee100010 | (CRm) | ((op2) << 5) | ((CP) << 8) | ((Rd) << 12) | ((CRn) << 16) | ((op1) << 21)) +#define ARMV4_5_MRC(CP, op1, Rd, CRn, CRm, op2) (0xee100010 | (CRm) | ((op2) << 5) | ((CP) << 8) | ((Rd) << 12) | ((CRn) << 16) | ((op1) << 21)) /* Move to coprocessor from ARM register * CP: Coprocessor number @@ -249,7 +249,7 @@ * CRm: second coprocessor operand * op2: Second coprocessor opcode */ -#define ARMV4_5_MCR(CP, op1, Rd, CRn, CRm, op2) (0xee000010 | (CRm) | ((op2) << 5) | ((CP) << 8) | ((Rd) << 12) | ((CRn) << 16) | ((op1) << 21)) +#define ARMV4_5_MCR(CP, op1, Rd, CRn, CRm, op2) (0xee000010 | (CRm) | ((op2) << 5) | ((CP) << 8) | ((Rd) << 12) | ((CRn) << 16) | ((op1) << 21)) /* Breakpoint instruction (ARMv5) * Im: 16-bit immediate @@ -259,7 +259,7 @@ /* Thumb mode instructions */ - + /* Store register (Thumb mode) * Rd: source register * Rn: base register @@ -277,12 +277,12 @@ * List: for each bit in list: store register */ #define ARMV4_5_T_LDMIA(Rn, List) ((0xc800 | ((Rn) << 8) | (List)) | ((0xc800 | ((Rn) << 8) | List) << 16)) - + /* Load register with PC relative addressing * Rd: register to load */ -#define ARMV4_5_T_LDR_PCREL(Rd) ((0x4800 | ((Rd) << 8)) | ((0x4800 | ((Rd) << 8)) << 16)) - +#define ARMV4_5_T_LDR_PCREL(Rd) ((0x4800 | ((Rd) << 8)) | ((0x4800 | ((Rd) << 8)) << 16)) + /* Move hi register (Thumb mode) * Rd: destination register * Rm: source register Modified: trunk/src/target/armv4_5_cache.c =================================================================== --- trunk/src/target/armv4_5_cache.c 2009-05-10 19:01:03 UTC (rev 1689) +++ trunk/src/target/armv4_5_cache.c 2009-05-10 19:02:07 UTC (rev 1690) @@ -63,7 +63,7 @@ M = (cache_type_reg & 0x4) >> 2; len = (cache_type_reg & 0x3); multiplier = 2 + M; - + if ((assoc != 0) || (M != 1)) /* assoc 0 and M 1 means cache absent */ { /* cache is present */ @@ -85,7 +85,7 @@ { cache->i_size = cache->d_u_size; } - + return ERROR_OK; } @@ -96,21 +96,21 @@ command_print(cmd_ctx, "cache not yet identified"); return ERROR_OK; } - - command_print(cmd_ctx, "cache type: 0x%1.1x, %s", armv4_5_cache->ctype, + + command_print(cmd_ctx, "cache type: 0x%1.1x, %s", armv4_5_cache->ctype, (armv4_5_cache->separate) ? "separate caches" : "unified cache"); - command_print(cmd_ctx, "D-Cache: linelen %i, associativity %i, nsets %i, cachesize 0x%x", + command_print(cmd_ctx, "D-Cache: linelen %i, associativity %i, nsets %i, cachesize 0x%x", armv4_5_cache->d_u_size.linelen, armv4_5_cache->d_u_size.associativity, armv4_5_cache->d_u_size.nsets, armv4_5_cache->d_u_size.cachesize); - command_print(cmd_ctx, "I-Cache: linelen %i, associativity %i, nsets %i, cachesize 0x%x", + command_print(cmd_ctx, "I-Cache: linelen %i, associativity %i, nsets %i, cachesize 0x%x", armv4_5_cache->i_size.linelen, armv4_5_cache->i_size.associativity, armv4_5_cache->i_size.nsets, armv4_5_cache->i_size.cachesize); - + return ERROR_OK; } Modified: trunk/src/target/armv4_5_mmu.c =================================================================== --- trunk/src/target/armv4_5_mmu.c 2009-05-10 19:01:03 UTC (rev 1689) +++ trunk/src/target/armv4_5_mmu.c 2009-05-10 19:02:07 UTC (rev 1690) @@ -89,9 +89,9 @@ (first_lvl_descriptor & 0xfffff000) | ((va & 0x000ffc00) >> 8), 4, 1, (u8*)&second_lvl_descriptor); } - + second_lvl_descriptor = target_buffer_get_u32(target, (u8*)&second_lvl_descriptor); - + LOG_DEBUG("2nd lvl desc: %8.8x", second_lvl_descriptor); if ((second_lvl_descriptor & 0x3) == 0) @@ -163,14 +163,14 @@ /* disable MMU and data (or unified) cache */ armv4_5_mmu->disable_mmu_caches(target, 1, 1, 0); - + retval = armv4_5_mmu->write_memory(target, address, size, count, buffer); /* reenable MMU / cache */ armv4_5_mmu->enable_mmu_caches(target, armv4_5_mmu->mmu_enabled, armv4_5_mmu->armv4_5_cache.d_u_cache_enabled, armv4_5_mmu->armv4_5_cache.i_cache_enabled); - + return retval; } @@ -182,7 +182,7 @@ u32 cb; int domain; u32 ap; - + if (target->state != TARGET_HALTED) { command_print(cmd_ctx, "target must be stopped for \"virt2phys\" command"); @@ -211,11 +211,11 @@ } return ERROR_OK; } - + command_print(cmd_ctx, "0x%8.8x -> 0x%8.8x, type: %s, cb: %i, domain: %i, ap: %2.2x", va, pa, armv4_5_mmu_page_type_names[type], cb, domain, ap); - } - + } + return ERROR_OK; } @@ -272,7 +272,7 @@ break; case ERROR_TARGET_NOT_HALTED: command_print(cmd_ctx, "error: target must be halted for memory accesses"); - break; + break; case ERROR_TARGET_DATA_ABORT: command_print(cmd_ctx, "error: access caused data abort, system possibly corrupted"); break; @@ -287,7 +287,7 @@ { if (i%8 == 0) output_len += snprintf(output + output_len, 128 - output_len, "0x%8.8x: ", address + (i*size)); - + switch (size) { case 4: @@ -309,7 +309,7 @@ } free(buffer); - + return ERROR_OK; } @@ -365,7 +365,7 @@ break; default: command_print(cmd_ctx, "error: unknown error"); - } + } return ERROR_OK; } |
From: oharboe at B. <oh...@ma...> - 2009-05-10 21:01:04
|
Author: oharboe Date: 2009-05-10 21:01:03 +0200 (Sun, 10 May 2009) New Revision: 1689 Modified: trunk/src/target/arm966e.c Log: David Brownell <da...@pa...> whitespace fixes. Testing out on one file first... Modified: trunk/src/target/arm966e.c =================================================================== --- trunk/src/target/arm966e.c 2009-05-10 18:01:50 UTC (rev 1688) +++ trunk/src/target/arm966e.c 2009-05-10 19:01:03 UTC (rev 1689) @@ -178,7 +178,7 @@ u8 nr_w_buf = 0; jtag_add_end_state(TAP_IDLE); - if((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK) + if ((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK) { return retval; } @@ -188,19 +188,16 @@ fields[0].num_bits = 32; fields[0].out_value = NULL; fields[0].in_value = NULL; - fields[1].tap = jtag_info->tap; fields[1].num_bits = 6; fields[1].out_value = ®_addr_buf; fields[1].in_value = NULL; - fields[2].tap = jtag_info->tap; fields[2].num_bits = 1; fields[2].out_value = &nr_w_buf; fields[2].in_value = NULL; - jtag_add_dr_scan(3, fields, TAP_INVALID); @@ -213,7 +210,7 @@ #ifdef _DEBUG_INSTRUCTION_EXECUTION_ - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } @@ -237,7 +234,7 @@ buf_set_u32(value_buf, 0, 32, value); jtag_add_end_state(TAP_IDLE); - if((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK) + if ((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK) { return retval; } @@ -246,33 +243,18 @@ fields[0].tap = jtag_info->tap; fields[0].num_bits = 32; fields[0].out_value = value_buf; - fields[0].in_value = NULL; - - - - fields[1].tap = jtag_info->tap; fields[1].num_bits = 6; fields[1].out_value = ®_addr_buf; - fields[1].in_value = NULL; - - - - fields[2].tap = jtag_info->tap; fields[2].num_bits = 1; fields[2].out_value = &nr_w_buf; - fields[2].in_value = NULL; - - - - jtag_add_dr_scan(3, fields, TAP_INVALID); #ifdef _DEBUG_INSTRUCTION_EXECUTION_ @@ -319,7 +301,7 @@ command_print(cmd_ctx, "couldn't access reg %i", address); return ERROR_OK; } - if((retval = jtag_execute_queue()) != ERROR_OK) + if ((retval = jtag_execute_queue()) != ERROR_OK) { return retval; } |
From: oharboe at B. <oh...@ma...> - 2009-05-10 20:01:51
|
Author: oharboe Date: 2009-05-10 20:01:50 +0200 (Sun, 10 May 2009) New Revision: 1688 Modified: trunk/src/target/arm11.c Log: David Brownell <da...@pa...> fix warnings Modified: trunk/src/target/arm11.c =================================================================== --- trunk/src/target/arm11.c 2009-05-10 12:55:16 UTC (rev 1687) +++ trunk/src/target/arm11.c 2009-05-10 18:01:50 UTC (rev 1688) @@ -1402,7 +1402,7 @@ for (size_t i = 0; i < 16; i++) { context[i] = buf_get_u32((u8*)(&arm11->reg_values[i]),0,32); - LOG_DEBUG("Save %i: 0x%x",i,context[i]); + LOG_DEBUG("Save %zi: 0x%x",i,context[i]); } cpsr = buf_get_u32((u8*)(arm11->reg_values+ARM11_RC_CPSR),0,32); |
From: <oh...@ma...> - 2009-05-10 14:55:18
|
Author: oharboe Date: 2009-05-10 14:55:16 +0200 (Sun, 10 May 2009) New Revision: 1687 Modified: trunk/src/helper/fileio.c trunk/src/helper/fileio.h Log: Michael Bruck <mb...@di...> use more const Modified: trunk/src/helper/fileio.c =================================================================== --- trunk/src/helper/fileio.c 2009-05-09 09:30:00 UTC (rev 1686) +++ trunk/src/helper/fileio.c 2009-05-10 12:55:16 UTC (rev 1687) @@ -43,9 +43,7 @@ #include <errno.h> #include <ctype.h> -int fileio_dispatch_read(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_read); - -int fileio_open_local(fileio_t *fileio) +static inline int fileio_open_local(fileio_t *fileio) { char access[4]; @@ -112,7 +110,7 @@ return ERROR_OK; } -int fileio_open(fileio_t *fileio, char *url, enum fileio_access access, enum fileio_type type) +int fileio_open(fileio_t *fileio, const char *url, enum fileio_access access, enum fileio_type type) { int retval = ERROR_OK; @@ -125,7 +123,7 @@ return retval; } -int fileio_close_local(fileio_t *fileio) +static inline int fileio_close_local(fileio_t *fileio) { int retval; if ((retval = fclose(fileio->file)) != 0) @@ -169,7 +167,7 @@ return ERROR_OK; } -int fileio_local_read(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_read) +static inline int fileio_local_read(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_read) { *size_read = fread(buffer, 1, size, fileio->file); @@ -194,7 +192,7 @@ return ERROR_OK; } -int fileio_local_fgets(fileio_t *fileio, u32 size, char *buffer) +static inline int fileio_local_fgets(fileio_t *fileio, u32 size, char *buffer) { if( fgets(buffer, size, fileio->file) == NULL) return ERROR_FILEIO_OPERATION_FAILED; @@ -207,14 +205,14 @@ return fileio_local_fgets(fileio, size, buffer); } -int fileio_local_write(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_written) +static inline int fileio_local_write(fileio_t *fileio, u32 size, const u8 *buffer, u32 *size_written) { *size_written = fwrite(buffer, 1, size, fileio->file); return ERROR_OK; } -int fileio_write(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_written) +int fileio_write(fileio_t *fileio, u32 size, const u8 *buffer, u32 *size_written) { int retval; Modified: trunk/src/helper/fileio.h =================================================================== --- trunk/src/helper/fileio.h 2009-05-09 09:30:00 UTC (rev 1686) +++ trunk/src/helper/fileio.h 2009-05-10 12:55:16 UTC (rev 1687) @@ -62,12 +62,12 @@ FILE *file; } fileio_t; -extern int fileio_write(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_written); +extern int fileio_write(fileio_t *fileio, u32 size, const u8 *buffer, u32 *size_written); extern int fileio_read(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_read); extern int fileio_fgets(fileio_t *fileio, u32 size, char *buffer); extern int fileio_seek(fileio_t *fileio, u32 position); extern int fileio_close(fileio_t *fileio); -extern int fileio_open(fileio_t *fileio, char *url, enum fileio_access access, enum fileio_type type); +extern int fileio_open(fileio_t *fileio, const char *url, enum fileio_access access, enum fileio_type type); extern int fileio_read_u32(fileio_t *fileio, u32 *data); extern int fileio_write_u32(fileio_t *fileio, u32 data); |
From: <oh...@ma...> - 2009-05-09 11:30:04
|
Author: oharboe Date: 2009-05-09 11:30:00 +0200 (Sat, 09 May 2009) New Revision: 1686 Modified: trunk/src/helper/binarybuffer.c trunk/src/helper/binarybuffer.h Log: Michael Bruck <mb...@di...> use more const Modified: trunk/src/helper/binarybuffer.c =================================================================== --- trunk/src/helper/binarybuffer.c 2009-05-09 07:36:19 UTC (rev 1685) +++ trunk/src/helper/binarybuffer.c 2009-05-09 09:30:00 UTC (rev 1686) @@ -53,7 +53,7 @@ }; -u8* buf_cpy(u8 *from, u8 *to, int size) +u8* buf_cpy(const u8 *from, u8 *to, int size) { unsigned int num_bytes = CEIL(size, 8); unsigned int i; @@ -73,7 +73,7 @@ return to; } -int buf_cmp(u8 *buf1, u8 *buf2, int size) +int buf_cmp(const u8 *buf1, const u8 *buf2, int size) { int num_bytes = CEIL(size, 8); int i; @@ -100,7 +100,7 @@ return 0; } -int buf_cmp_mask(u8 *buf1, u8 *buf2, u8 *mask, int size) +int buf_cmp_mask(const u8 *buf1, const u8 *buf2, const u8 *mask, int size) { int num_bytes = CEIL(size, 8); int i; @@ -143,7 +143,7 @@ return buf; } -u8* buf_set_buf(u8 *src, int src_start, u8 *dst, int dst_start, int len) +u8* buf_set_buf(const u8 *src, int src_start, u8 *dst, int dst_start, int len) { int src_idx = src_start, dst_idx = dst_start; int i; Modified: trunk/src/helper/binarybuffer.h =================================================================== --- trunk/src/helper/binarybuffer.h 2009-05-09 07:36:19 UTC (rev 1685) +++ trunk/src/helper/binarybuffer.h 2009-05-09 09:30:00 UTC (rev 1686) @@ -30,7 +30,7 @@ */ /* inlining this will help show what fn that is taking time during profiling. */ -static __inline void buf_set_u32(u8* buffer, unsigned int first, unsigned int num, u32 value) +static inline void buf_set_u32(u8* buffer, unsigned int first, unsigned int num, u32 value) { if ((num==32)&&(first==0)) { @@ -51,7 +51,7 @@ } } } -static __inline u32 buf_get_u32(u8* buffer, unsigned int first, unsigned int num) +static inline u32 buf_get_u32(const u8* buffer, unsigned int first, unsigned int num) { if ((num==32)&&(first==0)) { @@ -73,12 +73,12 @@ extern u32 flip_u32(u32 value, unsigned int num); -extern int buf_cmp(u8 *buf1, u8 *buf2, int size); -extern int buf_cmp_mask(u8 *buf1, u8 *buf2, u8 *mask, int size); -extern u8* buf_cpy(u8 *from, u8 *to, int size); +extern int buf_cmp(const u8 *buf1, const u8 *buf2, int size); +extern int buf_cmp_mask(const u8 *buf1, const u8 *buf2, const u8 *mask, int size); +extern u8* buf_cpy(const u8 *from, u8 *to, int size); extern u8* buf_set_ones(u8 *buf, int count); -extern u8* buf_set_buf(u8 *src, int src_start, u8 *dst, int dst_start, int len); +extern u8* buf_set_buf(const u8 *src, int src_start, u8 *dst, int dst_start, int len); extern int str_to_buf(const char *str, int len, u8 *bin_buf, int buf_size, int radix); extern char* buf_to_str(const u8 *buf, int size, int radix); @@ -89,7 +89,7 @@ #define CEIL(m, n) ((m + n - 1) / n) /* read a u32 from a buffer in target memory endianness */ -static __inline u32 fast_target_buffer_get_u32(u8 *buffer, int little) +static inline u32 fast_target_buffer_get_u32(const u8 *buffer, int little) { if (little) return le_to_h_u32(buffer); |
From: <oh...@ma...> - 2009-05-09 09:36:22
|
Author: oharboe Date: 2009-05-09 09:36:19 +0200 (Sat, 09 May 2009) New Revision: 1685 Modified: trunk/src/target/arm11.c trunk/src/target/arm11.h trunk/src/target/arm11_dbgtap.c Log: Michael Bruck <mb...@di...> ARM11 C99 updates Modified: trunk/src/target/arm11.c =================================================================== --- trunk/src/target/arm11.c 2009-05-08 21:03:28 UTC (rev 1684) +++ trunk/src/target/arm11.c 2009-05-09 07:36:19 UTC (rev 1685) @@ -373,12 +373,11 @@ { FNC_INFO; - {size_t i; - for(i = 0; i < asizeof(arm11->reg_values); i++) + for (size_t i = 0; i < asizeof(arm11->reg_values); i++) { arm11->reg_list[i].valid = 1; arm11->reg_list[i].dirty = 0; - }} + } /* Save DSCR */ CHECK_RETVAL(arm11_read_DSCR(arm11, &R(DSCR))); @@ -454,12 +453,11 @@ /** \todo TODO: handle other mode registers */ - {size_t i; - for (i = 0; i < 15; i++) + for (size_t i = 0; i < 15; i++) { /* MCR p14,0,R?,c0,c5,0 */ arm11_run_instr_data_from_core(arm11, 0xEE000E15 | (i << 12), &R(RX + i), 1); - }} + } /* save rDTR */ @@ -528,8 +526,7 @@ return; } - {size_t i; - for(i = 0; i < ARM11_REGCACHE_COUNT; i++) + for (size_t i = 0; i < ARM11_REGCACHE_COUNT; i++) { if (!arm11->reg_list[i].valid) { @@ -548,7 +545,7 @@ LOG_DEBUG("%8s %08x (INVALID)", arm11_reg_defs[i].name, arm11->reg_values[i]); } } - }} + } } /** Restore processor state @@ -565,8 +562,8 @@ /** \todo TODO: handle other mode registers */ /* restore R1 - R14 */ - {size_t i; - for (i = 1; i < 15; i++) + + for (size_t i = 1; i < 15; i++) { if (!arm11->reg_list[ARM11_RC_RX + i].dirty) continue; @@ -575,7 +572,7 @@ arm11_run_instr_data_to_core1(arm11, 0xee100e15 | (i << 12), R(RX + i)); // LOG_DEBUG("RESTORE R" ZU " %08x", i, R(RX + i)); - }} + } arm11_run_instr_data_finish(arm11); @@ -650,15 +647,14 @@ void arm11_record_register_history(arm11_common_t * arm11) { - {size_t i; - for(i = 0; i < ARM11_REGCACHE_COUNT; i++) + for (size_t i = 0; i < ARM11_REGCACHE_COUNT; i++) { arm11->reg_history[i].value = arm11->reg_values[i]; arm11->reg_history[i].valid = arm11->reg_list[i].valid; arm11->reg_list[i].valid = 0; arm11->reg_list[i].dirty = 0; - }} + } } @@ -1072,22 +1068,20 @@ *reg_list_size = ARM11_GDB_REGISTER_COUNT; *reg_list = malloc(sizeof(reg_t*) * ARM11_GDB_REGISTER_COUNT); - {size_t i; - for (i = 16; i < 24; i++) + for (size_t i = 16; i < 24; i++) { (*reg_list)[i] = &arm11_gdb_dummy_fp_reg; - }} + } (*reg_list)[24] = &arm11_gdb_dummy_fps_reg; - {size_t i; - for (i = 0; i < ARM11_REGCACHE_COUNT; i++) + for (size_t i = 0; i < ARM11_REGCACHE_COUNT; i++) { if (arm11_reg_defs[i].gdb_num == -1) continue; (*reg_list)[arm11_reg_defs[i].gdb_num] = arm11->reg_list + i; - }} + } return ERROR_OK; } @@ -1123,8 +1117,7 @@ /** \todo TODO: check if dirty is the right choice to force a rewrite on arm11_resume() */ arm11->reg_list[ARM11_RC_R1].dirty = 1; - {size_t i; - for (i = 0; i < count; i++) + for (size_t i = 0; i < count; i++) { /* ldrb r1, [r0], #1 */ /* ldrb r1, [r0] */ @@ -1136,7 +1129,7 @@ arm11_run_instr_data_from_core(arm11, 0xEE001E15, &res, 1); *buffer++ = res; - }} + } break; @@ -1144,8 +1137,7 @@ { arm11->reg_list[ARM11_RC_R1].dirty = 1; - size_t i; - for (i = 0; i < count; i++) + for (size_t i = 0; i < count; i++) { /* ldrh r1, [r0], #2 */ arm11_run_instr_no_data1(arm11, @@ -1206,8 +1198,7 @@ { arm11->reg_list[ARM11_RC_R1].dirty = 1; - {size_t i; - for (i = 0; i < count; i++) + for (size_t i = 0; i < count; i++) { /* MRC p14,0,r1,c0,c5,0 */ arm11_run_instr_data_to_core1(arm11, 0xee101e15, *buffer++); @@ -1216,7 +1207,7 @@ /* strb r1, [r0] */ arm11_run_instr_no_data1(arm11, !arm11_config_memrw_no_increment ? 0xe4c01001 : 0xe5c01000); - }} + } break; } @@ -1225,8 +1216,7 @@ { arm11->reg_list[ARM11_RC_R1].dirty = 1; - size_t i; - for (i = 0; i < count; i++) + for (size_t i = 0; i < count; i++) { u16 value; memcpy(&value, buffer + count * sizeof(u16), sizeof(u16)); @@ -1389,7 +1379,6 @@ u32 context[16]; u32 cpsr; int exit_breakpoint_size = 0; - int i; int retval = ERROR_OK; LOG_DEBUG("Running algorithm"); @@ -1410,7 +1399,7 @@ // return ERROR_FAIL; // Save regs - for (i = 0; i < 16; i++) + for (size_t i = 0; i < 16; i++) { context[i] = buf_get_u32((u8*)(&arm11->reg_values[i]),0,32); LOG_DEBUG("Save %i: 0x%x",i,context[i]); @@ -1419,13 +1408,13 @@ cpsr = buf_get_u32((u8*)(arm11->reg_values+ARM11_RC_CPSR),0,32); LOG_DEBUG("Save CPSR: 0x%x", cpsr); - for (i = 0; i < num_mem_params; i++) + for (int i = 0; i < num_mem_params; i++) { target_write_buffer(target, mem_params[i].address, mem_params[i].size, mem_params[i].value); } // Set register parameters - for (i = 0; i < num_reg_params; i++) + for (int i = 0; i < num_reg_params; i++) { reg_t *reg = register_get_by_name(arm11->core_cache, reg_params[i].reg_name, 0); if (!reg) @@ -1495,13 +1484,13 @@ goto del_breakpoint; } - for (i = 0; i < num_mem_params; i++) + for (int i = 0; i < num_mem_params; i++) { if (mem_params[i].direction != PARAM_OUT) target_read_buffer(target, mem_params[i].address, mem_params[i].size, mem_params[i].value); } - for (i = 0; i < num_reg_params; i++) + for (int i = 0; i < num_reg_params; i++) { if (reg_params[i].direction != PARAM_OUT) { @@ -1527,7 +1516,7 @@ restore: // Restore context - for (i = 0; i < 16; i++) + for (size_t i = 0; i < 16; i++) { LOG_DEBUG("restoring register %s with value 0x%8.8x", arm11->reg_list[i].name, context[i]); @@ -1897,8 +1886,7 @@ u32 values[6]; - {size_t i; - for (i = 0; i < (read ? 5 : 6); i++) + for (size_t i = 0; i < (read ? 5 : 6); i++) { values[i] = strtoul(args[i + 1], NULL, 0); @@ -1909,7 +1897,7 @@ read ? arm11_mrc_syntax : arm11_mcr_syntax); return -1; } - }} + } u32 instr = 0xEE000010 | (values[0] << 8) | Modified: trunk/src/target/arm11.h =================================================================== --- trunk/src/target/arm11.h 2009-05-08 21:03:28 UTC (rev 1684) +++ trunk/src/target/arm11.h 2009-05-09 07:36:19 UTC (rev 1685) @@ -252,14 +252,14 @@ void arm11_add_IR (arm11_common_t * arm11, u8 instr, tap_state_t state); void arm11_add_debug_SCAN_N (arm11_common_t * arm11, u8 chain, tap_state_t state); void arm11_add_debug_INST (arm11_common_t * arm11, u32 inst, u8 * flag, tap_state_t state); -int arm11_read_DSCR (arm11_common_t * arm11, u32 *dscr); +int arm11_read_DSCR (arm11_common_t * arm11, u32 *dscr); int arm11_write_DSCR (arm11_common_t * arm11, u32 dscr); enum target_debug_reason arm11_get_DSCR_debug_reason(u32 dscr); void arm11_run_instr_data_prepare (arm11_common_t * arm11); void arm11_run_instr_data_finish (arm11_common_t * arm11); -int arm11_run_instr_no_data (arm11_common_t * arm11, u32 * opcode, size_t count); +int arm11_run_instr_no_data (arm11_common_t * arm11, u32 * opcode, size_t count); void arm11_run_instr_no_data1 (arm11_common_t * arm11, u32 opcode); int arm11_run_instr_data_to_core (arm11_common_t * arm11, u32 opcode, u32 * data, size_t count); int arm11_run_instr_data_to_core_noack (arm11_common_t * arm11, u32 opcode, u32 * data, size_t count); Modified: trunk/src/target/arm11_dbgtap.c =================================================================== --- trunk/src/target/arm11_dbgtap.c 2009-05-08 21:03:28 UTC (rev 1684) +++ trunk/src/target/arm11_dbgtap.c 2009-05-09 07:36:19 UTC (rev 1685) @@ -549,14 +549,13 @@ size_t error_count = 0; - {size_t i; - for (i = 0; i < asizeof(Readies); i++) + for (size_t i = 0; i < asizeof(Readies); i++) { if (Readies[i] != 1) { error_count++; } - }} + } if (error_count) LOG_ERROR("Transfer errors " ZU, error_count); @@ -699,8 +698,7 @@ arm11_setup_field(arm11, 32, &DataOut, &DataIn, chain7_fields + 1); arm11_setup_field(arm11, 7, &AddressOut, &AddressIn, chain7_fields + 2); - {size_t i; - for (i = 0; i < count + 1; i++) + for (size_t i = 0; i < count + 1; i++) { if (i < count) { @@ -746,13 +744,12 @@ } } } - }} + } - {size_t i; - for (i = 0; i < count; i++) + for (size_t i = 0; i < count; i++) { JTAG_DEBUG("SC7 %02d: %02x %s %08x", i, actions[i].address, actions[i].write ? "<=" : "=>", actions[i].value); - }} + } return ERROR_OK; } @@ -767,23 +764,20 @@ arm11_sc7_action_t clear_bw[arm11->brp + arm11->wrp + 1]; arm11_sc7_action_t * pos = clear_bw; - {size_t i; - for (i = 0; i < asizeof(clear_bw); i++) + for (size_t i = 0; i < asizeof(clear_bw); i++) { clear_bw[i].write = true; clear_bw[i].value = 0; - }} + } - {size_t i; - for (i = 0; i < arm11->brp; i++) + for (size_t i = 0; i < arm11->brp; i++) (pos++)->address = ARM11_SC7_BCR0 + i; - } - {size_t i; - for (i = 0; i < arm11->wrp; i++) + + for (size_t i = 0; i < arm11->wrp; i++) (pos++)->address = ARM11_SC7_WCR0 + i; - } + (pos++)->address = ARM11_SC7_VCR; arm11_sc7_run(arm11, clear_bw, asizeof(clear_bw)); |
From: oharboe at B. <oh...@ma...> - 2009-05-08 23:03:29
|
Author: oharboe Date: 2009-05-08 23:03:28 +0200 (Fri, 08 May 2009) New Revision: 1684 Modified: trunk/src/target/etb.h trunk/src/target/etm.c Log: whitespace fixes Modified: trunk/src/target/etb.h =================================================================== --- trunk/src/target/etb.h 2009-05-08 20:48:28 UTC (rev 1683) +++ trunk/src/target/etb.h 2009-05-08 21:03:28 UTC (rev 1684) @@ -48,7 +48,7 @@ jtag_tap_t *tap; u32 cur_scan_chain; reg_cache_t *reg_cache; - + /* ETB parameters */ u32 ram_depth; u32 ram_width; Modified: trunk/src/target/etm.c =================================================================== --- trunk/src/target/etm.c 2009-05-08 20:48:28 UTC (rev 1683) +++ trunk/src/target/etm.c 2009-05-08 21:03:28 UTC (rev 1684) @@ -280,6 +280,7 @@ arm7_9_common_t *arm7_9 = armv4_5->arch_info; etm_context_t *etm_ctx = arm7_9->etm_ctx; reg_t *etm_ctrl_reg = &arm7_9->etm_ctx->reg_cache->reg_list[ETM_CTRL]; + /* initialize some ETM control register settings */ etm_get_reg(etm_ctrl_reg); etm_ctrl_value = buf_get_u32(etm_ctrl_reg->value, 0, etm_ctrl_reg->size); @@ -309,6 +310,7 @@ int etm_get_reg(reg_t *reg) { int retval; + if ((retval = etm_read_reg(reg)) != ERROR_OK) { LOG_ERROR("BUG: error scheduling etm register read"); @@ -340,21 +342,18 @@ fields[0].num_bits = 32; fields[0].out_value = reg->value; fields[0].in_value = NULL; - fields[1].tap = etm_reg->jtag_info->tap; fields[1].num_bits = 7; fields[1].out_value = malloc(1); buf_set_u32(fields[1].out_value, 0, 7, reg_addr); fields[1].in_value = NULL; - fields[2].tap = etm_reg->jtag_info->tap; fields[2].num_bits = 1; fields[2].out_value = malloc(1); buf_set_u32(fields[2].out_value, 0, 1, 0); fields[2].in_value = NULL; - jtag_add_dr_scan(3, fields, TAP_INVALID); @@ -378,6 +377,7 @@ int etm_set_reg(reg_t *reg, u32 value) { int retval; + if ((retval = etm_write_reg(reg, value)) != ERROR_OK) { LOG_ERROR("BUG: error scheduling etm register write"); @@ -394,6 +394,7 @@ int etm_set_reg_w_exec(reg_t *reg, u8 *buf) { int retval; + etm_set_reg(reg, buf_get_u32(buf, 0, reg->size)); if ((retval = jtag_execute_queue()) != ERROR_OK) @@ -423,10 +424,6 @@ fields[0].in_value = NULL; - - - - fields[1].tap = etm_reg->jtag_info->tap; fields[1].num_bits = 7; fields[1].out_value = malloc(1); @@ -434,10 +431,6 @@ fields[1].in_value = NULL; - - - - fields[2].tap = etm_reg->jtag_info->tap; fields[2].num_bits = 1; fields[2].out_value = malloc(1); @@ -445,10 +438,6 @@ fields[2].in_value = NULL; - - - - jtag_add_dr_scan(3, fields, TAP_INVALID); free(fields[0].out_value); @@ -1648,7 +1637,7 @@ fileio_read_u32(&file, &etm_ctx->trace_depth); etm_ctx->trace_data = malloc(sizeof(etmv1_trace_data_t) * etm_ctx->trace_depth); - if(etm_ctx->trace_data == NULL) + if (etm_ctx->trace_data == NULL) { command_print(cmd_ctx, "not enough memory to perform operation"); fileio_close(&file); @@ -1816,7 +1805,7 @@ if ((retval = etmv1_analyze_trace(etm_ctx, cmd_ctx)) != ERROR_OK) { - switch(retval) + switch (retval) { case ERROR_ETM_ANALYSIS_FAILED: command_print(cmd_ctx, "further analysis failed (corrupted trace data or just end of data"); |
From: oharboe at B. <oh...@ma...> - 2009-05-08 22:48:28
|
Author: oharboe Date: 2009-05-08 22:48:28 +0200 (Fri, 08 May 2009) New Revision: 1683 Modified: trunk/src/jtag/jtag.c Log: plugged bug w/irlen > 32 introduce in 1672 Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-05-08 20:44:52 UTC (rev 1682) +++ trunk/src/jtag/jtag.c 2009-05-08 20:48:28 UTC (rev 1683) @@ -574,7 +574,11 @@ for (j = 0; j < num_fields; j++) { jtag_tap_t *tap=fields[j].tap; - jtag_check_value_mask(fields+j, tap->expected, tap->expected_mask); + if (fields[j].in_value!=NULL) + { + /* we verify max 32 bit long irlens. */ + jtag_check_value_mask(fields+j, tap->expected, tap->expected_mask); + } if (modified[j]) { |
From: oharboe at B. <oh...@ma...> - 2009-05-08 22:44:52
|
Author: oharboe Date: 2009-05-08 22:44:52 +0200 (Fri, 08 May 2009) New Revision: 1682 Modified: trunk/src/target/etb.c trunk/src/target/etm.h Log: whitespace fixes Modified: trunk/src/target/etb.c =================================================================== --- trunk/src/target/etb.c 2009-05-08 20:36:09 UTC (rev 1681) +++ trunk/src/target/etb.c 2009-05-08 20:44:52 UTC (rev 1682) @@ -58,6 +58,7 @@ static int etb_set_instr(etb_t *etb, u32 new_instr) { jtag_tap_t *tap; + tap = etb->tap; if (tap==NULL) return ERROR_FAIL; @@ -73,10 +74,6 @@ field.in_value = NULL; - - - - jtag_add_ir_scan(1, &field, TAP_INVALID); free(field.out_value); @@ -87,7 +84,7 @@ static int etb_scann(etb_t *etb, u32 new_scan_chain) { - if(etb->cur_scan_chain != new_scan_chain) + if (etb->cur_scan_chain != new_scan_chain) { scan_field_t field; @@ -98,10 +95,6 @@ field.in_value = NULL; - - - - /* select INTEST instruction */ etb_set_instr(etb, 0x2); jtag_add_dr_scan(1, &field, TAP_INVALID); @@ -159,6 +152,7 @@ static int etb_get_reg(reg_t *reg) { int retval; + if ((retval = etb_read_reg(reg)) != ERROR_OK) { LOG_ERROR("BUG: error scheduling etm register read"); @@ -188,25 +182,21 @@ fields[0].out_value = NULL; u8 tmp[4]; fields[0].in_value = tmp; - fields[1].tap = etb->tap; fields[1].num_bits = 7; fields[1].out_value = malloc(1); buf_set_u32(fields[1].out_value, 0, 7, 4); fields[1].in_value = NULL; - fields[2].tap = etb->tap; fields[2].num_bits = 1; fields[2].out_value = malloc(1); buf_set_u32(fields[2].out_value, 0, 1, 0); fields[2].in_value = NULL; - jtag_add_dr_scan(3, fields, TAP_INVALID); - for (i = 0; i < num_frames; i++) { /* ensure nR/W reamins set to read */ @@ -246,35 +236,20 @@ fields[0].tap = etb_reg->etb->tap; fields[0].num_bits = 32; fields[0].out_value = reg->value; - fields[0].in_value = NULL; - - - - fields[1].tap = etb_reg->etb->tap; fields[1].num_bits = 7; fields[1].out_value = malloc(1); buf_set_u32(fields[1].out_value, 0, 7, reg_addr); - fields[1].in_value = NULL; - - - - fields[2].tap = etb_reg->etb->tap; fields[2].num_bits = 1; fields[2].out_value = malloc(1); buf_set_u32(fields[2].out_value, 0, 1, 0); - fields[2].in_value = NULL; - - - - jtag_add_dr_scan(3, fields, TAP_INVALID); /* read the identification register in the second run, to make sure we @@ -301,6 +276,7 @@ int etb_set_reg(reg_t *reg, u32 value) { int retval; + if ((retval = etb_write_reg(reg, value)) != ERROR_OK) { LOG_ERROR("BUG: error scheduling etm register write"); @@ -317,6 +293,7 @@ int etb_set_reg_w_exec(reg_t *reg, u8 *buf) { int retval; + etb_set_reg(reg, buf_get_u32(buf, 0, reg->size)); if ((retval = jtag_execute_queue()) != ERROR_OK) @@ -343,24 +320,14 @@ fields[0].num_bits = 32; fields[0].out_value = malloc(4); buf_set_u32(fields[0].out_value, 0, 32, value); - fields[0].in_value = NULL; - - - - fields[1].tap = etb_reg->etb->tap; fields[1].num_bits = 7; fields[1].out_value = malloc(1); buf_set_u32(fields[1].out_value, 0, 7, reg_addr); - fields[1].in_value = NULL; - - - - fields[2].tap = etb_reg->etb->tap; fields[2].num_bits = 1; fields[2].out_value = malloc(1); @@ -368,12 +335,6 @@ fields[2].in_value = NULL; - - - - - jtag_add_dr_scan(3, fields, TAP_INVALID); - free(fields[0].out_value); free(fields[1].out_value); free(fields[2].out_value); @@ -424,12 +385,12 @@ } tap = jtag_TapByString( args[1] ); - if( tap == NULL ){ + if (tap == NULL) + { command_print(cmd_ctx, "Tap: %s does not exist", args[1] ); return ERROR_FAIL; } - if (arm7_9->etm_ctx) { etb_t *etb = malloc(sizeof(etb_t)); Modified: trunk/src/target/etm.h =================================================================== --- trunk/src/target/etm.h 2009-05-08 20:36:09 UTC (rev 1681) +++ trunk/src/target/etm.h 2009-05-08 20:44:52 UTC (rev 1682) @@ -62,7 +62,7 @@ ETM_SEQUENCER_STATE = 0x67, ETM_EXTERNAL_OUTPUT = 0x68, ETM_CONTEXTID_COMPARATOR_VALUE = 0x6c, - ETM_CONTEXTID_COMPARATOR_MASK = 0x6f, + ETM_CONTEXTID_COMPARATOR_MASK = 0x6f, }; typedef struct etm_reg_s @@ -77,7 +77,7 @@ ETM_PORT_4BIT = 0x00, ETM_PORT_8BIT = 0x10, ETM_PORT_16BIT = 0x20, - ETM_PORT_WIDTH_MASK = 0x70, + ETM_PORT_WIDTH_MASK = 0x70, /* Port modes */ ETM_PORT_NORMAL = 0x00000, ETM_PORT_MUXED = 0x10000, @@ -146,11 +146,11 @@ etm_capture_driver_t *capture_driver; /* driver used to access ETM data */ void *capture_driver_priv; /* capture driver private data */ u32 trigger_percent; /* percent of trace buffer to be filled after the trigger */ - trace_status_t capture_status; /* current state of capture run */ + trace_status_t capture_status; /* current state of capture run */ etmv1_trace_data_t *trace_data; /* trace data */ u32 trace_depth; /* number of trace cycles to be analyzed, 0 if no trace data available */ etm_portmode_t portmode; /* normal, multiplexed or demultiplexed */ - etmv1_tracemode_t tracemode; /* type of information the trace contains (data, addres, contextID, ...) */ + etmv1_tracemode_t tracemode; /* type of information the trace contains (data, addres, contextID, ...) */ armv4_5_state_t core_state; /* current core state (ARM, Thumb, Jazelle) */ image_t *image; /* source for target opcodes */ u32 pipe_index; /* current trace cycle */ @@ -158,10 +158,10 @@ int data_half; /* port half on a 16 bit port */ u32 current_pc; /* current program counter */ u32 pc_ok; /* full PC has been acquired */ - u32 last_branch; /* last branch address output */ + u32 last_branch; /* last branch address output */ u32 last_branch_reason; /* branch reason code for the last branch encountered */ u32 last_ptr; /* address of the last data access */ - u32 ptr_ok; /* whether last_ptr is valid */ + u32 ptr_ok; /* whether last_ptr is valid */ u32 context_id; /* context ID of the code being traced */ u32 last_instruction; /* index of last instruction executed (to calculate cycle timings) */ } etm_context_t; |
From: oharboe at B. <oh...@ma...> - 2009-05-08 22:36:10
|
Author: oharboe Date: 2009-05-08 22:36:09 +0200 (Fri, 08 May 2009) New Revision: 1681 Modified: zy1000/trunk/ecoshal/hal/zylin/phi/current/include/pkgconf/mlt_zylin_phi_dram_fast.ldi Log: tinkered with linker script Modified: zy1000/trunk/ecoshal/hal/zylin/phi/current/include/pkgconf/mlt_zylin_phi_dram_fast.ldi =================================================================== --- zy1000/trunk/ecoshal/hal/zylin/phi/current/include/pkgconf/mlt_zylin_phi_dram_fast.ldi 2009-05-08 20:27:19 UTC (rev 1680) +++ zy1000/trunk/ecoshal/hal/zylin/phi/current/include/pkgconf/mlt_zylin_phi_dram_fast.ldi 2009-05-08 20:36:09 UTC (rev 1681) @@ -35,14 +35,31 @@ *phi_misc* (*hal_delay_us*) ; * (*tftp_client_get*) ; *phi_misc* (*busy*) ; +* (*Cyg_Mempool_dlmalloc_Implementation*free*) ; + * (*phi_misc*) ; + * (*cyg_sbdrop*) ; + * (*target_call_event_callbacks*) ; + + * (*tftp_client_get*) ; +* (*cyg_callout_stop*) ; +* (*embeddeqdice_set_reg*) ; +* (*arm7_9_set_breakpoint*) ; +* (*arm7_9_init_arch_info*) ; +* (*arm7_9_add_breakpoint*) ; + + +* (*cyg_m_adj*) ; * (*select*) ; +* (*cyg_arpresolve*) ; * (*cyg_sorceive*) ; * (*cmd_queue_cur_state*) ; * (*cmd_queue_end_state*) ; * (*jtag_err*) ; * (*jtag_num_devices*) ; +* (*jtag_execute_queue*) ; +* (*jtag_flush_queue_count*) ; @@ -92,7 +109,10 @@ * (*armv4_5_mode_to_number*); * (*arm7_9_debug_entry*); * (*arm7_9_restore_context*); +* (*armv4_5_run_algorithm_inner*); +* (*cyg_uiomove*); + //;* (*armv4_5_*); //;* (*armv4_5_*); //;* (*arm7_9*); @@ -116,6 +136,9 @@ * (*cyg_sosend*); * (*cyg_splimp*); * (*cyg_ether_output*); +* (*cyg_ether_input*); +* (*cyg_in_pcblookup_hash*); +* (*cyg_netint*); * (*ipintr*); * (*cyg_tcp_output*); * (*eth_drv_send*); @@ -126,6 +149,7 @@ * (*cyg_wakeup*); * (*openeth_can_send*); * (*eth_drv_recv*); +* (*eth_drv_dsr*); * (*cyg_splnet*); * (*cyg_in_cksum_hdr*); * (*cyg_sbcompress*); |
From: oharboe at B. <oh...@ma...> - 2009-05-08 22:27:19
|
Author: oharboe Date: 2009-05-08 22:27:19 +0200 (Fri, 08 May 2009) New Revision: 1680 Added: trunk/src/target/target/ti_dm6446.cfg Log: David Brownell <da...@pa...> DaVinci dm6446 Added: trunk/src/target/target/ti_dm6446.cfg =================================================================== --- trunk/src/target/target/ti_dm6446.cfg 2009-05-08 19:24:40 UTC (rev 1679) +++ trunk/src/target/target/ti_dm6446.cfg 2009-05-08 20:27:19 UTC (rev 1680) @@ -0,0 +1,66 @@ +# +# Texas Instruments DaVinci family: TMS320DM6446 +# +if { [info exists CHIPNAME] } { + set _CHIPNAME $CHIPNAME +} else { + set _CHIPNAME dm6446 +} +if { [info exists ENDIAN] } { + set _ENDIAN $ENDIAN +} else { + set _ENDIAN little +} + +# +# For now, expect EMU0/EMU1 jumpered LOW (not TI's default) so ARM and ETB +# are enabled without making ICEpick route ARM and ETB into the JTAG chain. +# +# Also note: when running without RTCK before the PLLs are set up, you +# may need to slow the JTAG clock down quite a lot (under 2 MHz). +# + +# Subsidiary TAP: ARM ETB11, with scan chain for 4K of ETM trace buffer +if { [info exists ETB_TAPID ] } { + set _ETB_TAPID $ETB_TAPID +} else { + set _ETB_TAPID 0x2b900f0f +} +jtag newtap $_CHIPNAME etb -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_ETB_TAPID + +# Subsidiary TAP: ARM926ejs with scan chains for ARM Debug, EmbeddedICE-RT, ETM. +if { [info exists CPU_TAPID ] } { + set _CPU_TAPID $CPU_TAPID +} else { + set _CPU_TAPID 0x07926001 +} +jtag newtap $_CHIPNAME arm -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPU_TAPID + +# Subsidiary TAP: C64x+ DSP ... NOT CURRENTLY INCLUDED, must add via ICEpick. +# Documentation for DSP JTAG interfaces evidently needs NDAs. + +# Primary TAP: ICEpick (JTAG route controller) and boundary scan +if { [info exists JRC_TAPID ] } { + set _JRC_TAPID $JRC_TAPID +} else { + set _JRC_TAPID 0x0b70002f +} +jtag newtap $_CHIPNAME jrc -irlen 6 -ircapture 0x1 -irmask 0x3f -expected-id $_JRC_TAPID + +# GDB target: the ARM, using SRAM1 for scratch. SRAM0 (also 8K) +# and the ETB memory (4K) are other options, while trace is unused. +set _TARGETNAME $_CHIPNAME.arm + +target create $_TARGETNAME arm926ejs -endian $_ENDIAN -chain-position $_TARGETNAME +$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x0000a000 -work-area-size 0x2000 -work-area-backup 0 + +arm7_9 dbgrq enable +arm7_9 fast_memory_access enable +arm7_9 dcc_downloads enable + +# trace setup +# FIXME we ought to be able to say "... config $_TARGETNAME ..." +# (not "config 0") facilitating additional targets (e.g. other chips) +etm config 0 16 normal full etb +etb config 0 $_CHIPNAME.etb + Property changes on: trunk/src/target/target/ti_dm6446.cfg ___________________________________________________________________ Name: svn:eol-style + native |
From: oharboe at B. <oh...@ma...> - 2009-05-08 21:24:41
|
Author: oharboe Date: 2009-05-08 21:24:40 +0200 (Fri, 08 May 2009) New Revision: 1679 Modified: trunk/src/jtag/zy1000.c Log: sync up zy1000 interface to bitbang driver's handling of exiting the shift state Modified: trunk/src/jtag/zy1000.c =================================================================== --- trunk/src/jtag/zy1000.c 2009-05-08 18:54:59 UTC (rev 1678) +++ trunk/src/jtag/zy1000.c 2009-05-08 19:24:40 UTC (rev 1679) @@ -448,7 +448,7 @@ setCurrentState(cmd_queue_end_state); } -static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_t shiftState, int pause) +static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_t shiftState, tap_state_t end_state) { int i; int j; @@ -482,10 +482,10 @@ { k=32; /* we have more to shift out */ - } else if (pause&&(i == num_fields-1)) + } else if (i == num_fields-1) { /* this was the last to shift out this time */ - pause_state=(shiftState==TAP_DRSHIFT)?TAP_DRPAUSE:TAP_IRPAUSE; + pause_state=end_state; } // we have (num_bits+7)/8 bytes of bits to toggle out. @@ -535,7 +535,14 @@ for(tap = jtag_NextEnabledTap(NULL); tap!= NULL; tap=nextTap) { nextTap=jtag_NextEnabledTap(tap); - int pause=(nextTap==NULL); + tap_state_t end_state; + if (nextTap==NULL) + { + end_state = cmd_queue_end_state; + } else + { + end_state = TAP_IRSHIFT; + } int found = 0; @@ -548,7 +555,7 @@ { found = 1; - scanFields(1, fields+j, TAP_IRSHIFT, pause); + scanFields(1, fields+j, TAP_IRSHIFT, end_state); /* update device information */ buf_cpy(fields[j].out_value, tap->cur_instr, scan_size); @@ -566,13 +573,12 @@ memset(&tmp, 0, sizeof(tmp)); tmp.out_value = ones; tmp.num_bits = scan_size; - scanFields(1, &tmp, TAP_IRSHIFT, pause); + scanFields(1, &tmp, TAP_IRSHIFT, end_state); /* update device information */ buf_cpy(tmp.out_value, tap->cur_instr, scan_size); tap->bypass = 1; } } - gotoEndState(); return ERROR_OK; } @@ -583,8 +589,7 @@ int interface_jtag_add_plain_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state) { - scanFields(num_fields, fields, TAP_IRSHIFT, 1); - gotoEndState(); + scanFields(num_fields, fields, TAP_IRSHIFT, cmd_queue_end_state); return ERROR_OK; } @@ -600,7 +605,14 @@ { nextTap=jtag_NextEnabledTap(tap); int found=0; - int pause=(nextTap==NULL); + tap_state_t end_state; + if (nextTap==NULL) + { + end_state = cmd_queue_end_state; + } else + { + end_state = TAP_DRSHIFT; + } for (j=0; j < num_fields; j++) { @@ -608,7 +620,7 @@ { found = 1; - scanFields(1, fields+j, TAP_DRSHIFT, pause); + scanFields(1, fields+j, TAP_DRSHIFT, end_state); } } if (!found) @@ -619,20 +631,18 @@ tmp.out_value = NULL; tmp.in_value = NULL; - scanFields(1, &tmp, TAP_DRSHIFT, pause); + scanFields(1, &tmp, TAP_DRSHIFT, end_state); } else { } } - gotoEndState(); return ERROR_OK; } int interface_jtag_add_plain_dr_scan(int num_fields, scan_field_t *fields, tap_state_t state) { - scanFields(num_fields, fields, TAP_DRSHIFT, 1); - gotoEndState(); + scanFields(num_fields, fields, TAP_DRSHIFT, cmd_queue_end_state); return ERROR_OK; } |
From: oharboe at B. <oh...@ma...> - 2009-05-08 20:55:00
|
Author: oharboe Date: 2009-05-08 20:54:59 +0200 (Fri, 08 May 2009) New Revision: 1678 Modified: trunk/src/flash/cfi.c Log: Michael Fischer <fis...@t-...> fix compile problems on Mac Modified: trunk/src/flash/cfi.c =================================================================== --- trunk/src/flash/cfi.c 2009-05-08 18:12:43 UTC (rev 1677) +++ trunk/src/flash/cfi.c 2009-05-08 18:54:59 UTC (rev 1678) @@ -121,7 +121,7 @@ } /* inline u32 flash_address(flash_bank_t *bank, int sector, u32 offset) */ -__inline__ u32 flash_address(flash_bank_t *bank, int sector, u32 offset) +static __inline__ u32 flash_address(flash_bank_t *bank, int sector, u32 offset) { /* while the sector list isn't built, only accesses to sector 0 work */ if (sector == 0) |
From: oharboe at B. <oh...@ma...> - 2009-05-08 20:12:45
|
Author: oharboe Date: 2009-05-08 20:12:43 +0200 (Fri, 08 May 2009) New Revision: 1677 Modified: trunk/src/jtag/jtag.c Log: fix gaffe in 1672 Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-05-08 13:30:45 UTC (rev 1676) +++ trunk/src/jtag/jtag.c 2009-05-08 18:12:43 UTC (rev 1677) @@ -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,13 @@ break; } nth_tap++; + + assert(nth_tap < x ); + 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; /* do not collect input for tap's in bypass */ /* search the list */ for (j = 0; j < num_fields; j++) @@ -632,6 +635,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 +653,7 @@ /* update device information */ buf_cpy((*last_cmd)->cmd.scan->fields[nth_tap].out_value, tap->cur_instr, scan_size); } + assert(nth_tap == (x-1)); return ERROR_OK; } @@ -1450,7 +1455,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 */ |
From: oharboe at B. <oh...@ma...> - 2009-05-08 15:30:46
|
Author: oharboe Date: 2009-05-08 15:30:45 +0200 (Fri, 08 May 2009) New Revision: 1676 Added: trunk/testing/profile_stm32.txt Removed: trunk/testing/profile.txt Log: stm32 profiling wip Deleted: trunk/testing/profile.txt =================================================================== --- trunk/testing/profile.txt 2009-05-08 12:26:50 UTC (rev 1675) +++ trunk/testing/profile.txt 2009-05-08 13:30:45 UTC (rev 1676) @@ -1,14 +0,0 @@ -old version rev 1606: - -single step: 59 ms -flash 64k : 24kB/s -mdb 0 128 : 44ms - - -trunk rev 1662: - -single step: 99 ms -flash 64k : 21.5kB/s -mdb 0 128 : 72ms - - Copied: trunk/testing/profile_stm32.txt (from rev 1675, trunk/testing/profile.txt) =================================================================== --- trunk/testing/profile.txt 2009-05-08 12:26:50 UTC (rev 1675) +++ trunk/testing/profile_stm32.txt 2009-05-08 13:30:45 UTC (rev 1676) @@ -0,0 +1,52 @@ +These are profile tests for the stm32 target. + +old version rev 1606: + +single step: 59 ms +flash 64k : 24kB/s +mdb 0 128 : 44ms + + +trunk rev 1662: + +single step: 99 ms +flash 64k : 21.5kB/s +mdb 0 128 : 72ms + + +How to run tests: + +poll off +set before [flush_count] +step +set step_count [expr [flush_count]-$before] + +set before [flush_count] +mdb 0 128 +set mem_count [expr [flush_count]-$before] + +set before [flush_count] +flash erase_address 0x8000000 0x10000 +set erase_count [expr [flush_count]-$before] + +set before [flush_count] +flash fillb 0x8000000 0x55 0x10000 +set flash_fill_count [expr [flush_count]-$before] + +puts "counts" ; puts "step $step_count" ; puts "mem $mem_count" ; puts "erase $erase_count" ; puts "flash fill $flash_fill_count" + +parport trunk rev 1675 +====================== + +step 336 +mem 160 +erase 3076 +flash fill 32754 + +verify_ircapture disable + +step 114 +mem 96 +erase 1547 +flash fill 15564 + Property changes on: trunk/testing/profile_stm32.txt ___________________________________________________________________ Name: svn:mergeinfo + |
From: oharboe at B. <oh...@ma...> - 2009-05-08 14:26:52
|
Author: oharboe Date: 2009-05-08 14:26:50 +0200 (Fri, 08 May 2009) New Revision: 1675 Added: trunk/testing/profile.txt Log: profiling numbers Added: trunk/testing/profile.txt =================================================================== --- trunk/testing/profile.txt 2009-05-08 11:46:01 UTC (rev 1674) +++ trunk/testing/profile.txt 2009-05-08 12:26:50 UTC (rev 1675) @@ -0,0 +1,14 @@ +old version rev 1606: + +single step: 59 ms +flash 64k : 24kB/s +mdb 0 128 : 44ms + + +trunk rev 1662: + +single step: 99 ms +flash 64k : 21.5kB/s +mdb 0 128 : 72ms + + |
From: oharboe at B. <oh...@ma...> - 2009-05-08 13:46:02
|
Author: oharboe Date: 2009-05-08 13:46:01 +0200 (Fri, 08 May 2009) New Revision: 1674 Modified: trunk/src/jtag/jtag.c Log: add flush_count jtag queue profiling feature Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-05-08 11:18:41 UTC (rev 1673) +++ trunk/src/jtag/jtag.c 2009-05-08 11:46:01 UTC (rev 1674) @@ -43,8 +43,8 @@ #endif #include <assert.h> +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 */ @@ -243,6 +243,7 @@ static int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *argv); +static int Jim_Command_flush_count(Jim_Interp *interp, int argc, Jim_Obj *const *args); static int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); @@ -1446,6 +1447,11 @@ void jtag_execute_queue_noclear(void) { + /* 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++; + int retval=interface_jtag_execute_queue(); /* we keep the first error */ if ((jtag_error==ERROR_OK)&&(retval!=ERROR_OK)) @@ -2180,6 +2186,7 @@ register_command(cmd_ctx, NULL, "irscan", handle_irscan_command, COMMAND_EXEC, "execute IR scan <device> <instr> [dev2] [instr2] ..."); register_jim(cmd_ctx, "drscan", Jim_Command_drscan, "execute DR scan <device> <num_bits> <value> <num_bits1> <value2> ..."); + register_jim(cmd_ctx, "flush_count", Jim_Command_flush_count, "returns number of times the JTAG queue has been flushed"); register_command(cmd_ctx, NULL, "verify_ircapture", handle_verify_ircapture_command, COMMAND_ANY, "verify value captured during Capture-IR <enable|disable>"); @@ -2945,6 +2952,15 @@ return JIM_OK; } + +static int Jim_Command_flush_count(Jim_Interp *interp, int argc, Jim_Obj *const *args) +{ + Jim_SetResult(interp, Jim_NewIntObj(interp, jtag_flush_queue_count)); + + return JIM_OK; +} + + static int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { if (argc == 1) |
From: oharboe at B. <oh...@ma...> - 2009-05-08 13:18:44
|
Author: oharboe Date: 2009-05-08 13:18:41 +0200 (Fri, 08 May 2009) New Revision: 1673 Modified: trunk/src/jtag/jtag.c Log: fix (old?) bug in jtag_add_ir_scan() Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-05-08 09:48:00 UTC (rev 1672) +++ trunk/src/jtag/jtag.c 2009-05-08 11:18:41 UTC (rev 1673) @@ -540,6 +540,7 @@ 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. * @@ -622,7 +623,7 @@ 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; + (*last_cmd)->cmd.scan->fields[nth_tap].in_value = fields[nth_tap].in_value; /* search the list */ for (j = 0; j < num_fields; j++) |
From: oharboe at B. <oh...@ma...> - 2009-05-08 11:48:02
|
Author: oharboe Date: 2009-05-08 11:48:00 +0200 (Fri, 08 May 2009) New Revision: 1672 Modified: trunk/src/flash/str9xpec.c trunk/src/jtag/bitq.c trunk/src/jtag/jtag.c trunk/src/jtag/jtag.h trunk/src/jtag/zy1000.c trunk/src/pld/virtex2.c trunk/src/svf/svf.c trunk/src/target/arm11_dbgtap.c trunk/src/target/arm720t.c trunk/src/target/arm7tdmi.c trunk/src/target/arm920t.c trunk/src/target/arm926ejs.c trunk/src/target/arm966e.c trunk/src/target/arm9tdmi.c trunk/src/target/arm_adi_v5.c trunk/src/target/arm_jtag.c trunk/src/target/avrt.c trunk/src/target/embeddedice.c trunk/src/target/etb.c trunk/src/target/etm.c trunk/src/target/feroceon.c trunk/src/target/mips_ejtag.c trunk/src/target/xscale.c trunk/src/xsvf/xsvf.c Log: in_handler in_check_mask and in_check_value now removed from field. Last big patch in the series of JTAG API cleanup. Modified: trunk/src/flash/str9xpec.c =================================================================== --- trunk/src/flash/str9xpec.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/flash/str9xpec.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -129,8 +129,8 @@ field.in_value = NULL; - field.in_handler = NULL; + jtag_add_ir_scan(1, &field, end_state); @@ -155,8 +155,8 @@ field.in_value = &status; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_IDLE); jtag_execute_queue(); @@ -247,8 +247,8 @@ field.in_value = str9xpec_info->options; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_IDLE); jtag_execute_queue(); @@ -399,8 +399,8 @@ field.in_value = NULL; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_IDLE); jtag_add_sleep(40000); @@ -413,8 +413,8 @@ field.in_value = buffer; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_IRPAUSE); jtag_execute_queue(); @@ -515,8 +515,8 @@ field.in_value = NULL; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_IDLE); jtag_execute_queue(); @@ -581,8 +581,8 @@ field.in_value = &status; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, -1); jtag_execute_queue(); @@ -667,8 +667,8 @@ field.in_value = NULL; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, -1); @@ -756,8 +756,8 @@ field.in_value = NULL; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_IDLE); @@ -774,8 +774,8 @@ field.in_value = scanbuf; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, -1); jtag_execute_queue(); @@ -816,8 +816,8 @@ field.in_value = NULL; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_IDLE); @@ -834,8 +834,8 @@ field.in_value = scanbuf; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, -1); jtag_execute_queue(); @@ -898,8 +898,8 @@ field.in_value = buffer; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_IDLE); jtag_execute_queue(); @@ -1023,8 +1023,8 @@ field.in_value = NULL; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_IDLE); @@ -1041,8 +1041,8 @@ field.in_value = &status; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, -1); jtag_execute_queue(); Modified: trunk/src/jtag/bitq.c =================================================================== --- trunk/src/jtag/bitq.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/jtag/bitq.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -66,7 +66,7 @@ while (bitq_in_state.field_idx<bitq_in_state.cmd->cmd.scan->num_fields) { field = &bitq_in_state.cmd->cmd.scan->fields[bitq_in_state.field_idx]; - if (field->in_value || field->in_handler) + if (field->in_value) { if (bitq_in_state.bit_pos==0) { @@ -124,12 +124,6 @@ in_mask <<= 1; bitq_in_state.bit_pos++; } - - - if (field->in_handler && bitq_in_state.status==ERROR_OK) - { - bitq_in_state.status = (*field->in_handler)(in_buff, field->in_handler_priv, field); - } } bitq_in_state.field_idx++; /* advance to next field */ @@ -238,7 +232,7 @@ u8* out_ptr; u8 out_mask; - if (field->in_value || field->in_handler) + if (field->in_value) tdo_req = 1; else tdo_req = 0; Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/jtag/jtag.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -623,7 +623,6 @@ (*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; - (*last_cmd)->cmd.scan->fields[nth_tap].in_handler = NULL; /* disable verification by default */ /* search the list */ for (j = 0; j < num_fields; j++) @@ -690,10 +689,6 @@ (*last_cmd)->cmd.scan->fields[i].num_bits = num_bits; (*last_cmd)->cmd.scan->fields[i].out_value = buf_cpy(fields[i].out_value, cmd_queue_alloc(num_bytes), num_bits); (*last_cmd)->cmd.scan->fields[i].in_value = fields[i].in_value; - (*last_cmd)->cmd.scan->fields[i].in_check_value = fields[i].in_check_value; - (*last_cmd)->cmd.scan->fields[i].in_check_mask = fields[i].in_check_mask; - (*last_cmd)->cmd.scan->fields[i].in_handler = NULL; - (*last_cmd)->cmd.scan->fields[i].in_handler_priv = NULL; } return ERROR_OK; } @@ -772,10 +767,7 @@ (*last_cmd)->cmd.scan->fields[field_count].num_bits = scan_size; (*last_cmd)->cmd.scan->fields[field_count].out_value = buf_cpy(fields[j].out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size); (*last_cmd)->cmd.scan->fields[field_count].in_value = fields[j].in_value; - (*last_cmd)->cmd.scan->fields[field_count].in_check_value = fields[j].in_check_value; - (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = fields[j].in_check_mask; - (*last_cmd)->cmd.scan->fields[field_count].in_handler = fields[j].in_handler; - (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = fields[j].in_handler_priv; + field_count++; } } if (!found) @@ -792,10 +784,7 @@ (*last_cmd)->cmd.scan->fields[field_count].num_bits = 1; (*last_cmd)->cmd.scan->fields[field_count].out_value = NULL; (*last_cmd)->cmd.scan->fields[field_count].in_value = NULL; - (*last_cmd)->cmd.scan->fields[field_count].in_check_value = NULL; - (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = NULL; - (*last_cmd)->cmd.scan->fields[field_count].in_handler = NULL; - (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = NULL; + field_count++; } else { @@ -881,10 +870,7 @@ (*last_cmd)->cmd.scan->fields[field_count].num_bits = scan_size; (*last_cmd)->cmd.scan->fields[field_count].out_value = buf_cpy(out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size); (*last_cmd)->cmd.scan->fields[field_count].in_value = NULL; - (*last_cmd)->cmd.scan->fields[field_count].in_check_value = NULL; - (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = NULL; - (*last_cmd)->cmd.scan->fields[field_count].in_handler = NULL; - (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = NULL; + field_count++; } } else { @@ -900,10 +886,7 @@ (*last_cmd)->cmd.scan->fields[field_count].num_bits = 1; (*last_cmd)->cmd.scan->fields[field_count].out_value = NULL; (*last_cmd)->cmd.scan->fields[field_count].in_value = NULL; - (*last_cmd)->cmd.scan->fields[field_count].in_check_value = NULL; - (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = NULL; - (*last_cmd)->cmd.scan->fields[field_count].in_handler = NULL; - (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = NULL; + field_count++; } } } @@ -945,10 +928,6 @@ (*last_cmd)->cmd.scan->fields[i].num_bits = num_bits; (*last_cmd)->cmd.scan->fields[i].out_value = buf_cpy(fields[i].out_value, cmd_queue_alloc(num_bytes), num_bits); (*last_cmd)->cmd.scan->fields[i].in_value = fields[i].in_value; - (*last_cmd)->cmd.scan->fields[i].in_check_value = fields[i].in_check_value; - (*last_cmd)->cmd.scan->fields[i].in_check_mask = fields[i].in_check_mask; - (*last_cmd)->cmd.scan->fields[i].in_handler = fields[i].in_handler; - (*last_cmd)->cmd.scan->fields[i].in_handler_priv = fields[i].in_handler_priv; } return ERROR_OK; @@ -1333,7 +1312,7 @@ /* if neither in_value nor in_handler * are specified we don't have to examine this field */ - if (cmd->fields[i].in_value || cmd->fields[i].in_handler) + if (cmd->fields[i].in_value) { int num_bits = cmd->fields[i].num_bits; u8 *captured = buf_set_buf(buffer, bit_count, malloc(CEIL(num_bits, 8)), 0, num_bits); @@ -1347,30 +1326,8 @@ if (cmd->fields[i].in_value) { buf_cpy(captured, cmd->fields[i].in_value, num_bits); - - if (cmd->fields[i].in_handler) - { - if (cmd->fields[i].in_handler(cmd->fields[i].in_value, cmd->fields[i].in_handler_priv, cmd->fields+i) != ERROR_OK) - { - LOG_WARNING("in_handler: with \"in_value\", mismatch in %s", cmd->ir_scan ? "SIR" : "SDR" ); - retval = ERROR_JTAG_QUEUE_FAILED; - } - } } - /* no in_value specified, but a handler takes care of the scanned data */ - if (cmd->fields[i].in_handler && (!cmd->fields[i].in_value)) - { - if (cmd->fields[i].in_handler(captured, cmd->fields[i].in_handler_priv, cmd->fields+i) != ERROR_OK) - { - /* We're going to call the error:handler later, but if the in_handler - * reported an error we report this failure upstream - */ - LOG_WARNING("in_handler: w/o \"in_value\", mismatch in %s", cmd->ir_scan ? "SIR" : "SDR" ); - retval = ERROR_JTAG_QUEUE_FAILED; - } - } - free(captured); } bit_count += cmd->fields[i].num_bits; @@ -1432,26 +1389,6 @@ return retval; } -int jtag_check_value(u8 *captured, void *priv, scan_field_t *field) -{ - return jtag_check_value_inner(captured, field, field->in_check_value, field->in_check_mask); -} - -/* - set up checking of this field using the in_handler. The values passed in must be valid until - after jtag_execute() has completed. - */ -void jtag_set_check_value(scan_field_t *field, u8 *value, u8 *mask, struct invalidstruct *obsolete) -{ - if (value) - field->in_handler = jtag_check_value; - else - field->in_handler = NULL; /* No check, e.g. embeddedice uses value==NULL to indicate no check */ - field->in_handler_priv = NULL; - field->in_check_value = value; - field->in_check_mask = mask; -} - void jtag_check_value_mask(scan_field_t *field, u8 *value, u8 *mask) { assert(field->in_value != NULL); @@ -1466,7 +1403,6 @@ int retval=jtag_check_value_inner(field->in_value, field, value, mask); jtag_set_error(retval); - } @@ -1478,7 +1414,7 @@ for (i = 0; i < cmd->num_fields; i++) { - if (cmd->fields[i].in_value || cmd->fields[i].in_handler) + if (cmd->fields[i].in_value) type |= SCAN_IN; if (cmd->fields[i].out_value) type |= SCAN_OUT; @@ -1566,8 +1502,8 @@ field.in_value = idcode_buffer; - field.in_handler = NULL; + for (i = 0; i < JTAG_MAX_CHAIN_SIZE; i++) { buf_set_u32(idcode_buffer, i * 32, 32, 0x000000FF); @@ -1740,8 +1676,8 @@ field.num_bits = total_ir_length; field.out_value = ir_test; field.in_value = ir_test; - field.in_handler = NULL; + jtag_add_plain_ir_scan(1, &field, TAP_RESET); jtag_execute_queue(); @@ -2858,9 +2794,6 @@ fields[i].out_value = malloc(CEIL(field_size, 8)); buf_set_u32(fields[i].out_value, 0, field_size, strtoul(args[i*2+1], NULL, 0)); fields[i].in_value = NULL; - fields[i].in_check_mask = NULL; - fields[i].in_handler = NULL; - fields[i].in_handler_priv = NULL; } jtag_add_ir_scan(argc / 2, fields, TAP_INVALID); @@ -2973,10 +2906,7 @@ fields[field_count].out_value = malloc(CEIL(bits, 8)); str_to_buf(str, len, fields[field_count].out_value, bits, 0); fields[field_count].in_value = fields[field_count].out_value; - fields[field_count].in_check_mask = NULL; - fields[field_count].in_check_value = NULL; - fields[field_count].in_handler = NULL; - fields[field_count++].in_handler_priv = NULL; + field_count++; } jtag_add_dr_scan(num_fields, fields, TAP_INVALID); Modified: trunk/src/jtag/jtag.h =================================================================== --- trunk/src/jtag/jtag.h 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/jtag/jtag.h 2009-05-08 09:48:00 UTC (rev 1672) @@ -272,11 +272,6 @@ int num_bits; /* number of bits this field specifies (up to 32) */ u8* out_value; /* value to be scanned into the device */ u8* in_value; /* pointer to a 32-bit memory location to take data scanned out */ - /* in_check_value/mask, in_handler_error_handler, in_handler_priv can be used by the in handler, otherwise they contain garbage */ - u8* in_check_value; /* deprecated! only used from jtag_set_check_value. used to validate scan results */ - u8* in_check_mask; /* deprecated! only used from jtag_set_check_value. check specified bits against check_value */ - in_handler_t in_handler; /* deprecated! SET TO NULL. DO NOT USE! process received buffer using this handler */ - void* in_handler_priv; /* deprecated! only used by obsolete in_handler implementations */ } scan_field_t; enum scan_type { @@ -736,7 +731,6 @@ }; -extern void jtag_set_check_value(scan_field_t* field, u8* value, u8* mask, struct invalidstruct *obsolete); /* execute jtag queue and check value and use mask if mask is != NULL. invokes * jtag_set_error() with any error. */ extern void jtag_check_value_mask(scan_field_t *field, u8 *value, u8 *mask); Modified: trunk/src/jtag/zy1000.c =================================================================== --- trunk/src/jtag/zy1000.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/jtag/zy1000.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -468,24 +468,6 @@ if (fields[i].in_value!=NULL) { inBuffer=fields[i].in_value; - } else if (fields[i].in_handler!=NULL) - { - if (in_buff_size*8<num_bits) - { - // we need more space - if (in_buff!=NULL) - free(in_buff); - in_buff=NULL; - in_buff_size=(num_bits+7)/8; - in_buff=malloc(in_buff_size); - if (in_buff==NULL) - { - LOG_ERROR("Out of memory"); - jtag_error=ERROR_JTAG_QUEUE_FAILED; - return; - } - } - inBuffer=in_buff; } // here we shuffle N bits out/in @@ -535,17 +517,6 @@ } j+=k; } - - if (fields[i].in_handler!=NULL) - { - // invoke callback - int r=fields[i].in_handler(inBuffer, fields[i].in_handler_priv, fields+i); - if (r!=ERROR_OK) - { - /* this will cause jtag_execute_queue() to return an error */ - jtag_error=r; - } - } } } @@ -577,15 +548,6 @@ { found = 1; - if ((jtag_verify_capture_ir)&&(fields[j].in_handler==NULL)) - { - jtag_set_check_value(fields+j, tap->expected, tap->expected_mask, NULL); - } else if (jtag_verify_capture_ir) - { - fields[j].in_check_value = tap->expected; - fields[j].in_check_mask = tap->expected_mask; - } - scanFields(1, fields+j, TAP_IRSHIFT, pause); /* update device information */ buf_cpy(fields[j].out_value, tap->cur_instr, scan_size); @@ -656,10 +618,6 @@ tmp.num_bits = 1; tmp.out_value = NULL; tmp.in_value = NULL; - tmp.in_check_value = NULL; - tmp.in_check_mask = NULL; - tmp.in_handler = NULL; - tmp.in_handler_priv = NULL; scanFields(1, &tmp, TAP_DRSHIFT, pause); } Modified: trunk/src/pld/virtex2.c =================================================================== --- trunk/src/pld/virtex2.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/pld/virtex2.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -60,9 +60,9 @@ field.in_value = NULL; - field.in_handler = NULL; + jtag_add_ir_scan(1, &field, TAP_IDLE); free(field.out_value); @@ -84,7 +84,6 @@ scan_field.num_bits = num_words * 32; scan_field.out_value = values; scan_field.in_value = NULL; - scan_field.in_handler = NULL; for (i = 0; i < num_words; i++) buf_set_u32(values + 4 * i, 0, 32, flip_u32(*words++, 32)); @@ -109,7 +108,6 @@ scan_field.out_value = NULL; u8 tmp[4]; scan_field.in_value = tmp; - scan_field.in_handler = NULL; virtex2_set_instr(virtex2_info->tap, 0x4); /* CFG_OUT */ @@ -159,9 +157,9 @@ field.in_value = NULL; - field.in_handler = NULL; + if ((retval = xilinx_read_bit_file(&bit_file, filename)) != ERROR_OK) return retval; Modified: trunk/src/svf/svf.c =================================================================== --- trunk/src/svf/svf.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/svf/svf.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -985,8 +985,8 @@ field.in_value = &svf_tdi_buffer[svf_buffer_index]; - field.in_handler = NULL; + jtag_add_plain_dr_scan(1, &field, svf_para.dr_end_state); svf_buffer_index += (i + 7) >> 3; @@ -1086,8 +1086,8 @@ field.in_value = &svf_tdi_buffer[svf_buffer_index]; - field.in_handler = NULL; + jtag_add_plain_ir_scan(1, &field, svf_para.ir_end_state); svf_buffer_index += (i + 7) >> 3; Modified: trunk/src/target/arm11_dbgtap.c =================================================================== --- trunk/src/target/arm11_dbgtap.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/arm11_dbgtap.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -87,11 +87,6 @@ { field->tap = arm11->jtag_info.tap; field->num_bits = num_bits; - field->in_check_mask = NULL; - field->in_check_value = NULL; - field->in_handler = NULL; - field->in_handler_priv = NULL; - field->out_value = out_data; field->in_value = in_data; } Modified: trunk/src/target/arm720t.c =================================================================== --- trunk/src/target/arm720t.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/arm720t.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -113,13 +113,13 @@ fields[0].num_bits = 1; fields[0].out_value = &instruction_buf; fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; fields[1].num_bits = 32; fields[1].out_value = out_buf; fields[1].in_value = NULL; - fields[1].in_handler = NULL; + if (in) { u8 tmp[4]; Modified: trunk/src/target/arm7tdmi.c =================================================================== --- trunk/src/target/arm7tdmi.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/arm7tdmi.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -115,13 +115,13 @@ fields[0].num_bits = 1; fields[0].out_value = NULL; fields[0].in_value = &breakpoint; - fields[0].in_handler = NULL; + fields[1].tap = arm7_9->jtag_info.tap; fields[1].num_bits = 32; fields[1].out_value = NULL; fields[1].in_value = databus; - fields[1].in_handler = NULL; + if((retval = arm_jtag_scann(&arm7_9->jtag_info, 0x1)) != ERROR_OK) { @@ -194,7 +194,7 @@ fields[0].num_bits = 1; fields[0].out_value = NULL; fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; @@ -202,7 +202,7 @@ fields[1].out_value = NULL; u8 tmp[4]; fields[1].in_value = tmp; - fields[1].in_handler = NULL; + jtag_add_dr_scan_now(2, fields, TAP_INVALID); @@ -286,14 +286,14 @@ fields[0].num_bits = 1; fields[0].out_value = NULL; fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; fields[1].num_bits = 32; fields[1].out_value = NULL; u8 tmp[4]; fields[1].in_value = tmp; - fields[1].in_handler = NULL; + jtag_add_dr_scan_now(2, fields, TAP_INVALID); Modified: trunk/src/target/arm920t.c =================================================================== --- trunk/src/target/arm920t.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/arm920t.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -114,25 +114,25 @@ fields[0].num_bits = 1; fields[0].out_value = &access_type_buf; fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; fields[1].num_bits = 32; fields[1].out_value = NULL; fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; fields[2].num_bits = 6; fields[2].out_value = ®_addr_buf; fields[2].in_value = NULL; - fields[2].in_handler = NULL; + fields[3].tap = jtag_info->tap; fields[3].num_bits = 1; fields[3].out_value = &nr_w_buf; fields[3].in_value = NULL; - fields[3].in_handler = NULL; + jtag_add_dr_scan(4, fields, TAP_INVALID); @@ -175,7 +175,7 @@ fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; @@ -185,7 +185,7 @@ fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; @@ -195,7 +195,7 @@ fields[2].in_value = NULL; - fields[2].in_handler = NULL; + fields[3].tap = jtag_info->tap; @@ -205,7 +205,7 @@ fields[3].in_value = NULL; - fields[3].in_handler = NULL; + jtag_add_dr_scan(4, fields, TAP_INVALID); @@ -242,7 +242,7 @@ fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; @@ -252,7 +252,7 @@ fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; @@ -262,7 +262,7 @@ fields[2].in_value = NULL; - fields[2].in_handler = NULL; + fields[3].tap = jtag_info->tap; @@ -272,7 +272,7 @@ fields[3].in_value = NULL; - fields[3].in_handler = NULL; + jtag_add_dr_scan(4, fields, TAP_INVALID); Modified: trunk/src/target/arm926ejs.c =================================================================== --- trunk/src/target/arm926ejs.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/arm926ejs.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -96,6 +96,10 @@ int arm926ejs_catch_broken_irscan(u8 *captured, void *priv, scan_field_t *field) { + /* FIX!!!! this code should be reenabled. For now it does not check + * the queue...*/ + return 0; +#if 0 /* The ARM926EJ-S' instruction register is 4 bits wide */ u8 t = *captured & 0xf; u8 t2 = *field->in_check_value & 0xf; @@ -109,6 +113,7 @@ return ERROR_OK; } return ERROR_JTAG_QUEUE_FAILED;; +#endif } #define ARM926EJS_CP15_ADDR(opcode_1, opcode_2, CRn, CRm) ((opcode_1 << 11) | (opcode_2 << 8) | (CRn << 4) | (CRm << 0)) @@ -139,27 +144,27 @@ fields[0].out_value = NULL; u8 tmp[4]; fields[0].in_value = tmp; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; fields[1].num_bits = 1; fields[1].out_value = &access; fields[1].in_value = &access; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; fields[2].num_bits = 14; fields[2].out_value = address_buf; fields[2].in_value = NULL; - fields[2].in_handler = NULL; + fields[3].tap = jtag_info->tap; fields[3].num_bits = 1; fields[3].out_value = &nr_w_buf; fields[3].in_value = NULL; - fields[3].in_handler = NULL; + jtag_add_dr_scan(4, fields, TAP_INVALID); /*TODO: add timeout*/ @@ -217,9 +222,9 @@ fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; fields[1].num_bits = 1; fields[1].out_value = &access; @@ -227,9 +232,9 @@ fields[1].in_value = &access; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; fields[2].num_bits = 14; fields[2].out_value = address_buf; @@ -237,9 +242,9 @@ fields[2].in_value = NULL; - fields[2].in_handler = NULL; + fields[3].tap = jtag_info->tap; fields[3].num_bits = 1; fields[3].out_value = &nr_w_buf; @@ -247,9 +252,9 @@ fields[3].in_value = NULL; - fields[3].in_handler = NULL; + jtag_add_dr_scan(4, fields, TAP_INVALID); /*TODO: add timeout*/ do Modified: trunk/src/target/arm966e.c =================================================================== --- trunk/src/target/arm966e.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/arm966e.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -188,19 +188,19 @@ fields[0].num_bits = 32; fields[0].out_value = NULL; fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; fields[1].num_bits = 6; fields[1].out_value = ®_addr_buf; fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; fields[2].num_bits = 1; fields[2].out_value = &nr_w_buf; fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan(3, fields, TAP_INVALID); @@ -250,7 +250,7 @@ fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; @@ -260,7 +260,7 @@ fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; @@ -270,7 +270,7 @@ fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan(3, fields, TAP_INVALID); Modified: trunk/src/target/arm9tdmi.c =================================================================== --- trunk/src/target/arm9tdmi.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/arm9tdmi.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -132,7 +132,7 @@ fields[0].in_value = databus; - fields[0].in_handler = NULL; + fields[1].tap = arm7_9->jtag_info.tap; @@ -142,7 +142,7 @@ fields[1].in_value = &debug_reason; - fields[1].in_handler = NULL; + fields[2].tap = arm7_9->jtag_info.tap; @@ -152,7 +152,7 @@ fields[2].in_value = instructionbus; - fields[2].in_handler = NULL; + if((retval = arm_jtag_scann(&arm7_9->jtag_info, 0x1)) != ERROR_OK) @@ -217,20 +217,20 @@ fields[0].num_bits = 32; fields[0].out_value = out_buf; fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; fields[1].num_bits = 3; fields[1].out_value = &sysspeed_buf; fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; fields[2].num_bits = 32; fields[2].out_value = instr_buf; fields[2].in_value = NULL; - fields[2].in_handler = NULL; + if (in) { @@ -285,19 +285,19 @@ fields[0].out_value = NULL; u8 tmp[4]; fields[0].in_value = tmp; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; fields[1].num_bits = 3; fields[1].out_value = NULL; fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; fields[2].num_bits = 32; fields[2].out_value = NULL; fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan_now(3, fields, TAP_INVALID); @@ -350,19 +350,19 @@ fields[0].out_value = NULL; u8 tmp[4]; fields[0].in_value = tmp; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; fields[1].num_bits = 3; fields[1].out_value = NULL; fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; fields[2].num_bits = 32; fields[2].out_value = NULL; fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan_now(3, fields, TAP_INVALID); Modified: trunk/src/target/arm_adi_v5.c =================================================================== --- trunk/src/target/arm_adi_v5.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/arm_adi_v5.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -81,7 +81,7 @@ fields[0].in_value = ack; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; @@ -89,7 +89,7 @@ fields[1].out_value = outvalue; fields[1].in_value = invalue; - fields[1].in_handler = NULL; + @@ -114,7 +114,7 @@ buf_set_u32(&out_addr_buf, 0, 3, ((reg_addr >> 1) & 0x6) | (RnW & 0x1)); fields[0].out_value = &out_addr_buf; fields[0].in_value = ack; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; @@ -122,7 +122,7 @@ buf_set_u32(out_value_buf, 0, 32, outvalue); fields[1].out_value = out_value_buf; fields[1].in_value = NULL; - fields[1].in_handler = NULL; + if (invalue) { Modified: trunk/src/target/arm_jtag.c =================================================================== --- trunk/src/target/arm_jtag.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/arm_jtag.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -53,7 +53,7 @@ field.out_value = t; buf_set_u32(field.out_value, 0, field.num_bits, new_instr); field.in_value = NULL; - field.in_handler = NULL; + if (no_verify_capture==NULL) Modified: trunk/src/target/avrt.c =================================================================== --- trunk/src/target/avrt.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/avrt.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -126,10 +126,10 @@ int avr_target_create(struct target_s *target, Jim_Interp *interp) { avr_common_t *avr = calloc(1, sizeof(avr_common_t)); - + avr->jtag_info.tap = target->tap; target->arch_info = avr; - + return ERROR_OK; } @@ -157,7 +157,7 @@ { target->state = TARGET_HALTED; } - + LOG_DEBUG("%s", __FUNCTION__); return ERROR_OK; } @@ -183,7 +183,7 @@ int avr_assert_reset(target_t *target) { target->state = TARGET_RESET; - + LOG_DEBUG("%s", __FUNCTION__); return ERROR_OK; } @@ -191,7 +191,7 @@ int avr_deassert_reset(target_t *target) { target->state = TARGET_RUNNING; - + LOG_DEBUG("%s", __FUNCTION__); return ERROR_OK; } @@ -225,21 +225,17 @@ LOG_ERROR("invalid ir_len"); return ERROR_FAIL; } - + { scan_field_t field[1]; - + field[0].tap = tap; field[0].num_bits = tap->ir_length; field[0].out_value = ir_out; field[0].in_value = ir_in; - field[0].in_check_value = NULL; - field[0].in_check_mask = NULL; - field[0].in_handler = NULL; - field[0].in_handler_priv = NULL; jtag_add_plain_ir_scan(sizeof(field) / sizeof(field[0]), field, TAP_IDLE); } - + return ERROR_OK; } @@ -250,21 +246,17 @@ LOG_ERROR("invalid tap"); return ERROR_FAIL; } - + { scan_field_t field[1]; - + field[0].tap = tap; field[0].num_bits = dr_len; field[0].out_value = dr_out; field[0].in_value = dr_in; - field[0].in_check_value = NULL; - field[0].in_check_mask = NULL; - field[0].in_handler = NULL; - field[0].in_handler_priv = NULL; jtag_add_plain_dr_scan(sizeof(field) / sizeof(field[0]), field, TAP_IDLE); } - + return ERROR_OK; } @@ -275,9 +267,9 @@ LOG_ERROR("ir_len overflow, maxium is 8"); return ERROR_FAIL; } - + mcu_write_ir(tap, ir_in, &ir_out, ir_len, rti); - + return ERROR_OK; } @@ -288,9 +280,9 @@ LOG_ERROR("dr_len overflow, maxium is 8"); return ERROR_FAIL; } - + mcu_write_dr(tap, dr_in, &dr_out, dr_len, rti); - + return ERROR_OK; } @@ -301,9 +293,9 @@ LOG_ERROR("ir_len overflow, maxium is 16"); return ERROR_FAIL; } - + mcu_write_ir(tap, (u8*)ir_in, (u8*)&ir_out, ir_len, rti); - + return ERROR_OK; } @@ -314,9 +306,9 @@ LOG_ERROR("dr_len overflow, maxium is 16"); return ERROR_FAIL; } - + mcu_write_dr(tap, (u8*)dr_in, (u8*)&dr_out, dr_len, rti); - + return ERROR_OK; } @@ -327,9 +319,9 @@ LOG_ERROR("ir_len overflow, maxium is 32"); return ERROR_FAIL; } - + mcu_write_ir(tap, (u8*)ir_in, (u8*)&ir_out, ir_len, rti); - + return ERROR_OK; } @@ -340,9 +332,9 @@ LOG_ERROR("dr_len overflow, maxium is 32"); return ERROR_FAIL; } - + mcu_write_dr(tap, (u8*)dr_in, (u8*)&dr_out, dr_len, rti); - + return ERROR_OK; } Modified: trunk/src/target/embeddedice.c =================================================================== --- trunk/src/target/embeddedice.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/embeddedice.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -252,21 +252,21 @@ fields[0].num_bits = 32; fields[0].out_value = reg->value; fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = ice_reg->jtag_info->tap; fields[1].num_bits = 5; fields[1].out_value = field1_out; buf_set_u32(fields[1].out_value, 0, 5, reg_addr); fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = ice_reg->jtag_info->tap; fields[2].num_bits = 1; fields[2].out_value = field2_out; buf_set_u32(fields[2].out_value, 0, 1, 0); fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan(3, fields, TAP_INVALID); @@ -304,21 +304,21 @@ fields[0].out_value = NULL; u8 tmp[4]; fields[0].in_value = tmp; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; fields[1].num_bits = 5; fields[1].out_value = field1_out; buf_set_u32(fields[1].out_value, 0, 5, embeddedice_reg_arch_info[EICE_COMMS_DATA]); fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; fields[2].num_bits = 1; fields[2].out_value = field2_out; buf_set_u32(fields[2].out_value, 0, 1, 0); fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan(3, fields, TAP_INVALID); @@ -412,7 +412,7 @@ fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; @@ -423,7 +423,7 @@ fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; @@ -434,7 +434,7 @@ fields[2].in_value = NULL; - fields[2].in_handler = NULL; + while (size > 0) @@ -481,7 +481,7 @@ fields[0].in_value = field0_in; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; @@ -492,7 +492,7 @@ fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; @@ -503,7 +503,7 @@ fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan(3, fields, TAP_INVALID); Modified: trunk/src/target/etb.c =================================================================== --- trunk/src/target/etb.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/etb.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -74,7 +74,7 @@ field.in_value = NULL; - field.in_handler = NULL; + jtag_add_ir_scan(1, &field, TAP_INVALID); @@ -99,7 +99,7 @@ field.in_value = NULL; - field.in_handler = NULL; + /* select INTEST instruction */ @@ -188,21 +188,21 @@ fields[0].out_value = NULL; u8 tmp[4]; fields[0].in_value = tmp; - fields[0].in_handler = NULL; + fields[1].tap = etb->tap; fields[1].num_bits = 7; fields[1].out_value = malloc(1); buf_set_u32(fields[1].out_value, 0, 7, 4); fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = etb->tap; fields[2].num_bits = 1; fields[2].out_value = malloc(1); buf_set_u32(fields[2].out_value, 0, 1, 0); fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan(3, fields, TAP_INVALID); @@ -250,7 +250,7 @@ fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = etb_reg->etb->tap; @@ -261,7 +261,7 @@ fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = etb_reg->etb->tap; @@ -272,7 +272,7 @@ fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan(3, fields, TAP_INVALID); @@ -347,7 +347,7 @@ fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = etb_reg->etb->tap; @@ -358,7 +358,7 @@ fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = etb_reg->etb->tap; @@ -369,7 +369,7 @@ fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan(3, fields, TAP_INVALID); Modified: trunk/src/target/etm.c =================================================================== --- trunk/src/target/etm.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/etm.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -340,21 +340,21 @@ fields[0].num_bits = 32; fields[0].out_value = reg->value; fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = etm_reg->jtag_info->tap; fields[1].num_bits = 7; fields[1].out_value = malloc(1); buf_set_u32(fields[1].out_value, 0, 7, reg_addr); fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = etm_reg->jtag_info->tap; fields[2].num_bits = 1; fields[2].out_value = malloc(1); buf_set_u32(fields[2].out_value, 0, 1, 0); fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan(3, fields, TAP_INVALID); @@ -424,7 +424,7 @@ fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = etm_reg->jtag_info->tap; @@ -435,7 +435,7 @@ fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = etm_reg->jtag_info->tap; @@ -446,7 +446,7 @@ fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan(3, fields, TAP_INVALID); Modified: trunk/src/target/feroceon.c =================================================================== --- trunk/src/target/feroceon.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/feroceon.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -137,10 +137,10 @@ fields[0].out_value = out_buf; fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; fields[1].num_bits = 3; @@ -149,8 +149,8 @@ fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = jtag_info->tap; fields[2].num_bits = 32; @@ -159,8 +159,8 @@ fields[2].in_value = NULL; - fields[2].in_handler = NULL; + jtag_add_dr_scan(3, fields, TAP_INVALID); Modified: trunk/src/target/mips_ejtag.c =================================================================== --- trunk/src/target/mips_ejtag.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/mips_ejtag.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -53,8 +53,8 @@ field.in_value = NULL; - field.in_handler = NULL; + jtag_add_ir_scan(1, &field, TAP_INVALID); } @@ -76,8 +76,8 @@ field.in_value = (void*)idcode; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_INVALID); if (jtag_execute_queue() != ERROR_OK) @@ -103,8 +103,8 @@ field.in_value = (void*)impcode; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_INVALID); if (jtag_execute_queue() != ERROR_OK) @@ -134,8 +134,8 @@ field.in_value = (u8*)data; - field.in_handler = NULL; + jtag_add_dr_scan(1, &field, TAP_INVALID); if ((retval = jtag_execute_queue()) != ERROR_OK) Modified: trunk/src/target/xscale.c =================================================================== --- trunk/src/target/xscale.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/target/xscale.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -270,7 +270,7 @@ fields[1].num_bits = 32; fields[1].out_value = NULL; fields[1].in_value = xscale->reg_cache->reg_list[XSCALE_DCSR].value; - fields[1].in_handler = NULL; + fields[2].tap = xscale->jtag_info.tap; fields[2].num_bits = 1; @@ -346,7 +346,7 @@ fields[1].out_value = NULL; u8 tmp[4]; fields[1].in_value = tmp; - fields[1].in_handler = NULL; + fields[2].tap = xscale->jtag_info.tap; fields[2].num_bits = 1; @@ -462,7 +462,7 @@ fields[1].num_bits = 32; fields[1].out_value = NULL; fields[1].in_value = xscale->reg_cache->reg_list[XSCALE_TX].value; - fields[1].in_handler = NULL; + fields[2].tap = xscale->jtag_info.tap; fields[2].num_bits = 1; @@ -554,7 +554,7 @@ fields[1].num_bits = 32; fields[1].out_value = xscale->reg_cache->reg_list[XSCALE_RX].value; fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = xscale->jtag_info.tap; fields[2].num_bits = 1; @@ -726,7 +726,7 @@ fields[1].num_bits = 32; fields[1].out_value = xscale->reg_cache->reg_list[XSCALE_DCSR].value; fields[1].in_value = NULL; - fields[1].in_handler = NULL; + fields[2].tap = xscale->jtag_info.tap; fields[2].num_bits = 1; @@ -796,7 +796,7 @@ fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = xscale->jtag_info.tap; @@ -806,7 +806,7 @@ fields[1].in_value = NULL; - fields[1].in_handler = NULL; + jtag_add_dr_scan(2, fields, TAP_INVALID); @@ -858,7 +858,7 @@ fields[0].in_value = NULL; - fields[0].in_handler = NULL; + fields[1].tap = xscale->jtag_info.tap; @@ -868,7 +868,7 @@ fields[1].in_value = NULL; - fields[1].in_handler = NULL; + jtag_add_dr_scan(2, fields, TAP_INVALID); Modified: trunk/src/xsvf/xsvf.c =================================================================== --- trunk/src/xsvf/xsvf.c 2009-05-08 09:37:25 UTC (rev 1671) +++ trunk/src/xsvf/xsvf.c 2009-05-08 09:48:00 UTC (rev 1672) @@ -719,7 +719,7 @@ field.in_value = NULL; - field.in_handler = NULL; + if (tap == NULL) jtag_add_plain_ir_scan(1, &field, my_end_state); |
From: oharboe at B. <oh...@ma...> - 2009-05-08 11:37:26
|
Author: oharboe Date: 2009-05-08 11:37:25 +0200 (Fri, 08 May 2009) New Revision: 1671 Modified: trunk/src/jtag/jtag.c Log: fix one gaffe in previous commit. Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-05-08 08:49:24 UTC (rev 1670) +++ trunk/src/jtag/jtag.c 2009-05-08 09:37:25 UTC (rev 1671) @@ -1391,7 +1391,7 @@ int compare_failed = 0; - if (field->in_check_mask) + if (in_check_mask) compare_failed = buf_cmp_mask(captured, in_check_value, in_check_mask, num_bits); else compare_failed = buf_cmp(captured, in_check_value, num_bits); |
From: oharboe at B. <oh...@ma...> - 2009-05-08 10:49:24
|
Author: oharboe Date: 2009-05-08 10:49:24 +0200 (Fri, 08 May 2009) New Revision: 1670 Modified: trunk/src/jtag/jtag.c Log: use assert instead of adding code that always runs Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-05-08 08:46:28 UTC (rev 1669) +++ trunk/src/jtag/jtag.c 2009-05-08 08:49:24 UTC (rev 1670) @@ -41,6 +41,7 @@ #ifdef HAVE_STRINGS_H #include <strings.h> #endif +#include <assert.h> @@ -1453,11 +1454,7 @@ void jtag_check_value_mask(scan_field_t *field, u8 *value, u8 *mask) { - if (field->in_value==NULL) - { - LOG_ERROR("remember to fill in in_value for jtag_check_value_mask() to work!"); - return; - } + assert(field->in_value != NULL); if (value==NULL) { |
From: oharboe at B. <oh...@ma...> - 2009-05-08 10:46:29
|
Author: oharboe Date: 2009-05-08 10:46:28 +0200 (Fri, 08 May 2009) New Revision: 1669 Modified: trunk/src/jtag/jtag.c trunk/src/jtag/jtag.h trunk/src/target/arm_jtag.c trunk/src/target/arm_jtag.h Log: pull up verify_capture_ir one level in api stack Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-05-08 07:28:00 UTC (rev 1668) +++ trunk/src/jtag/jtag.c 2009-05-08 08:46:28 UTC (rev 1669) @@ -521,17 +521,67 @@ cmd_queue_cur_state = cmd_queue_end_state; } -void jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state) +void jtag_add_ir_scan_noverify(int num_fields, scan_field_t *fields, tap_state_t state) { int retval; - jtag_prelude(state); retval=interface_jtag_add_ir_scan(num_fields, fields, cmd_queue_end_state); if (retval!=ERROR_OK) jtag_error=retval; + } + +void jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state) +{ + /* 8 x 32 bit id's is enough for all invoations */ + 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. + * + */ + if (jtag_verify_capture_ir) + { + int j; + for (j = 0; j < num_fields; j++) + { + modified[j]=0; + if ((fields[j].in_value==NULL)&&(fields[j].num_bits<=32)) + { + if (j<8) + { + modified[j]=1; + fields[j].in_value=(u8 *)(id+j); + } else + { + LOG_DEBUG("caller must provide in_value space for verify_capture_ir to work"); + } + } + } + } + + jtag_add_ir_scan_noverify(num_fields, fields, state); + + if (jtag_verify_capture_ir) + { + int j; + for (j = 0; j < num_fields; j++) + { + jtag_tap_t *tap=fields[j].tap; + jtag_check_value_mask(fields+j, tap->expected, tap->expected_mask); + + if (modified[j]) + { + fields[j].in_value=NULL; + } + } + } + +} + int MINIDRIVER(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields, tap_state_t state) { jtag_command_t **last_cmd; @@ -582,20 +632,6 @@ found = 1; (*last_cmd)->cmd.scan->fields[nth_tap].out_value = buf_cpy(fields[j].out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size); - if (jtag_verify_capture_ir) - { - if (fields[j].in_handler==NULL) - { - jtag_set_check_value((*last_cmd)->cmd.scan->fields+nth_tap, tap->expected, tap->expected_mask, NULL); - } else - { - (*last_cmd)->cmd.scan->fields[nth_tap].in_handler = fields[j].in_handler; - (*last_cmd)->cmd.scan->fields[nth_tap].in_handler_priv = fields[j].in_handler_priv; - (*last_cmd)->cmd.scan->fields[nth_tap].in_check_value = tap->expected; - (*last_cmd)->cmd.scan->fields[nth_tap].in_check_mask = tap->expected_mask; - } - } - tap->bypass = 0; break; } Modified: trunk/src/jtag/jtag.h =================================================================== --- trunk/src/jtag/jtag.h 2009-05-08 07:28:00 UTC (rev 1668) +++ trunk/src/jtag/jtag.h 2009-05-08 08:46:28 UTC (rev 1669) @@ -559,6 +559,8 @@ * */ extern void jtag_add_ir_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); +/* same as jtag_add_ir_scan except no verify is performed */ +extern void jtag_add_ir_scan_noverify(int num_fields, scan_field_t *fields, tap_state_t state); extern int interface_jtag_add_ir_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); extern void jtag_add_dr_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); /* same as jtag_add_dr_scan but the scan is executed immediately. sets jtag_error if there @@ -731,7 +733,7 @@ /* JTAG support functions */ struct invalidstruct { - + }; extern void jtag_set_check_value(scan_field_t* field, u8* value, u8* mask, struct invalidstruct *obsolete); Modified: trunk/src/target/arm_jtag.c =================================================================== --- trunk/src/target/arm_jtag.c 2009-05-08 07:28:00 UTC (rev 1668) +++ trunk/src/target/arm_jtag.c 2009-05-08 08:46:28 UTC (rev 1669) @@ -36,7 +36,7 @@ #define _ARM_JTAG_SCAN_N_CHECK_ #endif -int arm_jtag_set_instr(arm_jtag_t *jtag_info, u32 new_instr, in_handler_t handler) +int arm_jtag_set_instr(arm_jtag_t *jtag_info, u32 new_instr, void *no_verify_capture) { jtag_tap_t *tap; tap = jtag_info->tap; @@ -52,13 +52,20 @@ field.num_bits = tap->ir_length; field.out_value = t; buf_set_u32(field.out_value, 0, field.num_bits, new_instr); - field.in_value = NULL; + field.in_handler = NULL; - field.in_handler = handler; /* deprecated! move into calling code */ - - jtag_add_ir_scan(1, &field, TAP_INVALID); + if (no_verify_capture==NULL) + { + jtag_add_ir_scan(1, &field, TAP_INVALID); + } else + { + /* FIX!!!! this is a kludge!!! arm926ejs.c should reimplement this arm_jtag_set_instr to + * have special verification code. + */ + jtag_add_ir_scan_noverify(1, &field, TAP_INVALID); + } } return ERROR_OK; Modified: trunk/src/target/arm_jtag.h =================================================================== --- trunk/src/target/arm_jtag.h 2009-05-08 07:28:00 UTC (rev 1668) +++ trunk/src/target/arm_jtag.h 2009-05-08 08:46:28 UTC (rev 1669) @@ -29,15 +29,15 @@ typedef struct arm_jtag_s { jtag_tap_t *tap; - + u32 scann_size; u32 scann_instr; u32 cur_scan_chain; - + u32 intest_instr; } arm_jtag_t; -extern int arm_jtag_set_instr(arm_jtag_t *jtag_info, u32 new_instr, in_handler_t handler); +extern int arm_jtag_set_instr(arm_jtag_t *jtag_info, u32 new_instr, void *verify_capture); extern int arm_jtag_scann(arm_jtag_t *jtag_info, u32 new_scan_chain); extern int arm_jtag_setup_connection(arm_jtag_t *jtag_info); |