From: Tomas Vanek Date: Wed, 28 Sep 2022 21:01:39 +0000 (+0200) Subject: target/cortex_m: try to re-examine under reset in cortex_m_assert_reset() X-Git-Tag: v0.12.0-rc2~20 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=f65d1da01356e21e07e6c638d58f7c6d09738aa6;hp=b991c416b7e1a070604be919d8762ffe0a930a3f target/cortex_m: try to re-examine under reset in cortex_m_assert_reset() An application often idling in real sleep mode may make a Cortex-M target hard to access as CPU clock are gated and debug requests are responded by WAIT ack. Try to examine the target under reset as the last resort. Change-Id: Ife875a966a838c37dde987bc584ad0a1f4d020d6 Signed-off-by: Tomas Vanek Reviewed-on: https://review.openocd.org/c/openocd/+/7228 Tested-by: jenkins Reviewed-by: Antonio Borneo --- diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index 94c75a1d49..1863441674 100644 --- a/src/target/cortex_m.c +++ b/src/target/cortex_m.c @@ -1437,6 +1437,14 @@ static int cortex_m_assert_reset(struct target *target) srst_asserted = true; } + /* TODO: replace the hack calling target_examine_one() + * as soon as a better reset framework is available */ + if (!target_was_examined(target) && !target->defer_examine + && srst_asserted && (jtag_reset_config & RESET_SRST_NO_GATING)) { + LOG_TARGET_DEBUG(target, "Trying to re-examine under reset"); + target_examine_one(target); + } + /* We need at least debug_ap to go further. * Inform user and bail out if we don't have one. */ if (!armv7m->debug_ap) { @@ -1578,7 +1586,7 @@ static int cortex_m_deassert_reset(struct target *target) enum reset_types jtag_reset_config = jtag_get_reset_config(); if ((jtag_reset_config & RESET_HAS_SRST) && - !(jtag_reset_config & RESET_SRST_NO_GATING) && + !(jtag_reset_config & RESET_SRST_NO_GATING) && armv7m->debug_ap) { int retval = dap_dp_init_or_reconnect(armv7m->debug_ap->dap);