aboutsummaryrefslogtreecommitdiff
path: root/src/jtag
diff options
context:
space:
mode:
authorMarc Schink <openocd-dev@marcschink.de>2015-09-21 14:27:49 +0200
committerFreddie Chopin <freddie.chopin@gmail.com>2015-11-26 12:21:30 +0000
commit4b608d7fea61855b9a284c5a8e0a2fc167bd7d1f (patch)
tree11e7f0433cc3535dfee16b189ead6f4f260318fd /src/jtag
parent442f1540d5066b9ef091cab677b505f2c8196313 (diff)
downloadriscv-openocd-4b608d7fea61855b9a284c5a8e0a2fc167bd7d1f.zip
riscv-openocd-4b608d7fea61855b9a284c5a8e0a2fc167bd7d1f.tar.gz
riscv-openocd-4b608d7fea61855b9a284c5a8e0a2fc167bd7d1f.tar.bz2
jlink: Retrieve maximum speed from device.
If supported, the maximum transport speed is now retrieved from the device. Change-Id: I614f405ec91cf199c851781785fd26cbd10c37a6 Signed-off-by: Marc Schink <openocd-dev@marcschink.de> Reviewed-on: http://openocd.zylin.com/2955 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src/jtag')
-rw-r--r--src/jtag/drivers/jlink.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/jtag/drivers/jlink.c b/src/jtag/drivers/jlink.c
index 1db1a71..807bdba 100644
--- a/src/jtag/drivers/jlink.c
+++ b/src/jtag/drivers/jlink.c
@@ -216,11 +216,23 @@ static int jlink_execute_queue(void)
static int jlink_speed(int speed)
{
int ret;
+ uint32_t freq;
+ uint16_t div;
+ int max_speed;
+
+ if (jaylink_has_cap(caps, JAYLINK_DEV_CAP_GET_SPEEDS)) {
+ ret = jaylink_get_speeds(devh, &freq, &div);
- if (speed > JLINK_MAX_SPEED) {
- LOG_INFO("Reduce speed from %d kHz to %d kHz (maximum).", speed,
- JLINK_MAX_SPEED);
- speed = JLINK_MAX_SPEED;
+ if (ret != JAYLINK_OK) {
+ LOG_ERROR("jaylink_get_speeds() failed: %s.",
+ jaylink_strerror_name(ret));
+ return ERROR_JTAG_DEVICE_ERROR;
+ }
+
+ freq = freq / 1000;
+ max_speed = freq / div;
+ } else {
+ max_speed = JLINK_MAX_SPEED;
}
if (!speed) {
@@ -230,6 +242,10 @@ static int jlink_speed(int speed)
}
speed = JAYLINK_SPEED_ADAPTIVE_CLOCKING;
+ } else if (speed > max_speed) {
+ LOG_INFO("Reduced speed from %d kHz to %d kHz (maximum).", speed,
+ max_speed);
+ speed = max_speed;
}
ret = jaylink_set_speed(devh, speed);