This is to avoid the boot sequence halting due to initial "junk"
received on serial input.

Signed-off-by: Craig McQueen <craig.mcqu...@innerrange.com>
---
I have found that on the BeagleBone Black, U-Boot occasionally halts at 
the U-Boot prompt at boot-up, whether power-up, warm external 
reset or software reset. I have seen other people report the same issue.

This seems to be due to U-Boot receiving "junk" data on the serial 
console. The BeagleBone Black has a pull-down resistor which was 
apparently added to try to mitigate this issue, but it doesn't entirely 
fix it.

 common/autoboot.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/common/autoboot.c b/common/autoboot.c
index c11fb31..3ab51d9 100644
--- a/common/autoboot.c
+++ b/common/autoboot.c
@@ -230,19 +230,29 @@ static int abortboot_normal(int bootdelay)
                printf("Hit any key to stop autoboot: %2d ", bootdelay);
 #endif
 
-#if defined CONFIG_ZERO_BOOTDELAY_CHECK
        /*
-        * Check if key already pressed
-        * Don't check if bootdelay < 0
+        * Flush any pending input key presses.
+        * On some systems, there might be some junk input.
+        * No need if bootdelay < 0.
         */
        if (bootdelay >= 0) {
-               if (tstc()) {   /* we got a key press   */
+               ts = get_timer(0);
+               while (tstc()) {        /* we got a key press   */
                        (void) getc();  /* consume input        */
+#if defined CONFIG_ZERO_BOOTDELAY_CHECK
                        puts("\b\b\b 0");
                        abort = 1;      /* don't auto boot      */
+                       break;
+#else
+                       /*
+                        * Sanity check just to avoid infinite loop. It should
+                        * never happen if hardware is working as expected.
+                        */
+                       if (get_timer(ts) >= 1000)
+                               break;
+#endif
                }
        }
-#endif
 
        while ((bootdelay > 0) && (!abort)) {
                --bootdelay;
-- 
2.1.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to