aboutsummaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authorPaul Fertser <fercerpav@gmail.com>2015-04-06 16:04:05 +0300
committerPaul Fertser <fercerpav@gmail.com>2015-04-14 12:39:02 +0100
commit20a077eadbeea77ed3f4d75fbe23b6f2db891dd8 (patch)
tree544c1b32603fb7f9340b95045339a7fc1db3fd99 /src/target
parentcf77040e1e435b9bd6e1d35cd5fc6ad874703d16 (diff)
downloadriscv-openocd-20a077eadbeea77ed3f4d75fbe23b6f2db891dd8.zip
riscv-openocd-20a077eadbeea77ed3f4d75fbe23b6f2db891dd8.tar.gz
riscv-openocd-20a077eadbeea77ed3f4d75fbe23b6f2db891dd8.tar.bz2
jtag/adi_v5_jtag: fix infinite recursion in jtagdp_transaction_endcheck()
Calling ahbap_debugport_init() is wrong here because the actions performed by it might lead to jtagdp_transaction_endcheck errors thus leading to infinite recursion. The removed code is not needed now because target polling should lead to reexamination automatically, and both cortex_a and cortex_m call ahbap_debugport_init() as part of their target examine handler. This was reported as a real life issue on IRC by Weaselweb with Cortex-A target. Quitte reports similar results in some circumstances (adapter_khz too high) with LPC17xx. Change-Id: I7148022f76a1272b5262d251f2e807ffb1543547 Signed-off-by: Paul Fertser <fercerpav@gmail.com> Reviewed-on: http://openocd.zylin.com/2697 Tested-by: jenkins
Diffstat (limited to 'src/target')
-rw-r--r--src/target/adi_v5_jtag.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/target/adi_v5_jtag.c b/src/target/adi_v5_jtag.c
index 1100b17..c1e1286 100644
--- a/src/target/adi_v5_jtag.c
+++ b/src/target/adi_v5_jtag.c
@@ -271,9 +271,8 @@ static int jtagdp_transaction_endcheck(struct adiv5_dap *dap)
LOG_DEBUG("jtag-dp: CTRL/STAT error, 0x%" PRIx32, ctrlstat);
/* Check power to debug regions */
if ((ctrlstat & 0xf0000000) != 0xf0000000) {
- retval = ahbap_debugport_init(dap);
- if (retval != ERROR_OK)
- return retval;
+ LOG_ERROR("Debug regions are unpowered, an unexpected reset might have happened");
+ return ERROR_JTAG_DEVICE_ERROR;
} else {
uint32_t mem_ap_csw, mem_ap_tar;