X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Farm11.c;h=108194e5dc256b73b992369a2d97b39a03106d32;hp=7c947fc2e7ce5ce98d90f915d5fe5467905b19c3;hb=ef1cfb23947bd32798077c6abb5c25a049460ae9;hpb=f370d70670bd5e30befe6fbfbc8d472e760f032b diff --git a/src/target/arm11.c b/src/target/arm11.c index 7c947fc2e7..108194e5dc 100644 --- a/src/target/arm11.c +++ b/src/target/arm11.c @@ -1,5 +1,7 @@ /*************************************************************************** * Copyright (C) 2008 digenius technology GmbH. * + * + * Copyright (C) 2008 Oyvind Harboe oyvind.harboe@zylin.com * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -90,7 +92,7 @@ target_type_t arm11_target = ARM11_HANDLER(run_algorithm), ARM11_HANDLER(register_commands), - ARM11_HANDLER(target_command), + ARM11_HANDLER(target_create), ARM11_HANDLER(init_target), ARM11_HANDLER(examine), ARM11_HANDLER(quit), @@ -724,7 +726,8 @@ int arm11_halt(struct target_s *target) arm11_common_t * arm11 = target->arch_info; - LOG_DEBUG("target->state: %s", target_state_strings[target->state]); + LOG_DEBUG("target->state: %s", + Jim_Nvp_value2name_simple( nvp_target_state, target->state )->name ); if (target->state == TARGET_UNKNOWN) { @@ -780,13 +783,15 @@ int arm11_resume(struct target_s *target, int current, u32 address, int handle_b arm11_common_t * arm11 = target->arch_info; - LOG_DEBUG("target->state: %s", target_state_strings[target->state]); + LOG_DEBUG("target->state: %s", + Jim_Nvp_value2name_simple( nvp_target_state, target->state )->name ); + if (target->state != TARGET_HALTED) - { - LOG_WARNING("target was not halted"); - return ERROR_TARGET_NOT_HALTED; - } + { + LOG_ERROR("Target not halted"); + return ERROR_TARGET_NOT_HALTED; + } if (!current) R(PC) = address; @@ -875,7 +880,8 @@ int arm11_step(struct target_s *target, int current, u32 address, int handle_bre { FNC_INFO; - LOG_DEBUG("target->state: %s", target_state_strings[target->state]); + LOG_DEBUG("target->state: %s", + Jim_Nvp_value2name_simple( nvp_target_state, target->state )->name ); if (target->state != TARGET_HALTED) { @@ -1010,7 +1016,9 @@ int arm11_deassert_reset(struct target_s *target) FNC_INFO; #if 0 - LOG_DEBUG("target->state: %s", target_state_strings[target->state]); + LOG_DEBUG("target->state: %s", + Jim_Nvp_value2name_simple( nvp_target_state, target->state )->name ); + /* deassert reset lines */ jtag_add_reset(0, 0); @@ -1237,7 +1245,7 @@ int arm11_write_memory(struct target_s *target, u32 address, u32 size, u32 count LOG_ERROR("use 'arm11 memwrite burst disable' to disable fast burst mode"); if (arm11_config_memwrite_error_fatal) - exit(-1); + return ERROR_FAIL; } } #endif @@ -1343,34 +1351,26 @@ int arm11_run_algorithm(struct target_s *target, int num_mem_params, mem_param_t return ERROR_OK; } -int arm11_target_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct target_s *target) +int arm11_target_create(struct target_s *target, Jim_Interp *interp) { FNC_INFO; - if (argc < 4) - { - LOG_ERROR("'target arm11' 4th argument "); - exit(-1); - } - - int chain_pos = strtoul(args[3], NULL, 0); - NEW(arm11_common_t, arm11, 1); arm11->target = target; /* prepare JTAG information for the new target */ - arm11->jtag_info.chain_pos = chain_pos; + arm11->jtag_info.chain_pos = target->chain_position; arm11->jtag_info.scann_size = 5; arm_jtag_setup_connection(&arm11->jtag_info); - jtag_device_t *device = jtag_get_device(chain_pos); + jtag_device_t *device = jtag_get_device(target->chain_position); if (device->ir_length != 5) { - LOG_ERROR("'target arm11' expects 'jtag_device 5 0x01 0x1F 0x1E'"); - exit(-1); + LOG_ERROR("'target arm11' expects 'jtag_device 5 0x01 0x1F 0x1E'"); + return ERROR_COMMAND_SYNTAX_ERROR; } target->arch_info = arm11; @@ -1388,6 +1388,7 @@ int arm11_init_target(struct command_context_s *cmd_ctx, struct target_s *target int arm11_examine(struct target_s *target) { FNC_INFO; + int retval; arm11_common_t * arm11 = target->arch_info; @@ -1414,7 +1415,8 @@ int arm11_examine(struct target_s *target) arm11_add_dr_scan_vc(asizeof(chain0_fields), chain0_fields, TAP_RTI); - jtag_execute_queue(); + if ((retval=jtag_execute_queue())!=ERROR_OK) + return retval; switch (arm11->device_id & 0x0FFFF000) @@ -1424,8 +1426,8 @@ int arm11_examine(struct target_s *target) case 0x07B76000: LOG_INFO("found ARM1176"); break; default: { - LOG_ERROR("'target arm11' expects IDCODE 0x*7B*7****"); - exit(-1); + LOG_ERROR("'target arm11' expects IDCODE 0x*7B*7****"); + return ERROR_FAIL; } } @@ -1435,7 +1437,7 @@ int arm11_examine(struct target_s *target) arm11->debug_version != ARM11_DEBUG_V61) { LOG_ERROR("Only ARMv6 v6 and v6.1 architectures supported."); - exit(-1); + return ERROR_FAIL; } @@ -1461,6 +1463,8 @@ int arm11_examine(struct target_s *target) arm11_check_init(arm11, NULL); + target->type->examined = 1; + return ERROR_OK; } @@ -1543,7 +1547,7 @@ void arm11_build_reg_cache(target_t *target) ARM11_REGCACHE_COUNT != asizeof(arm11_reg_defs) || ARM11_REGCACHE_COUNT != ARM11_RC_MAX) { - LOG_ERROR("arm11->reg_values inconsistent (%d " ZU " " ZU " %d)", ARM11_REGCACHE_COUNT, asizeof(arm11->reg_values), asizeof(arm11_reg_defs), ARM11_RC_MAX); + LOG_ERROR("BUG: arm11->reg_values inconsistent (%d " ZU " " ZU " %d)", ARM11_REGCACHE_COUNT, asizeof(arm11->reg_values), asizeof(arm11_reg_defs), ARM11_RC_MAX); exit(-1); } @@ -1664,7 +1668,7 @@ arm11_common_t * arm11_find_target(const char * arg) size_t jtag_target = strtoul(arg, NULL, 0); {target_t * t; - for (t = targets; t; t = t->next) + for (t = all_targets; t; t = t->next) { if (t->type != &arm11_target) continue; @@ -1799,3 +1803,11 @@ int arm11_register_commands(struct command_context_s *cmd_ctx) return ERROR_OK; } + + +/* + * Local Variables: *** + * c-basic-offset: 4 *** + * tab-width: 4 *** + * End: *** + */