aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2018-09-24 12:25:30 +0200
committerSpencer Oliver <spen@spen-soft.co.uk>2018-12-06 13:05:49 +0000
commit3e2967c75a1676d830fce23f28c541d95ebd5ff7 (patch)
tree49ba8880f4c2d752489a1cdbd1281176344e4730
parent717d3af0879633a5c2d2a711db126cf0091e5930 (diff)
stlink: add STLINK_F_HAS_GETLASTRWSTATUS2
Starting from stlink V2J15 the API STLINK_DEBUG_APIV2_GETLASTRWSTATUS is obsoleted and replaced by the new API STLINK_DEBUG_APIV2_GETLASTRWSTATUS2. Manage the two cases to be prepared for an eventual future removal of the obsolete API. Change-Id: Ic4498a652865b2eb6148825138c2f6855a06ba47 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/4714 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
-rw-r--r--src/jtag/drivers/stlink_usb.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index f05ffadf..14db1b5d 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -242,6 +242,8 @@ struct stlink_usb_handle_s {
#define STLINK_DEBUG_APIV2_GETLASTRWSTATUS 0x3B
#define STLINK_DEBUG_APIV2_DRIVE_NRST 0x3C
+#define STLINK_DEBUG_APIV2_GETLASTRWSTATUS2 0x3E
+
#define STLINK_DEBUG_APIV2_START_TRACE_RX 0x40
#define STLINK_DEBUG_APIV2_STOP_TRACE_RX 0x41
#define STLINK_DEBUG_APIV2_GET_TRACE_NB 0x42
@@ -279,6 +281,7 @@ enum stlink_mode {
#define STLINK_F_HAS_SWD_SET_FREQ (1UL << 1)
#define STLINK_F_HAS_JTAG_SET_FREQ (1UL << 2)
#define STLINK_F_HAS_MEM_16BIT (1UL << 3)
+#define STLINK_F_HAS_GETLASTRWSTATUS2 (1UL << 4)
/* aliases */
#define STLINK_F_HAS_TARGET_VOLT STLINK_F_HAS_TRACE
@@ -675,6 +678,10 @@ static int stlink_usb_version(void *handle)
if (h->version.jtag >= 13)
flags |= STLINK_F_HAS_TRACE;
+ /* preferred API to get last R/W status from J15 */
+ if (h->version.jtag >= 15)
+ flags |= STLINK_F_HAS_GETLASTRWSTATUS2;
+
/* API to set SWD frequency from J22 */
if (h->version.jtag >= 22)
flags |= STLINK_F_HAS_SWD_SET_FREQ;
@@ -1659,9 +1666,15 @@ static int stlink_usb_get_rw_status(void *handle)
stlink_usb_init_buffer(handle, h->rx_ep, 2);
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
- h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_GETLASTRWSTATUS;
+ if (h->version.flags & STLINK_F_HAS_GETLASTRWSTATUS2) {
+ h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_GETLASTRWSTATUS2;
- res = stlink_usb_xfer(handle, h->databuf, 2);
+ res = stlink_usb_xfer(handle, h->databuf, 12);
+ } else {
+ h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_GETLASTRWSTATUS;
+
+ res = stlink_usb_xfer(handle, h->databuf, 2);
+ }
if (res != ERROR_OK)
return res;