1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 22e192b24SSimon Glass /* 32e192b24SSimon Glass * Copyright (c) 2011 The Chromium OS Authors. 42e192b24SSimon Glass */ 52e192b24SSimon Glass 62e192b24SSimon Glass #include <common.h> 72e192b24SSimon Glass #include <command.h> 82e192b24SSimon Glass 92e192b24SSimon Glass static void report_time(ulong cycles) 102e192b24SSimon Glass { 112e192b24SSimon Glass ulong minutes, seconds, milliseconds; 122e192b24SSimon Glass ulong total_seconds, remainder; 132e192b24SSimon Glass 142e192b24SSimon Glass total_seconds = cycles / CONFIG_SYS_HZ; 152e192b24SSimon Glass remainder = cycles % CONFIG_SYS_HZ; 162e192b24SSimon Glass minutes = total_seconds / 60; 172e192b24SSimon Glass seconds = total_seconds % 60; 182e192b24SSimon Glass /* approximate millisecond value */ 192e192b24SSimon Glass milliseconds = (remainder * 1000 + CONFIG_SYS_HZ / 2) / CONFIG_SYS_HZ; 202e192b24SSimon Glass 212e192b24SSimon Glass printf("\ntime:"); 222e192b24SSimon Glass if (minutes) 232e192b24SSimon Glass printf(" %lu minutes,", minutes); 242e192b24SSimon Glass printf(" %lu.%03lu seconds\n", seconds, milliseconds); 252e192b24SSimon Glass } 262e192b24SSimon Glass 272e192b24SSimon Glass static int do_time(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 282e192b24SSimon Glass { 292e192b24SSimon Glass ulong cycles = 0; 302e192b24SSimon Glass int retval = 0; 31146dda39STom Rini int repeatable = 0; 322e192b24SSimon Glass 332e192b24SSimon Glass if (argc == 1) 342e192b24SSimon Glass return CMD_RET_USAGE; 352e192b24SSimon Glass 362e192b24SSimon Glass retval = cmd_process(0, argc - 1, argv + 1, &repeatable, &cycles); 372e192b24SSimon Glass report_time(cycles); 382e192b24SSimon Glass 392e192b24SSimon Glass return retval; 402e192b24SSimon Glass } 412e192b24SSimon Glass 422e192b24SSimon Glass U_BOOT_CMD(time, CONFIG_SYS_MAXARGS, 0, do_time, 432e192b24SSimon Glass "run commands and summarize execution time", 442e192b24SSimon Glass "command [args...]\n"); 45