[PATCH u-boot-marvell 00/13] Yet another kwboot improvements

Stefan Roese sr at denx.de
Tue Oct 26 13:09:42 CEST 2021


On 26.10.21 11:06, Pali Rohár wrote:

<snip>

> Now I found logical error in kwboot code which handles retransmission of
> the last header packet. State of "baudrate change" is cleared on every
> retransmission. Please apply following diff, so state variables are
> initialized only once.
> 
> diff --git a/tools/kwboot.c b/tools/kwboot.c
> index d38ee0065177..835ccc8c113a 100644
> --- a/tools/kwboot.c
> +++ b/tools/kwboot.c
> @@ -859,11 +859,6 @@ kwboot_xm_recv_reply(int fd, char *c, int nak_on_non_xm,
>   	uint64_t recv_until = _now() + timeout;
>   	int rc;
>   
> -	if (non_xm_print)
> -		*non_xm_print = 0;
> -	if (baud_changed)
> -		*baud_changed = 0;
> -
>   	while (1) {
>   		rc = kwboot_tty_recv(fd, c, 1, timeout);
>   		if (rc) {
> @@ -929,6 +924,8 @@ kwboot_xm_sendblock(int fd, struct kwboot_block *block, int allow_non_xm,
>   	char c;
>   
>   	*done_print = 0;
> +	non_xm_print = 0;
> +	baud_changed = 0;
>   
>   	retries = 0;
>   	do {

This definitely helps (a bit). Now I get this:

[stefan at ryzen u-boot-marvell (kwboot-test1)]$ ./tools/kwboot -B 230400 
-b u-boot-spl.kwb -t 
/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A1019EGY-if00-port0
Patching image boot signature to UART
Injecting binary header code for changing baudrate to 230400 Bd
Injecting code for changing baudrate back
Sending boot message. Please reboot the target...|
Waiting 2s and flushing tty
Sending boot image header (90112 bytes)...
   0 % 
[......................................................................]
  10 % 
[......................................................................]
  20 % 
[......................................................................]
  29 % 
[......................................................................]
  39 % 
[......................................................................]
  49 % 
[......................................................................]
  59 % 
[......................................................................]
  69 % 
[......................................................................]
  79 % 
[......................................................................]
  89 % 
[......................................................................]
  99 % [.... 
       ]
Done

U-Boot SPL 2021.10-00908-gc129aa2f173a-dirty (Oct 26 2021 - 12:48:11 +0200)
High speed PHY - Version: 2.1.5 (COM-PHY-V20)
High speed PHY - Ended Successfully
DDR3 Training Sequence - Ver 5.7.4
DDR3 Training Sequence - Ended Successfully
Trying to boot from BOOTROM
Returning to BootROM (return address 0xffff0aa0)...

Changing baudrate to 230400 Bd

Sending boot image data (549892 bytes)...
   0 % 
[......................................................................]

...

  99 % [........................... 
       ]
Done
Finishing transfer
Waiting 1s for baudrate change magic
xmodem: Connection timed out


BTW: The baudrate change does not seem to work or have any effect on
the image download speed. Comparing 230400 and 921600 baud speeds, I can
spot no real time difference here:

230400 baud:
[stefan at ryzen u-boot-marvell (kwboot-test1)]$ time ./tools/kwboot -B 
230400 -b u-boot-spl.kwb -t 
/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A1019EGY-if00-port0
Patching image boot signature to UART
Injecting binary header code for changing baudrate to 230400 Bd

...

  99 % [........................... 
       ]
Done
Finishing transfer
Waiting 1s for baudrate change magic
xmodem: Connection timed out
[2]+  Done                    emacs tools/kwboot.c

real    1m27,279s
user    0m2,313s
sys     0m0,337s

921600 baud:
[stefan at ryzen u-boot-marvell (kwboot-test1)]$ time ./tools/kwboot -B 
921600 -b u-boot-spl.kwb -t 
/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A1019EGY-if00-port0
Patching image boot signature to UART
Injecting binary header code for changing baudrate to 921600 Bd

...

  99 % [........................... 
       ]
Done
Finishing transfer
Waiting 1s for baudrate change magic
xmodem: Connection timed out

real    1m27,839s
user    0m0,224s
sys     0m0,194s

Any idea why this is the case?

>> Ok. This seems to work at least partly (SPL):
>>
>> [stefan at ryzen u-boot-marvell (kwboot-test1)]$ ./tools/kwboot -B 115201 -b
>> u-boot-spl.kwb -t
>> /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A1019EGY-if00-port0
>> Patching image boot signature to UART
>> Injecting binary header code for changing baudrate to 115201 Bd
>> Injecting code for changing baudrate back
>> Sending boot message. Please reboot the target...|
>> Waiting 2s and flushing tty
>> Sending boot image header (90112 bytes)...
>>    0 %
>> [......................................................................]
>>   10 %
>> [......................................................................]
>>   20 %
>> [......................................................................]
>>   29 %
>> [......................................................................]
>>   39 %
>> [......................................................................]
>>   49 %
>> [......................................................................]
>>   59 %
>> [......................................................................]
>>   69 %
>> [......................................................................]
>>   79 %
>> [......................................................................]
>>   89 %
>> [......................................................................]
>>   99 % [....       ]
>> Done
>>
>> U-Boot SPL 2021.10-00908-gc129aa2f173a (Oct 26 2021 - 10:39:55 +0200)
>> High speed PHY - Version: 2.1.5 (COM-PHY-V20)
>> High speed PHY - Ended Successfully
>> DDR3 Training Sequence - Ver 5.7.4
>> DDR3 Training Sequence - Ended Successfully
>> Trying to boot from BOOTROM
>> Returning to BootROM (return address 0xffff0aa0)...
>>
>> Changing baudrate to 115201 Bd
>>
>> Sending boot image data (549892 bytes)...
>>    0 %
>> [......................................................................]
>>    1 %
>> [......................................................................]
>> ...
>>   97 %
>> [......................................................................]
>>   99 % [...........................       ]
>> Done
>> Finishing transfer
>> Waiting 1s for baudrate change magic
>>
>> Changing baudrate back to 115200 Bd
>>
>> [Type Ctrl-\ + c to quit]
>>
>> BootROM 1.20
>> Booting from SPI flash
>>
>>
>> So the CPU has run through a reset here.
> 
> What kind of CPU core has your AXP board? Maybe there is some arm
> instruction in kwboot_baud_code[] array which is not supported by that
> core (and so reset occurs)?

AXP stands for Armada XP, which is ARM v7 AFAIK.

> And could you send me commands which you are using for compiling U-Boot
> for that your AXP board? I would like to examine resulted binary.

I'm currently using a kernel.org toolchain:

[stefan at ryzen u-boot-marvell (kwboot-test1)]$ set | grep CROSS
CROSS_COMPILE=/opt/kernel.org/gcc-11.1.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-
[stefan at ryzen u-boot-marvell (kwboot-test1)]$ 
/opt/kernel.org/gcc-11.1.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc 
--version
arm-linux-gnueabi-gcc (GCC) 11.1.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Here my commands to generate the U-Boot binary:

make mrproper
make theadorable_debug_defconfig
make -s -j20

>>> And what is the output of following command immediately after kwboot?
>>>
>>> stty -F /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A1019EGY-if00-port0
>>
>> Changing baudrate to 230400 Bd
>> Baudrate was not changed
>>
>>
>> xmodem: Protocol error
>> [stefan at ryzen u-boot-marvell (kwboot-test1)]$ stty -F
>> /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A1019EGY-if00-port0
>> speed 230400 baud; line = 0;
> 
> ... but baudrate _was_ changed.
> 
> So it looks like a bug in kwboot code. Try to apply above diff, it is
> really possible that you hit that logical error. (Interesting that
> neither Marek nor me saw it)
> 
>> intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof =
>> <undef>; start = <undef>; stop = <undef>; susp = <undef>; rprnt = <undef>;
>> werase = <undef>; lnext = <undef>; discard = <undef>; min = 1; time = 0;
>> -brkint -icrnl -imaxbel
>> -opost -onlcr
>> -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
>>
>>> Also, could try to catch whole strace log and send it to me?
>>
>> I'll try to do this later today.
> 
> 'strace kwboot ... 1>log 2>&1' should do it...

Okay, will follow in the next privatze mail.

Thanks,
Stefan


More information about the U-Boot mailing list