Entering SWIM mode on ST-LINK does not update swim status word.
[fw/openocd] / src / jtag / drivers / stlink_usb.c
index f4992daa65b38f59b7ca664d1f2246cd84f0626b..a905576c89b37c9967a19855af4bd76b58f166fc 100644 (file)
@@ -55,7 +55,6 @@
 #define STLINK_WRITE_TIMEOUT 1000
 #define STLINK_READ_TIMEOUT 1000
 
-#define STLINK_NULL_EP        0
 #define STLINK_RX_EP          (1|ENDPOINT_IN)
 #define STLINK_TX_EP          (2|ENDPOINT_OUT)
 #define STLINK_TRACE_EP       (3|ENDPOINT_IN)
@@ -1231,9 +1230,8 @@ static int stlink_usb_mode_enter(void *handle, enum stlink_mode type)
                case STLINK_MODE_DEBUG_SWIM:
                        h->cmdbuf[h->cmdidx++] = STLINK_SWIM_COMMAND;
                        h->cmdbuf[h->cmdidx++] = STLINK_SWIM_ENTER;
-                       /* no answer for this function... */
-                       rx_size = 0;
-                       break;
+                       /* swim enter does not return any response or status */
+                       return stlink_usb_xfer_noerrcheck(handle, h->databuf, 0);
                case STLINK_MODE_DFU:
                case STLINK_MODE_MASS:
                default:
@@ -1251,7 +1249,8 @@ static int stlink_usb_mode_leave(void *handle, enum stlink_mode type)
 
        assert(handle != NULL);
 
-       stlink_usb_init_buffer(handle, STLINK_NULL_EP, 0);
+       /* command with no reply, use a valid endpoint but zero size */
+       stlink_usb_init_buffer(handle, h->rx_ep, 0);
 
        switch (type) {
                case STLINK_MODE_DEBUG_JTAG:
@@ -1272,7 +1271,7 @@ static int stlink_usb_mode_leave(void *handle, enum stlink_mode type)
                        return ERROR_FAIL;
        }
 
-       res = stlink_usb_xfer_noerrcheck(handle, 0, 0);
+       res = stlink_usb_xfer_noerrcheck(handle, h->databuf, 0);
 
        if (res != ERROR_OK)
                return res;