diff options
author | Marc Schink <openocd-dev@marcschink.de> | 2015-09-21 14:27:49 +0200 |
---|---|---|
committer | Freddie Chopin <freddie.chopin@gmail.com> | 2015-11-26 12:21:30 +0000 |
commit | 4b608d7fea61855b9a284c5a8e0a2fc167bd7d1f (patch) | |
tree | 11e7f0433cc3535dfee16b189ead6f4f260318fd /src/jtag | |
parent | 442f1540d5066b9ef091cab677b505f2c8196313 (diff) |
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.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/jtag/drivers/jlink.c b/src/jtag/drivers/jlink.c index 1db1a711..807bdba9 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); |