diff --git a/src/openocd.c b/src/openocd.c index 3c7816eab..449736e16 100644 --- a/src/openocd.c +++ b/src/openocd.c @@ -85,6 +85,7 @@ void exit_handler(void) /* OpenOCD can't really handle failure of this command. Patches welcome! :-) */ int handle_init_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { + int retval; static int initialized=0; if (initialized) return ERROR_OK; @@ -95,21 +96,30 @@ int handle_init_command(struct command_context_s *cmd_ctx, char *cmd, char **arg atexit(exit_handler); - /* FIX!!! this should happen *after* target_init(), but - * for now there are target initialisations that talk - * to JTAG whereas that *should* happen during target_examine() - */ - if (jtag_init(cmd_ctx) != ERROR_OK) - return ERROR_FAIL; - LOG_DEBUG("jtag init complete"); - + if (target_init(cmd_ctx) != ERROR_OK) return ERROR_FAIL; LOG_DEBUG("target init complete"); - if (target_examine(cmd_ctx) != ERROR_OK) - return ERROR_FAIL; - LOG_DEBUG("target examine complete"); + if ((retval=jtag_interface_init(cmd_ctx)) != ERROR_OK) + { + /* we must be able to set up the jtag interface */ + return retval; + } + LOG_DEBUG("jtag interface init complete"); + + /* Try to initialize & examine the JTAG chain at this point, but + * continue startup regardless + */ + if (jtag_init(cmd_ctx) == ERROR_OK) + { + LOG_DEBUG("jtag init complete"); + if (target_examine(cmd_ctx) == ERROR_OK) + { + LOG_DEBUG("jtag examine complete"); + } + } + if (flash_init_drivers(cmd_ctx) != ERROR_OK) return ERROR_FAIL;