Merge tag 'u-boot-imx-20200502' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx
[oweals/u-boot.git] / cmd / misc.c
index 39d86835cff76122cc5940f521e5e4e6f2c2b11d..a1eef72a6c2eb7f2ff4603b074d7dd55fe8d143f 100644 (file)
@@ -1,8 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2001
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /*
 static int do_sleep(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        ulong start = get_timer(0);
+       ulong mdelay = 0;
        ulong delay;
+       char *frpart;
 
        if (argc != 2)
                return CMD_RET_USAGE;
 
        delay = simple_strtoul(argv[1], NULL, 10) * CONFIG_SYS_HZ;
 
+       frpart = strchr(argv[1], '.');
+
+       if (frpart) {
+               uint mult = CONFIG_SYS_HZ / 10;
+               for (frpart++; *frpart != '\0' && mult > 0; frpart++) {
+                       if (*frpart < '0' || *frpart > '9') {
+                               mdelay = 0;
+                               break;
+                       }
+                       mdelay += (*frpart - '0') * mult;
+                       mult /= 10;
+               }
+       }
+
+       delay += mdelay;
+
        while (get_timer(start) < delay) {
                if (ctrlc())
                        return (-1);
@@ -36,7 +53,8 @@ U_BOOT_CMD(
        sleep ,    2,    1,     do_sleep,
        "delay execution for some time",
        "N\n"
-       "    - delay execution for N seconds (N is _decimal_ !!!)"
+       "    - delay execution for N seconds (N is _decimal_ and can be\n"
+       "      fractional)"
 );
 
 #ifdef CONFIG_CMD_TIMER