]> git.sur5r.net Git - openocd/commitdiff
stlink: improve swd hardware reset
authorSpencer Oliver <spen@spen-soft.co.uk>
Tue, 28 Aug 2012 16:02:18 +0000 (17:02 +0100)
committerFreddie Chopin <freddie.chopin@gmail.com>
Wed, 29 Aug 2012 06:41:10 +0000 (06:41 +0000)
Treat SWD wait result as success, otherwise hardware reset will sometimes fail.

Change-Id: I0dbdbe9e75924fe0dde547a72883c60c3db7b15e
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/799
Tested-by: jenkins
Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
src/jtag/drivers/stlink_usb.c

index b2f380aecb6172189cdad362769c4265e78ad15e..a88f559af5f584653a599d756b697080041f21f7 100644 (file)
@@ -94,7 +94,10 @@ struct stlink_usb_handle_s {
 };
 
 #define STLINK_DEBUG_ERR_OK                    0x80
-#define STLINK_DEBUG_ERR_FAULT                 0x81
+#define STLINK_DEBUG_ERR_FAULT         0x81
+#define STLINK_SWD_AP_WAIT                     0x10
+#define STLINK_SWD_DP_WAIT                     0x14
+
 #define STLINK_CORE_RUNNING                    0x80
 #define STLINK_CORE_HALTED                     0x81
 #define STLINK_CORE_STAT_UNKNOWN               -1
@@ -784,6 +787,10 @@ static int stlink_usb_reset(void *handle)
 
        LOG_DEBUG("RESET: 0x%08X", h->databuf[0]);
 
+       /* the following is not a error under swd (using hardware srst), so return success */
+       if (h->databuf[0] == STLINK_SWD_AP_WAIT || h->databuf[0] == STLINK_SWD_DP_WAIT)
+               return ERROR_OK;
+
        return h->databuf[0] == STLINK_DEBUG_ERR_OK ? ERROR_OK : ERROR_FAIL;
 }