Introduced jtag_init and "jtag arp_init" to allow target scripts more control over...
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 6 Oct 2009 08:10:57 +0000 (08:10 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 6 Oct 2009 08:10:57 +0000 (08:10 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@2805 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/helper/startup.tcl
src/jtag/core.c
src/jtag/jtag.h
src/jtag/tcl.c

index 7225929..229aa06 100644 (file)
@@ -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
index 07eec64..854236f 100644 (file)
@@ -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)
index f255a70..786b2b8 100644 (file)
@@ -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
index 212be35..9101d31 100644 (file)
@@ -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)");