From: David Brownell Date: Tue, 6 Oct 2009 15:29:23 +0000 (-0700) Subject: Merge branch 'master' of ssh://dbrownell@openocd.git.sourceforge.net/gitroot/openocd... X-Git-Tag: v0.3.0-rc0~126^2^2^2 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=4119cd6db2de637b07a208fdbac217b1554f85fc;hp=0d3632adff4e64d38650970002569b30bc71a52b Merge branch 'master' of ssh://dbrownell@openocd.git.sourceforge.net/gitroot/openocd/openocd --- diff --git a/.gitignore b/.gitignore index 974d3871ba..e0643331ea 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,3 @@ stamp-h1 stamp-vti INSTALL NOTES - -# quilt support -patches diff --git a/src/helper/startup.tcl b/src/helper/startup.tcl index 7225929fb4..229aa066f2 100644 --- a/src/helper/startup.tcl +++ b/src/helper/startup.tcl @@ -359,3 +359,13 @@ proc capture_catch {a} { } result return $result } + + +# Executed during "init". Can be implemented by target script +# tar +proc jtag_init {} { + if {[catch {jtag arp_init} err]!=0} { + # try resetting additionally + jtag arp_init-reset + } +} \ No newline at end of file diff --git a/src/jtag/core.c b/src/jtag/core.c index 07eec64f46..854236f3d1 100644 --- a/src/jtag/core.c +++ b/src/jtag/core.c @@ -1,16 +1,16 @@ /*************************************************************************** - * Copyright (C) 2005 by Dominic Rath * - * Dominic.Rath@gmx.de * + * Copyright (C) 2009 Zachary T Welch * + * zw@superlucidity.net * * * - * Copyright (C) 2007,2008 Øyvind Harboe * + * Copyright (C) 2007,2008,2009 Øyvind Harboe * * oyvind.harboe@zylin.com * * * * Copyright (C) 2009 SoftPLC Corporation * * http://softplc.com * * dick@softplc.com * * * - * Copyright (C) 2009 Zachary T Welch * - * zw@superlucidity.net * + * Copyright (C) 2005 by Dominic Rath * + * Dominic.Rath@gmx.de * * * * 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 * @@ -1230,7 +1230,7 @@ int jtag_interface_init(struct command_context_s *cmd_ctx) return ERROR_OK; } -static int jtag_init_inner(struct command_context_s *cmd_ctx) +int jtag_init_inner(struct command_context_s *cmd_ctx) { jtag_tap_t *tap; int retval; @@ -1334,11 +1334,11 @@ int jtag_init(struct command_context_s *cmd_ctx) int retval; if ((retval = jtag_interface_init(cmd_ctx)) != ERROR_OK) return retval; - if (jtag_init_inner(cmd_ctx) == ERROR_OK) - { - return ERROR_OK; - } - return jtag_init_reset(cmd_ctx); + + if (Jim_Eval_Named(interp, "jtag_init", __FILE__, __LINE__) != JIM_OK) + return ERROR_FAIL; + + return ERROR_OK; } unsigned jtag_get_speed_khz(void) diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h index f255a70e19..786b2b839f 100644 --- a/src/jtag/jtag.h +++ b/src/jtag/jtag.h @@ -335,8 +335,9 @@ extern int jtag_interface_quit(void); extern int jtag_init(struct command_context_s* cmd_ctx); /// reset, then initialize JTAG chain -extern int jtag_init_reset(struct command_context_s* cmd_ctx); -extern int jtag_register_commands(struct command_context_s* cmd_ctx); +extern int jtag_init_reset(struct command_context_s* cmd_ctx); +extern int jtag_register_commands(struct command_context_s* cmd_ctx); +extern int jtag_init_inner(struct command_context_s *cmd_ctx); /** * @file diff --git a/src/jtag/tcl.c b/src/jtag/tcl.c index 212be35577..9101d31eec 100644 --- a/src/jtag/tcl.c +++ b/src/jtag/tcl.c @@ -410,6 +410,7 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) enum { JTAG_CMD_INTERFACE, + JTAG_CMD_INIT, JTAG_CMD_INIT_RESET, JTAG_CMD_NEWTAP, JTAG_CMD_TAPENABLE, @@ -422,6 +423,7 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) const Jim_Nvp jtag_cmds[] = { { .name = "interface" , .value = JTAG_CMD_INTERFACE }, + { .name = "arp_init" , .value = JTAG_CMD_INIT }, { .name = "arp_init-reset", .value = JTAG_CMD_INIT_RESET }, { .name = "newtap" , .value = JTAG_CMD_NEWTAP }, { .name = "tapisenabled" , .value = JTAG_CMD_TAPISENABLED }, @@ -455,6 +457,17 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) } Jim_SetResultString(goi.interp, jtag_interface->name, -1); return JIM_OK; + case JTAG_CMD_INIT: + if (goi.argc != 0) { + Jim_WrongNumArgs(goi.interp, 1, goi.argv-1, "(no params)"); + return JIM_ERR; + } + e = jtag_init_inner(context); + if (e != ERROR_OK) { + Jim_SetResult_sprintf(goi.interp, "error: %d", e); + return JIM_ERR; + } + return JIM_OK; case JTAG_CMD_INIT_RESET: if (goi.argc != 0) { Jim_WrongNumArgs(goi.interp, 1, goi.argv-1, "(no params)"); diff --git a/tcl/board/zy1000.cfg b/tcl/board/zy1000.cfg index 07f5ee9948..2e13ecbba4 100644 --- a/tcl/board/zy1000.cfg +++ b/tcl/board/zy1000.cfg @@ -38,7 +38,7 @@ target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAM arm7_9 fast_memory_access enable arm7_9 dcc_downloads enable -flash bank ecosflash 0x01000000 0x200000 2 2 0 ecos/at91eb40a.elf +flash bank ecosflash 0x01000000 0x200000 2 2 $_TARGETNAME ecos/at91eb40a.elf $_TARGETNAME configure -event reset-init { # Set up chip selects & timings mww 0xFFE00000 0x0100273D