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>
This commit is contained in:
parent
23fb298651
commit
9697e3e5e6
|
@ -1892,7 +1892,7 @@ static int cortex_m3_dcc_read(struct adiv5_dap *swjdp, uint8_t *value, uint8_t *
|
||||||
uint16_t dcrdr;
|
uint16_t dcrdr;
|
||||||
int retval;
|
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;
|
*ctrl = (uint8_t)dcrdr;
|
||||||
*value = (uint8_t)(dcrdr >> 8);
|
*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 */
|
* signify we have read data */
|
||||||
if (dcrdr & (1 << 0)) {
|
if (dcrdr & (1 << 0)) {
|
||||||
dcrdr = 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)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue