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 <vanekt@fbl.cz>
Reviewed-on: https://review.openocd.org/c/openocd/+/7228
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
Tomas Vanek 2022-09-28 23:01:39 +02:00 committed by Antonio Borneo
parent b991c416b7
commit f65d1da013
1 changed files with 9 additions and 1 deletions

View File

@ -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);