jtag: factor init into 'jtag init'

Adds 'jtag init' command handler, which can be called as part of a
fine-grained 'init' process.
__archive__
Zachary T Welch 2009-11-30 18:30:38 -08:00
parent 37201c019f
commit ac1887c703
2 changed files with 34 additions and 9 deletions

View File

@ -808,7 +808,30 @@ static int jim_jtag_names(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
return JIM_OK; return JIM_OK;
} }
COMMAND_HANDLER(handle_jtag_init_command)
{
if (CMD_ARGC != 0)
return ERROR_COMMAND_SYNTAX_ERROR;
static bool jtag_initialized = false;
if (jtag_initialized)
{
LOG_INFO("'jtag init' has already been called");
return ERROR_OK;
}
jtag_initialized = true;
LOG_DEBUG("Initializing jtag devices...");
return jtag_init(CMD_CTX);
}
static const struct command_registration jtag_subcommand_handlers[] = { static const struct command_registration jtag_subcommand_handlers[] = {
{
.name = "init",
.mode = COMMAND_CONFIG,
.handler = &handle_jtag_init_command,
.help = "initialize jtag scan chain",
},
{ {
.name = "interface", .name = "interface",
.mode = COMMAND_ANY, .mode = COMMAND_ANY,

View File

@ -126,16 +126,18 @@ COMMAND_HANDLER(handle_init_command)
/* Try to initialize & examine the JTAG chain at this point, but /* Try to initialize & examine the JTAG chain at this point, but
* continue startup regardless */ * continue startup regardless */
if (jtag_init(CMD_CTX) == ERROR_OK)
{
LOG_DEBUG("jtag init complete");
if (target_examine() == ERROR_OK)
{
LOG_DEBUG("jtag examine complete");
}
}
command_context_mode(CMD_CTX, COMMAND_CONFIG); command_context_mode(CMD_CTX, COMMAND_CONFIG);
if (command_run_line(CMD_CTX, "jtag init") == ERROR_OK)
{
command_context_mode(CMD_CTX, COMMAND_EXEC);
LOG_DEBUG("Examining targets...");
if (target_examine() != ERROR_OK)
LOG_DEBUG("target examination failed");
command_context_mode(CMD_CTX, COMMAND_CONFIG);
}
else
LOG_WARNING("jtag initialization failed; try 'jtag init' again.");
if (command_run_line(CMD_CTX, "flash init") != ERROR_OK) if (command_run_line(CMD_CTX, "flash init") != ERROR_OK)
return ERROR_FAIL; return ERROR_FAIL;