diff options
Diffstat (limited to 'src/target/target.c')
-rw-r--r-- | src/target/target.c | 25 |
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; } |