summaryrefslogtreecommitdiff
path: root/src/target/arm_adi_v5.c
diff options
context:
space:
mode:
authorØyvind Harboe <oyvind.harboe@zylin.com>2010-06-21 13:41:53 +0200
committerØyvind Harboe <oyvind.harboe@zylin.com>2010-06-22 08:22:00 +0200
commit19925e4d7f4ea3059c05e4ededa2e4f16eca67bf (patch)
tree5fcbf3b43ac2aa43adf6daf3577e833defdded13 /src/target/arm_adi_v5.c
parentf747b16e4e14f25f19e391b4811db9fa70be919a (diff)
downloadopenocd+libswd-19925e4d7f4ea3059c05e4ededa2e4f16eca67bf.tar.gz
openocd+libswd-19925e4d7f4ea3059c05e4ededa2e4f16eca67bf.tar.bz2
openocd+libswd-19925e4d7f4ea3059c05e4ededa2e4f16eca67bf.tar.xz
openocd+libswd-19925e4d7f4ea3059c05e4ededa2e4f16eca67bf.zip
arm_adi_v5: error propagation fixes
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src/target/arm_adi_v5.c')
-rw-r--r--src/target/arm_adi_v5.c40
1 files changed, 22 insertions, 18 deletions
diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c
index aae60fc1..b4f49e75 100644
--- a/src/target/arm_adi_v5.c
+++ b/src/target/arm_adi_v5.c
@@ -603,43 +603,47 @@ int mem_ap_read_buf_u32(struct adiv5_dap *dap, uint8_t *buffer,
*/
/* Scan out first read */
- adi_jtag_dp_scan(dap, JTAG_DP_APACC, AP_REG_DRW,
+ retval = adi_jtag_dp_scan(dap, JTAG_DP_APACC, AP_REG_DRW,
DPAP_READ, 0, NULL, NULL);
+ if (retval != ERROR_OK)
+ return retval;
for (readcount = 0; readcount < blocksize - 1; readcount++)
{
/* Scan out next read; scan in posted value for the
* previous one. Assumes read is acked "OK/FAULT",
* and CTRL_STAT says that meant "OK".
*/
- adi_jtag_dp_scan(dap, JTAG_DP_APACC, AP_REG_DRW,
+ retval = adi_jtag_dp_scan(dap, JTAG_DP_APACC, AP_REG_DRW,
DPAP_READ, 0, buffer + 4 * readcount,
&dap->ack);
+ if (retval != ERROR_OK)
+ return retval;
}
/* Scan in last posted value; RDBUFF has no other effect,
* assuming ack is OK/FAULT and CTRL_STAT says "OK".
*/
- adi_jtag_dp_scan(dap, JTAG_DP_DPACC, DP_RDBUFF,
+ retval = adi_jtag_dp_scan(dap, JTAG_DP_DPACC, DP_RDBUFF,
DPAP_READ, 0, buffer + 4 * readcount,
&dap->ack);
- if (dap_run(dap) == ERROR_OK)
- {
- wcount = wcount - blocksize;
- address += 4 * blocksize;
- buffer += 4 * blocksize;
- }
- else
- {
- errorcount++;
- }
+ if (retval != ERROR_OK)
+ return retval;
- if (errorcount > 1)
+ retval = dap_run(dap);
+ if (retval != ERROR_OK)
{
- LOG_WARNING("Block read error address 0x%" PRIx32
- ", count 0x%x", address, count);
- /* REVISIT return the *actual* fault code */
- return ERROR_JTAG_DEVICE_ERROR;
+ errorcount++;
+ if (errorcount <= 1)
+ {
+ /* try again */
+ continue;
+ }
+ LOG_WARNING("Block read error address 0x%" PRIx32, address);
+ return retval;
}
+ wcount = wcount - blocksize;
+ address += 4 * blocksize;
+ buffer += 4 * blocksize;
}
/* if we have an unaligned access - reorder data */