diff options
author | mifi <mifi@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2007-12-09 15:36:21 +0000 |
---|---|---|
committer | mifi <mifi@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2007-12-09 15:36:21 +0000 |
commit | 9e6cec0dd3301395345777cfe2617559a868f2a9 (patch) | |
tree | ce46406a1db239d40950df5a2fd071a554711fbd /src/target | |
parent | 00bbf24c1605e10e662f920c9b0a6ab02e6b81ee (diff) | |
download | openocd_libswd-9e6cec0dd3301395345777cfe2617559a868f2a9.tar.gz openocd_libswd-9e6cec0dd3301395345777cfe2617559a868f2a9.tar.bz2 openocd_libswd-9e6cec0dd3301395345777cfe2617559a868f2a9.tar.xz openocd_libswd-9e6cec0dd3301395345777cfe2617559a868f2a9.zip |
- added patch to display device information as INFO too
- added patch which fixes a crash upon flash write error
- added patch which will improve the reset handling when
SRST is tied to TRST
(thanks to Oyvind Harboe for these patches)
git-svn-id: svn://svn.berlios.de/openocd/trunk@218 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/target')
-rw-r--r-- | src/target/target.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/target/target.c b/src/target/target.c index f9d957d6..0874010c 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -313,6 +313,23 @@ int target_process_reset(struct command_context_s *cmd_ctx) while (target) { target->type->deassert_reset(target); + + switch (target->reset_mode) + { + case RESET_INIT: + case RESET_HALT: + // If we're already halted, then this is harmless(reducing # of execution paths here) + // If nSRST & nTRST are tied together then the halt during reset failed(logged) and + // we use this as fallback(there is no other output to tell the user that reset halt + // didn't work). + target->type->poll(target); + target->type->halt(target); + break; + default: + break; + } + + target = target->next; } jtag_execute_queue(); @@ -1047,7 +1064,7 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a (*last_target_p)->trace_info->trace_history_overflowed = 0; (*last_target_p)->dbgmsg = NULL; - + (*last_target_p)->type->target_command(cmd_ctx, cmd, args, argc, *last_target_p); found = 1; @@ -1188,8 +1205,7 @@ int handle_target(void *priv) if (target_continous_poll) if ((retval = target->type->poll(target)) < 0) { - ERROR("couldn't poll target, exiting"); - exit(-1); + ERROR("couldn't poll target. It's due for a reset."); } } @@ -1860,7 +1876,7 @@ int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, ch if (!target) { ERROR("no target selected"); - return ERROR_OK; + return ERROR_OK; } duration_start_measure(&duration); @@ -1875,7 +1891,7 @@ int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, ch image.base_address_set = 0; image.base_address = 0x0; } - + image.start_address_set = 0; if (image_open(&image, args[0], (argc == 3) ? args[2] : NULL) != ERROR_OK) @@ -2085,3 +2101,4 @@ int handle_rwp_command(struct command_context_s *cmd_ctx, char *cmd, char **args return ERROR_OK; } + |