This is an automated email from Gerrit.

Antonio Borneo ([email protected]) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/5683

-- gerrit

commit eabc9e9059fd423463ce8be4c8eab5f77a637d46
Author: Antonio Borneo <[email protected]>
Date:   Fri May 15 14:55:42 2020 +0200

    stlink: fix incorrectly returned error on v2j28
    
    Firmware v2j28 introduces the API to open and close the AP, but
    closing AP always returns error 0x1d (STLINK_BAD_AP_ERROR).
    
    Ignore the error returned by the bogus firmware on closing AP.
    
    Change-Id: I992ddbf7acb10f1d376ed8f781eeb3344605b85d
    Signed-off-by: Antonio Borneo <[email protected]>

diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index 03d3da7..579fa0b 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -319,6 +319,7 @@ enum stlink_mode {
 #define STLINK_F_HAS_AP_INIT            BIT(7)
 #define STLINK_F_HAS_DPBANKSEL          BIT(8)
 #define STLINK_F_HAS_RW8_512BYTES       BIT(9)
+#define STLINK_F_FIX_CLOSE_AP           BIT(10)
 
 /* aliases */
 #define STLINK_F_HAS_TARGET_VOLT        STLINK_F_HAS_TRACE
@@ -1030,6 +1031,10 @@ static int stlink_usb_version(void *handle)
                if (h->version.jtag >= 28)
                        flags |= STLINK_F_HAS_AP_INIT;
 
+               /* API required to return proper error code on close AP from 
J29 */
+               if (h->version.jtag >= 29)
+                       flags |= STLINK_F_FIX_CLOSE_AP;
+
                /* Banked regs (DPv1 & DPv2) support from V2J32 */
                if (h->version.jtag >= 32)
                        flags |= STLINK_F_HAS_DPBANKSEL;
@@ -1057,6 +1062,9 @@ static int stlink_usb_version(void *handle)
                /* API required to init AP before any AP access */
                flags |= STLINK_F_HAS_AP_INIT;
 
+               /* API required to return proper error code on close AP */
+               flags |= STLINK_F_FIX_CLOSE_AP;
+
                /* Banked regs (DPv1 & DPv2) support from V3J2 */
                if (h->version.jtag >= 2)
                        flags |= STLINK_F_HAS_DPBANKSEL;
@@ -3093,7 +3101,12 @@ static int stlink_usb_close_access_port(void *handle, 
unsigned char ap_num)
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_CLOSE_AP_DBG;
        h->cmdbuf[h->cmdidx++] = ap_num;
 
-       return stlink_usb_xfer_errcheck(handle, h->databuf, 2);
+       /* ignore incorrectly returned error on bogus FW */
+       if (h->version.flags & STLINK_F_FIX_CLOSE_AP)
+               return stlink_usb_xfer_errcheck(handle, h->databuf, 2);
+       else
+               return stlink_usb_xfer_noerrcheck(handle, h->databuf, 2);
+
 }
 
 /** */

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to