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