stlink-v1: fix memory writes
authorSzymon Modzelewski <szmodzelewski@gmail.com>
Tue, 21 Feb 2012 12:44:00 +0000 (13:44 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Wed, 29 Feb 2012 11:19:18 +0000 (11:19 +0000)
implement stlink_usb_send and use it to fix stlink_usb_write_mem

using two calls to stlink_usb_recv is inappropriate since each
call issues a SG command on stlink-v1, resulting in errors

Change-Id: I52ff9ee8f5d9ae0d47356477468eb98952205c99
Signed-off-by: Szymon Modzelewski <szmodzelewski@gmail.com>
Reviewed-on: http://openocd.zylin.com/478
Tested-by: jenkins
Reviewed-by: Mathias Küster <kesmtp@freenet.de>
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/jtag/drivers/stlink_usb.c

index 3cb24348884f7bca8be6a65737cff20380266507..087e7bfbfa71a0a5f116148626c50d8957730c67 100644 (file)
@@ -350,6 +350,13 @@ static int stlink_usb_recv(void *handle, const uint8_t *txbuf, int txsize, uint8
        }
 }
 
+/** */
+static int stlink_usb_send(void *handle, const uint8_t *cmd, int cmdsize, uint8_t *txbuf,
+                   int txsize)
+{
+       return stlink_usb_xfer(handle, cmd, cmdsize, STLINK_TX_EP, txbuf, txsize);
+}
+
 /** */
 static void stlink_usb_init_buffer(void *handle)
 {
@@ -953,12 +960,7 @@ static int stlink_usb_write_mem8(void *handle, uint32_t addr, uint16_t len,
        h_u32_to_le(h->txbuf + 2, addr);
        h_u16_to_le(h->txbuf + 2 + 4, len);
 
-       res = stlink_usb_recv(handle, h->txbuf, STLINK_CMD_SIZE, 0, 0);
-
-       if (res != ERROR_OK)
-               return res;
-
-       res = stlink_usb_recv(handle, (uint8_t *) buffer, len, 0, 0);
+       res = stlink_usb_send(handle, h->txbuf, STLINK_CMD_SIZE, (uint8_t *) buffer, len);
 
        if (res != ERROR_OK)
                return res;
@@ -1016,12 +1018,7 @@ static int stlink_usb_write_mem32(void *handle, uint32_t addr, uint16_t len,
        h_u32_to_le(h->txbuf + 2, addr);
        h_u16_to_le(h->txbuf + 2 + 4, len);
 
-       res = stlink_usb_recv(handle, h->txbuf, STLINK_CMD_SIZE, 0, 0);
-
-       if (res != ERROR_OK)
-               return res;
-
-       res = stlink_usb_recv(handle, (uint8_t *) buffer, len, 0, 0);
+       res = stlink_usb_send(handle, h->txbuf, STLINK_CMD_SIZE, (uint8_t *) buffer, len);
 
        if (res != ERROR_OK)
                return res;