cmd_time: merge run_command_and_time_it with cmd_process

As far as every arch has a get_timer function,
run_command_and_time_it code can now disappear.

Signed-off-by: Richard Genoud <richard.genoud@gmail.com>
Acked-By: Che-Liang Chiou <clchiou@chromium.org>
[trini: s/ulong/unsigned long/ in command.h portion]
Signed-off-by: Tom Rini <trini@ti.com>
diff --git a/common/cmd_time.c b/common/cmd_time.c
index 6dbdbbf..9808cd6 100644
--- a/common/cmd_time.c
+++ b/common/cmd_time.c
@@ -22,36 +22,6 @@
 #include <common.h>
 #include <command.h>
 
-/*
- * TODO(clchiou): This function actually minics the bottom-half of the
- * run_command() function.  Since this function has ARM-dependent timer
- * codes, we cannot merge it with the run_command() for now.
- */
-static int run_command_and_time_it(int flag, int argc, char * const argv[],
-		ulong *cycles)
-{
-	cmd_tbl_t *cmdtp = find_cmd(argv[0]);
-	int retval = 0;
-
-	if (!cmdtp) {
-		printf("%s: command not found\n", argv[0]);
-		return 1;
-	}
-	if (argc > cmdtp->maxargs)
-		return CMD_RET_USAGE;
-
-	/*
-	 * TODO(clchiou): get_timer_masked() is only defined in certain ARM
-	 * boards.  We could use the new timer API that Graeme is proposing
-	 * so that this piece of code would be arch-independent.
-	 */
-	*cycles = get_timer_masked();
-	retval = cmdtp->cmd(cmdtp, flag, argc, argv);
-	*cycles = get_timer_masked() - *cycles;
-
-	return retval;
-}
-
 static void report_time(ulong cycles)
 {
 	ulong minutes, seconds, milliseconds;
@@ -75,11 +45,12 @@
 {
 	ulong cycles = 0;
 	int retval = 0;
+	int repeatable;
 
 	if (argc == 1)
 		return CMD_RET_USAGE;
 
-	retval = run_command_and_time_it(0, argc - 1, argv + 1, &cycles);
+	retval = cmd_process(0, argc - 1, argv + 1, &repeatable, &cycles);
 	report_time(cycles);
 
 	return retval;
diff --git a/common/command.c b/common/command.c
index 50c8429..305a236 100644
--- a/common/command.c
+++ b/common/command.c
@@ -513,7 +513,7 @@
 }
 
 enum command_ret_t cmd_process(int flag, int argc, char * const argv[],
-			       int *repeatable)
+			       int *repeatable, ulong *ticks)
 {
 	enum command_ret_t rc = CMD_RET_SUCCESS;
 	cmd_tbl_t *cmdtp;
@@ -543,7 +543,11 @@
 
 	/* If OK so far, then do the command */
 	if (!rc) {
+		if (ticks)
+			*ticks = get_timer(0);
 		rc = cmd_call(cmdtp, flag, argc, argv);
+		if (ticks)
+			*ticks = get_timer(*ticks);
 		*repeatable &= cmdtp->repeatable;
 	}
 	if (rc == CMD_RET_USAGE)
diff --git a/common/hush.c b/common/hush.c
index eb6c879..cc81c9c 100644
--- a/common/hush.c
+++ b/common/hush.c
@@ -1665,7 +1665,7 @@
 		}
 		/* Process the command */
 		return cmd_process(flag, child->argc, child->argv,
-				   &flag_repeat);
+				   &flag_repeat, NULL);
 #endif
 	}
 #ifndef __U_BOOT__
diff --git a/common/main.c b/common/main.c
index 9e92687..e2d2e09 100644
--- a/common/main.c
+++ b/common/main.c
@@ -1452,7 +1452,7 @@
 			continue;
 		}
 
-		if (cmd_process(flag, argc, argv, &repeatable))
+		if (cmd_process(flag, argc, argv, &repeatable, NULL))
 			rc = -1;
 
 		/* Did the user stop this? */