summaryrefslogtreecommitdiff
path: root/common/bootretry.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2014-04-10 20:01:30 -0600
committerTom Rini <trini@ti.com>2014-05-29 17:48:21 -0400
commit0098e179e1afacb3cf595c67a98b8739dc7edcde (patch)
treec19140ef37a8f86d6ccd5d2a065239f09cf09121 /common/bootretry.c
parent30354978ff470470c15caea2566b61b5792ad277 (diff)
downloadu-boot-imx-0098e179e1afacb3cf595c67a98b8739dc7edcde.zip
u-boot-imx-0098e179e1afacb3cf595c67a98b8739dc7edcde.tar.gz
u-boot-imx-0098e179e1afacb3cf595c67a98b8739dc7edcde.tar.bz2
Move bootretry code into bootretry.c and clean up
This code is only used by one board, so it seems a shame to clutter up the readline code with it. Move it into its own file. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common/bootretry.c')
-rw-r--r--common/bootretry.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/common/bootretry.c b/common/bootretry.c
new file mode 100644
index 0000000..12653c0
--- /dev/null
+++ b/common/bootretry.c
@@ -0,0 +1,59 @@
+/*
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <bootretry.h>
+#include <cli.h>
+#include <errno.h>
+#include <watchdog.h>
+
+#ifndef CONFIG_BOOT_RETRY_MIN
+#define CONFIG_BOOT_RETRY_MIN CONFIG_BOOT_RETRY_TIME
+#endif
+
+static uint64_t endtime; /* must be set, default is instant timeout */
+static int retry_time = -1; /* -1 so can call readline before main_loop */
+
+/***************************************************************************
+ * initialize command line timeout
+ */
+void init_cmd_timeout(void)
+{
+ char *s = getenv("bootretry");
+
+ if (s != NULL)
+ retry_time = (int)simple_strtol(s, NULL, 10);
+ else
+ retry_time = CONFIG_BOOT_RETRY_TIME;
+
+ if (retry_time >= 0 && retry_time < CONFIG_BOOT_RETRY_MIN)
+ retry_time = CONFIG_BOOT_RETRY_MIN;
+}
+
+/***************************************************************************
+ * reset command line timeout to retry_time seconds
+ */
+void reset_cmd_timeout(void)
+{
+ endtime = endtick(retry_time);
+}
+
+int bootretry_tstc_timeout(void)
+{
+ while (!tstc()) { /* while no incoming data */
+ if (retry_time >= 0 && get_ticks() > endtime)
+ return -ETIMEDOUT;
+ WATCHDOG_RESET();
+ }
+
+ return 0;
+}
+
+void bootretry_dont_retry(void)
+{
+ retry_time = -1;
+}