xref: /openbmc/u-boot/cmd/time.c (revision 2e192b24)
1*2e192b24SSimon Glass /*
2*2e192b24SSimon Glass  * Copyright (c) 2011 The Chromium OS Authors.
3*2e192b24SSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
4*2e192b24SSimon Glass  */
5*2e192b24SSimon Glass 
6*2e192b24SSimon Glass #include <common.h>
7*2e192b24SSimon Glass #include <command.h>
8*2e192b24SSimon Glass 
9*2e192b24SSimon Glass static void report_time(ulong cycles)
10*2e192b24SSimon Glass {
11*2e192b24SSimon Glass 	ulong minutes, seconds, milliseconds;
12*2e192b24SSimon Glass 	ulong total_seconds, remainder;
13*2e192b24SSimon Glass 
14*2e192b24SSimon Glass 	total_seconds = cycles / CONFIG_SYS_HZ;
15*2e192b24SSimon Glass 	remainder = cycles % CONFIG_SYS_HZ;
16*2e192b24SSimon Glass 	minutes = total_seconds / 60;
17*2e192b24SSimon Glass 	seconds = total_seconds % 60;
18*2e192b24SSimon Glass 	/* approximate millisecond value */
19*2e192b24SSimon Glass 	milliseconds = (remainder * 1000 + CONFIG_SYS_HZ / 2) / CONFIG_SYS_HZ;
20*2e192b24SSimon Glass 
21*2e192b24SSimon Glass 	printf("\ntime:");
22*2e192b24SSimon Glass 	if (minutes)
23*2e192b24SSimon Glass 		printf(" %lu minutes,", minutes);
24*2e192b24SSimon Glass 	printf(" %lu.%03lu seconds\n", seconds, milliseconds);
25*2e192b24SSimon Glass }
26*2e192b24SSimon Glass 
27*2e192b24SSimon Glass static int do_time(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
28*2e192b24SSimon Glass {
29*2e192b24SSimon Glass 	ulong cycles = 0;
30*2e192b24SSimon Glass 	int retval = 0;
31*2e192b24SSimon Glass 	int repeatable;
32*2e192b24SSimon Glass 
33*2e192b24SSimon Glass 	if (argc == 1)
34*2e192b24SSimon Glass 		return CMD_RET_USAGE;
35*2e192b24SSimon Glass 
36*2e192b24SSimon Glass 	retval = cmd_process(0, argc - 1, argv + 1, &repeatable, &cycles);
37*2e192b24SSimon Glass 	report_time(cycles);
38*2e192b24SSimon Glass 
39*2e192b24SSimon Glass 	return retval;
40*2e192b24SSimon Glass }
41*2e192b24SSimon Glass 
42*2e192b24SSimon Glass U_BOOT_CMD(time, CONFIG_SYS_MAXARGS, 0, do_time,
43*2e192b24SSimon Glass 		"run commands and summarize execution time",
44*2e192b24SSimon Glass 		"command [args...]\n");
45