Hi Craig,

On 20 December 2015 at 19:07, Craig McQueen
<craig.mcqu...@innerrange.com> wrote:
> 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.

I wonder if this can be fixed for that board only?

One option might be to clear out the UART input buffer when the driver
is probed. You could copy the TI maintainer also, for comments.

At present I can press a key before U-Boot comes up and it will be
picked up. I suspect that this patch would break that, although I have
not tested 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

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

Reply via email to