From e2b6de3d66bae70cb08fea17f5b66ee875dbb636 Mon Sep 17 00:00:00 2001
From: oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Date: Mon, 28 Jul 2008 06:08:05 +0000
Subject: [PATCH] retired reset run_and_init/halt

git-svn-id: svn://svn.berlios.de/openocd/trunk@877 b42882b7-edfa-0310-969c-e2dbd0fdcd60
---
 doc/openocd.texi                              |  16 +-
 src/target/target.c                           | 751 ++++++++----------
 src/target/target.h                           |   3 -
 src/target/target/at91r40008.cfg              |   2 +-
 src/target/target/at91sam9260.cfg             |   2 +-
 src/target/target/at91sam9260minimal.cfg      |   2 +-
 src/target/target/eir-sam7se512.cfg           |   2 +-
 src/target/target/hammer.cfg                  |   2 +-
 src/target/target/ipx42x.cfg                  |   2 +-
 src/target/target/lpc2129.cfg                 |   2 +-
 src/target/target/lpc2148.cfg                 |   2 +-
 src/target/target/lpc2294.cfg                 |   2 +-
 src/target/target/mx31.cfg                    |   2 +-
 src/target/target/netx500.cfg                 |   2 +-
 src/target/target/nslu2.cfg                   |   2 +-
 src/target/target/omap5912.cfg                |   2 +-
 src/target/target/pic32mx.cfg                 |   2 +-
 src/target/target/pxa255.cfg                  |   2 +-
 src/target/target/pxa270.cfg                  |   2 +-
 src/target/target/sam7s256.cfg                |   2 +-
 src/target/target/sam7x256.cfg                |   2 +-
 src/target/target/stm32.cfg                   |   2 +-
 src/target/target/stm32stick.cfg              |   2 +-
 src/target/target/str710.cfg                  |   2 +-
 src/target/target/str730.cfg                  |   2 +-
 src/target/target/str750.cfg                  |   2 +-
 src/target/target/str912.cfg                  |   2 +-
 src/target/target/str9comstick.cfg            |   2 +-
 src/target/target/wi-9c.cfg                   |   2 +-
 src/target/target/xba_revA3.cfg               |   1 -
 .../AT91R40008Test/prj/at91r40008_turtle.cfg  |   3 +-
 .../LPC2148Test/prj/lpc2148_jtagkey.cfg       |   3 +-
 .../LPC2294Test/prj/lpc2294_jtagkey.cfg       |   3 +-
 .../SAM7S256Test/prj/sam7s256_jtagkey.cfg     |   3 +-
 .../SAM7X256Test/prj/sam7x256_jtagkey.cfg     |   3 +-
 .../STR710JtagSpeed/prj/str710_jtagkey.cfg    |   3 +-
 .../STR710Test/prj/str710_jtagkey.cfg         |   3 +-
 .../STR912Test/prj/str912_jtagkey.cfg         |   3 +-
 38 files changed, 346 insertions(+), 501 deletions(-)

diff --git a/doc/openocd.texi b/doc/openocd.texi
index 8f9ca93e4..04605f09d 100644
--- a/doc/openocd.texi
+++ b/doc/openocd.texi
@@ -540,11 +540,6 @@ Event is one of the following:
 @option{pre_resume} or @option{gdb_program_config}.
 @option{post_reset} and @option{reset} will produce the same results.
 
-@item @b{run_and_halt_time} <@var{target#}> <@var{time_in_ms}>
-@cindex run_and_halt_time
-The amount of time the debugger should wait after releasing reset before it asserts
-a debug request. This is used by the @option{run_and_halt} and @option{run_and_init}
-reset modes. 
 @item @b{working_area} <@var{target#}> <@var{address}> <@var{size}>
 <@var{backup}|@var{nobackup}>
 @cindex working_area
@@ -795,8 +790,7 @@ OpenOCD will wait 5 seconds for the target to resume.
 @cindex step
 Single-step the target at its current code position, or at an optional address. 
 
-@item @b{reset} [@option{run}|@option{halt}|@option{init}|@option{run_and_halt}
-|@option{run_and_init}]
+@item @b{reset} [@option{run}|@option{halt}|@option{init}]
 @cindex reset
 Perform a hard-reset. The optional parameter specifies what should happen after the reset.
 
@@ -812,15 +806,7 @@ Immediately halt the target (works only with certain configurations).
 @cindex reset init
 Immediately halt the target, and execute the reset script (works only with certain
 configurations)
-@item @b{run_and_halt}
-@cindex reset run_and_halt
-Let the target run for a certain amount of time, then request a halt.
-@item @b{run_and_init}
-@cindex reset run_and_init
-Let the target run for a certain amount of time, then request a halt. Execute the
-reset script once the target enters debug mode.
 @end itemize
-The runtime can be set using the @option{run_and_halt_time} command.
 @end itemize
 
 @subsection Memory access commands
diff --git a/src/target/target.c b/src/target/target.c
index 7c6beb0fc..52a4fbbae 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -55,7 +55,6 @@ int cli_target_callback_event_handler(struct target_s *target, enum target_event
 int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 
-int handle_run_and_halt_time_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 int handle_working_area_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 
 int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
@@ -194,8 +193,8 @@ target_t* get_target_by_num(int num)
 int get_num_by_target(target_t *query_target)
 {
 	target_t *target = targets;
-	int i = 0;	
-	
+	int i = 0;
+
 	while (target)
 	{
 		if (target == query_target)
@@ -203,48 +202,23 @@ int get_num_by_target(target_t *query_target)
 		target = target->next;
 		i++;
 	}
-	
+
 	return -1;
 }
 
 target_t* get_current_target(command_context_t *cmd_ctx)
 {
 	target_t *target = get_target_by_num(cmd_ctx->current_target);
-	
+
 	if (target == NULL)
 	{
 		LOG_ERROR("BUG: current_target out of bounds");
 		exit(-1);
 	}
-	
-	return target;
-}
 
-/* Process target initialization, when target entered debug out of reset
- * the handler is unregistered at the end of this function, so it's only called once
- */
-int target_init_handler(struct target_s *target, enum target_event event, void *priv)
-{
-	struct command_context_s *cmd_ctx = priv;
-	
-	if (event == TARGET_EVENT_HALTED)
-	{
-		target_unregister_event_callback(target_init_handler, priv);
-		target_invoke_script(cmd_ctx, target, "post_reset");
-		jtag_execute_queue();
-	}
-	
-	return ERROR_OK;
+	return target;
 }
 
-int target_run_and_halt_handler(void *priv)
-{
-	target_t *target = priv;
-	
-	target_halt(target);
-	
-	return ERROR_OK;
-}
 
 int target_poll(struct target_s *target)
 {
@@ -271,21 +245,21 @@ int target_halt(struct target_s *target)
 int target_resume(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution)
 {
 	int retval;
-	
+
 	/* We can't poll until after examine */
 	if (!target->type->examined)
 	{
 		LOG_ERROR("Target not examined yet");
 		return ERROR_FAIL;
 	}
-	
+
 	/* note that resume *must* be asynchronous. The CPU can halt before we poll. The CPU can
 	 * even halt at the current PC as a result of a software breakpoint being inserted by (a bug?)
 	 * the application.
 	 */
 	if ((retval = target->type->resume(target, current, address, handle_breakpoints, debug_execution)) != ERROR_OK)
 		return retval;
-	
+
 	return retval;
 }
 
@@ -301,27 +275,27 @@ int target_process_reset(struct command_context_s *cmd_ctx, enum target_reset_mo
 		target_invoke_script(cmd_ctx, target, "pre_reset");
 		target = target->next;
 	}
-	
+
 	if ((retval = jtag_init_reset(cmd_ctx)) != ERROR_OK)
 		return retval;
-	
+
 	keep_alive(); /* we might be running on a very slow JTAG clk */
-	
-	/* First time this is executed after launching OpenOCD, it will read out 
+
+	/* First time this is executed after launching OpenOCD, it will read out
 	 * the type of CPU, etc. and init Embedded ICE registers in host
-	 * memory. 
-	 * 
+	 * memory.
+	 *
 	 * It will also set up ICE registers in the target.
-	 * 
-	 * However, if we assert TRST later, we need to set up the registers again. 
-	 * 
+	 *
+	 * However, if we assert TRST later, we need to set up the registers again.
+	 *
 	 * For the "reset halt/init" case we must only set up the registers here.
 	 */
 	if ((retval = target_examine(cmd_ctx)) != ERROR_OK)
 		return retval;
-	
+
 	keep_alive(); /* we might be running on a very slow JTAG clk */
-		
+
 	target = targets;
 	while (target)
 	{
@@ -338,46 +312,25 @@ int target_process_reset(struct command_context_s *cmd_ctx, enum target_reset_mo
 		LOG_WARNING("JTAG communication failed asserting reset.");
 		retval = ERROR_OK;
 	}
-	
+
 	/* request target halt if necessary, and schedule further action */
 	target = targets;
 	while (target)
 	{
-		switch (reset_mode)
+		if (reset_mode!=RESET_RUN)
 		{
-			case RESET_RUN:
-				/* nothing to do if target just wants to be run */
-				break;
-			case RESET_RUN_AND_HALT:
-				/* schedule halt */
-				target_register_timer_callback(target_run_and_halt_handler, target->run_and_halt_time, 0, target);
-				break;
-			case RESET_RUN_AND_INIT:
-				/* schedule halt */
-				target_register_timer_callback(target_run_and_halt_handler, target->run_and_halt_time, 0, target);
-				target_register_event_callback(target_init_handler, cmd_ctx);
-				break;
-			case RESET_HALT:
-				if ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0)
-					target_halt(target);
-				break;
-			case RESET_INIT:
-				if ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0)
-					target_halt(target);
-				target_register_event_callback(target_init_handler, cmd_ctx);
-				break;
-			default:
-				LOG_ERROR("BUG: unknown target->reset_mode");
+			if ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0)
+				target_halt(target);
 		}
 		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;		
+		retval = ERROR_OK;
 	}
-	
+
 	target = targets;
 	while (target)
 	{
@@ -389,10 +342,10 @@ int target_process_reset(struct command_context_s *cmd_ctx, enum target_reset_mo
 			LOG_WARNING("Failed to reset target into halted mode - issuing halt");
 			target->type->halt(target);
 		}
-		
+
 		target = target->next;
 	}
-	
+
 	if ((retval = jtag_execute_queue()) != ERROR_OK)
 	{
 		LOG_WARNING("JTAG communication failed while deasserting reset.");
@@ -404,64 +357,23 @@ int target_process_reset(struct command_context_s *cmd_ctx, enum target_reset_mo
 		/* 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");
-	
-	/* Wait for reset to complete, maximum 5 seconds. */	
-	gettimeofday(&timeout, NULL);
-	timeval_add_time(&timeout, 5, 0);
-	for(;;)
+
+	if ((reset_mode == RESET_HALT) || (reset_mode == RESET_INIT))
 	{
-		gettimeofday(&now, NULL);
-		
-		target_call_timer_callbacks_now();
-		
-		target = targets;
-		while (target)
+		/* Wait for reset to complete, maximum 5 seconds. */
+		if (((retval=target_wait_state(target, TARGET_HALTED, 5000)))==ERROR_OK)
 		{
-			LOG_DEBUG("Polling target");
-			target_poll(target);
-			if ((reset_mode == RESET_RUN_AND_INIT) || 
-					(reset_mode == RESET_RUN_AND_HALT) ||
-					(reset_mode == RESET_HALT) ||
-					(reset_mode == RESET_INIT))
-			{
-				if (target->state != TARGET_HALTED)
-				{
-					if ((now.tv_sec > timeout.tv_sec) || ((now.tv_sec == timeout.tv_sec) && (now.tv_usec >= timeout.tv_usec)))
-					{
-						LOG_USER("Timed out waiting for halt after reset");
-						goto done;
-					}
-					/* this will send alive messages on e.g. GDB remote protocol. */
-					usleep(500*1000); 
-					LOG_USER_N("%s", ""); /* avoid warning about zero length formatting message*/ 
-					goto again;
-				}
-			}
-			target = target->next;
+			if (reset_mode == RESET_INIT)
+				target_invoke_script(cmd_ctx, target, "post_reset");
 		}
-		/* All targets we're waiting for are halted */
-		break;
-		
-		again:;
 	}
-	done:
-	
-	
+
 	/* We want any events to be processed before the prompt */
 	target_call_timer_callbacks_now();
 
-	/* if we timed out we need to unregister these handlers */
-	target = targets;
-	while (target)
-	{
-		target_unregister_timer_callback(target_run_and_halt_handler, target);
-		target = target->next;
-	}
-	target_unregister_event_callback(target_init_handler, cmd_ctx);
-	
 	return retval;
 }
 
@@ -486,8 +398,8 @@ static int default_examine(struct command_context_s *cmd_ctx, struct target_s *t
 
 /* Targets that correctly implement init+examine, i.e.
  * no communication with target during init:
- * 
- * XScale 
+ *
+ * XScale
  */
 int target_examine(struct command_context_s *cmd_ctx)
 {
@@ -545,7 +457,7 @@ static int target_run_algorithm_imp(struct target_s *target, int num_mem_params,
 int target_init(struct command_context_s *cmd_ctx)
 {
 	target_t *target = targets;
-	
+
 	while (target)
 	{
 		target->type->examined = 0;
@@ -553,13 +465,13 @@ int target_init(struct command_context_s *cmd_ctx)
 		{
 			target->type->examine = default_examine;
 		}
-		
+
 		if (target->type->init_target(cmd_ctx, target) != ERROR_OK)
 		{
 			LOG_ERROR("target '%s' init failed", target->type->name);
 			exit(-1);
 		}
-		
+
 		/* Set up default functions if none are provided by target */
 		if (target->type->virt2phys == NULL)
 		{
@@ -578,44 +490,44 @@ int target_init(struct command_context_s *cmd_ctx)
 		target->type->run_algorithm_imp = target->type->run_algorithm;
 		target->type->run_algorithm = target_run_algorithm_imp;
 
-		
+
 		if (target->type->mmu == NULL)
 		{
 			target->type->mmu = default_mmu;
 		}
 		target = target->next;
 	}
-	
+
 	if (targets)
 	{
 		target_register_user_commands(cmd_ctx);
 		target_register_timer_callback(handle_target, 100, 1, NULL);
 	}
-		
+
 	return ERROR_OK;
 }
 
 int target_register_event_callback(int (*callback)(struct target_s *target, enum target_event event, void *priv), void *priv)
 {
 	target_event_callback_t **callbacks_p = &target_event_callbacks;
-	
+
 	if (callback == NULL)
 	{
 		return ERROR_INVALID_ARGUMENTS;
 	}
-	
+
 	if (*callbacks_p)
 	{
 		while ((*callbacks_p)->next)
 			callbacks_p = &((*callbacks_p)->next);
 		callbacks_p = &((*callbacks_p)->next);
 	}
-	
+
 	(*callbacks_p) = malloc(sizeof(target_event_callback_t));
 	(*callbacks_p)->callback = callback;
 	(*callbacks_p)->priv = priv;
 	(*callbacks_p)->next = NULL;
-	
+
 	return ERROR_OK;
 }
 
@@ -623,24 +535,24 @@ int target_register_timer_callback(int (*callback)(void *priv), int time_ms, int
 {
 	target_timer_callback_t **callbacks_p = &target_timer_callbacks;
 	struct timeval now;
-	
+
 	if (callback == NULL)
 	{
 		return ERROR_INVALID_ARGUMENTS;
 	}
-	
+
 	if (*callbacks_p)
 	{
 		while ((*callbacks_p)->next)
 			callbacks_p = &((*callbacks_p)->next);
 		callbacks_p = &((*callbacks_p)->next);
 	}
-	
+
 	(*callbacks_p) = malloc(sizeof(target_timer_callback_t));
 	(*callbacks_p)->callback = callback;
 	(*callbacks_p)->periodic = periodic;
 	(*callbacks_p)->time_ms = time_ms;
-	
+
 	gettimeofday(&now, NULL);
 	(*callbacks_p)->when.tv_usec = now.tv_usec + (time_ms % 1000) * 1000;
 	time_ms -= (time_ms % 1000);
@@ -650,10 +562,10 @@ int target_register_timer_callback(int (*callback)(void *priv), int time_ms, int
 		(*callbacks_p)->when.tv_usec = (*callbacks_p)->when.tv_usec - 1000000;
 		(*callbacks_p)->when.tv_sec += 1;
 	}
-	
+
 	(*callbacks_p)->priv = priv;
 	(*callbacks_p)->next = NULL;
-	
+
 	return ERROR_OK;
 }
 
@@ -661,12 +573,12 @@ int target_unregister_event_callback(int (*callback)(struct target_s *target, en
 {
 	target_event_callback_t **p = &target_event_callbacks;
 	target_event_callback_t *c = target_event_callbacks;
-	
+
 	if (callback == NULL)
 	{
 		return ERROR_INVALID_ARGUMENTS;
 	}
-		
+
 	while (c)
 	{
 		target_event_callback_t *next = c->next;
@@ -680,7 +592,7 @@ int target_unregister_event_callback(int (*callback)(struct target_s *target, en
 			p = &(c->next);
 		c = next;
 	}
-	
+
 	return ERROR_OK;
 }
 
@@ -688,12 +600,12 @@ int target_unregister_timer_callback(int (*callback)(void *priv), void *priv)
 {
 	target_timer_callback_t **p = &target_timer_callbacks;
 	target_timer_callback_t *c = target_timer_callbacks;
-	
+
 	if (callback == NULL)
 	{
 		return ERROR_INVALID_ARGUMENTS;
 	}
-		
+
 	while (c)
 	{
 		target_timer_callback_t *next = c->next;
@@ -707,7 +619,7 @@ int target_unregister_timer_callback(int (*callback)(void *priv), void *priv)
 			p = &(c->next);
 		c = next;
 	}
-	
+
 	return ERROR_OK;
 }
 
@@ -715,16 +627,16 @@ int target_call_event_callbacks(target_t *target, enum target_event event)
 {
 	target_event_callback_t *callback = target_event_callbacks;
 	target_event_callback_t *next_callback;
-	
+
 	LOG_DEBUG("target event %i", event);
-	
+
 	while (callback)
 	{
 		next_callback = callback->next;
 		callback->callback(target, event, callback->priv);
 		callback = next_callback;
 	}
-	
+
 	return ERROR_OK;
 }
 
@@ -735,13 +647,13 @@ static int target_call_timer_callbacks_check_time(int checktime)
 	struct timeval now;
 
 	keep_alive();
-	
+
 	gettimeofday(&now, NULL);
-	
+
 	while (callback)
 	{
 		next_callback = callback->next;
-		
+
 		if ((!checktime&&callback->periodic)||
 				(((now.tv_sec >= callback->when.tv_sec) && (now.tv_usec >= callback->when.tv_usec))
 						|| (now.tv_sec > callback->when.tv_sec)))
@@ -765,10 +677,10 @@ static int target_call_timer_callbacks_check_time(int checktime)
 					target_unregister_timer_callback(callback->callback, callback->priv);
 			}
 		}
-			
+
 		callback = next_callback;
 	}
-	
+
 	return ERROR_OK;
 }
 
@@ -787,7 +699,7 @@ int target_alloc_working_area(struct target_s *target, u32 size, working_area_t
 {
 	working_area_t *c = target->working_areas;
 	working_area_t *new_wa = NULL;
-	
+
 	/* Reevaluate working area address based on MMU state*/
 	if (target->working_areas == NULL)
 	{
@@ -807,14 +719,14 @@ int target_alloc_working_area(struct target_s *target, u32 size, working_area_t
 			target->working_area = target->working_area_phys;
 		}
 	}
-	
+
 	/* only allocate multiples of 4 byte */
 	if (size % 4)
 	{
 		LOG_ERROR("BUG: code tried to allocate unaligned number of bytes, padding");
 		size = CEIL(size, 4);
 	}
-	
+
 	/* see if there's already a matching working area */
 	while (c)
 	{
@@ -825,16 +737,16 @@ int target_alloc_working_area(struct target_s *target, u32 size, working_area_t
 		}
 		c = c->next;
 	}
-	
+
 	/* if not, allocate a new one */
 	if (!new_wa)
 	{
 		working_area_t **p = &target->working_areas;
 		u32 first_free = target->working_area;
 		u32 free_size = target->working_area_size;
-		
+
 		LOG_DEBUG("allocating new working area");
-		
+
 		c = target->working_areas;
 		while (c)
 		{
@@ -843,18 +755,18 @@ int target_alloc_working_area(struct target_s *target, u32 size, working_area_t
 			p = &c->next;
 			c = c->next;
 		}
-		
+
 		if (free_size < size)
 		{
 			LOG_WARNING("not enough working area available(requested %d, free %d)", size, free_size);
 			return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
 		}
-		
+
 		new_wa = malloc(sizeof(working_area_t));
 		new_wa->next = NULL;
 		new_wa->size = size;
 		new_wa->address = first_free;
-		
+
 		if (target->backup_working_area)
 		{
 			new_wa->backup = malloc(new_wa->size);
@@ -864,18 +776,18 @@ int target_alloc_working_area(struct target_s *target, u32 size, working_area_t
 		{
 			new_wa->backup = NULL;
 		}
-		
+
 		/* put new entry in list */
 		*p = new_wa;
 	}
-	
+
 	/* mark as used, and return the new (reused) area */
 	new_wa->free = 0;
 	*area = new_wa;
-	
+
 	/* user pointer */
 	new_wa->user = area;
-	
+
 	return ERROR_OK;
 }
 
@@ -883,16 +795,16 @@ int target_free_working_area_restore(struct target_s *target, working_area_t *ar
 {
 	if (area->free)
 		return ERROR_OK;
-	
+
 	if (restore&&target->backup_working_area)
 		target->type->write_memory(target, area->address, 4, area->size / 4, area->backup);
-	
+
 	area->free = 1;
-	
+
 	/* mark user pointer invalid */
 	*area->user = NULL;
 	area->user = NULL;
-	
+
 	return ERROR_OK;
 }
 
@@ -909,30 +821,29 @@ int target_free_all_working_areas_restore(struct target_s *target, int restore)
 	{
 		working_area_t *next = c->next;
 		target_free_working_area_restore(target, c, restore);
-		
+
 		if (c->backup)
 			free(c->backup);
-		
+
 		free(c);
-		
+
 		c = next;
 	}
-	
+
 	target->working_areas = NULL;
-	
+
 	return ERROR_OK;
 }
 
 int target_free_all_working_areas(struct target_s *target)
 {
-	return target_free_all_working_areas_restore(target, 1); 
+	return target_free_all_working_areas_restore(target, 1);
 }
 
 int target_register_commands(struct command_context_s *cmd_ctx)
 {
 	register_command(cmd_ctx, NULL, "target", handle_target_command, COMMAND_CONFIG, "target <cpu> [reset_init default - DEPRECATED] <chainpos> <endianness> <variant> [cpu type specifc args]");
 	register_command(cmd_ctx, NULL, "targets", handle_targets_command, COMMAND_EXEC, NULL);
-	register_command(cmd_ctx, NULL, "run_and_halt_time", handle_run_and_halt_time_command, COMMAND_CONFIG, "<target> <run time ms>");
 	register_command(cmd_ctx, NULL, "working_area", handle_working_area_command, COMMAND_ANY, "working_area <target#> <address> <size> <'backup'|'nobackup'> [virtual address]");
 	register_command(cmd_ctx, NULL, "virt2phys", handle_virt2phys_command, COMMAND_ANY, "virt2phys <virtual address>");
 	register_command(cmd_ctx, NULL, "profile", handle_profile_command, COMMAND_EXEC, "PRELIMINARY! - profile <seconds> <gmon.out>");
@@ -952,18 +863,18 @@ int target_arch_state(struct target_s *target)
 		LOG_USER("No target has been configured");
 		return ERROR_OK;
 	}
-	
+
 	LOG_USER("target state: %s", target_state_strings[target->state]);
-	
+
 	if (target->state!=TARGET_HALTED)
 		return ERROR_OK;
-	
+
 	retval=target->type->arch_state(target);
 	return retval;
 }
 
-/* Single aligned words are guaranteed to use 16 or 32 bit access 
- * mode respectively, otherwise data is handled as quickly as 
+/* Single aligned words are guaranteed to use 16 or 32 bit access
+ * mode respectively, otherwise data is handled as quickly as
  * possible
  */
 int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer)
@@ -976,40 +887,40 @@ int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buff
 		LOG_ERROR("Target not examined yet");
 		return ERROR_FAIL;
 	}
-	
+
 	if (address+size<address)
 	{
 		/* GDB can request this when e.g. PC is 0xfffffffc*/
 		LOG_ERROR("address+size wrapped(0x%08x, 0x%08x)", address, size);
 		return ERROR_FAIL;
 	}
-	
+
 	if (((address % 2) == 0) && (size == 2))
 	{
 		return target->type->write_memory(target, address, 2, 1, buffer);
 	}
-	
+
 	/* handle unaligned head bytes */
 	if (address % 4)
 	{
 		int unaligned = 4 - (address % 4);
-		
+
 		if (unaligned > size)
 			unaligned = size;
 
 		if ((retval = target->type->write_memory(target, address, 1, unaligned, buffer)) != ERROR_OK)
 			return retval;
-		
+
 		buffer += unaligned;
 		address += unaligned;
 		size -= unaligned;
 	}
-		
+
 	/* handle aligned words */
 	if (size >= 4)
 	{
 		int aligned = size - (size % 4);
-	
+
 		/* use bulk writes above a certain limit. This may have to be changed */
 		if (aligned > 128)
 		{
@@ -1021,25 +932,25 @@ int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buff
 			if ((retval = target->type->write_memory(target, address, 4, aligned / 4, buffer)) != ERROR_OK)
 				return retval;
 		}
-		
+
 		buffer += aligned;
 		address += aligned;
 		size -= aligned;
 	}
-	
+
 	/* handle tail writes of less than 4 bytes */
 	if (size > 0)
 	{
 		if ((retval = target->type->write_memory(target, address, 1, size, buffer)) != ERROR_OK)
 			return retval;
 	}
-	
+
 	return ERROR_OK;
 }
 
 
-/* Single aligned words are guaranteed to use 16 or 32 bit access 
- * mode respectively, otherwise data is handled as quickly as 
+/* Single aligned words are guaranteed to use 16 or 32 bit access
+ * mode respectively, otherwise data is handled as quickly as
  * possible
  */
 int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer)
@@ -1052,55 +963,55 @@ int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffe
 		LOG_ERROR("Target not examined yet");
 		return ERROR_FAIL;
 	}
-	
+
 	if (address+size<address)
 	{
 		/* GDB can request this when e.g. PC is 0xfffffffc*/
 		LOG_ERROR("address+size wrapped(0x%08x, 0x%08x)", address, size);
 		return ERROR_FAIL;
 	}
-	
+
 	if (((address % 2) == 0) && (size == 2))
 	{
 		return target->type->read_memory(target, address, 2, 1, buffer);
 	}
-	
+
 	/* handle unaligned head bytes */
 	if (address % 4)
 	{
 		int unaligned = 4 - (address % 4);
-		
+
 		if (unaligned > size)
 			unaligned = size;
 
 		if ((retval = target->type->read_memory(target, address, 1, unaligned, buffer)) != ERROR_OK)
 			return retval;
-		
+
 		buffer += unaligned;
 		address += unaligned;
 		size -= unaligned;
 	}
-		
+
 	/* handle aligned words */
 	if (size >= 4)
 	{
 		int aligned = size - (size % 4);
-	
+
 		if ((retval = target->type->read_memory(target, address, 4, aligned / 4, buffer)) != ERROR_OK)
 			return retval;
-		
+
 		buffer += aligned;
 		address += aligned;
 		size -= aligned;
 	}
-	
+
 	/* handle tail writes of less than 4 bytes */
 	if (size > 0)
 	{
 		if ((retval = target->type->read_memory(target, address, 1, size, buffer)) != ERROR_OK)
 			return retval;
 	}
-	
+
 	return ERROR_OK;
 }
 
@@ -1115,7 +1026,7 @@ int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32*
 		LOG_ERROR("Target not examined yet");
 		return ERROR_FAIL;
 	}
-	
+
 	if ((retval = target->type->checksum_memory(target, address,
 		size, &checksum)) == ERROR_TARGET_RESOURCE_NOT_AVAILABLE)
 	{
@@ -1143,9 +1054,9 @@ int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32*
 		retval = image_calculate_checksum( buffer, size, &checksum );
 		free(buffer);
 	}
-	
+
 	*crc = checksum;
-	
+
 	return retval;
 }
 
@@ -1157,12 +1068,12 @@ int target_blank_check_memory(struct target_s *target, u32 address, u32 size, u3
 		LOG_ERROR("Target not examined yet");
 		return ERROR_FAIL;
 	}
-	
+
 	if (target->type->blank_check_memory == 0)
 		return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
-	
+
 	retval = target->type->blank_check_memory(target, address, size, blank);
-			
+
 	return retval;
 }
 
@@ -1176,7 +1087,7 @@ int target_read_u32(struct target_s *target, u32 address, u32 *value)
 	}
 
 	int retval = target->type->read_memory(target, address, 4, 1, value_buf);
-	
+
 	if (retval == ERROR_OK)
 	{
 		*value = target_buffer_get_u32(target, value_buf);
@@ -1187,7 +1098,7 @@ int target_read_u32(struct target_s *target, u32 address, u32 *value)
 		*value = 0x0;
 		LOG_DEBUG("address: 0x%8.8x failed", address);
 	}
-	
+
 	return retval;
 }
 
@@ -1201,7 +1112,7 @@ int target_read_u16(struct target_s *target, u32 address, u16 *value)
 	}
 
 	int retval = target->type->read_memory(target, address, 2, 1, value_buf);
-	
+
 	if (retval == ERROR_OK)
 	{
 		*value = target_buffer_get_u16(target, value_buf);
@@ -1212,7 +1123,7 @@ int target_read_u16(struct target_s *target, u32 address, u16 *value)
 		*value = 0x0;
 		LOG_DEBUG("address: 0x%8.8x failed", address);
 	}
-	
+
 	return retval;
 }
 
@@ -1234,7 +1145,7 @@ int target_read_u8(struct target_s *target, u32 address, u8 *value)
 		*value = 0x0;
 		LOG_DEBUG("address: 0x%8.8x failed", address);
 	}
-	
+
 	return retval;
 }
 
@@ -1250,12 +1161,12 @@ int target_write_u32(struct target_s *target, u32 address, u32 value)
 
 	LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value);
 
-	target_buffer_set_u32(target, value_buf, value);	
+	target_buffer_set_u32(target, value_buf, value);
 	if ((retval = target->type->write_memory(target, address, 4, 1, value_buf)) != ERROR_OK)
 	{
 		LOG_DEBUG("failed: %i", retval);
 	}
-	
+
 	return retval;
 }
 
@@ -1271,12 +1182,12 @@ int target_write_u16(struct target_s *target, u32 address, u16 value)
 
 	LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value);
 
-	target_buffer_set_u16(target, value_buf, value);	
+	target_buffer_set_u16(target, value_buf, value);
 	if ((retval = target->type->write_memory(target, address, 2, 1, value_buf)) != ERROR_OK)
 	{
 		LOG_DEBUG("failed: %i", retval);
 	}
-	
+
 	return retval;
 }
 
@@ -1295,7 +1206,7 @@ int target_write_u8(struct target_s *target, u32 address, u8 value)
 	{
 		LOG_DEBUG("failed: %i", retval);
 	}
-	
+
 	return retval;
 }
 
@@ -1307,29 +1218,29 @@ int target_register_user_commands(struct command_context_s *cmd_ctx)
 	register_command(cmd_ctx,  NULL, "halt", handle_halt_command, COMMAND_EXEC, "halt target");
 	register_command(cmd_ctx,  NULL, "resume", handle_resume_command, COMMAND_EXEC, "resume target [addr]");
 	register_command(cmd_ctx,  NULL, "step", handle_step_command, COMMAND_EXEC, "step one instruction from current PC or [addr]");
-	register_command(cmd_ctx,  NULL, "reset", handle_reset_command, COMMAND_EXEC, "reset target [run|halt|init|run_and_halt|run_and_init]");
+	register_command(cmd_ctx,  NULL, "reset", handle_reset_command, COMMAND_EXEC, "reset target [run|halt|init]");
 	register_command(cmd_ctx,  NULL, "soft_reset_halt", handle_soft_reset_halt_command, COMMAND_EXEC, "halt the target and do a soft reset");
 
 	register_command(cmd_ctx,  NULL, "mdw", handle_md_command, COMMAND_EXEC, "display memory words <addr> [count]");
 	register_command(cmd_ctx,  NULL, "mdh", handle_md_command, COMMAND_EXEC, "display memory half-words <addr> [count]");
 	register_command(cmd_ctx,  NULL, "mdb", handle_md_command, COMMAND_EXEC, "display memory bytes <addr> [count]");
-	
+
 	register_command(cmd_ctx,  NULL, "mww", handle_mw_command, COMMAND_EXEC, "write memory word <addr> <value> [count]");
 	register_command(cmd_ctx,  NULL, "mwh", handle_mw_command, COMMAND_EXEC, "write memory half-word <addr> <value> [count]");
 	register_command(cmd_ctx,  NULL, "mwb", handle_mw_command, COMMAND_EXEC, "write memory byte <addr> <value> [count]");
-	
-	register_command(cmd_ctx,  NULL, "bp", handle_bp_command, COMMAND_EXEC, "set breakpoint <address> <length> [hw]");	
+
+	register_command(cmd_ctx,  NULL, "bp", handle_bp_command, COMMAND_EXEC, "set breakpoint <address> <length> [hw]");
 	register_command(cmd_ctx,  NULL, "rbp", handle_rbp_command, COMMAND_EXEC, "remove breakpoint <adress>");
-	register_command(cmd_ctx,  NULL, "wp", handle_wp_command, COMMAND_EXEC, "set watchpoint <address> <length> <r/w/a> [value] [mask]");	
+	register_command(cmd_ctx,  NULL, "wp", handle_wp_command, COMMAND_EXEC, "set watchpoint <address> <length> <r/w/a> [value] [mask]");
 	register_command(cmd_ctx,  NULL, "rwp", handle_rwp_command, COMMAND_EXEC, "remove watchpoint <adress>");
-	
+
 	register_command(cmd_ctx,  NULL, "load_image", handle_load_image_command, COMMAND_EXEC, "load_image <file> <address> ['bin'|'ihex'|'elf'|'s19'] [min_address] [max_length]");
 	register_command(cmd_ctx,  NULL, "dump_image", handle_dump_image_command, COMMAND_EXEC, "dump_image <file> <address> <size>");
 	register_command(cmd_ctx,  NULL, "verify_image", handle_verify_image_command, COMMAND_EXEC, "verify_image <file> [offset] [type]");
-	
+
 	target_request_register_commands(cmd_ctx);
 	trace_register_commands(cmd_ctx);
-	
+
 	return ERROR_OK;
 }
 
@@ -1337,31 +1248,31 @@ int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, char **
 {
 	target_t *target = targets;
 	int count = 0;
-	
+
 	if (argc == 1)
 	{
 		int num = strtoul(args[0], NULL, 0);
-		
+
 		while (target)
 		{
 			count++;
 			target = target->next;
 		}
-		
+
 		if (num < count)
 			cmd_ctx->current_target = num;
 		else
 			command_print(cmd_ctx, "%i is out of bounds, only %i targets are configured", num, count);
-			
+
 		return ERROR_OK;
 	}
-		
+
 	while (target)
 	{
 		command_print(cmd_ctx, "%i: %s (%s), state: %s", count++, target->type->name, target_endianess_strings[target->endianness], target_state_strings[target->state]);
 		target = target->next;
 	}
-	
+
 	return ERROR_OK;
 }
 
@@ -1369,12 +1280,12 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a
 {
 	int i;
 	int found = 0;
-	
+
 	if (argc < 3)
 	{
 		return ERROR_COMMAND_SYNTAX_ERROR;
 	}
-	
+
 	/* search for the specified target */
 	if (args[0] && (args[0][0] != 0))
 	{
@@ -1383,7 +1294,7 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a
 			if (strcmp(args[0], target_types[i]->name) == 0)
 			{
 				target_t **last_target_p = &targets;
-				
+
 				/* register target specific commands */
 				if (target_types[i]->register_commands(cmd_ctx) != ERROR_OK)
 				{
@@ -1399,11 +1310,11 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a
 				}
 
 				*last_target_p = malloc(sizeof(target_t));
-				
+
 				/* allocate memory for each unique target type */
 				(*last_target_p)->type = (target_type_t*)malloc(sizeof(target_type_t));
-				*((*last_target_p)->type) = *target_types[i]; 
-				
+				*((*last_target_p)->type) = *target_types[i];
+
 				if (strcmp(args[1], "big") == 0)
 					(*last_target_p)->endianness = TARGET_BIG_ENDIAN;
 				else if (strcmp(args[1], "little") == 0)
@@ -1413,7 +1324,7 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a
 					LOG_ERROR("endianness must be either 'little' or 'big', not '%s'", args[1]);
 					return ERROR_COMMAND_SYNTAX_ERROR;
 				}
-				
+
 				if (strcmp(args[2], "reset_halt") == 0)
 				{
 					LOG_WARNING("reset_mode argument is obsolete.");
@@ -1445,13 +1356,12 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a
 					args--;
 					argc++;
 				}
-				(*last_target_p)->run_and_halt_time = 1000; /* default 1s */
-				
+
 				(*last_target_p)->working_area = 0x0;
 				(*last_target_p)->working_area_size = 0x0;
 				(*last_target_p)->working_areas = NULL;
 				(*last_target_p)->backup_working_area = 0;
-				
+
 				(*last_target_p)->state = TARGET_UNKNOWN;
 				(*last_target_p)->debug_reason = DBG_REASON_UNDEFINED;
 				(*last_target_p)->reg_cache = NULL;
@@ -1459,7 +1369,7 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a
 				(*last_target_p)->watchpoints = NULL;
 				(*last_target_p)->next = NULL;
 				(*last_target_p)->arch_info = NULL;
-				
+
 				/* initialize trace information */
 				(*last_target_p)->trace_info = malloc(sizeof(trace_t));
 				(*last_target_p)->trace_info->num_trace_points = 0;
@@ -1469,18 +1379,18 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a
 				(*last_target_p)->trace_info->trace_history = NULL;
 				(*last_target_p)->trace_info->trace_history_pos = 0;
 				(*last_target_p)->trace_info->trace_history_overflowed = 0;
-				
+
 				(*last_target_p)->dbgmsg = NULL;
 				(*last_target_p)->dbg_msg_enabled = 0;
-								
+
 				(*last_target_p)->type->target_command(cmd_ctx, cmd, args, argc, *last_target_p);
-				
+
 				found = 1;
 				break;
 			}
 		}
 	}
-	
+
 	/* no matching target found */
 	if (!found)
 	{
@@ -1493,54 +1403,34 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a
 
 int target_invoke_script(struct command_context_s *cmd_ctx, target_t *target, char *name)
 {
-	return command_run_linef(cmd_ctx, " if {[catch {info body target_%d_%s} t]==0} {target_%d_%s}", 
-			get_num_by_target(target), name, 
+	return command_run_linef(cmd_ctx, " if {[catch {info body target_%d_%s} t]==0} {target_%d_%s}",
+			get_num_by_target(target), name,
 			get_num_by_target(target), name);
 }
 
-int handle_run_and_halt_time_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
-	target_t *target = NULL;
-	
-	if (argc < 2)
-	{
-		return ERROR_COMMAND_SYNTAX_ERROR;
-	}
-	
-	target = get_target_by_num(strtoul(args[0], NULL, 0));
-	if (!target)
-	{
-		return ERROR_COMMAND_SYNTAX_ERROR;
-	}
-	
-	target->run_and_halt_time = strtoul(args[1], NULL, 0);
-	
-	return ERROR_OK;
-}
-
 int handle_working_area_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
 	target_t *target = NULL;
-	
+
 	if ((argc < 4) || (argc > 5))
 	{
 		return ERROR_COMMAND_SYNTAX_ERROR;
 	}
-	
+
 	target = get_target_by_num(strtoul(args[0], NULL, 0));
 	if (!target)
 	{
 		return ERROR_COMMAND_SYNTAX_ERROR;
 	}
 	target_free_all_working_areas(target);
-	
+
 	target->working_area_phys = target->working_area_virt = strtoul(args[1], NULL, 0);
 	if (argc == 5)
 	{
 		target->working_area_virt = strtoul(args[4], NULL, 0);
 	}
 	target->working_area_size = strtoul(args[2], NULL, 0);
-	
+
 	if (strcmp(args[3], "backup") == 0)
 	{
 		target->backup_working_area = 1;
@@ -1554,7 +1444,7 @@ int handle_working_area_command(struct command_context_s *cmd_ctx, char *cmd, ch
 		LOG_ERROR("unrecognized <backup|nobackup> argument (%s)", args[3]);
 		return ERROR_COMMAND_SYNTAX_ERROR;
 	}
-	
+
 	return ERROR_OK;
 }
 
@@ -1563,7 +1453,7 @@ int handle_working_area_command(struct command_context_s *cmd_ctx, char *cmd, ch
 int handle_target(void *priv)
 {
 	target_t *target = targets;
-	
+
 	while (target)
 	{
 		if (target_continous_poll)
@@ -1571,10 +1461,10 @@ int handle_target(void *priv)
 			/* polling may fail silently until the target has been examined */
 			target_poll(target);
 		}
-	
+
 		target = target->next;
 	}
-	
+
 	return ERROR_OK;
 }
 
@@ -1584,16 +1474,16 @@ int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args
 	reg_t *reg = NULL;
 	int count = 0;
 	char *value;
-	
+
 	LOG_DEBUG("-");
-	
+
 	target = get_current_target(cmd_ctx);
-	
+
 	/* list all available registers for the current target */
 	if (argc == 0)
 	{
 		reg_cache_t *cache = target->reg_cache;
-		
+
 		count = 0;
 		while(cache)
 		{
@@ -1606,16 +1496,16 @@ int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args
 			}
 			cache = cache->next;
 		}
-		
+
 		return ERROR_OK;
 	}
-	
+
 	/* access a single register by its ordinal number */
 	if ((args[0][0] >= '0') && (args[0][0] <= '9'))
 	{
 		int num = strtoul(args[0], NULL, 0);
 		reg_cache_t *cache = target->reg_cache;
-		
+
 		count = 0;
 		while(cache)
 		{
@@ -1632,7 +1522,7 @@ int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args
 				break;
 			cache = cache->next;
 		}
-		
+
 		if (!reg)
 		{
 			command_print(cmd_ctx, "%i is out of bounds, the current target has only %i registers (0 - %i)", num, count, count - 1);
@@ -1641,7 +1531,7 @@ int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args
 	} else /* access a single register by its name */
 	{
 		reg = register_get_by_name(target->reg_cache, args[0], 1);
-		
+
 		if (!reg)
 		{
 			command_print(cmd_ctx, "register %s not found in current target", args[0]);
@@ -1654,7 +1544,7 @@ int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args
 	{
 		if ((argc == 2) && (strcmp(args[1], "force") == 0))
 			reg->valid = 0;
-		
+
 		if (reg->valid == 0)
 		{
 			reg_arch_type_t *arch_type = register_get_arch_type(reg->arch_type);
@@ -1670,7 +1560,7 @@ int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args
 		free(value);
 		return ERROR_OK;
 	}
-	
+
 	/* set register value */
 	if (argc == 2)
 	{
@@ -1683,20 +1573,20 @@ int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args
 			LOG_ERROR("BUG: encountered unregistered arch type");
 			return ERROR_OK;
 		}
-		
+
 		arch_type->set(reg, buf);
-		
+
 		value = buf_to_str(reg->value, reg->size, 16);
 		command_print(cmd_ctx, "%s (/%i): 0x%s", reg->name, reg->size, value);
 		free(value);
-		
+
 		free(buf);
-		
+
 		return ERROR_OK;
 	}
-	
+
 	command_print(cmd_ctx, "usage: reg <#|name> [value]");
-	
+
 	return ERROR_OK;
 }
 
@@ -1725,15 +1615,15 @@ int handle_poll_command(struct command_context_s *cmd_ctx, char *cmd, char **arg
 			command_print(cmd_ctx, "arg is \"on\" or \"off\"");
 		}
 	}
-	
-	
+
+
 	return ERROR_OK;
 }
 
 int handle_wait_halt_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
 	int ms = 5000;
-	
+
 	if (argc > 0)
 	{
 		char *end;
@@ -1747,7 +1637,7 @@ int handle_wait_halt_command(struct command_context_s *cmd_ctx, char *cmd, char
 	}
 	target_t *target = get_current_target(cmd_ctx);
 
-	return target_wait_state(target, TARGET_HALTED, ms); 
+	return target_wait_state(target, TARGET_HALTED, ms);
 }
 
 int target_wait_state(target_t *target, enum target_state state, int ms)
@@ -1757,7 +1647,7 @@ int target_wait_state(target_t *target, enum target_state state, int ms)
 	int once=1;
 	gettimeofday(&timeout, NULL);
 	timeval_add_time(&timeout, 0, ms * 1000);
-	
+
 	for (;;)
 	{
 		if ((retval=target_poll(target))!=ERROR_OK)
@@ -1772,15 +1662,15 @@ int target_wait_state(target_t *target, enum target_state state, int ms)
 			once=0;
 			LOG_USER("waiting for target %s...", target_state_strings[state]);
 		}
-		
+
 		gettimeofday(&now, NULL);
 		if ((now.tv_sec > timeout.tv_sec) || ((now.tv_sec == timeout.tv_sec) && (now.tv_usec >= timeout.tv_usec)))
 		{
 			LOG_ERROR("timed out while waiting for target %s", target_state_strings[state]);
-			break;
+			return ERROR_FAIL;
 		}
 	}
-	
+
 	return ERROR_OK;
 }
 
@@ -1795,18 +1685,18 @@ int handle_halt_command(struct command_context_s *cmd_ctx, char *cmd, char **arg
 	{
 		return retval;
 	}
-	
+
 	return handle_wait_halt_command(cmd_ctx, cmd, args, argc);
 }
 
 int handle_soft_reset_halt_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
 	target_t *target = get_current_target(cmd_ctx);
-	
+
 	LOG_USER("requesting target halt and executing a soft reset");
-	
+
 	target->type->soft_reset_halt(target);
-	
+
 	return ERROR_OK;
 }
 
@@ -1814,9 +1704,7 @@ int handle_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **ar
 {
 	target_t *target = get_current_target(cmd_ctx);
 	enum target_reset_mode reset_mode = RESET_RUN;
-	
-	LOG_DEBUG("-");
-	
+
 	if (argc >= 1)
 	{
 		if (strcmp("run", args[0]) == 0)
@@ -1825,32 +1713,15 @@ int handle_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **ar
 			reset_mode = RESET_HALT;
 		else if (strcmp("init", args[0]) == 0)
 			reset_mode = RESET_INIT;
-		else if (strcmp("run_and_halt", args[0]) == 0)
-		{
-			reset_mode = RESET_RUN_AND_HALT;
-			if (argc >= 2)
-			{
-				target->run_and_halt_time = strtoul(args[1], NULL, 0);
-			}
-		}
-		else if (strcmp("run_and_init", args[0]) == 0)
-		{
-			reset_mode = RESET_RUN_AND_INIT;
-			if (argc >= 2)
-			{
-				target->run_and_halt_time = strtoul(args[1], NULL, 0);
-			}
-		}
 		else
 		{
-			command_print(cmd_ctx, "usage: reset ['run', 'halt', 'init', 'run_and_halt', 'run_and_init]");
-			return ERROR_OK;
+			return ERROR_COMMAND_SYNTAX_ERROR;
 		}
 	}
-	
+
 	/* reset *all* targets */
 	target_process_reset(cmd_ctx, reset_mode);
-	
+
 	return ERROR_OK;
 }
 
@@ -1858,9 +1729,9 @@ int handle_resume_command(struct command_context_s *cmd_ctx, char *cmd, char **a
 {
 	int retval;
 	target_t *target = get_current_target(cmd_ctx);
-	
+
 	target_invoke_script(cmd_ctx, target, "pre_resume");
-	
+
 	if (argc == 0)
 		retval = target_resume(target, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
 	else if (argc == 1)
@@ -1869,22 +1740,22 @@ int handle_resume_command(struct command_context_s *cmd_ctx, char *cmd, char **a
 	{
 		return ERROR_COMMAND_SYNTAX_ERROR;
 	}
-	
+
 	return retval;
 }
 
 int handle_step_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
 	target_t *target = get_current_target(cmd_ctx);
-	
+
 	LOG_DEBUG("-");
-	
+
 	if (argc == 0)
 		target->type->step(target, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
 
 	if (argc == 1)
 		target->type->step(target, 0, strtoul(args[0], NULL, 0), 1); /* addr = args[0], handle breakpoints */
-	
+
 	return ERROR_OK;
 }
 
@@ -1912,7 +1783,7 @@ int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
 		count = strtoul(args[1], NULL, 0);
 
 	address = strtoul(args[0], NULL, 0);
-	
+
 
 	switch (cmd[2])
 	{
@@ -1934,12 +1805,12 @@ int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
 	if (retval == ERROR_OK)
 	{
 		output_len = 0;
-	
+
 		for (i = 0; i < count; i++)
 		{
 			if (i%line_modulo == 0)
 				output_len += snprintf(output + output_len, 128 - output_len, "0x%8.8x: ", address + (i*size));
-			
+
 			switch (size)
 			{
 				case 4:
@@ -1952,7 +1823,7 @@ int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
 					output_len += snprintf(output + output_len, 128 - output_len, "%2.2x ", buffer[i*1]);
 					break;
 			}
-	
+
 			if ((i%line_modulo == line_modulo-1) || (i == count - 1))
 			{
 				command_print(cmd_ctx, output);
@@ -1962,7 +1833,7 @@ int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
 	}
 
 	free(buffer);
-	
+
 	return retval;
 }
 
@@ -1983,7 +1854,7 @@ int handle_mw_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
 	value = strtoul(args[1], NULL, 0);
 	if (argc == 3)
 		count = strtoul(args[2], NULL, 0);
-	
+
 	switch (cmd[2])
 	{
 		case 'w':
@@ -2038,18 +1909,18 @@ int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char
 	int i;
 	int retval;
 
-	image_t image;	
-	
+	image_t image;
+
 	duration_t duration;
 	char *duration_text;
-	
+
 	target_t *target = get_current_target(cmd_ctx);
 
 	if ((argc < 1)||(argc > 5))
 	{
 		return ERROR_COMMAND_SYNTAX_ERROR;
 	}
-	
+
 	/* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */
 	if (argc >= 2)
 	{
@@ -2060,10 +1931,10 @@ int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char
 	{
 		image.base_address_set = 0;
 	}
-	
-	
+
+
 	image.start_address_set = 0;
-	
+
 	if (argc>=4)
 	{
 		min_address=strtoul(args[3], NULL, 0);
@@ -2072,20 +1943,20 @@ int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char
 	{
 		max_address=strtoul(args[4], NULL, 0)+min_address;
 	}
-	
+
 	if (min_address>max_address)
 	{
 		return ERROR_COMMAND_SYNTAX_ERROR;
 	}
-	
+
 
 	duration_start_measure(&duration);
-	
+
 	if (image_open(&image, args[0], (argc >= 3) ? args[2] : NULL) != ERROR_OK)
 	{
 		return ERROR_OK;
 	}
-	
+
 	image_size = 0x0;
 	retval = ERROR_OK;
 	for (i = 0; i < image.num_sections; i++)
@@ -2096,19 +1967,19 @@ int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char
 			command_print(cmd_ctx, "error allocating buffer for section (%d bytes)", image.sections[i].size);
 			break;
 		}
-		
+
 		if ((retval = image_read_section(&image, i, 0x0, image.sections[i].size, buffer, &buf_cnt)) != ERROR_OK)
 		{
 			free(buffer);
 			break;
 		}
-		
+
 		u32 offset=0;
 		u32 length=buf_cnt;
-		
-		
+
+
 		/* DANGER!!! beware of unsigned comparision here!!! */
-		
+
 		if ((image.sections[i].base_address+buf_cnt>=min_address)&&
 				(image.sections[i].base_address<max_address))
 		{
@@ -2118,12 +1989,12 @@ int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char
 				offset+=min_address-image.sections[i].base_address;
 				length-=offset;
 			}
-			
+
 			if (image.sections[i].base_address+buf_cnt>max_address)
 			{
 				length-=(image.sections[i].base_address+buf_cnt)-max_address;
 			}
-			
+
 			if ((retval = target_write_buffer(target, image.sections[i].base_address+offset, length, buffer+offset)) != ERROR_OK)
 			{
 				free(buffer);
@@ -2132,7 +2003,7 @@ int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char
 			image_size += length;
 			command_print(cmd_ctx, "%u byte written at address 0x%8.8x", length, image.sections[i].base_address+offset);
 		}
-		
+
 		free(buffer);
 	}
 
@@ -2142,7 +2013,7 @@ int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char
 		command_print(cmd_ctx, "downloaded %u byte in %s", image_size, duration_text);
 	}
 	free(duration_text);
-	
+
 	image_close(&image);
 
 	return retval;
@@ -2152,15 +2023,15 @@ int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char
 int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
 	fileio_t fileio;
-	
+
 	u32 address;
 	u32 size;
 	u8 buffer[560];
 	int retval=ERROR_OK;
-	
+
 	duration_t duration;
 	char *duration_text;
-	
+
 	target_t *target = get_current_target(cmd_ctx);
 
 	if (argc != 3)
@@ -2177,31 +2048,31 @@ int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cmd, char
 		command_print(cmd_ctx, "only 32-bit aligned address and size are supported");
 		return ERROR_OK;
 	}
-	
+
 	if (fileio_open(&fileio, args[0], FILEIO_WRITE, FILEIO_BINARY) != ERROR_OK)
 	{
 		return ERROR_OK;
 	}
-	
+
 	duration_start_measure(&duration);
-	
+
 	while (size > 0)
 	{
 		u32 size_written;
 		u32 this_run_size = (size > 560) ? 560 : size;
-		
+
 		retval = target->type->read_memory(target, address, 4, this_run_size / 4, buffer);
 		if (retval != ERROR_OK)
 		{
 			break;
 		}
-		
+
 		retval = fileio_write(&fileio, this_run_size, buffer, &size_written);
 		if (retval != ERROR_OK)
 		{
 			break;
 		}
-		
+
 		size -= this_run_size;
 		address += this_run_size;
 	}
@@ -2214,7 +2085,7 @@ int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cmd, char
 		command_print(cmd_ctx, "dumped %"PRIi64" byte in %s", fileio.size, duration_text);
 	}
 	free(duration_text);
-	
+
 	return ERROR_OK;
 }
 
@@ -2228,26 +2099,26 @@ int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, ch
 	u32 checksum = 0;
 	u32 mem_checksum = 0;
 
-	image_t image;	
-	
+	image_t image;
+
 	duration_t duration;
 	char *duration_text;
-	
+
 	target_t *target = get_current_target(cmd_ctx);
-	
+
 	if (argc < 1)
 	{
 		return ERROR_COMMAND_SYNTAX_ERROR;
 	}
-	
+
 	if (!target)
 	{
 		LOG_ERROR("no target selected");
 		return ERROR_FAIL;
 	}
-	
+
 	duration_start_measure(&duration);
-	
+
 	if (argc >= 2)
 	{
 		image.base_address_set = 1;
@@ -2265,7 +2136,7 @@ int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, ch
 	{
 		return retval;
 	}
-	
+
 	image_size = 0x0;
 	retval=ERROR_OK;
 	for (i = 0; i < image.num_sections; i++)
@@ -2281,26 +2152,26 @@ int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, ch
 			free(buffer);
 			break;
 		}
-		
+
 		/* calculate checksum of image */
 		image_calculate_checksum( buffer, buf_cnt, &checksum );
-		
+
 		retval = target_checksum_memory(target, image.sections[i].base_address, buf_cnt, &mem_checksum);
 		if( retval != ERROR_OK )
 		{
 			free(buffer);
 			break;
 		}
-		
+
 		if( checksum != mem_checksum )
 		{
 			/* failed crc checksum, fall back to a binary compare */
 			u8 *data;
-			
+
 			command_print(cmd_ctx, "checksum mismatch - attempting binary compare");
-			
+
 			data = (u8*)malloc(buf_cnt);
-			
+
 			/* Can we use 32bit word accesses? */
 			int size = 1;
 			int count = buf_cnt;
@@ -2325,23 +2196,23 @@ int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, ch
 					}
 				}
 			}
-			
+
 			free(data);
 		}
-		
+
 		free(buffer);
 		image_size += buf_cnt;
 	}
-done:	
+done:
 	duration_stop_measure(&duration, &duration_text);
 	if (retval==ERROR_OK)
 	{
 		command_print(cmd_ctx, "verified %u bytes in %s", image_size, duration_text);
 	}
 	free(duration_text);
-	
+
 	image_close(&image);
-	
+
 	return retval;
 }
 
@@ -2375,7 +2246,7 @@ int handle_bp_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
 		u32 length = 0;
 
 		length = strtoul(args[1], NULL, 0);
-		
+
 		if (argc >= 3)
 			if (strcmp(args[2], "hw") == 0)
 				hw = BKPT_HARD;
@@ -2421,13 +2292,13 @@ int handle_wp_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
 			command_print(cmd_ctx, "address: 0x%8.8x, len: 0x%8.8x, r/w/a: %i, value: 0x%8.8x, mask: 0x%8.8x", watchpoint->address, watchpoint->length, watchpoint->rw, watchpoint->value, watchpoint->mask);
 			watchpoint = watchpoint->next;
 		}
-	} 
+	}
 	else if (argc >= 2)
 	{
 		enum watchpoint_rw type = WPT_ACCESS;
 		u32 data_value = 0x0;
 		u32 data_mask = 0xffffffff;
-		
+
 		if (argc >= 3)
 		{
 			switch(args[2][0])
@@ -2454,7 +2325,7 @@ int handle_wp_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
 		{
 			data_mask = strtoul(args[4], NULL, 0);
 		}
-		
+
 		if ((retval = watchpoint_add(target, strtoul(args[0], NULL, 0),
 				strtoul(args[1], NULL, 0), type, data_value, data_mask)) != ERROR_OK)
 		{
@@ -2465,7 +2336,7 @@ int handle_wp_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
 	{
 		command_print(cmd_ctx, "usage: wp <address> <length> [r/w/a] [value] [mask]");
 	}
-		
+
 	return ERROR_OK;
 }
 
@@ -2475,7 +2346,7 @@ int handle_rwp_command(struct command_context_s *cmd_ctx, char *cmd, char **args
 
 	if (argc > 0)
 		watchpoint_remove(target, strtoul(args[0], NULL, 0));
-	
+
 	return ERROR_OK;
 }
 
@@ -2499,8 +2370,8 @@ int handle_virt2phys_command(command_context_t *cmd_ctx, char *cmd, char **args,
 	}
 	else
 	{
-		/* lower levels will have logged a detailed error which is 
-		 * forwarded to telnet/GDB session.  
+		/* lower levels will have logged a detailed error which is
+		 * forwarded to telnet/GDB session.
 		 */
 	}
 	return retval;
@@ -2511,13 +2382,13 @@ static void writeLong(FILE *f, int l)
 	for (i=0; i<4; i++)
 	{
 		char c=(l>>(i*8))&0xff;
-		fwrite(&c, 1, 1, f); 
+		fwrite(&c, 1, 1, f);
 	}
-	
+
 }
 static void writeString(FILE *f, char *s)
 {
-	fwrite(s, 1, strlen(s), f); 
+	fwrite(s, 1, strlen(s), f);
 }
 
 
@@ -2534,8 +2405,8 @@ static void writeGmon(u32 *samples, int sampleNum, char *filename)
 	writeLong(f, 0); // padding
 	writeLong(f, 0); // padding
 	writeLong(f, 0); // padding
-				
-	fwrite("", 1, 1, f);  // GMON_TAG_TIME_HIST 
+
+	fwrite("", 1, 1, f);  // GMON_TAG_TIME_HIST
 
 	// figure out bucket size
 	u32 min=samples[0];
@@ -2553,12 +2424,12 @@ static void writeGmon(u32 *samples, int sampleNum, char *filename)
 	}
 
 	int addressSpace=(max-min+1);
-	
+
 	static int const maxBuckets=256*1024; // maximum buckets.
 	int length=addressSpace;
 	if (length > maxBuckets)
 	{
-		length=maxBuckets; 
+		length=maxBuckets;
 	}
 	int *buckets=malloc(sizeof(int)*length);
 	if (buckets==NULL)
@@ -2573,10 +2444,10 @@ static void writeGmon(u32 *samples, int sampleNum, char *filename)
 		long long a=address-min;
 		long long b=length-1;
 		long long c=addressSpace-1;
-		int index=(a*b)/c; // danger!!!! int32 overflows 
+		int index=(a*b)/c; // danger!!!! int32 overflows
 		buckets[index]++;
 	}
-	
+
 	//			   append binary memory gmon.out &profile_hist_hdr ((char*)&profile_hist_hdr + sizeof(struct gmon_hist_hdr))
 	writeLong(f, min); 					// low_pc
 	writeLong(f, max);		// high_pc
@@ -2588,9 +2459,9 @@ static void writeGmon(u32 *samples, int sampleNum, char *filename)
 		fwrite("", 1, 1, f);  // padding
 	}
 	writeString(f, "s");
-		
+
 //			   append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size)
-	
+
 	char *data=malloc(2*length);
 	if (data!=NULL)
 	{
@@ -2621,7 +2492,7 @@ int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, char **
 {
 	target_t *target = get_current_target(cmd_ctx);
 	struct timeval timeout, now;
-	
+
 	gettimeofday(&timeout, NULL);
 	if (argc!=2)
 	{
@@ -2629,23 +2500,23 @@ int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, char **
 	}
 	char *end;
 	timeval_add_time(&timeout, strtoul(args[0], &end, 0), 0);
-	if (*end) 
+	if (*end)
 	{
 		return ERROR_OK;
 	}
-	
+
 	command_print(cmd_ctx, "Starting profiling. Halting and resuming the target as often as we can...");
 
 	static const int maxSample=10000;
 	u32 *samples=malloc(sizeof(u32)*maxSample);
 	if (samples==NULL)
 		return ERROR_OK;
-	
+
 	int numSamples=0;
 	int retval=ERROR_OK;
 	// hopefully it is safe to cache! We want to stop/restart as quickly as possible.
 	reg_t *reg = register_get_by_name(target->reg_cache, "pc", 1);
-	
+
 	for (;;)
 	{
 		target_poll(target);
@@ -2670,7 +2541,7 @@ int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, char **
 		{
 			break;
 		}
-		
+
 		gettimeofday(&now, NULL);
 		if ((numSamples>=maxSample) || ((now.tv_sec >= timeout.tv_sec) && (now.tv_usec >= timeout.tv_usec)))
 		{
@@ -2687,7 +2558,7 @@ int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, char **
 		}
 	}
 	free(samples);
-	
+
 	return ERROR_OK;
 }
 
@@ -2700,7 +2571,7 @@ static int new_int_array_element(Jim_Interp * interp, const char *varname, int i
 	namebuf = alloc_printf("%s(%d)", varname, idx);
 	if (!namebuf)
 		return JIM_ERR;
-	
+
 	nameObjPtr = Jim_NewStringObj(interp, namebuf, -1);
 	valObjPtr = Jim_NewIntObj(interp, val);
 	if (!nameObjPtr || !valObjPtr)
@@ -2735,7 +2606,7 @@ static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 
 	/* argv[1] = name of array to receive the data
 	 * argv[2] = desired width
-	 * argv[3] = memory address 
+	 * argv[3] = memory address
 	 * argv[4] = count of times to read
 	 */
 	if (argc != 5) {
@@ -2750,7 +2621,7 @@ static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 	if (e != JIM_OK) {
 		return e;
 	}
-	
+
 	e = Jim_GetLong(interp, argv[3], &l);
 	addr = l;
 	if (e != JIM_OK) {
@@ -2791,8 +2662,8 @@ static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 		Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
 		Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: absurd > 64K item request", NULL);
 		return JIM_ERR;
-	}		
-		
+	}
+
 	if ((width == 1) ||
 		((width == 2) && ((addr & 1) == 0)) ||
 		((width == 4) && ((addr & 3) == 0))) {
@@ -2800,7 +2671,7 @@ static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 	} else {
 		char buf[100];
 		Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-		sprintf(buf, "mem2array address: 0x%08x is not aligned for %d byte reads", addr, width); 
+		sprintf(buf, "mem2array address: 0x%08x is not aligned for %d byte reads", addr, width);
 		Jim_AppendStrings(interp, Jim_GetResult(interp), buf , NULL);
 		return JIM_ERR;
 	}
@@ -2817,7 +2688,7 @@ static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 		LOG_ERROR("mem2array: no current target");
 		return JIM_ERR;
 	}
-	
+
 	/* Transfer loop */
 
 	/* index counter */
@@ -2826,12 +2697,12 @@ static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 	e = JIM_OK;
 	while (len) {
 		/* Slurp... in buffer size chunks */
-		
+
 		count = len; /* in objects.. */
 		if (count > (sizeof(buffer)/width)) {
 			count = (sizeof(buffer)/width);
 		}
-		
+
 		retval = target->type->read_memory( target, addr, width, count, buffer );
 		if (retval != ERROR_OK) {
 			/* BOO !*/
@@ -2859,7 +2730,7 @@ static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 			len -= count;
 		}
 	}
-	
+
 	Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
 
 	return JIM_OK;
@@ -2912,7 +2783,7 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 
 	/* argv[1] = name of array to get the data
 	 * argv[2] = desired width
-	 * argv[3] = memory address 
+	 * argv[3] = memory address
 	 * argv[4] = count to write
 	 */
 	if (argc != 5) {
@@ -2927,7 +2798,7 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 	if (e != JIM_OK) {
 		return e;
 	}
-	
+
 	e = Jim_GetLong(interp, argv[3], &l);
 	addr = l;
 	if (e != JIM_OK) {
@@ -2968,8 +2839,8 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 		Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
 		Jim_AppendStrings(interp, Jim_GetResult(interp), "array2mem: absurd > 64K item request", NULL);
 		return JIM_ERR;
-	}		
-		
+	}
+
 	if ((width == 1) ||
 		((width == 2) && ((addr & 1) == 0)) ||
 		((width == 4) && ((addr & 3) == 0))) {
@@ -2977,7 +2848,7 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 	} else {
 		char buf[100];
 		Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-		sprintf(buf, "array2mem address: 0x%08x is not aligned for %d byte reads", addr, width); 
+		sprintf(buf, "array2mem address: 0x%08x is not aligned for %d byte reads", addr, width);
 		Jim_AppendStrings(interp, Jim_GetResult(interp), buf , NULL);
 		return JIM_ERR;
 	}
@@ -2994,7 +2865,7 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 		LOG_ERROR("array2mem: no current target");
 		return JIM_ERR;
 	}
-	
+
 	/* Transfer loop */
 
 	/* index counter */
@@ -3003,7 +2874,7 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 	e = JIM_OK;
 	while (len) {
 		/* Slurp... in buffer size chunks */
-		
+
 		count = len; /* in objects.. */
 		if (count > (sizeof(buffer)/width)) {
 			count = (sizeof(buffer)/width);
@@ -3036,7 +2907,7 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 			len = 0;
 		}
 	}
-	
+
 	Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
 
 	return JIM_OK;
diff --git a/src/target/target.h b/src/target/target.h
index 51a9dfc49..5d1e5773c 100644
--- a/src/target/target.h
+++ b/src/target/target.h
@@ -62,8 +62,6 @@ enum target_reset_mode
 	RESET_RUN = 0,		/* reset and let target run */
 	RESET_HALT = 1,		/* reset and halt target out of reset */
 	RESET_INIT = 2,		/* reset and halt target out of reset, then run init script */
-	RESET_RUN_AND_HALT = 3, /* reset and let target run, halt after n milliseconds */
-	RESET_RUN_AND_INIT = 4, /* reset and let target run, halt after n milliseconds, then run init script */
 };
 
 enum target_debug_reason
@@ -202,7 +200,6 @@ typedef struct target_s
 {
 	target_type_t *type;				/* target type definition (name, access functions) */
 	int reset_halt;						/* attempt resetting the CPU into the halted mode? */
-	int run_and_halt_time;				/* how long the target should run after a run_and_halt reset */
 	u32 working_area;					/* working area (initialized RAM). Evaluated 
 										   upon first allocation from virtual/physical address. */
 	u32 working_area_virt;				/* virtual address */
diff --git a/src/target/target/at91r40008.cfg b/src/target/target/at91r40008.cfg
index 54c99006c..efcbd1c0e 100644
--- a/src/target/target/at91r40008.cfg
+++ b/src/target/target/at91r40008.cfg
@@ -11,7 +11,7 @@ jtag_device 4 0x1 0xf 0xe
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
 target arm7tdmi little 0 arm7tdmi
-run_and_halt_time 0 30
+
 
 target_script 0 reset event/at91r40008_reset.script
 
diff --git a/src/target/target/at91sam9260.cfg b/src/target/target/at91sam9260.cfg
index 41d7b1ffd..21f92d795 100644
--- a/src/target/target/at91sam9260.cfg
+++ b/src/target/target/at91sam9260.cfg
@@ -18,7 +18,7 @@ jtag_ntrst_delay 0
 target arm926ejs little 0 arm926ejs
 
 target_script 0 reset event/at91sam9260_reset.script
-run_and_halt_time 0 30
+
 
 #working area <target#> <address> <size> <backup|nobackup>
 working_area 0 0x00300000 0x1000 backup
diff --git a/src/target/target/at91sam9260minimal.cfg b/src/target/target/at91sam9260minimal.cfg
index 9b06f1436..70e887498 100644
--- a/src/target/target/at91sam9260minimal.cfg
+++ b/src/target/target/at91sam9260minimal.cfg
@@ -16,5 +16,5 @@ jtag_ntrst_delay 200
 
 #target <type> <endianess> <reset mode> <JTAG pos> <variant>
 target arm926ejs little 0 arm926ejs
-run_and_halt_time 0 30
+
 
diff --git a/src/target/target/eir-sam7se512.cfg b/src/target/target/eir-sam7se512.cfg
index 52ba9e456..c33b42984 100644
--- a/src/target/target/eir-sam7se512.cfg
+++ b/src/target/target/eir-sam7se512.cfg
@@ -6,7 +6,7 @@ reset_config srst_only srst_pulls_trst
 jtag_device 4 0x1 0xf 0xe
 
 target arm7tdmi little 0 arm7tdmi
-run_and_halt_time 0 30
+
 
 target_script 0 reset event/eir-sam7se512_reset.script
 
diff --git a/src/target/target/hammer.cfg b/src/target/target/hammer.cfg
index 8e450cfc0..9daef590c 100644
--- a/src/target/target/hammer.cfg
+++ b/src/target/target/hammer.cfg
@@ -18,7 +18,7 @@ arm7_9 dcc_downloads enable
 target_script 0 reset event/hammer_reset.script
 
 working_area 0 0x30800000 0x20000 nobackup
-run_and_halt_time 0 1000
+
 
 #flash configuration
 #flash bank <driver> <base> <size> <chip_width> <bus_width> [driver_options ...]
diff --git a/src/target/target/ipx42x.cfg b/src/target/target/ipx42x.cfg
index c1518b170..9445992cc 100644
--- a/src/target/target/ipx42x.cfg
+++ b/src/target/target/ipx42x.cfg
@@ -6,4 +6,4 @@ reset_config srst_only srst_pulls_trst
 #format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
 jtag_device 7 0x1 0x7f 0x7e
 target xscale big 0 IXP42x
-run_and_halt_time 0 30
+
diff --git a/src/target/target/lpc2129.cfg b/src/target/target/lpc2129.cfg
index 8294a8e5a..b9a33089d 100644
--- a/src/target/target/lpc2129.cfg
+++ b/src/target/target/lpc2129.cfg
@@ -5,7 +5,7 @@ reset_config trst_and_srst srst_pulls_trst
 #format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
 jtag_device 4 0x1 0xf 0xe
 target arm7tdmi little 0 arm7tdmi-s_r4
-run_and_halt_time 0 30
+
 working_area 0 0x40000000 0x4000 nobackup
 #flash bank <driver> <base> <size> <chip_width> <bus_width>
 flash bank lpc2000 0x0 0x40000 0 0 0 lpc2000_v1 14765 calc_checksum
diff --git a/src/target/target/lpc2148.cfg b/src/target/target/lpc2148.cfg
index e30a3c855..64e65b126 100644
--- a/src/target/target/lpc2148.cfg
+++ b/src/target/target/lpc2148.cfg
@@ -16,7 +16,7 @@ jtag_device 4 0x1 0xf 0xe
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
 target arm7tdmi little 0 arm7tdmi-s_r4
-run_and_halt_time 0 30
+
 
 target_script 0 reset event/lpc2148_reset.script
 
diff --git a/src/target/target/lpc2294.cfg b/src/target/target/lpc2294.cfg
index bc365523d..4a2adcbcb 100644
--- a/src/target/target/lpc2294.cfg
+++ b/src/target/target/lpc2294.cfg
@@ -8,7 +8,7 @@ jtag_device 4 0x1 0xf 0xe
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
 target arm7tdmi little 0 arm7tdmi-s_r4
-run_and_halt_time 0 30
+
 
 working_area 0 0x40000000 0x4000 nobackup
 
diff --git a/src/target/target/mx31.cfg b/src/target/target/mx31.cfg
index 71d249d2e..71dd5e59e 100644
--- a/src/target/target/mx31.cfg
+++ b/src/target/target/mx31.cfg
@@ -12,5 +12,5 @@ jtag_device 5 0x1 0x0 0x1e
 
 #target <type> <endianess> <reset mode>
 target arm11 little 1
-run_and_halt_time 0 0
+
 
diff --git a/src/target/target/netx500.cfg b/src/target/target/netx500.cfg
index 84c24b9ca..21a0e10c4 100644
--- a/src/target/target/netx500.cfg
+++ b/src/target/target/netx500.cfg
@@ -7,4 +7,4 @@ jtag_device 4 0x1 0xf 0xe
 jtag_nsrst_delay 100
 jtag_ntrst_delay 100
 target arm926ejs little 0 arm926ejs
-run_and_halt_time 0 500
+
diff --git a/src/target/target/nslu2.cfg b/src/target/target/nslu2.cfg
index 7f8ea2814..53907bc5e 100644
--- a/src/target/target/nslu2.cfg
+++ b/src/target/target/nslu2.cfg
@@ -7,7 +7,7 @@ jtag_device 7 0x1 0x7f 0x7e
 
 # target configuration
 target xscale big 0 ixp42x
-run_and_halt_time 0 30
+
 
 # maps to PXA internal RAM.  If you are using a PXA255
 # you must initialize SDRAM or leave this option off
diff --git a/src/target/target/omap5912.cfg b/src/target/target/omap5912.cfg
index c7fd65099..3a8f4154b 100644
--- a/src/target/target/omap5912.cfg
+++ b/src/target/target/omap5912.cfg
@@ -12,7 +12,7 @@ jtag_device 8  0x0 0x0 0x0
 
 target arm926ejs little 1 arm926ejs
 target_script 0 reset event/omap5912_reset.script
-run_and_halt_time 0 30
+
 
 # omap5912 lcd frame buffer as working area
 working_area 0 0x20000000 0x3e800 nobackup
diff --git a/src/target/target/pic32mx.cfg b/src/target/target/pic32mx.cfg
index 25ef0294c..6ebf882e0 100644
--- a/src/target/target/pic32mx.cfg
+++ b/src/target/target/pic32mx.cfg
@@ -11,7 +11,7 @@ jtag_device 5 0x1 0x1 0x1e
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
 target mips_m4k little 0
-run_and_halt_time 0 30
+
 
 working_area 0 0xa0000000 16384 nobackup
 
diff --git a/src/target/target/pxa255.cfg b/src/target/target/pxa255.cfg
index 50d0bafc1..b712cf371 100644
--- a/src/target/target/pxa255.cfg
+++ b/src/target/target/pxa255.cfg
@@ -3,7 +3,7 @@ jtag_nsrst_delay 200
 jtag_ntrst_delay 200
 target xscale little 0 pxa255
 reset_config trst_and_srst
-run_and_halt_time 0 30
+
 
 target_script 0 reset event/pxa255_reset.script
 
diff --git a/src/target/target/pxa270.cfg b/src/target/target/pxa270.cfg
index deb31dd8d..5818dc2d1 100644
--- a/src/target/target/pxa270.cfg
+++ b/src/target/target/pxa270.cfg
@@ -14,7 +14,7 @@ target xscale little 0 pxa27x
 # maps to PXA internal RAM. If you are using a PXA255
 # you must initialize SDRAM or leave this option off
 working_area 0 0x5c000000 0x10000 nobackup
-run_and_halt_time 0 30
+
 #flash bank <driver> <base> <size> <chip_width> <bus_width>
 # works for P30 flash
 flash bank cfi 0x00000000 0x1000000 2 4 0
diff --git a/src/target/target/sam7s256.cfg b/src/target/target/sam7s256.cfg
index 2be0ec527..e96c4f137 100644
--- a/src/target/target/sam7s256.cfg
+++ b/src/target/target/sam7s256.cfg
@@ -8,7 +8,7 @@ jtag_device 4 0x1 0xf 0xe
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
 target arm7tdmi little 0 arm7tdmi
-run_and_halt_time 0 30
+
 
 target_script 0 reset event/sam7s256_reset.script
 
diff --git a/src/target/target/sam7x256.cfg b/src/target/target/sam7x256.cfg
index fa332ce80..1d61b4ccf 100644
--- a/src/target/target/sam7x256.cfg
+++ b/src/target/target/sam7x256.cfg
@@ -8,7 +8,7 @@ jtag_device 4 0x1 0xf 0xe
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
 target arm7tdmi little 0 arm7tdmi
-run_and_halt_time 0 30
+
 
 target_script 0 reset event/sam7x256_reset.script
 
diff --git a/src/target/target/stm32.cfg b/src/target/target/stm32.cfg
index 8bdfdff06..0b97278a6 100644
--- a/src/target/target/stm32.cfg
+++ b/src/target/target/stm32.cfg
@@ -17,7 +17,7 @@ jtag_device 5 0x1 0x1 0x1e
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
 target cortex_m3 little 0
-run_and_halt_time 0 30
+
 
 working_area 0 0x20000000 16384 nobackup
 
diff --git a/src/target/target/stm32stick.cfg b/src/target/target/stm32stick.cfg
index 745c62347..3f224a738 100644
--- a/src/target/target/stm32stick.cfg
+++ b/src/target/target/stm32stick.cfg
@@ -18,7 +18,7 @@ jtag_device 4 0x1 0xf 0xe
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
 target cortex_m3 little 0
-run_and_halt_time 0 30
+
 
 working_area 0 0x20000000 16384 nobackup
 
diff --git a/src/target/target/str710.cfg b/src/target/target/str710.cfg
index 8eb8775db..b765fa76c 100644
--- a/src/target/target/str710.cfg
+++ b/src/target/target/str710.cfg
@@ -17,7 +17,7 @@ jtag_device 4 0x1 0xf 0xe
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
 target arm7tdmi little 0 arm7tdmi
-run_and_halt_time 0 30
+
 
 target_script 0 gdb_program_config event/str710_program.script
 
diff --git a/src/target/target/str730.cfg b/src/target/target/str730.cfg
index 491a3a596..837dbcf40 100644
--- a/src/target/target/str730.cfg
+++ b/src/target/target/str730.cfg
@@ -24,7 +24,7 @@ jtag_ntrst_delay 500
 
 target arm7tdmi little 0 arm7tdmi
 
-run_and_halt_time 0 30
+
 
 target_script 0 gdb_program_config event/str730_program.script
 
diff --git a/src/target/target/str750.cfg b/src/target/target/str750.cfg
index d00eae092..8572e1bd7 100644
--- a/src/target/target/str750.cfg
+++ b/src/target/target/str750.cfg
@@ -25,7 +25,7 @@ jtag_ntrst_delay 500
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
 target arm7tdmi little 0 arm7tdmi
 
-run_and_halt_time 0 30
+
 
 target_script 0 gdb_program_config event/str750_program.script
 
diff --git a/src/target/target/str912.cfg b/src/target/target/str912.cfg
index 14bb4973c..c9bef81bc 100644
--- a/src/target/target/str912.cfg
+++ b/src/target/target/str912.cfg
@@ -37,7 +37,7 @@ jtag_device 5 0x1 0x1 0x1e
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
 target arm966e little 1 arm966e
-run_and_halt_time 0 30
+
 
 
 working_area 0 0x50000000 16384 nobackup
diff --git a/src/target/target/str9comstick.cfg b/src/target/target/str9comstick.cfg
index b601a6534..f9dbe01c5 100644
--- a/src/target/target/str9comstick.cfg
+++ b/src/target/target/str9comstick.cfg
@@ -13,7 +13,7 @@ jtag_device 8 0x1 0x1 0xfe
 jtag_device 4 0x1 0xf 0xe
 jtag_device 5 0x1 0x1 0x1e
 target arm966e little 1 arm966e
-run_and_halt_time 0 30
+
 working_area 0 0x50000000 16384 nobackup
 #flash bank <driver> <base> <size> <chip_width> <bus_width>
 flash bank str9x 0x00000000 0x00080000 0 0 0
diff --git a/src/target/target/wi-9c.cfg b/src/target/target/wi-9c.cfg
index 02a109323..eccb8fa45 100644
--- a/src/target/target/wi-9c.cfg
+++ b/src/target/target/wi-9c.cfg
@@ -18,7 +18,7 @@ jtag_ntrst_delay 0
 target arm926ejs big 0 arm926ejs
 
 target_script 0 reset event/wi-9c_reset.script
-run_and_halt_time 0 30
+
 
 #working area <target#> <address> <size> <backup|nobackup>
 working_area 0 0x00000000 0x1000 backup
diff --git a/src/target/target/xba_revA3.cfg b/src/target/target/xba_revA3.cfg
index 7741b0f69..c65f7350d 100644
--- a/src/target/target/xba_revA3.cfg
+++ b/src/target/target/xba_revA3.cfg
@@ -12,7 +12,6 @@ jtag_device 7 0x1 0x7f 0x7e
 target  xscale big           0          ixp42x
 target_script 0 reset event/xba_revA3.script
 
-run_and_halt_time 0 100
 
 flash bank cfi 0x50000000 0x400000 2 2 0
 working_area 0 0x20010000 0x8060 nobackup
diff --git a/testing/examples/AT91R40008Test/prj/at91r40008_turtle.cfg b/testing/examples/AT91R40008Test/prj/at91r40008_turtle.cfg
index 807564c53..1f101a88e 100644
--- a/testing/examples/AT91R40008Test/prj/at91r40008_turtle.cfg
+++ b/testing/examples/AT91R40008Test/prj/at91r40008_turtle.cfg
@@ -28,8 +28,7 @@ daemon_startup reset
 
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
-target arm7tdmi little run_and_init 0 arm7tdmi
-run_and_halt_time 0 30
+target arm7tdmi little 0 arm7tdmi
 
 target_script 0 reset .\prj\at91r40008_reset.script
 
diff --git a/testing/examples/LPC2148Test/prj/lpc2148_jtagkey.cfg b/testing/examples/LPC2148Test/prj/lpc2148_jtagkey.cfg
index 842687f3e..c24a2517c 100644
--- a/testing/examples/LPC2148Test/prj/lpc2148_jtagkey.cfg
+++ b/testing/examples/LPC2148Test/prj/lpc2148_jtagkey.cfg
@@ -26,8 +26,7 @@ daemon_startup reset
 
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
-target arm7tdmi little run_and_halt 0 arm7tdmi-s_r4
-run_and_halt_time 0 30
+target arm7tdmi little 0 arm7tdmi-s_r4
 
 working_area 0 0x40000000 0x4000 nobackup
 
diff --git a/testing/examples/LPC2294Test/prj/lpc2294_jtagkey.cfg b/testing/examples/LPC2294Test/prj/lpc2294_jtagkey.cfg
index 1afbf1e94..d2dfd45f9 100644
--- a/testing/examples/LPC2294Test/prj/lpc2294_jtagkey.cfg
+++ b/testing/examples/LPC2294Test/prj/lpc2294_jtagkey.cfg
@@ -26,8 +26,7 @@ daemon_startup reset
 
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
-target arm7tdmi little run_and_halt 0 arm7tdmi-s_r4
-run_and_halt_time 0 30
+target arm7tdmi little 0 arm7tdmi-s_r4
 
 working_area 0 0x40000000 0x4000 nobackup
 
diff --git a/testing/examples/SAM7S256Test/prj/sam7s256_jtagkey.cfg b/testing/examples/SAM7S256Test/prj/sam7s256_jtagkey.cfg
index d526dd249..634b5026c 100644
--- a/testing/examples/SAM7S256Test/prj/sam7s256_jtagkey.cfg
+++ b/testing/examples/SAM7S256Test/prj/sam7s256_jtagkey.cfg
@@ -29,8 +29,7 @@ daemon_startup reset
 
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
-target arm7tdmi little run_and_init 0 arm7tdmi
-run_and_halt_time 0 30
+target arm7tdmi little 0 arm7tdmi
 
 target_script 0 reset .\prj\sam7s256_reset.script
 
diff --git a/testing/examples/SAM7X256Test/prj/sam7x256_jtagkey.cfg b/testing/examples/SAM7X256Test/prj/sam7x256_jtagkey.cfg
index 5dde1d75f..978512d4b 100644
--- a/testing/examples/SAM7X256Test/prj/sam7x256_jtagkey.cfg
+++ b/testing/examples/SAM7X256Test/prj/sam7x256_jtagkey.cfg
@@ -29,8 +29,7 @@ daemon_startup reset
 
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
-target arm7tdmi little run_and_init 0 arm7tdmi
-run_and_halt_time 0 30
+target arm7tdmi little 0 arm7tdmi
 
 target_script 0 reset .\prj\sam7x256_reset.script
 
diff --git a/testing/examples/STR710JtagSpeed/prj/str710_jtagkey.cfg b/testing/examples/STR710JtagSpeed/prj/str710_jtagkey.cfg
index a20cabeef..79ce94b10 100644
--- a/testing/examples/STR710JtagSpeed/prj/str710_jtagkey.cfg
+++ b/testing/examples/STR710JtagSpeed/prj/str710_jtagkey.cfg
@@ -26,8 +26,7 @@ daemon_startup reset
 
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
-target arm7tdmi little run_and_halt 0 arm7tdmi
-run_and_halt_time 0 30
+target arm7tdmi little 0 arm7tdmi
 
 working_area 0 0x2000C000 0x4000 nobackup
 
diff --git a/testing/examples/STR710Test/prj/str710_jtagkey.cfg b/testing/examples/STR710Test/prj/str710_jtagkey.cfg
index 62d67ddf0..ed98ca19b 100644
--- a/testing/examples/STR710Test/prj/str710_jtagkey.cfg
+++ b/testing/examples/STR710Test/prj/str710_jtagkey.cfg
@@ -26,8 +26,7 @@ daemon_startup reset
 
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
-target arm7tdmi little run_and_halt 0 arm7tdmi
-run_and_halt_time 0 30
+target arm7tdmi little 0 arm7tdmi
 
 target_script 0 gdb_program_config .\prj\str710_program.script
 
diff --git a/testing/examples/STR912Test/prj/str912_jtagkey.cfg b/testing/examples/STR912Test/prj/str912_jtagkey.cfg
index 614e04220..574880333 100644
--- a/testing/examples/STR912Test/prj/str912_jtagkey.cfg
+++ b/testing/examples/STR912Test/prj/str912_jtagkey.cfg
@@ -31,8 +31,7 @@ daemon_startup reset
 
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
-target arm966e little reset_halt 1 arm966e
-run_and_halt_time 0 30
+target arm966e little 1 arm966e
 
 target_script 0 gdb_program_config .\prj\str912_program.script
 
-- 
GitLab