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