*
* For the "reset halt/init" case we must only set up the registers here.
*/
- if ((retval = target_examine(cmd_ctx)) != ERROR_OK)
+ if ((retval = target_examine()) != ERROR_OK)
return retval;
keep_alive(); /* we might be running on a very slow JTAG clk */
*/
target_free_all_working_areas_restore(target, 0);
target->reset_halt=((reset_mode==RESET_HALT)||(reset_mode==RESET_INIT));
- target->type->assert_reset(target);
+ if ((retval = target->type->assert_reset(target))!=ERROR_OK)
+ return retval;
target = target->next;
}
- if ((retval = jtag_execute_queue()) != ERROR_OK)
- {
- LOG_WARNING("JTAG communication failed asserting reset.");
- retval = ERROR_OK;
- }
- /* request target halt if necessary, and schedule further action */
target = targets;
while (target)
{
- if (reset_mode!=RESET_RUN)
- {
- if ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0)
- target_halt(target);
- }
+ if ((retval = target->type->deassert_reset(target))!=ERROR_OK)
+ return retval;
target = target->next;
}
- if ((retval = jtag_execute_queue()) != ERROR_OK)
- {
- LOG_WARNING("JTAG communication failed while reset was asserted. Consider using srst_only for reset_config.");
- retval = ERROR_OK;
- }
-
target = targets;
while (target)
{
- target->type->deassert_reset(target);
- /* We can fail to bring the target into the halted state */
- target_poll(target);
- if (target->reset_halt&&((target->state != TARGET_HALTED)))
+ /* We can fail to bring the target into the halted state, try after reset has been deasserted */
+ if (target->reset_halt)
{
- LOG_WARNING("Failed to reset target into halted mode - issuing halt");
- target->type->halt(target);
+ /* wait up to 1 second for halt. */
+ target_wait_state(target, TARGET_HALTED, 1000);
+ if (target->state != TARGET_HALTED)
+ {
+ LOG_WARNING("Failed to reset target into halted mode - issuing halt");
+ if ((retval = target->type->halt(target))!=ERROR_OK)
+ return retval;
+ }
}
target = target->next;
}
- if ((retval = jtag_execute_queue()) != ERROR_OK)
- {
- LOG_WARNING("JTAG communication failed while deasserting reset.");
- retval = ERROR_OK;
- }
-
- if (jtag_reset_config & RESET_SRST_PULLS_TRST)
- {
- /* If TRST was asserted we need to set up registers again */
- if ((retval = target_examine(cmd_ctx)) != ERROR_OK)
- return retval;
- }
LOG_DEBUG("Waiting for halted stated as appropriate");
return ERROR_OK;
}
-static int default_examine(struct command_context_s *cmd_ctx, struct target_s *target)
+static int default_examine(struct target_s *target)
{
target->type->examined = 1;
return ERROR_OK;
target_t *target = targets;
while (target)
{
- if ((retval = target->type->examine(cmd_ctx, target))!=ERROR_OK)
+ if ((retval = target->type->examine(target))!=ERROR_OK)
return retval;
target = target->next;
}
return ERROR_OK;
}
-int target_call_timer_callbacks()
+int target_call_timer_callbacks(void)
{
return target_call_timer_callbacks_check_time(1);
}
/* invoke periodic callbacks immediately */
-int target_call_timer_callbacks_now()
+int target_call_timer_callbacks_now(void)
{
- return target_call_timer_callbacks(0);
+ return target_call_timer_callbacks();
}
int target_alloc_working_area(struct target_s *target, u32 size, working_area_t **area)