X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fopenocd.c;h=449736e1615901a75508ccfa39b8fda31639e7d8;hb=8acafd1710d84c80e20156381cca54b3b5699275;hp=3c7816eabb4c12a0edb0b4cd517de5ce1a333fd1;hpb=7805be1b3a8f65aff9a861fd8ca62518143f1524;p=openocd diff --git a/src/openocd.c b/src/openocd.c index 3c7816ea..449736e1 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;