|
|
@@ -264,6 +264,11 @@ int target_halt(struct target_s *target) |
|
|
|
|
|
|
|
int target_resume(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution) |
|
|
|
{ |
|
|
|
int retval; |
|
|
|
int timeout_ms = 5000; |
|
|
|
|
|
|
|
enum target_state resume_state = debug_execution ? TARGET_DEBUG_RUNNING : TARGET_RUNNING; |
|
|
|
|
|
|
|
/* We can't poll until after examine */ |
|
|
|
if (!target->type->examined) |
|
|
|
{ |
|
|
@@ -271,7 +276,24 @@ int target_resume(struct target_s *target, int current, u32 address, int handle_ |
|
|
|
return ERROR_FAIL; |
|
|
|
} |
|
|
|
|
|
|
|
return target->type->resume(target, current, address, handle_breakpoints, debug_execution); |
|
|
|
if ((retval = target->type->resume(target, current, address, handle_breakpoints, debug_execution)) != ERROR_OK) |
|
|
|
return retval; |
|
|
|
|
|
|
|
/* wait for target to exit halted mode */ |
|
|
|
target_poll(target); |
|
|
|
|
|
|
|
while (target->state != resume_state) |
|
|
|
{ |
|
|
|
usleep(10000); |
|
|
|
target_poll(target); |
|
|
|
if ((timeout_ms -= 10) <= 0) |
|
|
|
{ |
|
|
|
LOG_ERROR("timeout waiting for target resume"); |
|
|
|
return ERROR_TARGET_TIMEOUT; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return retval; |
|
|
|
} |
|
|
|
|
|
|
|
int target_process_reset(struct command_context_s *cmd_ctx) |
|
|
|