summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/helper/startup.tcl10
-rw-r--r--src/jtag/core.c22
-rw-r--r--src/jtag/jtag.h5
-rw-r--r--src/jtag/tcl.c13
4 files changed, 37 insertions, 13 deletions
diff --git a/src/helper/startup.tcl b/src/helper/startup.tcl
index 7225929f..229aa066 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 07eec64f..854236f3 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 f255a70e..786b2b83 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 212be355..9101d31e 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)");