arm_adi_v5: add error propagation for dap_setup_accessport
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>__archive__
parent
44ef0327dd
commit
e7a1ec64bf
|
@ -5,7 +5,7 @@
|
||||||
* Copyright (C) 2008 by Spencer Oliver *
|
* Copyright (C) 2008 by Spencer Oliver *
|
||||||
* spen@spen-soft.co.uk *
|
* spen@spen-soft.co.uk *
|
||||||
* *
|
* *
|
||||||
* Copyright (C) 2009 by Oyvind Harboe *
|
* Copyright (C) 2009-2010 by Oyvind Harboe *
|
||||||
* oyvind.harboe@zylin.com *
|
* oyvind.harboe@zylin.com *
|
||||||
* *
|
* *
|
||||||
* Copyright (C) 2009-2010 by David Brownell *
|
* Copyright (C) 2009-2010 by David Brownell *
|
||||||
|
@ -309,7 +309,9 @@ int mem_ap_write_buf_u32(struct adiv5_dap *dap, uint8_t *buffer, int count, uint
|
||||||
if (blocksize == 0)
|
if (blocksize == 0)
|
||||||
blocksize = 1;
|
blocksize = 1;
|
||||||
|
|
||||||
dap_setup_accessport(dap, CSW_32BIT | CSW_ADDRINC_SINGLE, address);
|
retval = dap_setup_accessport(dap, CSW_32BIT | CSW_ADDRINC_SINGLE, address);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
|
|
||||||
for (writecount = 0; writecount < blocksize; writecount++)
|
for (writecount = 0; writecount < blocksize; writecount++)
|
||||||
{
|
{
|
||||||
|
@ -363,7 +365,9 @@ static int mem_ap_write_buf_packed_u16(struct adiv5_dap *dap,
|
||||||
if (blocksize == 0)
|
if (blocksize == 0)
|
||||||
blocksize = 1;
|
blocksize = 1;
|
||||||
|
|
||||||
dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_PACKED, address);
|
retval = dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_PACKED, address);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
writecount = blocksize;
|
writecount = blocksize;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -430,7 +434,9 @@ int mem_ap_write_buf_u16(struct adiv5_dap *dap, uint8_t *buffer, int count, uint
|
||||||
|
|
||||||
while (count > 0)
|
while (count > 0)
|
||||||
{
|
{
|
||||||
dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_SINGLE, address);
|
retval = dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_SINGLE, address);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
uint16_t svalue;
|
uint16_t svalue;
|
||||||
memcpy(&svalue, buffer, sizeof(uint16_t));
|
memcpy(&svalue, buffer, sizeof(uint16_t));
|
||||||
uint32_t outvalue = (uint32_t)svalue << 8 * (address & 0x3);
|
uint32_t outvalue = (uint32_t)svalue << 8 * (address & 0x3);
|
||||||
|
@ -468,7 +474,9 @@ static int mem_ap_write_buf_packed_u8(struct adiv5_dap *dap,
|
||||||
if (wcount < blocksize)
|
if (wcount < blocksize)
|
||||||
blocksize = wcount;
|
blocksize = wcount;
|
||||||
|
|
||||||
dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_PACKED, address);
|
retval = dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_PACKED, address);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
writecount = blocksize;
|
writecount = blocksize;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -534,7 +542,9 @@ int mem_ap_write_buf_u8(struct adiv5_dap *dap, uint8_t *buffer, int count, uint3
|
||||||
|
|
||||||
while (count > 0)
|
while (count > 0)
|
||||||
{
|
{
|
||||||
dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
|
retval = dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
uint32_t outvalue = (uint32_t)*buffer << 8 * (address & 0x3);
|
uint32_t outvalue = (uint32_t)*buffer << 8 * (address & 0x3);
|
||||||
retval = dap_queue_ap_write(dap, AP_REG_DRW, outvalue);
|
retval = dap_queue_ap_write(dap, AP_REG_DRW, outvalue);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
|
@ -592,8 +602,10 @@ int mem_ap_read_buf_u32(struct adiv5_dap *dap, uint8_t *buffer,
|
||||||
if (blocksize == 0)
|
if (blocksize == 0)
|
||||||
blocksize = 1;
|
blocksize = 1;
|
||||||
|
|
||||||
dap_setup_accessport(dap, CSW_32BIT | CSW_ADDRINC_SINGLE,
|
retval = dap_setup_accessport(dap, CSW_32BIT | CSW_ADDRINC_SINGLE,
|
||||||
address);
|
address);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
|
|
||||||
/* FIXME remove these three calls to adi_jtag_dp_scan(),
|
/* FIXME remove these three calls to adi_jtag_dp_scan(),
|
||||||
* so this routine becomes transport-neutral. Be careful
|
* so this routine becomes transport-neutral. Be careful
|
||||||
|
@ -686,7 +698,9 @@ static int mem_ap_read_buf_packed_u16(struct adiv5_dap *dap,
|
||||||
if (wcount < blocksize)
|
if (wcount < blocksize)
|
||||||
blocksize = wcount;
|
blocksize = wcount;
|
||||||
|
|
||||||
dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_PACKED, address);
|
retval = dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_PACKED, address);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
|
|
||||||
/* handle unaligned data at 4k boundary */
|
/* handle unaligned data at 4k boundary */
|
||||||
if (blocksize == 0)
|
if (blocksize == 0)
|
||||||
|
@ -739,7 +753,9 @@ int mem_ap_read_buf_u16(struct adiv5_dap *dap, uint8_t *buffer,
|
||||||
|
|
||||||
while (count > 0)
|
while (count > 0)
|
||||||
{
|
{
|
||||||
dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_SINGLE, address);
|
retval = dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_SINGLE, address);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
retval = dap_queue_ap_read(dap, AP_REG_DRW, &invalue);
|
retval = dap_queue_ap_read(dap, AP_REG_DRW, &invalue);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
break;
|
break;
|
||||||
|
@ -795,7 +811,9 @@ static int mem_ap_read_buf_packed_u8(struct adiv5_dap *dap,
|
||||||
if (wcount < blocksize)
|
if (wcount < blocksize)
|
||||||
blocksize = wcount;
|
blocksize = wcount;
|
||||||
|
|
||||||
dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_PACKED, address);
|
retval = dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_PACKED, address);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
readcount = blocksize;
|
readcount = blocksize;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -844,8 +862,12 @@ int mem_ap_read_buf_u8(struct adiv5_dap *dap, uint8_t *buffer,
|
||||||
|
|
||||||
while (count > 0)
|
while (count > 0)
|
||||||
{
|
{
|
||||||
dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
|
retval = dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
retval = dap_queue_ap_read(dap, AP_REG_DRW, &invalue);
|
retval = dap_queue_ap_read(dap, AP_REG_DRW, &invalue);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
retval = dap_run(dap);
|
retval = dap_run(dap);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -71,13 +71,17 @@ static int cortexm3_dap_read_coreregister_u32(struct adiv5_dap *swjdp,
|
||||||
mem_ap_read_u32(swjdp, DCB_DCRDR, &dcrdr);
|
mem_ap_read_u32(swjdp, DCB_DCRDR, &dcrdr);
|
||||||
|
|
||||||
/* mem_ap_write_u32(swjdp, DCB_DCRSR, regnum); */
|
/* mem_ap_write_u32(swjdp, DCB_DCRSR, regnum); */
|
||||||
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRSR & 0xFFFFFFF0);
|
retval = dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRSR & 0xFFFFFFF0);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
retval = dap_queue_ap_write(swjdp, AP_REG_BD0 | (DCB_DCRSR & 0xC), regnum);
|
retval = dap_queue_ap_write(swjdp, AP_REG_BD0 | (DCB_DCRSR & 0xC), regnum);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
/* mem_ap_read_u32(swjdp, DCB_DCRDR, value); */
|
/* mem_ap_read_u32(swjdp, DCB_DCRDR, value); */
|
||||||
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRDR & 0xFFFFFFF0);
|
retval = dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRDR & 0xFFFFFFF0);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
retval = dap_queue_ap_read(swjdp, AP_REG_BD0 | (DCB_DCRDR & 0xC), value);
|
retval = dap_queue_ap_read(swjdp, AP_REG_BD0 | (DCB_DCRDR & 0xC), value);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -106,12 +110,16 @@ static int cortexm3_dap_write_coreregister_u32(struct adiv5_dap *swjdp,
|
||||||
mem_ap_read_u32(swjdp, DCB_DCRDR, &dcrdr);
|
mem_ap_read_u32(swjdp, DCB_DCRDR, &dcrdr);
|
||||||
|
|
||||||
/* mem_ap_write_u32(swjdp, DCB_DCRDR, core_regs[i]); */
|
/* mem_ap_write_u32(swjdp, DCB_DCRDR, core_regs[i]); */
|
||||||
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRDR & 0xFFFFFFF0);
|
retval = dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRDR & 0xFFFFFFF0);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
retval = dap_queue_ap_write(swjdp, AP_REG_BD0 | (DCB_DCRDR & 0xC), value);
|
retval = dap_queue_ap_write(swjdp, AP_REG_BD0 | (DCB_DCRDR & 0xC), value);
|
||||||
// XXX check retval
|
// XXX check retval
|
||||||
|
|
||||||
/* mem_ap_write_u32(swjdp, DCB_DCRSR, i | DCRSR_WnR); */
|
/* mem_ap_write_u32(swjdp, DCB_DCRSR, i | DCRSR_WnR); */
|
||||||
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRSR & 0xFFFFFFF0);
|
retval = dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRSR & 0xFFFFFFF0);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
retval = dap_queue_ap_write(swjdp, AP_REG_BD0 | (DCB_DCRSR & 0xC), regnum | DCRSR_WnR);
|
retval = dap_queue_ap_write(swjdp, AP_REG_BD0 | (DCB_DCRSR & 0xC), regnum | DCRSR_WnR);
|
||||||
// XXX check retval
|
// XXX check retval
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue