Commit 39b57471 authored by oharboe's avatar oharboe
Browse files

Introduced jtag_init and "jtag arp_init" to allow target scripts more control...

Introduced jtag_init and "jtag arp_init" to allow target scripts more control over how OpenOCD starts up and initializes the target.

git-svn-id: svn://svn.berlios.de/openocd/trunk@2805 b42882b7-edfa-0310-969c-e2dbd0fdcd60
parent a2886fe3
...@@ -359,3 +359,13 @@ proc capture_catch {a} { ...@@ -359,3 +359,13 @@ proc capture_catch {a} {
} result } result
return $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
/*************************************************************************** /***************************************************************************
* Copyright (C) 2005 by Dominic Rath * * Copyright (C) 2009 Zachary T Welch *
* Dominic.Rath@gmx.de * * zw@superlucidity.net *
* * * *
* Copyright (C) 2007,2008 Øyvind Harboe * * Copyright (C) 2007,2008,2009 Øyvind Harboe *
* oyvind.harboe@zylin.com * * oyvind.harboe@zylin.com *
* * * *
* Copyright (C) 2009 SoftPLC Corporation * * Copyright (C) 2009 SoftPLC Corporation *
* http://softplc.com * * http://softplc.com *
* dick@softplc.com * * dick@softplc.com *
* * * *
* Copyright (C) 2009 Zachary T Welch * * Copyright (C) 2005 by Dominic Rath *
* zw@superlucidity.net * * Dominic.Rath@gmx.de *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * 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) ...@@ -1230,7 +1230,7 @@ int jtag_interface_init(struct command_context_s *cmd_ctx)
return ERROR_OK; 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; jtag_tap_t *tap;
int retval; int retval;
...@@ -1334,11 +1334,11 @@ int jtag_init(struct command_context_s *cmd_ctx) ...@@ -1334,11 +1334,11 @@ int jtag_init(struct command_context_s *cmd_ctx)
int retval; int retval;
if ((retval = jtag_interface_init(cmd_ctx)) != ERROR_OK) if ((retval = jtag_interface_init(cmd_ctx)) != ERROR_OK)
return retval; return retval;
if (jtag_init_inner(cmd_ctx) == ERROR_OK)
{ if (Jim_Eval_Named(interp, "jtag_init", __FILE__, __LINE__) != JIM_OK)
return ERROR_OK; return ERROR_FAIL;
}
return jtag_init_reset(cmd_ctx); return ERROR_OK;
} }
unsigned jtag_get_speed_khz(void) unsigned jtag_get_speed_khz(void)
......
...@@ -335,8 +335,9 @@ extern int jtag_interface_quit(void); ...@@ -335,8 +335,9 @@ extern int jtag_interface_quit(void);
extern int jtag_init(struct command_context_s* cmd_ctx); extern int jtag_init(struct command_context_s* cmd_ctx);
/// reset, then initialize JTAG chain /// reset, then initialize JTAG chain
extern int jtag_init_reset(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_register_commands(struct command_context_s* cmd_ctx);
extern int jtag_init_inner(struct command_context_s *cmd_ctx);
/** /**
* @file * @file
......
...@@ -410,6 +410,7 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) ...@@ -410,6 +410,7 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
enum { enum {
JTAG_CMD_INTERFACE, JTAG_CMD_INTERFACE,
JTAG_CMD_INIT,
JTAG_CMD_INIT_RESET, JTAG_CMD_INIT_RESET,
JTAG_CMD_NEWTAP, JTAG_CMD_NEWTAP,
JTAG_CMD_TAPENABLE, JTAG_CMD_TAPENABLE,
...@@ -422,6 +423,7 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) ...@@ -422,6 +423,7 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
const Jim_Nvp jtag_cmds[] = { const Jim_Nvp jtag_cmds[] = {
{ .name = "interface" , .value = JTAG_CMD_INTERFACE }, { .name = "interface" , .value = JTAG_CMD_INTERFACE },
{ .name = "arp_init" , .value = JTAG_CMD_INIT },
{ .name = "arp_init-reset", .value = JTAG_CMD_INIT_RESET }, { .name = "arp_init-reset", .value = JTAG_CMD_INIT_RESET },
{ .name = "newtap" , .value = JTAG_CMD_NEWTAP }, { .name = "newtap" , .value = JTAG_CMD_NEWTAP },
{ .name = "tapisenabled" , .value = JTAG_CMD_TAPISENABLED }, { .name = "tapisenabled" , .value = JTAG_CMD_TAPISENABLED },
...@@ -455,6 +457,17 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) ...@@ -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); Jim_SetResultString(goi.interp, jtag_interface->name, -1);
return JIM_OK; 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: case JTAG_CMD_INIT_RESET:
if (goi.argc != 0) { if (goi.argc != 0) {
Jim_WrongNumArgs(goi.interp, 1, goi.argv-1, "(no params)"); Jim_WrongNumArgs(goi.interp, 1, goi.argv-1, "(no params)");
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment