This is an automated email from Gerrit.

Antonio Borneo (borneo.anto...@gmail.com) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/5408

-- gerrit

commit 3a57afb1b5a71eb248411bffdbafdc8e0a363817
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Mon Jan 6 12:35:17 2020 +0100

    stlink: fix max packet size for 8 bit R/W on stlink-v3
    
    While ST internal documentation for STLINK-V3 reports that 8 bits
    read/write commands handle 512 bytes of data, a firmware bug makes
    it crashing on high data size.
    This is fixed with firmware V3J6 (shipped together with V2J36).
    
    Check for firmware version to use the proper data size.
    
    Change-Id: Iaba6cd26bbe130097c1c19de610680e0e8b69bfc
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>
    Fixes: https://sourceforge.net/p/openocd/tickets/259/

diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index 8e4493e..dc2fe8c 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -78,7 +78,7 @@
 /*
  * ST-Link/V1, ST-Link/V2 and ST-Link/V2.1 are full-speed USB devices and
  * this limits the bulk packet size and the 8bit read/writes to max 64 bytes.
- * STLINK-V3 is a high speed USB 2.0 and the limit is 512 bytes.
+ * STLINK-V3 is a high speed USB 2.0 and the limit is 512 bytes from FW V3J6.
  */
 #define STLINK_MAX_RW8         (64)
 #define STLINKV3_MAX_RW8       (512)
@@ -317,6 +317,7 @@ enum stlink_mode {
 #define STLINK_F_QUIRK_JTAG_DP_READ     BIT(6)
 #define STLINK_F_HAS_AP_INIT            BIT(7)
 #define STLINK_F_HAS_DPBANKSEL          BIT(8)
+#define STLINK_F_HAS_RW8_512BYTES       BIT(9)
 
 /* aliases */
 #define STLINK_F_HAS_TARGET_VOLT        STLINK_F_HAS_TRACE
@@ -367,7 +368,7 @@ static unsigned int stlink_usb_block(void *handle)
 
        assert(handle != NULL);
 
-       if (h->version.stlink == 3)
+       if (h->version.flags & STLINK_F_HAS_RW8_512BYTES)
                return STLINKV3_MAX_RW8;
        else
                return STLINK_MAX_RW8;
@@ -1060,6 +1061,10 @@ static int stlink_usb_version(void *handle)
                if (h->version.jtag >= 2)
                        flags |= STLINK_F_HAS_DPBANKSEL;
 
+               /* 8bit read/write max packet size 512 bytes from V3J6 */
+               if (h->version.jtag >= 6)
+                       flags |= STLINK_F_HAS_RW8_512BYTES;
+
                break;
        default:
                break;

-- 


_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to