*/
#define STLINK_F_HAS_TRACE (1UL << 0)
#define STLINK_F_HAS_SWD_SET_FREQ (1UL << 1)
+#define STLINK_F_HAS_JTAG_SET_FREQ (1UL << 2)
/* aliases */
#define STLINK_F_HAS_TARGET_VOLT STLINK_F_HAS_TRACE
if (h->version.jtag >= 22)
flags |= STLINK_F_HAS_SWD_SET_FREQ;
+ /* API to set JTAG frequency from J24 */
+ if (h->version.jtag >= 24)
+ flags |= STLINK_F_HAS_JTAG_SET_FREQ;
+
break;
default:
break;
assert(handle != NULL);
- /* only supported by stlink/v2 and for firmware >= 24 */
- if (h->version.stlink == 1 || h->version.jtag < 24)
+ if (!(h->version.flags & STLINK_F_HAS_JTAG_SET_FREQ))
return ERROR_COMMAND_NOTFOUND;
stlink_usb_init_buffer(handle, h->rx_ep, 2);
int speed_index;
struct stlink_usb_handle_s *h = handle;
- /* only supported by stlink/v2 and for firmware >= 24 */
- if (h->version.stlink == 1 || h->version.jtag < 24)
+ /* old firmware cannot change it */
+ if (!(h->version.flags & STLINK_F_HAS_JTAG_SET_FREQ))
return khz;
speed_index = stlink_match_speed_map(stlink_khz_to_speed_map_jtag,
}
if (h->transport == HL_TRANSPORT_JTAG) {
- /* jtag clock speed only supported by stlink/v2 and for firmware >= 24 */
- if (h->version.stlink >= 2 && h->version.jtag >= 24) {
+ if (h->version.flags & STLINK_F_HAS_JTAG_SET_FREQ) {
stlink_dump_speed_map(stlink_khz_to_speed_map_jtag, ARRAY_SIZE(stlink_khz_to_speed_map_jtag));
stlink_speed(h, param->initial_interface_speed, false);
}