Patchwork [U-Boot] cmd_time: merge run_command_and_time_it with cmd_process

login
register
mail settings
Submitter Richard Genoud
Date Dec. 3, 2012, 3:28 p.m.
Message ID <1354548536-7567-1-git-send-email-richard.genoud@gmail.com>
Download mbox | patch
Permalink /patch/203383/
State Superseded
Delegated to: Tom Rini
Headers show

Comments

Richard Genoud - Dec. 3, 2012, 3:28 p.m.
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>
---
 common/cmd_time.c |   33 ++-------------------------------
 common/command.c  |    4 +++-
 common/hush.c     |    2 +-
 common/main.c     |    2 +-
 include/command.h |    4 +++-
 5 files changed, 10 insertions(+), 35 deletions(-)
Stefan Roese - Dec. 3, 2012, 4:01 p.m.
On 12/03/2012 04:28 PM, Richard Genoud wrote:
> 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>
> ---
>  common/cmd_time.c |   33 ++-------------------------------
>  common/command.c  |    4 +++-
>  common/hush.c     |    2 +-
>  common/main.c     |    2 +-
>  include/command.h |    4 +++-
>  5 files changed, 10 insertions(+), 35 deletions(-)
> 
> 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 @@ static int do_time(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  {
>  	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..a58dca6 100644
> --- a/common/command.c
> +++ b/common/command.c
> @@ -513,7 +513,7 @@ static int cmd_call(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  }
>  
>  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,9 @@ enum command_ret_t cmd_process(int flag, int argc, char * const argv[],
>  
>  	/* If OK so far, then do the command */
>  	if (!rc) {
> +		if (ticks) *ticks = get_timer(0);

Newline please:

		if (ticks)
			*ticks = get_timer(0);


>  		rc = cmd_call(cmdtp, flag, argc, argv);
> +		if (ticks) *ticks = get_timer(*ticks);

Here as well.

Thanks,
Stefan
Richard Genoud - Dec. 3, 2012, 4:23 p.m.
2012/12/3 Stefan Roese <sr@denx.de>:
>> @@ -543,7 +543,9 @@ enum command_ret_t cmd_process(int flag, int argc, char * const argv[],
>>
>>       /* If OK so far, then do the command */
>>       if (!rc) {
>> +             if (ticks) *ticks = get_timer(0);
>
> Newline please:
>
>                 if (ticks)
>                         *ticks = get_timer(0);
>
>
>>               rc = cmd_call(cmdtp, flag, argc, argv);
>> +             if (ticks) *ticks = get_timer(*ticks);
>
> Here as well.
>
> Thanks,
> Stefan
>
Ok, I'll resend it with new lines (I thought it was a little bit more
readable without new lines).
Thanks !

Richard.
Che-liang Chiou - Dec. 3, 2012, 9:32 p.m.
Acked-by: Che-Liang Chiou <clchiou@chromium.org>

On Mon, Dec 3, 2012 at 8:23 AM, Richard Genoud <richard.genoud@gmail.com> wrote:
> 2012/12/3 Stefan Roese <sr@denx.de>:
>>> @@ -543,7 +543,9 @@ enum command_ret_t cmd_process(int flag, int argc, char * const argv[],
>>>
>>>       /* If OK so far, then do the command */
>>>       if (!rc) {
>>> +             if (ticks) *ticks = get_timer(0);
>>
>> Newline please:
>>
>>                 if (ticks)
>>                         *ticks = get_timer(0);
>>
>>
>>>               rc = cmd_call(cmdtp, flag, argc, argv);
>>> +             if (ticks) *ticks = get_timer(*ticks);
>>
>> Here as well.
>>
>> Thanks,
>> Stefan
>>
> Ok, I'll resend it with new lines (I thought it was a little bit more
> readable without new lines).
> Thanks !
>
> Richard.
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

Patch

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 @@  static int do_time(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	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..a58dca6 100644
--- a/common/command.c
+++ b/common/command.c
@@ -513,7 +513,7 @@  static int cmd_call(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 }
 
 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,9 @@  enum command_ret_t cmd_process(int flag, int argc, char * const argv[],
 
 	/* 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 @@  static int run_pipe_real(struct pipe *pi)
 		}
 		/* 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 5362781..7bdba3e 100644
--- a/common/main.c
+++ b/common/main.c
@@ -1442,7 +1442,7 @@  static int builtin_run_command(const char *cmd, int flag)
 			continue;
 		}
 
-		if (cmd_process(flag, argc, argv, &repeatable))
+		if (cmd_process(flag, argc, argv, &repeatable, NULL))
 			rc = -1;
 
 		/* Did the user stop this? */
diff --git a/include/command.h b/include/command.h
index 10bc260..1344d71 100644
--- a/include/command.h
+++ b/include/command.h
@@ -139,10 +139,12 @@  enum command_ret_t {
  * @param repeatable	This function sets this to 0 if the command is not
  *			repeatable. If the command is repeatable, the value
  *			is left unchanged.
+ * @param ticks		If ticks is not null, this function set it to the
+ *			number of ticks the command took to complete.
  * @return 0 if the command succeeded, 1 if it failed
  */
 int cmd_process(int flag, int argc, char * const argv[],
-			       int *repeatable);
+			       int *repeatable, ulong *ticks);
 
 #endif	/* __ASSEMBLY__ */