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

Che-liang Chiou clchiou at chromium.org
Mon Dec 3 22:40:40 CET 2012


Acked-By: Che-Liang Chiou <clchiou at chromium.org>

On Mon, Dec 3, 2012 at 8:28 AM, Richard Genoud <richard.genoud at gmail.com> 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 at gmail.com>
> ---
>  common/cmd_time.c |   33 ++-------------------------------
>  common/command.c  |    6 +++++-
>  common/hush.c     |    2 +-
>  common/main.c     |    2 +-
>  include/command.h |    4 +++-
>  5 files changed, 12 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..305a236 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,11 @@ 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__ */
>
> --
> 1.7.2.5
>


More information about the U-Boot mailing list