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/5531

-- gerrit

commit 52bb76d6edf6abc9677ac8974805cb24aac95960
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Tue Feb 4 12:53:54 2020 +0100

    stlink: simplify mem R/W with SWIM
    
    Thanks to API separation between SWIM and the other transports, we
    can easily split the memory read/write for SWIM from the rest of
    the code.
    While there, use the macro STLINK_DATA_SIZE as size of data chunks
    that can be read/write in SWIM. This was not implemented before.
    
    Change-Id: I7d913c92539007e4d914480bacc0126a8f0e9705
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>

diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index b82ffcc..5aa85ab 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -2322,11 +2322,6 @@ static int stlink_usb_read_mem(void *handle, uint32_t 
addr, uint32_t size,
                if (count < bytes_remaining)
                        bytes_remaining = count;
 
-               if (h->st_mode == STLINK_MODE_DEBUG_SWIM) {
-                       retval = stlink_swim_readbytes(handle, addr, 
bytes_remaining, buffer);
-                       if (retval != ERROR_OK)
-                               return retval;
-               } else
                /*
                 * all stlink support 8/32bit memory read/writes and only from
                 * stlink V2J26 there is support for 16 bit memory read/write.
@@ -2407,11 +2402,6 @@ static int stlink_usb_write_mem(void *handle, uint32_t 
addr, uint32_t size,
                if (count < bytes_remaining)
                        bytes_remaining = count;
 
-               if (h->st_mode == STLINK_MODE_DEBUG_SWIM) {
-                       retval = stlink_swim_writebytes(handle, addr, 
bytes_remaining, buffer);
-                       if (retval != ERROR_OK)
-                               return retval;
-               } else
                /*
                 * all stlink support 8/32bit memory read/writes and only from
                 * stlink V2J26 there is support for 16 bit memory read/write.
@@ -3473,13 +3463,47 @@ static int stlink_swim_op_srst(void)
 static int stlink_swim_op_read_mem(uint32_t addr, uint32_t size,
                                                                   uint32_t 
count, uint8_t *buffer)
 {
-       return stlink_usb_read_mem(stlink_dap_handle, addr, size, count, 
buffer);
+       int retval;
+       uint32_t bytes_remaining;
+
+       LOG_DEBUG("read at 0x%08x len %d*0x%08x", addr, size, count);
+       count *= size;
+
+       while (count) {
+               bytes_remaining = (count > STLINK_DATA_SIZE) ? STLINK_DATA_SIZE 
: count;
+               retval = stlink_swim_readbytes(stlink_dap_handle, addr, 
bytes_remaining, buffer);
+               if (retval != ERROR_OK)
+                       return retval;
+
+               buffer += bytes_remaining;
+               addr += bytes_remaining;
+               count -= bytes_remaining;
+       }
+
+       return ERROR_OK;
 }
 
 static int stlink_swim_op_write_mem(uint32_t addr, uint32_t size,
                                                                        
uint32_t count, const uint8_t *buffer)
 {
-       return stlink_usb_write_mem(stlink_dap_handle, addr, size, count, 
buffer);
+       int retval;
+       uint32_t bytes_remaining;
+
+       LOG_DEBUG("write at 0x%08x len %d*0x%08x", addr, size, count);
+       count *= size;
+
+       while (count) {
+               bytes_remaining = (count > STLINK_DATA_SIZE) ? STLINK_DATA_SIZE 
: count;
+               retval = stlink_swim_writebytes(stlink_dap_handle, addr, 
bytes_remaining, buffer);
+               if (retval != ERROR_OK)
+                       return retval;
+
+               buffer += bytes_remaining;
+               addr += bytes_remaining;
+               count -= bytes_remaining;
+       }
+
+       return ERROR_OK;
 }
 
 static int stlink_swim_op_reconnect(void)

-- 


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

Reply via email to