From 1f6efaada0686f7e9e6164919eb739892855d327 Mon Sep 17 00:00:00 2001 From: Antonio Borneo Date: Fri, 30 Oct 2020 15:03:37 +0100 Subject: [PATCH] stlink: fix max SWV baudrate on stlink v3 While stlink v2 anly accept till to 2 MHz for SWV baudrate, stlink v3 accepts up to 24 MHz. Check the stlink version and use the respective max value. Change-Id: I911207a35983b6acf0b901059076dd31f70e6290 Signed-off-by: Antonio Borneo Reported-by: Pawel Fixes: https://sourceforge.net/p/openocd/tickets/283/ Reviewed-on: http://openocd.zylin.com/5908 Tested-by: jenkins --- src/jtag/drivers/stlink_usb.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c index 48db3e611..8ab73cd12 100644 --- a/src/jtag/drivers/stlink_usb.c +++ b/src/jtag/drivers/stlink_usb.c @@ -299,6 +299,7 @@ struct stlink_usb_handle_s { #define STLINK_TRACE_SIZE 4096 #define STLINK_TRACE_MAX_HZ 2000000 +#define STLINK_V3_TRACE_MAX_HZ 24000000 #define STLINK_V3_MAX_FREQ_NB 10 @@ -2996,17 +2997,20 @@ static int stlink_config_trace(void *handle, bool enabled, return ERROR_FAIL; } + unsigned int max_trace_freq = (h->version.stlink == 3) ? + STLINK_V3_TRACE_MAX_HZ : STLINK_TRACE_MAX_HZ; + /* Only concern ourselves with the frequency if the STlink is processing it. */ - if (enabled && *trace_freq > STLINK_TRACE_MAX_HZ) { + if (enabled && *trace_freq > max_trace_freq) { LOG_ERROR("ST-LINK doesn't support SWO frequency higher than %u", - STLINK_TRACE_MAX_HZ); + max_trace_freq); return ERROR_FAIL; } stlink_usb_trace_disable(h); if (!*trace_freq) - *trace_freq = STLINK_TRACE_MAX_HZ; + *trace_freq = max_trace_freq; presc = traceclkin_freq / *trace_freq;