aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2018-12-07 22:11:12 +0100
committerTomas Vanek <vanekt@fbl.cz>2019-03-08 06:01:52 +0000
commitd46b28983dc27369e90f4dc8a0e54b5057583b38 (patch)
treea0156bcb444da6d89cde94db755a73ed5a5007b4
parent720380f9e372d9bab19445ff300ef1cb58e70a12 (diff)
downloadriscv-openocd-d46b28983dc27369e90f4dc8a0e54b5057583b38.zip
riscv-openocd-d46b28983dc27369e90f4dc8a0e54b5057583b38.tar.gz
riscv-openocd-d46b28983dc27369e90f4dc8a0e54b5057583b38.tar.bz2
drivers/stlink_usb: fix stlink_usb_read_regs() for API v2
API v2 implementation for command READALLREGS returns the status in the first two bytes, followed by two bytes of padding. This makes the reply 4 bytes longer and changes the offset of the first register value to 4. Fix it for the case API v2 and clean-up the management of the return value. Change-Id: I448c82bcc0baa72d66fdfe7f0c525b94f8a4468b Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/4824 Tested-by: jenkins Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com> Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
-rw-r--r--src/jtag/drivers/stlink_usb.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index b02f9d0..9ba4f4a 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -1895,20 +1895,21 @@ static int stlink_usb_read_regs(void *handle)
assert(handle != NULL);
- stlink_usb_init_buffer(handle, h->rx_ep, 84);
+ stlink_usb_init_buffer(handle, h->rx_ep, 88);
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
- if (h->version.jtag_api == STLINK_JTAG_API_V1)
+ if (h->version.jtag_api == STLINK_JTAG_API_V1) {
+
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_READALLREGS;
- else
+ res = stlink_usb_xfer(handle, h->databuf, 84);
+ /* regs data from offset 0 */
+ } else {
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_READALLREGS;
+ res = stlink_usb_xfer(handle, h->databuf, 88);
+ /* status at offset 0, regs data from offset 4 */
+ }
- res = stlink_usb_xfer(handle, h->databuf, 84);
-
- if (res != ERROR_OK)
- return res;
-
- return ERROR_OK;
+ return res;
}
/** */