From 9697e3e5e61c65313ecefbb5cb424adcb0f7b29c Mon Sep 17 00:00:00 2001 From: Andreas Fritiofson Date: Wed, 25 Sep 2013 22:20:55 +0200 Subject: [PATCH] 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 Reviewed-on: http://openocd.zylin.com/1657 Tested-by: jenkins Reviewed-by: Spencer Oliver --- src/target/cortex_m.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index 5892a0e88..10a77d5fd 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; }