]> git.sur5r.net Git - openocd/commitdiff
jtag/adi_v5_jtag: fix infinite recursion in jtagdp_transaction_endcheck()
authorPaul Fertser <fercerpav@gmail.com>
Mon, 6 Apr 2015 13:04:05 +0000 (16:04 +0300)
committerPaul Fertser <fercerpav@gmail.com>
Tue, 14 Apr 2015 11:39:02 +0000 (12:39 +0100)
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
src/target/adi_v5_jtag.c

index 1100b17d21cfa761de0476f99dbff85fb6b73b60..c1e128662b0c7779392c875c29374eb71f8f8dde 100644 (file)
@@ -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;