From 19925e4d7f4ea3059c05e4ededa2e4f16eca67bf Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=98yvind=20Harboe?= Date: Mon, 21 Jun 2010 13:41:53 +0200 Subject: [PATCH] arm_adi_v5: error propagation fixes MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Øyvind Harboe --- src/target/arm_adi_v5.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c index aae60fc1f..b4f49e75f 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 */ -- 2.11.4.GIT