]> git.gag.com Git - fw/openocd/commitdiff
hla: API: specify that read_reg/write_reg use regsel as parameter
authorAntonio Borneo <borneo.antonio@gmail.com>
Sun, 25 Oct 2020 13:59:13 +0000 (14:59 +0100)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sun, 15 Nov 2020 21:07:14 +0000 (21:07 +0000)
The API of hla have been defined from ST-Link basic operations.
By chance, all the current implementation of hla (st-link, ti-icdi
and nulink) share the same way to handle the parameter 'num' of
the API read_reg() and write_reg(), that is simply using it to
initialize the field REGSEL (bits [6:0]) of armv7m Debug Core
Register Selector Register (DCRSR).

Add a comment in the API definition to highlight this, in case it
get used by a further hla implementation, then rename as 'regsel'
the 'num' parameter.

Change-Id: I4b6a2c7d78b4fc4de2b9b2bdba065414b15c6ba3
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/5882
Reviewed-by: Edward Fewell <edwardfewell@hotmail.com>
Tested-by: jenkins
Reviewed-by: Zale Yu
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
src/jtag/drivers/nulink_usb.c
src/jtag/drivers/stlink_usb.c
src/jtag/drivers/ti_icdi_usb.c
src/jtag/hla/hla_layout.h

index 5fdbed3fc4e0346bc4d10b75ec3a30557d15b041..00738ee4ee2470c5eb715b834ce46c0c3817e321 100644 (file)
@@ -411,7 +411,7 @@ static int nulink_usb_step(void *handle)
        return res;
 }
 
-static int nulink_usb_read_reg(void *handle, int num, uint32_t *val)
+static int nulink_usb_read_reg(void *handle, unsigned int regsel, uint32_t *val)
 {
        struct nulink_usb_handle_s *h = handle;
 
@@ -434,7 +434,7 @@ static int nulink_usb_read_reg(void *handle, int num, uint32_t *val)
        h->cmdbuf[h->cmdidx] = 0;
        h->cmdidx += 1;
        /* u32Addr */
-       h_u32_to_le(h->cmdbuf + h->cmdidx, num);
+       h_u32_to_le(h->cmdbuf + h->cmdidx, regsel);
        h->cmdidx += 4;
        /* u32Data */
        h_u32_to_le(h->cmdbuf + h->cmdidx, 0);
@@ -450,7 +450,7 @@ static int nulink_usb_read_reg(void *handle, int num, uint32_t *val)
        return res;
 }
 
-static int nulink_usb_write_reg(void *handle, int num, uint32_t val)
+static int nulink_usb_write_reg(void *handle, unsigned int regsel, uint32_t val)
 {
        struct nulink_usb_handle_s *h = handle;
 
@@ -473,7 +473,7 @@ static int nulink_usb_write_reg(void *handle, int num, uint32_t val)
        h->cmdbuf[h->cmdidx] = 0;
        h->cmdidx += 1;
        /* u32Addr */
-       h_u32_to_le(h->cmdbuf + h->cmdidx, num);
+       h_u32_to_le(h->cmdbuf + h->cmdidx, regsel);
        h->cmdidx += 4;
        /* u32Data */
        h_u32_to_le(h->cmdbuf + h->cmdidx, val);
index c54e2cc192e0900eef4392fc0581b2b82eb5b57e..1d38103a2f3cfc289fd75ef05e4277026c14af3d 100644 (file)
@@ -2016,7 +2016,7 @@ static int stlink_usb_read_regs(void *handle)
 }
 
 /** */
-static int stlink_usb_read_reg(void *handle, int num, uint32_t *val)
+static int stlink_usb_read_reg(void *handle, unsigned int regsel, uint32_t *val)
 {
        int res;
        struct stlink_usb_handle_s *h = handle;
@@ -2030,7 +2030,7 @@ static int stlink_usb_read_reg(void *handle, int num, uint32_t *val)
                h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_READREG;
        else
                h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_READREG;
-       h->cmdbuf[h->cmdidx++] = num;
+       h->cmdbuf[h->cmdidx++] = regsel;
 
        if (h->version.jtag_api == STLINK_JTAG_API_V1) {
                res = stlink_usb_xfer_noerrcheck(handle, h->databuf, 4);
@@ -2048,7 +2048,7 @@ static int stlink_usb_read_reg(void *handle, int num, uint32_t *val)
 }
 
 /** */
-static int stlink_usb_write_reg(void *handle, int num, uint32_t val)
+static int stlink_usb_write_reg(void *handle, unsigned int regsel, uint32_t val)
 {
        struct stlink_usb_handle_s *h = handle;
 
@@ -2061,7 +2061,7 @@ static int stlink_usb_write_reg(void *handle, int num, uint32_t val)
                h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_WRITEREG;
        else
                h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_WRITEREG;
-       h->cmdbuf[h->cmdidx++] = num;
+       h->cmdbuf[h->cmdidx++] = regsel;
        h_u32_to_le(h->cmdbuf+h->cmdidx, val);
        h->cmdidx += 4;
 
index 920be778380f5b296ef9d8cc43ae4ffff1e7a32a..00b2f9675e0b77e08defcc8f88e2e8aa9408e9a0 100644 (file)
@@ -475,13 +475,13 @@ static int icdi_usb_read_regs(void *handle)
        return ERROR_OK;
 }
 
-static int icdi_usb_read_reg(void *handle, int num, uint32_t *val)
+static int icdi_usb_read_reg(void *handle, unsigned int regsel, uint32_t *val)
 {
        int result;
        struct icdi_usb_handle_s *h = handle;
        char cmd[10];
 
-       snprintf(cmd, sizeof(cmd), "p%x", num);
+       snprintf(cmd, sizeof(cmd), "p%x", regsel);
        result = icdi_send_cmd(handle, cmd);
        if (result != ERROR_OK)
                return result;
@@ -504,14 +504,14 @@ static int icdi_usb_read_reg(void *handle, int num, uint32_t *val)
        return result;
 }
 
-static int icdi_usb_write_reg(void *handle, int num, uint32_t val)
+static int icdi_usb_write_reg(void *handle, unsigned int regsel, uint32_t val)
 {
        int result;
        char cmd[20];
        uint8_t buf[4];
        h_u32_to_le(buf, val);
 
-       int cmd_len = snprintf(cmd, sizeof(cmd), "P%x=", num);
+       int cmd_len = snprintf(cmd, sizeof(cmd), "P%x=", regsel);
        hexify(cmd + cmd_len, buf, 4, sizeof(cmd));
 
        result = icdi_send_cmd(handle, cmd);
index e0bbd0fed6feac1bd2242b197f23cf3ae6a69f22..a8088fe95ca823686d7e0cd38a1955dabe82f056 100644 (file)
@@ -51,10 +51,25 @@ struct hl_layout_api_s {
        int (*step)(void *handle);
        /** */
        int (*read_regs)(void *handle);
-       /** */
-       int (*read_reg)(void *handle, int num, uint32_t *val);
-       /** */
-       int (*write_reg)(void *handle, int num, uint32_t val);
+       /**
+        * Read one register from the target
+        *
+        * @param handle A pointer to the device-specific handle
+        * @param regsel Register selection index compatible with all the
+        * values allowed by armv7m DCRSR.REGSEL
+        * @param val A pointer to retrieve the register value
+        * @returns ERROR_OK on success, or an error code on failure.
+        */
+       int (*read_reg)(void *handle, unsigned int regsel, uint32_t *val);
+       /**
+        * Write one register to the target
+        * @param handle A pointer to the device-specific handle
+        * @param regsel Register selection index compatible with all the
+        * values allowed by armv7m DCRSR.REGSEL
+        * @param val The value to be written in the register
+        * @returns ERROR_OK on success, or an error code on failure.
+        */
+       int (*write_reg)(void *handle, unsigned int regsel, uint32_t val);
        /** */
        int (*read_mem)(void *handle, uint32_t addr, uint32_t size,
                        uint32_t count, uint8_t *buffer);