[U-Boot] [PATCH] Add a command to access the system timer

Two sub-commands... start and get. * start sets the reference. * get prints out the time since the last start (in "<sec>.<msec>" format). If get is called without start, returns time since boot. Simple way to benchmark an operation: "timer start;<commands-to-measure>;timer get"
Signed-off-by: Joe Hershberger joe.hershberger@ni.com --- common/cmd_misc.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/common/cmd_misc.c b/common/cmd_misc.c index 973b1c2..2d1f7b5 100644 --- a/common/cmd_misc.c +++ b/common/cmd_misc.c @@ -53,3 +53,28 @@ U_BOOT_CMD( "N\n" " - delay execution for N seconds (N is _decimal_ !!!)" ); + +int do_timer(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + static ulong start; + + if (argc != 2) + return CMD_RET_USAGE; + + if (!strcmp(argv[1], "start")) + start = get_timer(0); + + if (!strcmp(argv[1], "get")) { + ulong msecs = get_timer(start) * 1000 / CONFIG_SYS_HZ; + printf("%ld.%03d\n", msecs / 1000, (int)(msecs % 1000)); + } + + return 0; +} + +U_BOOT_CMD( + timer , 2, 1, do_timer, + "access the system timer", + "start - Reset the timer reference.\n" + "timer get - Print the time since 'start'." +);

On Friday 17 August 2012 16:57:58 Joe Hershberger wrote:
Two sub-commands... start and get.
- start sets the reference.
- get prints out the time since the last start (in "<sec>.<msec>" format).
If get is called without start, returns time since boot. Simple way to benchmark an operation: "timer start;<commands-to-measure>;timer get"
please add a CONFIG_CMD_xxx for this
--- a/common/cmd_misc.c +++ b/common/cmd_misc.c
+int do_timer(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
static
+U_BOOT_CMD(
- timer , 2, 1, do_timer,
no space between "timer" and "," -mike

Two sub-commands... start and get. * start sets the reference. * get prints out the time since the last start (in "<sec>.<msec>" format). If get is called without start, returns time since boot. Simple way to benchmark an operation: "timer start;<commands-to-measure>;timer get"
Signed-off-by: Joe Hershberger joe.hershberger@ni.com --- Changes in v2: - Added config guard around the command - Documented in README - Documented CONFIG_CMD_TIME as being ARM specific - Style fix ',' - Made function static
README | 3 ++- common/cmd_misc.c | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/README b/README index af76b0c..8305e45 100644 --- a/README +++ b/README @@ -855,7 +855,8 @@ The following options need to be configured: CONFIG_CMD_SPI * SPI serial bus support CONFIG_CMD_TFTPSRV * TFTP transfer in server mode CONFIG_CMD_TFTPPUT * TFTP put command (upload) - CONFIG_CMD_TIME * run command and report execution time + CONFIG_CMD_TIME * run command and report execution time (ARM specific) + CONFIG_CMD_TIMER * access to the system tick timer CONFIG_CMD_USB * USB support CONFIG_CMD_CDP * Cisco Discover Protocol support CONFIG_CMD_MFSL * Microblaze FSL support diff --git a/common/cmd_misc.c b/common/cmd_misc.c index 973b1c2..3b47a0c 100644 --- a/common/cmd_misc.c +++ b/common/cmd_misc.c @@ -53,3 +53,30 @@ U_BOOT_CMD( "N\n" " - delay execution for N seconds (N is _decimal_ !!!)" ); + +#ifdef CONFIG_CMD_TIMER +static int do_timer(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + static ulong start; + + if (argc != 2) + return CMD_RET_USAGE; + + if (!strcmp(argv[1], "start")) + start = get_timer(0); + + if (!strcmp(argv[1], "get")) { + ulong msecs = get_timer(start) * 1000 / CONFIG_SYS_HZ; + printf("%ld.%03d\n", msecs / 1000, (int)(msecs % 1000)); + } + + return 0; +} + +U_BOOT_CMD( + timer, 2, 1, do_timer, + "access the system timer", + "start - Reset the timer reference.\n" + "timer get - Print the time since 'start'." +); +#endif

On Wed, Oct 03, 2012 at 12:14:57PM -0000, Joe Hershberger wrote:
Two sub-commands... start and get.
- start sets the reference.
- get prints out the time since the last start (in "<sec>.<msec>" format).
If get is called without start, returns time since boot. Simple way to benchmark an operation: "timer start;<commands-to-measure>;timer get"
Signed-off-by: Joe Hershberger joe.hershberger@ni.com
Applied to u-boot/master, thanks!
participants (3)
-
Joe Hershberger
-
Mike Frysinger
-
Tom Rini