summaryrefslogtreecommitdiff
path: root/src/jtag/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/jtag/core.c')
-rw-r--r--src/jtag/core.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/jtag/core.c b/src/jtag/core.c
index 4c5d37a7..0a9d72a8 100644
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -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;
@@ -1389,12 +1389,22 @@ int adapter_init(struct command_context *cmd_ctx)
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;
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);
if (ERROR_OK != retval)
LOG_INFO("adapter-specific clock speed value %d", jtag_speed_var);
@@ -1647,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;