target: Update messages connected with `examine`
Move `examine_attempted` flag to target struct to make it target specific. `Info` messages for retry and `Error` messages for failure added. Change-Id: Id2fbe7dc68d746c936c8412289d0d149fbd80d71 Signed-off-by: Kirill Radkin <kirill.radkin@syntacore.com>
This commit is contained in:
parent
2f1714789b
commit
a3db93b1ce
|
@ -744,16 +744,22 @@ static int default_check_reset(struct target *target)
|
|||
* Keep in sync */
|
||||
int target_examine_one(struct target *target)
|
||||
{
|
||||
if (target->examine_attempted)
|
||||
LOG_TARGET_INFO(target, "Retry examination.");
|
||||
|
||||
LOG_TARGET_INFO(target, "Examination started.");
|
||||
|
||||
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_START);
|
||||
|
||||
int retval = target->type->examine(target);
|
||||
if (retval != ERROR_OK) {
|
||||
LOG_TARGET_ERROR(target, "Examination failed. examine() -> %d", retval);
|
||||
target_reset_examined(target);
|
||||
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_FAIL);
|
||||
return retval;
|
||||
}
|
||||
|
||||
LOG_USER("[%s] Target successfully examined.", target_name(target));
|
||||
LOG_TARGET_INFO(target, "Target successfully examined.");
|
||||
target_set_examined(target);
|
||||
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_END);
|
||||
|
||||
|
@ -772,12 +778,6 @@ static int jtag_enable_callback(enum jtag_event event, void *priv)
|
|||
return target_examine_one(target);
|
||||
}
|
||||
|
||||
/* When this is true, it's OK to call examine() again in the hopes that this time
|
||||
* it will work. Earlier than that there is probably other initialization that
|
||||
* needs to happen (like scanning the JTAG chain) before examine should be
|
||||
* called. */
|
||||
static bool examine_attempted;
|
||||
|
||||
/* Targets that correctly implement init + examine, i.e.
|
||||
* no communication with target during init:
|
||||
*
|
||||
|
@ -788,8 +788,6 @@ int target_examine(void)
|
|||
int retval = ERROR_OK;
|
||||
struct target *target;
|
||||
|
||||
examine_attempted = true;
|
||||
|
||||
for (target = all_targets; target; target = target->next) {
|
||||
/* defer examination, but don't skip it */
|
||||
if (!target->tap->enabled) {
|
||||
|
@ -801,12 +799,12 @@ int target_examine(void)
|
|||
if (target->defer_examine)
|
||||
continue;
|
||||
|
||||
target->examine_attempted = true;
|
||||
|
||||
int retval2 = target_examine_one(target);
|
||||
if (retval2 != ERROR_OK) {
|
||||
LOG_WARNING("target %s examination failed", target_name(target));
|
||||
if (retval2 != ERROR_OK)
|
||||
retval = retval2;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -3066,11 +3064,11 @@ static int handle_target(void *priv)
|
|||
LOG_TARGET_DEBUG(target, "target_poll() -> %d, next attempt in %dms",
|
||||
retval, target->backoff.interval);
|
||||
|
||||
if (retval != ERROR_OK && examine_attempted) {
|
||||
if (retval != ERROR_OK && target->examine_attempted) {
|
||||
target_reset_examined(target);
|
||||
retval = target_examine_one(target);
|
||||
if (retval != ERROR_OK) {
|
||||
LOG_TARGET_DEBUG(target, "Examination failed. Polling again in %dms",
|
||||
LOG_TARGET_DEBUG(target, "Polling again in %dms",
|
||||
target->backoff.interval);
|
||||
return retval;
|
||||
}
|
||||
|
@ -6268,6 +6266,8 @@ static int target_create(struct jim_getopt_info *goi)
|
|||
|
||||
target->halt_issued = false;
|
||||
|
||||
target->examine_attempted = false;
|
||||
|
||||
/* initialize trace information */
|
||||
target->trace_info = calloc(1, sizeof(struct trace));
|
||||
if (!target->trace_info) {
|
||||
|
|
|
@ -138,6 +138,12 @@ struct target {
|
|||
*/
|
||||
bool examined;
|
||||
|
||||
/* When this is true, it's OK to call examine() again in the hopes that this time
|
||||
* it will work. Earlier than that there is probably other initialization that
|
||||
* needs to happen (like scanning the JTAG chain) before examine should be
|
||||
* called. */
|
||||
bool examine_attempted;
|
||||
|
||||
/**
|
||||
* true if the target is currently running a downloaded
|
||||
* "algorithm" instead of arbitrary user code. OpenOCD code
|
||||
|
|
Loading…
Reference in New Issue