From 897817b331a8b735996241bc7515e6bebeb39316 Mon Sep 17 00:00:00 2001 From: Spencer Oliver Date: Tue, 28 Aug 2012 17:02:18 +0100 Subject: [PATCH] stlink: improve swd hardware reset Treat SWD wait result as success, otherwise hardware reset will sometimes fail. Change-Id: I0dbdbe9e75924fe0dde547a72883c60c3db7b15e Signed-off-by: Spencer Oliver Reviewed-on: http://openocd.zylin.com/799 Tested-by: jenkins Reviewed-by: Freddie Chopin --- src/jtag/drivers/stlink_usb.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c index b2f380aecb..a88f559af5 100644 --- a/src/jtag/drivers/stlink_usb.c +++ b/src/jtag/drivers/stlink_usb.c @@ -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; } -- 2.30.2