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>
This commit is contained in:
Antonio Borneo 2018-09-24 12:25:30 +02:00 committed by Spencer Oliver
parent 717d3af087
commit 3e2967c75a
1 changed files with 15 additions and 2 deletions

View File

@ -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;
if (h->version.flags & STLINK_F_HAS_GETLASTRWSTATUS2) {
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_GETLASTRWSTATUS2;
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;