1*2e192b24SSimon Glass /* 2*2e192b24SSimon Glass * (C) Copyright 2001 3*2e192b24SSimon Glass * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4*2e192b24SSimon Glass * 5*2e192b24SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 6*2e192b24SSimon Glass */ 7*2e192b24SSimon Glass 8*2e192b24SSimon Glass /* 9*2e192b24SSimon Glass * Misc functions 10*2e192b24SSimon Glass */ 11*2e192b24SSimon Glass #include <common.h> 12*2e192b24SSimon Glass #include <command.h> 13*2e192b24SSimon Glass #include <console.h> 14*2e192b24SSimon Glass 15*2e192b24SSimon Glass static int do_sleep(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 16*2e192b24SSimon Glass { 17*2e192b24SSimon Glass ulong start = get_timer(0); 18*2e192b24SSimon Glass ulong delay; 19*2e192b24SSimon Glass 20*2e192b24SSimon Glass if (argc != 2) 21*2e192b24SSimon Glass return CMD_RET_USAGE; 22*2e192b24SSimon Glass 23*2e192b24SSimon Glass delay = simple_strtoul(argv[1], NULL, 10) * CONFIG_SYS_HZ; 24*2e192b24SSimon Glass 25*2e192b24SSimon Glass while (get_timer(start) < delay) { 26*2e192b24SSimon Glass if (ctrlc()) 27*2e192b24SSimon Glass return (-1); 28*2e192b24SSimon Glass 29*2e192b24SSimon Glass udelay(100); 30*2e192b24SSimon Glass } 31*2e192b24SSimon Glass 32*2e192b24SSimon Glass return 0; 33*2e192b24SSimon Glass } 34*2e192b24SSimon Glass 35*2e192b24SSimon Glass U_BOOT_CMD( 36*2e192b24SSimon Glass sleep , 2, 1, do_sleep, 37*2e192b24SSimon Glass "delay execution for some time", 38*2e192b24SSimon Glass "N\n" 39*2e192b24SSimon Glass " - delay execution for N seconds (N is _decimal_ !!!)" 40*2e192b24SSimon Glass ); 41*2e192b24SSimon Glass 42*2e192b24SSimon Glass #ifdef CONFIG_CMD_TIMER 43*2e192b24SSimon Glass static int do_timer(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 44*2e192b24SSimon Glass { 45*2e192b24SSimon Glass static ulong start; 46*2e192b24SSimon Glass 47*2e192b24SSimon Glass if (argc != 2) 48*2e192b24SSimon Glass return CMD_RET_USAGE; 49*2e192b24SSimon Glass 50*2e192b24SSimon Glass if (!strcmp(argv[1], "start")) 51*2e192b24SSimon Glass start = get_timer(0); 52*2e192b24SSimon Glass 53*2e192b24SSimon Glass if (!strcmp(argv[1], "get")) { 54*2e192b24SSimon Glass ulong msecs = get_timer(start) * 1000 / CONFIG_SYS_HZ; 55*2e192b24SSimon Glass printf("%ld.%03d\n", msecs / 1000, (int)(msecs % 1000)); 56*2e192b24SSimon Glass } 57*2e192b24SSimon Glass 58*2e192b24SSimon Glass return 0; 59*2e192b24SSimon Glass } 60*2e192b24SSimon Glass 61*2e192b24SSimon Glass U_BOOT_CMD( 62*2e192b24SSimon Glass timer, 2, 1, do_timer, 63*2e192b24SSimon Glass "access the system timer", 64*2e192b24SSimon Glass "start - Reset the timer reference.\n" 65*2e192b24SSimon Glass "timer get - Print the time since 'start'." 66*2e192b24SSimon Glass ); 67*2e192b24SSimon Glass #endif 68