From f7f9a37fa68432f583f33fe14d6bcec2270e576a Mon Sep 17 00:00:00 2001 From: Paul Fertser Date: Fri, 17 Apr 2015 13:36:28 +0300 Subject: [PATCH] target: try to reexamine even when polling fails MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit After intermittent connection failures or target power failures it might be necessary to try reexamination even when polling fails. This should make communication with Cortex-A targets more reliable. This was runtime tested with stlink attached to an stm32l1 and an FTDI JTAG adapter attached to an stm32f1 target. Change-Id: I38c4db8124b7f4bbf53ddda53c13273449f49c15 Signed-off-by: Paul Fertser Reviewed-on: http://openocd.zylin.com/2721 Tested-by: jenkins Reviewed-by: Felipe Balbi Reviewed-by: Tomas Vanek Reviewed-by: Andreas Färber --- src/target/target.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/target/target.c b/src/target/target.c index 8a7547b8a7..27f8839fb4 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -2522,29 +2522,27 @@ static int handle_target(void *priv) target->backoff.times *= 2; target->backoff.times++; } - LOG_USER("Polling target %s failed, GDB will be halted. Polling again in %dms", - target_name(target), - target->backoff.times * polling_interval); /* Tell GDB to halt the debugger. This allows the user to * run monitor commands to handle the situation. */ target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT); - return retval; } - /* Since we succeeded, we reset backoff count */ if (target->backoff.times > 0) { - LOG_USER("Polling target %s succeeded again, trying to reexamine", target_name(target)); + LOG_USER("Polling target %s failed, trying to reexamine", target_name(target)); target_reset_examined(target); retval = target_examine_one(target); /* Target examination could have failed due to unstable connection, * but we set the examined flag anyway to repoll it later */ if (retval != ERROR_OK) { target->examined = true; + LOG_USER("Examination failed, GDB will be halted. Polling again in %dms", + target->backoff.times * polling_interval); return retval; } } + /* Since we succeeded, we reset backoff count */ target->backoff.times = 0; } } -- 2.30.2