X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Farm11.c;h=38961bd77a490ccb62a16c9b0227304a32d54cd2;hp=751c64251e1c4836736e8a2d6ed282b864474443;hb=a28eaa85f73759bb189a46308642502c9fa5aa4b;hpb=f7458c6b19e93d5e3d40ba58f38752f434a7729b diff --git a/src/target/arm11.c b/src/target/arm11.c index 751c64251e..38961bd77a 100644 --- a/src/target/arm11.c +++ b/src/target/arm11.c @@ -709,6 +709,8 @@ int arm11_target_request_data(struct target_s *target, u32 size, u8 *buffer) /* target execution control */ int arm11_halt(struct target_s *target) { + int retval = ERROR_OK; + FNC_INFO; arm11_common_t * arm11 = target->arch_info; @@ -735,7 +737,10 @@ int arm11_halt(struct target_s *target) arm11_add_IR(arm11, ARM11_HALT, TAP_RTI); - jtag_execute_queue(); + if((retval = jtag_execute_queue()) != ERROR_OK) + { + return retval; + } u32 dscr; @@ -754,14 +759,19 @@ int arm11_halt(struct target_s *target) 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", @@ -833,7 +843,10 @@ int arm11_resume(struct target_s *target, int current, u32 address, int handle_b arm11_add_IR(arm11, ARM11_RESTART, TAP_RTI); - jtag_execute_queue(); + if((retval = jtag_execute_queue()) != ERROR_OK) + { + return retval; + } while (1) { @@ -847,15 +860,21 @@ int arm11_resume(struct target_s *target, int current, u32 address, int handle_b 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; @@ -863,6 +882,8 @@ int arm11_resume(struct target_s *target, int current, u32 address, int handle_b 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", @@ -937,7 +958,10 @@ int arm11_step(struct target_s *target, int current, u32 address, int handle_bre 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 */ @@ -964,7 +988,10 @@ int arm11_step(struct target_s *target, int current, u32 address, int handle_bre // 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; } @@ -1411,9 +1438,17 @@ int arm11_run_algorithm(struct target_s *target, int num_mem_params, mem_param_t 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) @@ -1483,6 +1518,7 @@ restore: int arm11_target_create(struct target_s *target, Jim_Interp *interp) { + int retval = ERROR_OK; FNC_INFO; NEW(arm11_common_t, arm11, 1); @@ -1490,16 +1526,20 @@ int arm11_target_create(struct target_s *target, Jim_Interp *interp) 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; } @@ -1642,7 +1682,7 @@ int arm11_set_reg(reg_t *reg, u8 *buf) 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; @@ -1700,6 +1740,7 @@ void arm11_build_reg_cache(target_t *target) 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) @@ -1789,22 +1830,22 @@ const char arm11_mcr_syntax[] = "Syntax: mcr 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; }