From 20a077eadbeea77ed3f4d75fbe23b6f2db891dd8 Mon Sep 17 00:00:00 2001 From: Paul Fertser Date: Mon, 6 Apr 2015 16:04:05 +0300 Subject: [PATCH] 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 Reviewed-on: http://openocd.zylin.com/2697 Tested-by: jenkins --- src/target/adi_v5_jtag.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/target/adi_v5_jtag.c b/src/target/adi_v5_jtag.c index 1100b17d2..c1e128662 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;