[U-Boot] [PATCH] tools: kwboot: Make kwboot more robust on a38x

Chris Packham judge.packham at gmail.com
Thu Aug 16 07:59:58 UTC 2018


Hi Baruch, Jon,

On Tue, Aug 14, 2018 at 3:25 AM Baruch Siach <baruch at tkos.co.il> wrote:
>
> From: Jon Nettleton <jon at solid-run.com>
>
> This patch accomplishes 2 things to make the kwboot procedure
> on the a38x more reliable.
>
> 1)  We fill the tty with 1K of the magic bootparam.  This helps
> with the timing of where the microcode picks up in the read of
> the line to ensure we actually catch the break to go into recovery
> mode
>
> 2)  Before starting the xmodem transfer we sleep for 2 seconds
> and then flush the line.  This allows all the magic bootparam
> to be flushed from the line and makes the xmodem transfer reliable
> and removes the Bad message failures.
>
> Signed-off-by: Jon Nettleton <jon at solid-run.com>
> Signed-off-by: Baruch Siach <baruch at tkos.co.il>
> ---

Reviewed-by: Chris Packham <judge.packham at gmail.com>

Lately I haven't had much luck with using kwboot on a38x. I seem to be
able to get the spl to boot from uart (even better now thanks to this
patch) but the next stage still loads from SPI. I haven't been brave
enough to blank a board to see if that changes behaviour. Are your
experiences any different? I'm wondering if there is something we need
to do in the SPL to figure out that we need to load the next stage via
xmodem.

>  tools/kwboot.c | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/tools/kwboot.c b/tools/kwboot.c
> index 50ae2b4b77b1..4be094c9c8d8 100644
> --- a/tools/kwboot.c
> +++ b/tools/kwboot.c
> @@ -286,6 +286,7 @@ kwboot_bootmsg(int tty, void *msg)
>  {
>         int rc;
>         char c;
> +       int count;
>
>         if (msg == NULL)
>                 kwboot_printv("Please reboot the target into UART boot mode...");
> @@ -297,10 +298,12 @@ kwboot_bootmsg(int tty, void *msg)
>                 if (rc)
>                         break;
>
> -               rc = kwboot_tty_send(tty, msg, 8);
> -               if (rc) {
> -                       usleep(msg_req_delay * 1000);
> -                       continue;
> +               for (count = 0; count < 128; count++) {
> +                       rc = kwboot_tty_send(tty, msg, 8);
> +                       if (rc) {
> +                               usleep(msg_req_delay * 1000);
> +                               continue;
> +                       }
>                 }
>
>                 rc = kwboot_tty_recv(tty, &c, 1, msg_rsp_timeo);
> @@ -426,6 +429,9 @@ kwboot_xmodem(int tty, const void *_data, size_t size)
>
>         kwboot_printv("Sending boot image...\n");
>
> +       sleep(2); /* flush isn't effective without it */
> +       tcflush(tty, TCIOFLUSH);
> +
>         do {
>                 struct kwboot_block block;
>                 int n;
> --


> 2.18.0
>


More information about the U-Boot mailing list