X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fcore.c;h=ad6375353c242f621b53355f2c992b094706304b;hb=e1500a9c9d0189bc277c79a2ddb35ecb79d1a20e;hp=68c125707bbbf92bcb7b1f5f2450175d946928cb;hpb=bb0d11cba989832c0f27c2e5b664bfdc26b98cc9;p=openocd.git diff --git a/src/jtag/core.c b/src/jtag/core.c index 68c125707b..ad6375353c 100644 --- a/src/jtag/core.c +++ b/src/jtag/core.c @@ -33,7 +33,7 @@ #include "jtag.h" #include "interface.h" -#include "transport.h" +#include #ifdef HAVE_STRINGS_H #include @@ -124,7 +124,7 @@ static struct jtag_event_callback *jtag_event_callbacks; static int speed_khz = 0; /* speed to fallback to when RCLK is requested but not supported */ static int rclk_fallback_speed_khz = 0; -static enum {CLOCK_MODE_SPEED, CLOCK_MODE_KHZ, CLOCK_MODE_RCLK} clock_mode; +static enum {CLOCK_MODE_UNSELECTED, CLOCK_MODE_KHZ, CLOCK_MODE_RCLK} clock_mode; static int jtag_speed = 0; static struct jtag_interface *jtag = NULL; @@ -1368,12 +1368,13 @@ int adapter_init(struct command_context *cmd_ctx) return ERROR_JTAG_INVALID_INTERFACE; } - jtag = jtag_interface; - if (jtag_interface->init() != ERROR_OK) + int retval; + retval = jtag_interface->init(); + if (retval != ERROR_OK) { - jtag = NULL; - return ERROR_JTAG_INIT_FAILED; + return retval; } + jtag = jtag_interface; /* LEGACY SUPPORT ... adapter drivers must declare what * transports they allow. Until they all do so, assume @@ -1383,15 +1384,25 @@ int adapter_init(struct command_context *cmd_ctx) LOG_ERROR("Adapter driver '%s' did not declare " "which transports it allows; assuming " "JTAG-only", jtag->name); - int retval = allow_transports(cmd_ctx, jtag_only); + retval = allow_transports(cmd_ctx, jtag_only); if (retval != ERROR_OK) return retval; } + if (CLOCK_MODE_UNSELECTED == clock_mode) + { + LOG_ERROR("An adapter speed is not selected in the init script." + " Insert a call to adapter_khz or jtag_rclk to proceed."); + return ERROR_JTAG_INIT_FAILED; + } + int requested_khz = jtag_get_speed_khz(); int actual_khz = requested_khz; - int jtag_speed_var; - int retval = jtag_get_speed(&jtag_speed_var); + int jtag_speed_var = 0; + retval = jtag_get_speed(&jtag_speed_var); + if (retval != ERROR_OK) + return retval; + retval = jtag->speed(jtag_speed_var); if (retval != ERROR_OK) return retval; retval = jtag_get_speed_readable(&actual_khz); @@ -1646,9 +1657,6 @@ int jtag_get_speed(int *speed) { switch(clock_mode) { - case CLOCK_MODE_SPEED: - *speed = jtag_speed; - break; case CLOCK_MODE_KHZ: adapter_khz_to_speed(jtag_get_speed_khz(), speed); break; @@ -1664,7 +1672,7 @@ int jtag_get_speed(int *speed) int jtag_get_speed_readable(int *khz) { - int jtag_speed_var; + int jtag_speed_var = 0; int retval = jtag_get_speed(&jtag_speed_var); if (retval != ERROR_OK) return retval;