From: <oh...@ma...> - 2009-06-07 15:55:32
|
Author: oharboe Date: 2009-06-07 15:55:29 +0200 (Sun, 07 Jun 2009) New Revision: 2092 Added: trunk/src/jtag/minidummy.c trunk/src/jtag/minidummy/ trunk/src/jtag/minidummy/jtag_minidriver.h Modified: trunk/configure.in trunk/src/jtag/Makefile.am trunk/src/jtag/jtag.c Log: minidriver build test driver "minidriver" Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-06-07 05:24:27 UTC (rev 2091) +++ trunk/configure.in 2009-06-07 13:55:29 UTC (rev 2092) @@ -323,6 +323,10 @@ AS_HELP_STRING([--enable-ecosboard], [Enable building support for eCosBoard based JTAG debugger]), [build_ecosboard=$enableval], [build_ecosboard=no]) +AC_ARG_ENABLE(minidummy, + AS_HELP_STRING([--enable-minidummy], [Enable building support for minidummy driver]), + [build_minidummy=$enableval], [build_minidummy=no]) + AC_ARG_ENABLE(ioutil, AS_HELP_STRING([--enable-ioutil], [Enable ioutil functions - useful for standalone OpenOCD implementations]), [build_ioutil=$enableval], [build_ioutil=no]) @@ -459,6 +463,12 @@ AC_DEFINE(BUILD_ECOSBOARD, 0, [0 if you don't want eCosBoard.]) fi +if test $build_minidummy = yes; then + AC_DEFINE(BUILD_MINIDUMMY, 1, [1 if you want minidummy.]) +else + AC_DEFINE(BUILD_MINIDUMMY, 0, [0 if you don't want minidummy.]) +fi + if test $build_ioutil = yes; then AC_DEFINE(BUILD_IOUTIL, 1, [1 if you want ioutils.]) else @@ -835,6 +845,7 @@ AM_CONDITIONAL(GIVEIO, test $parport_use_giveio = yes) AM_CONDITIONAL(EP93XX, test $build_ep93xx = yes) AM_CONDITIONAL(ECOSBOARD, test $build_ecosboard = yes) +AM_CONDITIONAL(MINIDUMMY, test $build_minidummy = yes) AM_CONDITIONAL(IOUTIL, test $build_ioutil = yes) AM_CONDITIONAL(HTTPD, test $build_httpd = yes) AM_CONDITIONAL(AT91RM9200, test $build_at91rm9200 = yes) Modified: trunk/src/jtag/Makefile.am =================================================================== --- trunk/src/jtag/Makefile.am 2009-06-07 05:24:27 UTC (rev 2091) +++ trunk/src/jtag/Makefile.am 2009-06-07 13:55:29 UTC (rev 2092) @@ -51,6 +51,12 @@ ECOSBOARDFILES = endif +if MINIDUMMY +MINIDUMMYFILES = minidummy.c +else +MINIDUMMYFILES = +endif + if MINIDRIVER DRIVERFILES = else @@ -131,6 +137,7 @@ $(PRESTOFILES) \ $(USBPROGFILES) \ $(ECOSBOARDFILES) \ + $(MINIDUMMYFILES) \ $(JLINKFILES) \ $(RLINKFILES) \ $(VSLLINKFILES) \ Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-06-07 05:24:27 UTC (rev 2091) +++ trunk/src/jtag/jtag.c 2009-06-07 13:55:29 UTC (rev 2092) @@ -99,6 +99,9 @@ extern jtag_interface_t zy1000_interface; #endif +#if BUILD_MINIDUMMY == 1 + extern jtag_interface_t minidummy_interface; +#endif #if BUILD_PARPORT == 1 extern jtag_interface_t parport_interface; #endif @@ -159,6 +162,9 @@ #if BUILD_ECOSBOARD == 1 &zy1000_interface, #endif +#if BUILD_MINIDUMMY == 1 + &minidummy_interface, +#endif #if BUILD_PARPORT == 1 &parport_interface, #endif @@ -240,7 +246,7 @@ int jtag_tap_count(void) { return jtag_num_taps; -} + } unsigned jtag_tap_count_enabled(void) { @@ -1058,12 +1064,12 @@ tap->dotted_name, tap->expected_ids[ii]); } return false; -} + } /* Try to examine chain layout according to IEEE 1149.1 §12 */ static int jtag_examine_chain(void) -{ + { u8 idcode_buffer[JTAG_MAX_CHAIN_SIZE * 4]; unsigned device_count = 0; @@ -1087,7 +1093,7 @@ { /* LSB must not be 0, this indicates a device in bypass */ LOG_WARNING("Tap/Device does not have IDCODE"); - idcode = 0; + idcode=0; bit_count += 1; } @@ -1097,9 +1103,9 @@ * End of chain (invalid manufacturer ID) some devices, such * as AVR will output all 1's instead of TDI input value at * end of chain. - */ + */ if (jtag_idcode_is_final(idcode)) - { + { jtag_examine_chain_end(idcode_buffer, bit_count + 32, JTAG_MAX_CHAIN_SIZE * 32); break; @@ -1115,7 +1121,7 @@ if (!tap) continue; - tap->idcode = idcode; + tap->idcode = idcode; // ensure the TAP ID does matches what was expected if (!jtag_examine_chain_match_tap(tap)) @@ -1478,12 +1484,12 @@ return ERROR_OK; } - Jim_SetResult_sprintf(goi->interp, - "newtap: %s missing required parameters", - pTap->dotted_name); + Jim_SetResult_sprintf( goi->interp, + "newtap: %s missing required parameters", + pTap->dotted_name); jtag_tap_free(pTap); - return JIM_ERR; -} + return JIM_ERR; + } static int jim_jtag_command( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) { @@ -2133,7 +2139,6 @@ return ERROR_OK; } - static int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { int retval=ERROR_OK; @@ -2218,11 +2223,11 @@ tap_state_t state = tap_state_by_name(args[0]); if (state < 0) { - command_print( cmd_ctx, "Invalid state name: %s\n", args[0] ); - return ERROR_COMMAND_SYNTAX_ERROR; - } - jtag_set_end_state(state); - jtag_execute_queue(); + command_print( cmd_ctx, "Invalid state name: %s\n", args[0] ); + return ERROR_COMMAND_SYNTAX_ERROR; + } + jtag_set_end_state(state); + jtag_execute_queue(); command_print(cmd_ctx, "current endstate: %s", tap_state_name(cmd_queue_end_state)); @@ -2571,7 +2576,7 @@ jtag_set_verify(false); else return ERROR_COMMAND_SYNTAX_ERROR; - } + } const char *status = jtag_will_verify() ? "enabled": "disabled"; command_print(cmd_ctx, "verify jtag capture is %s", status); Added: trunk/src/jtag/minidummy/jtag_minidriver.h =================================================================== --- trunk/src/jtag/minidummy/jtag_minidriver.h 2009-06-07 05:24:27 UTC (rev 2091) +++ trunk/src/jtag/minidummy/jtag_minidriver.h 2009-06-07 13:55:29 UTC (rev 2092) @@ -0,0 +1,43 @@ +/*************************************************************************** + * Copyright (C) 2007-2008 by vind Harboe * + * * + * 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. * + ***************************************************************************/ + + + + +static __inline__ void interface_jtag_add_dr_out_core(jtag_tap_t *target_tap, + int num_fields, + const int *num_bits, + const u32 *value, + enum tap_state end_state) +{ + /* synchronously do the operation here */ +} + +static __inline__ void interface_jtag_add_dr_out(jtag_tap_t *target_tap, + int num_fields, + const int *num_bits, + const u32 *value, + enum tap_state end_state) +{ + /* synchronously do the operation here */ +} + +#define interface_jtag_add_callback(callback, in) callback(in) + +#define interface_jtag_add_callback4(callback, in, data1, data2, data3) jtag_set_error(callback(in, data1, data2, data3)) Added: trunk/src/jtag/minidummy.c =================================================================== --- trunk/src/jtag/minidummy.c 2009-06-07 05:24:27 UTC (rev 2091) +++ trunk/src/jtag/minidummy.c 2009-06-07 13:55:29 UTC (rev 2092) @@ -0,0 +1,190 @@ +/*************************************************************************** + * Copyright (C) 2007-2008 by vind Harboe * + * * + * 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 "embeddedice.h" +#include "minidriver.h" +#include "interface.h" + + + + +jtag_interface_t minidummy_interface = +{ + .name = "minidummy", + .execute_queue = NULL, + .speed = NULL, + .register_commands = NULL, + .init = NULL, + .quit = NULL, + .khz = NULL, + .speed_div = NULL, + .power_dropout = NULL, + .srst_asserted = NULL, +}; + + + + + + +int interface_jtag_execute_queue(void) +{ + /* synchronously do the operation here */ + + return ERROR_OK; +} + + + + + +extern int jtag_check_value(u8 *captured, void *priv); + +int interface_jtag_set_end_state(tap_state_t state) +{ + return ERROR_OK; +} + + +int interface_jtag_add_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state) +{ + /* synchronously do the operation here */ + + return ERROR_OK; + +} + + + + + +int interface_jtag_add_plain_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state) +{ + /* synchronously do the operation here */ + + return ERROR_OK; +} + +/*extern jtag_command_t **jtag_get_last_command_p(void);*/ + +int interface_jtag_add_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state) +{ + /* synchronously do the operation here */ + + return ERROR_OK; +} + +int interface_jtag_add_plain_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state) +{ + /* synchronously do the operation here */ + + return ERROR_OK; +} + + +int interface_jtag_add_tlr() +{ + /* synchronously do the operation here */ + + return ERROR_OK; +} + + + +int interface_jtag_add_reset(int req_trst, int req_srst) +{ + /* synchronously do the operation here */ + + return ERROR_OK; +} + + +int interface_jtag_add_runtest(int num_cycles, tap_state_t state) +{ + /* synchronously do the operation here */ + + return ERROR_OK; +} + +int interface_jtag_add_clocks(int num_cycles) +{ + /* synchronously do the operation here */ + + return ERROR_OK; +} + +int interface_jtag_add_sleep(u32 us) +{ + jtag_sleep(us); + return ERROR_OK; +} + +int interface_jtag_add_pathmove(int num_states, const tap_state_t *path) +{ + int state_count; + int tms = 0; + + state_count = 0; + + tap_state_t cur_state=cmd_queue_cur_state; + + while (num_states) + { + if (tap_state_transition(cur_state, false) == path[state_count]) + { + tms = 0; + } + else if (tap_state_transition(cur_state, true) == path[state_count]) + { + tms = 1; + } + else + { + LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(cur_state), tap_state_name(path[state_count])); + exit(-1); + } + + /* synchronously do the operation here */ + + cur_state = path[state_count]; + state_count++; + num_states--; + } + + + /* synchronously do the operation here */ + + return ERROR_OK; +} + + + +void embeddedice_write_dcc(jtag_tap_t *tap, int reg_addr, u8 *buffer, int little, int count) +{ + int i; + for (i = 0; i < count; i++) + { + embeddedice_write_reg_inner(tap, reg_addr, fast_target_buffer_get_u32(buffer, little)); + buffer += 4; + } +} + |