diff options
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 |
commit | 19925e4d7f4ea3059c05e4ededa2e4f16eca67bf (patch) | |
tree | 5fcbf3b43ac2aa43adf6daf3577e833defdded13 /src/target | |
parent | f747b16e4e14f25f19e391b4811db9fa70be919a (diff) | |
download | openocd+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')
-rw-r--r-- | src/target/arm_adi_v5.c | 40 |
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 */ |