aboutsummaryrefslogtreecommitdiff
path: root/src/target/cortex_m.c
diff options
context:
space:
mode:
authorAndreas Fritiofson <andreas.fritiofson@gmail.com>2013-09-25 22:20:55 +0200
committerSpencer Oliver <spen@spen-soft.co.uk>2013-10-02 21:54:07 +0000
commit9697e3e5e61c65313ecefbb5cb424adcb0f7b29c (patch)
tree7c9646ddc220fe05c84291b29d18c901c26df916 /src/target/cortex_m.c
parent23fb2986516f14e0889da6af3a918a3ce2c0117d (diff)
downloadriscv-openocd-9697e3e5e61c65313ecefbb5cb424adcb0f7b29c.zip
riscv-openocd-9697e3e5e61c65313ecefbb5cb424adcb0f7b29c.tar.gz
riscv-openocd-9697e3e5e61c65313ecefbb5cb424adcb0f7b29c.tar.bz2
cortex_m: mem_ap access functions take number of bytes, not words
Accessing one byte of memory using a 16-bit access is not well defined. The current implementation is forgiving and rounds up, but it should not be relied upon. Also, I suspect this code might fail if the byte order differs between target and host, but I have no way of verifying it so I left it as it is. Change-Id: I8d6a511151a194ed419f141703201f0632d84fc8 Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Reviewed-on: http://openocd.zylin.com/1657 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src/target/cortex_m.c')
-rw-r--r--src/target/cortex_m.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index 5892a0e..10a77d5 100644
--- a/src/target/cortex_m.c
+++ b/src/target/cortex_m.c
@@ -1892,7 +1892,7 @@ static int cortex_m3_dcc_read(struct adiv5_dap *swjdp, uint8_t *value, uint8_t *
uint16_t dcrdr;
int retval;
- mem_ap_read_buf_u16(swjdp, (uint8_t *)&dcrdr, 1, DCB_DCRDR);
+ mem_ap_read_buf_u16(swjdp, (uint8_t *)&dcrdr, 2, DCB_DCRDR);
*ctrl = (uint8_t)dcrdr;
*value = (uint8_t)(dcrdr >> 8);
@@ -1902,7 +1902,7 @@ static int cortex_m3_dcc_read(struct adiv5_dap *swjdp, uint8_t *value, uint8_t *
* signify we have read data */
if (dcrdr & (1 << 0)) {
dcrdr = 0;
- retval = mem_ap_write_buf_u16(swjdp, (uint8_t *)&dcrdr, 1, DCB_DCRDR);
+ retval = mem_ap_write_buf_u16(swjdp, (uint8_t *)&dcrdr, 2, DCB_DCRDR);
if (retval != ERROR_OK)
return retval;
}