/* target execution control */
int arm11_halt(struct target_s *target)
{
+ int retval = ERROR_OK;
+
FNC_INFO;
arm11_common_t * arm11 = target->arch_info;
arm11_add_IR(arm11, ARM11_HALT, TAP_RTI);
- jtag_execute_queue();
+ if((retval = jtag_execute_queue()) != ERROR_OK)
+ {
+ return retval;
+ }
u32 dscr;
target->state = TARGET_HALTED;
target->debug_reason = arm11_get_DSCR_debug_reason(dscr);
- target_call_event_callbacks(target,
- old_state == TARGET_DEBUG_RUNNING ? TARGET_EVENT_DEBUG_HALTED : TARGET_EVENT_HALTED);
+ if((retval = target_call_event_callbacks(target,
+ old_state == TARGET_DEBUG_RUNNING ? TARGET_EVENT_DEBUG_HALTED : TARGET_EVENT_HALTED)) != ERROR_OK)
+ {
+ return retval;
+ }
return ERROR_OK;
}
int arm11_resume(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution)
{
+ int retval = ERROR_OK;
+
FNC_INFO;
// LOG_DEBUG("current %d address %08x handle_breakpoints %d debug_execution %d",
arm11_add_IR(arm11, ARM11_RESTART, TAP_RTI);
- jtag_execute_queue();
+ if((retval = jtag_execute_queue()) != ERROR_OK)
+ {
+ return retval;
+ }
while (1)
{
if (!debug_execution)
{
- target->state = TARGET_RUNNING;
- target->debug_reason = DBG_REASON_NOTHALTED;
- target_call_event_callbacks(target, TARGET_EVENT_RESUMED);
+ target->state = TARGET_RUNNING;
+ target->debug_reason = DBG_REASON_NOTHALTED;
+ if((retval = target_call_event_callbacks(target, TARGET_EVENT_RESUMED)) != ERROR_OK)
+ {
+ return retval;
+ }
}
else
{
- target->state = TARGET_DEBUG_RUNNING;
- target->debug_reason = DBG_REASON_NOTHALTED;
- target_call_event_callbacks(target, TARGET_EVENT_DEBUG_RESUMED);
+ target->state = TARGET_DEBUG_RUNNING;
+ target->debug_reason = DBG_REASON_NOTHALTED;
+ if((retval = target_call_event_callbacks(target, TARGET_EVENT_RESUMED)) != ERROR_OK)
+ {
+ return retval;
+ }
}
return ERROR_OK;
int arm11_step(struct target_s *target, int current, u32 address, int handle_breakpoints)
{
+ int retval = ERROR_OK;
+
FNC_INFO;
LOG_DEBUG("target->state: %s",
arm11_add_IR(arm11, ARM11_RESTART, TAP_RTI);
- jtag_execute_queue();
+ if((retval = jtag_execute_queue()) != ERROR_OK)
+ {
+ return retval;
+ }
/** \todo TODO: add a timeout */
// target->state = TARGET_HALTED;
target->debug_reason = DBG_REASON_SINGLESTEP;
- target_call_event_callbacks(target, TARGET_EVENT_HALTED);
+ if((retval = target_call_event_callbacks(target, TARGET_EVENT_HALTED)) != ERROR_OK)
+ {
+ return retval;
+ }
return ERROR_OK;
}
goto restore;
}
- target_resume(target, 0, entry_point, 1, 0); // no debug, otherwise breakpoint is not set
+ // no debug, otherwise breakpoint is not set
+ if((retval = target_resume(target, 0, entry_point, 1, 0)) != ERROR_OK)
+ {
+ return retval;
+ }
+
+ if((retval = target_wait_state(target, TARGET_HALTED, timeout_ms)) != ERROR_OK)
+ {
+ return retval;
+ }
- target_wait_state(target, TARGET_HALTED, timeout_ms);
if (target->state != TARGET_HALTED)
{
if ((retval=target_halt(target))!=ERROR_OK)
int arm11_target_create(struct target_s *target, Jim_Interp *interp)
{
+ int retval = ERROR_OK;
FNC_INFO;
NEW(arm11_common_t, arm11, 1);
arm11->target = target;
/* prepare JTAG information for the new target */
- arm11->jtag_info.chain_pos = target->chain_position;
+ arm11->jtag_info.tap = target->tap;
arm11->jtag_info.scann_size = 5;
- arm_jtag_setup_connection(&arm11->jtag_info);
+ if((retval = arm_jtag_setup_connection(&arm11->jtag_info)) != ERROR_OK)
+ {
+ return retval;
+ }
- jtag_device_t *device = jtag_get_device(target->chain_position);
+ if (target->tap==NULL)
+ return ERROR_FAIL;
- if (device->ir_length != 5)
+ if (target->tap->ir_length != 5)
{
- LOG_ERROR("'target arm11' expects 'jtag_device 5 0x01 0x1F 0x1E'");
+ LOG_ERROR("'target arm11' expects IR LENGTH = 5");
return ERROR_COMMAND_SYNTAX_ERROR;
}
return ERROR_OK;
}
-void arm11_build_reg_cache(target_t *target)
+int arm11_build_reg_cache(target_t *target)
{
arm11_common_t *arm11 = target->arch_info;
rs->def_index = i;
rs->target = target;
}
+ return ERROR_OK;
}
int arm11_handle_bool(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, bool * var, char * name)
arm11_common_t * arm11_find_target(const char * arg)
{
- size_t jtag_target = strtoul(arg, NULL, 0);
-
- {target_t * t;
- for (t = all_targets; t; t = t->next)
- {
- if (strcmp(t->type->name,"arm11"))
- continue;
-
- arm11_common_t * arm11 = t->arch_info;
-
- if (arm11->jtag_info.chain_pos != jtag_target)
- continue;
-
- return arm11;
- }}
-
+ jtag_tap_t *tap;
+ target_t * t;
+
+ tap = jtag_TapByString( arg );
+ if( !tap ){
+ return NULL;
+ }
+
+ for (t = all_targets; t; t = t->next){
+ if( t->tap == tap ){
+ if( 0 == strcmp(t->type->name,"arm11")){
+ arm11_common_t * arm11 = t->arch_info;
+ return arm11;
+ }
+ }
+ }
return 0;
}