From ac1887c703d0d5ae83c513df61127f59e44a0469 Mon Sep 17 00:00:00 2001
From: Zachary T Welch <zw@superlucidity.net>
Date: Mon, 30 Nov 2009 18:30:38 -0800
Subject: jtag: factor init into 'jtag init'

Adds 'jtag init' command handler, which can be called as part of a
fine-grained 'init' process.
---
 src/jtag/tcl.c | 23 +++++++++++++++++++++++
 src/openocd.c  | 16 +++++++++-------
 2 files changed, 32 insertions(+), 7 deletions(-)

(limited to 'src')

diff --git a/src/jtag/tcl.c b/src/jtag/tcl.c
index 68bb21e4..cc890801 100644
--- a/src/jtag/tcl.c
+++ b/src/jtag/tcl.c
@@ -808,7 +808,30 @@ static int jim_jtag_names(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 	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[] = {
+	{
+		.name = "init",
+		.mode = COMMAND_CONFIG,
+		.handler = &handle_jtag_init_command,
+		.help = "initialize jtag scan chain",
+	},
 	{
 		.name = "interface",
 		.mode = COMMAND_ANY,
diff --git a/src/openocd.c b/src/openocd.c
index aaa45314..79a30e77 100644
--- a/src/openocd.c
+++ b/src/openocd.c
@@ -126,16 +126,18 @@ COMMAND_HANDLER(handle_init_command)
 
 	/* Try to initialize & examine the JTAG chain at this point, but
 	 * continue startup regardless */
-	if (jtag_init(CMD_CTX) == ERROR_OK)
+	command_context_mode(CMD_CTX, COMMAND_CONFIG);
+	if (command_run_line(CMD_CTX, "jtag init") == ERROR_OK)
 	{
-		LOG_DEBUG("jtag init complete");
-		if (target_examine() == ERROR_OK)
-		{
-			LOG_DEBUG("jtag examine complete");
-		}
+		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.");
 
-	command_context_mode(CMD_CTX, COMMAND_CONFIG);
 	if (command_run_line(CMD_CTX, "flash init") != ERROR_OK)
 		return ERROR_FAIL;
 
-- 
cgit v1.2.3