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@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@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@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@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@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@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@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

Reply via email to