aboutsummaryrefslogtreecommitdiff
path: root/src/target/target.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/target/target.c')
-rw-r--r--src/target/target.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/target/target.c b/src/target/target.c
index 630e47e..d3e7c6c 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -486,8 +486,10 @@ int target_poll(struct target *target)
}
retval = target->type->poll(target);
- if (retval != ERROR_OK)
+ if (retval != ERROR_OK) {
+ LOG_TARGET_INFO(target, "target->type->poll failed");
return retval;
+ }
if (target->halt_issued) {
if (target->state == TARGET_HALTED)
@@ -676,6 +678,7 @@ int target_examine_one(struct target *target)
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_START);
+ bool defer_state = target->defer_examine;
int retval = target->type->examine(target);
if (retval != ERROR_OK) {
LOG_TARGET_ERROR(target, "Examination failed");
@@ -685,11 +688,17 @@ int target_examine_one(struct target *target)
return retval;
}
- LOG_USER("[%s] Target successfully examined.", target_name(target));
- target_set_examined(target);
+ if (target->defer_examine) {
+ LOG_USER("[%s] Target currently unavailable for full examination.", target_name(target));
+ target->defer_examine = defer_state;
+ target_reset_examined(target);
+ } else {
+ LOG_USER("[%s] Target successfully examined.", target_name(target));
+ target_set_examined(target);
+ }
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_END);
- LOG_TARGET_INFO(target, "Examination succeed");
+ LOG_TARGET_DEBUG(target, "Examination succeed");
return ERROR_OK;
}
@@ -5261,13 +5270,19 @@ COMMAND_HANDLER(handle_target_examine)
return ERROR_OK;
}
+ bool defer_state = target->defer_examine;
int retval = target->type->examine(target);
if (retval != ERROR_OK) {
target_reset_examined(target);
return retval;
}
- target_set_examined(target);
+ if (target->defer_examine) {
+ LOG_INFO("Unable to do full examination of %s", target_name(target));
+ target->defer_examine = defer_state;
+ target_reset_examined(target);
+ } else
+ target_set_examined(target);
return ERROR_OK;
}