[PATCH u-boot-marvell v3 00/39] kwboot higher baudrate
Stefan Roese
sr at denx.de
Fri Oct 1 11:58:14 CEST 2021
Hi Pali,
On 01.10.21 11:28, Pali Rohár wrote:
> Hello!
>
> On Friday 01 October 2021 09:46:58 Stefan Roese wrote:
>> Hi Pali,
>>
>> On 30.09.21 20:14, Pali Rohár wrote:
>>> Hello!
>>>
>>> Could you test or review this patch series?
>>>
>>> It is a big improvement for kwboot as it allows to transfer u-boot over
>>> uart into mvebu platforms much faster.
>>
>> I'm testing this series right now on my theadorable target, which
>> is Armada XP based. Here I get this error:
>>
>> $ ./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
>> Aligning image header to Xmodem block size
>> Sending boot message. Please reboot the target...|
>> Waiting 2s and flushing tty
>> Sending boot image header (90496 bytes)...
>> 0 %
>> [......................................................................]
>> 10 %
>> [......................................................................]
>> 19 %
>> [......................................................................]
>> 29 %
>> [......................................................................]
>> 39 %
>> [......................................................................]
>> 49 %
>> [......................................................................]
>> 59 %
>> [......................................................................]
>> 69 %
>> [......................................................................]
>> 79 %
>> [......................................................................]
>> 89 %
>> [......................................................................]
>> 99 % [....... ]
>> Done
>>
>> U-Boot SPL 2021.10-rc5-00228-g5523b4689ff9 (Oct 01 2021 - 08:39:06 +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)...
>
> At this stage SPL was successfully executed and returned control back to
> BootROM. BootROM now should execute second (injected) header for
> changing baudrate.
>
>> Changing baudrate to 230400 Bd
>
> At this stage kwboot received baudrate change magic string which
> indicates that BootROM started executing second injected header, as this
> string is printed at the beginning of the injected code (kwboot_baud_code[])
>
> But we do not know if whole code was successfully executed or not.
>
> In case of error (e.g. executing unsupported instructions or touching
> unavailable memory) CPU is reset.
>
> Can you check if CPU was reset and BootROM started booting from primary
> source (probably SPI) immediately when you saw this message?
I checked by quickly starting a terminal app and it does not seem that
the CPU did go through a reboot. Nothing on the UART at this stage.
BUT:
The tests I did in this mail were done with your 39 patches applied
on top of "master-kwboot" [1]. Here booting with 115k works as explained
below.
Now I applied the same 39 patches on top of "next" [2]. And here not
even booting with 115k works on my AXP target. It always hangs at this
stage:
[stefan at ryzen u-boot-marvell (next)]$ ./tools/kwboot -b u-boot-spl.kwb
-t /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A1019EGY-if00-port0
Patching image boot signature to UART
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-rc5-00431-g6c96332441cf (Oct 01 2021 - 11:56:49 +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)...
xmodem: Connection timed out
This seems to work at least for 115k in the "master-kwboot" branch.
Any ideas?
Thanks,
Stefan
[1]
https://source.denx.de/u-boot/custodians/u-boot-marvell/-/commits/master-kwboot
[2] https://source.denx.de/u-boot/custodians/u-boot-marvell/-/commits/next
> Or is board even after executing kwboot stucked in some UART execution?
>
>> Baudrate was not changed
>
> At this stage kwboot already instructed your FTDI adapter to switch
> baudrate and is ready for receiving data from AXP at higher speed.
>
> This message indicates that kwboot has not received xmodem ACK for the
> last packet.
>
> Could you check what is the delay between "Changing baudrate to ..." and
> "Baudrate was not changed" messages? It is in immediately or few seconds
> or minute?
>
> What is CPU speed of your AXP? Could you try to increase or decrease
> sleep timeout which is in ARM kwboot_baud_code[] bellow comment
> "Sleep 1ms ~~ 600000 cycles at 1200 MHz"
>
> To debug you can try to also add debug prints in while loop which is in
> function kwboot_xm_sendblock() to check when and how many times it is
> executed.
>
> And another case for test. Check if AXP really switched to higher
> baudrate. You can do it by commenting code which changes baudrate on
> local PC side in function kwboot_baud_magic_handle(). If AXP does not
> change baudrate then it continue communication at 115200 and so if you
> comment code "Changing baudrate to %d Bd" in kwboot_baud_magic_handle()
> it would also continue communication at 115200.
>
>>
>> xmodem: Protocol error
>>
>>
>> UART booting currently only seems to work with the default 115kBaud.
>
> Does it work with lower speed? If not then it indicates that issue is in
> this baudrate change logic.
>
>> Do you have any idea what might go wrong here?
>>
>> Thanks,
>> Stefan
>>
>>> On Friday 24 September 2021 23:06:37 Marek Behún wrote:
>>>> From: Marek Behún <marek.behun at nic.cz>
>>>>
>>>> Hello Stefan and others,
>>>>
>>>> here's v3 of series adding support for booting Marvell platforms via
>>>> UART (those bootable with kwboot) at higher baudrates.
>>>>
>>>> Tested on Turris Omnia up to 5.15 MBd, which is 44x faster than
>>>> 115200 Bd.
>>>>
>>>> The user can direct kwboot to use higher baudrate via the -B option.
>>>> (BTW this option was there before but did not work with the -b option.)
>>>>
>>>> Only the payload part of the KWB image is uploaded at this higher
>>>> baudrate. The header part is still uploaded at 115200 Bd, since the code
>>>> that changes baudrate is injected into header as a binary extension.
>>>> (The payload part makes up majority of the binary, though. On Turris
>>>> Omnia the payload currently makes ~87%.)
>>>>
>>>> The series also contains various other fixes, refactors and improvements
>>>> of the code, upon which the main change is done.
>>>>
>>>> Marek & Pali
>>>>
>>>> Changes since v2:
>>>> - fixed integer overflow in patch 15
>>>> - fixed commit title in patch 32
>>>>
>>>> Changes since v1:
>>>> - fixed uploading of older kwb images, now all kwb images should be able
>>>> to upload at faster baudrate
>>>> - fixed injecting code that changes baudrate back
>>>> - various other fixes and refactors, the best way to compare with v1 is
>>>> to apply v1 and v2 separately and compare the resulting kwboot.c
>>>>
>>>> Marek Behún (19):
>>>> tools: kwbimage: Fix printf format warning
>>>> tools: kwboot: Fix buffer overflow in kwboot_terminal()
>>>> tools: kwboot: Make the quit sequence buffer const
>>>> tools: kwboot: Refactor and fix writing buffer
>>>> tools: kwboot: Fix comparison of integers with different size
>>>> tools: kwboot: Use a function to check whether received byte is a
>>>> Xmodem reply
>>>> tools: kwboot: Print new line after SPL output
>>>> tools: kwboot: Allow greater timeout when executing header code
>>>> tools: kwboot: Prevent waiting indefinitely if no xmodem reply is
>>>> received
>>>> tools: kwbimage: Simplify iteration over version 1 optional headers
>>>> tools: kwbimage: Refactor image_version()
>>>> tools: kwbimage: Refactor kwbimage header size determination
>>>> tools: kwboot: Explicitly check against size of struct main_hdr_v1
>>>> tools: kwboot: Check whether baudrate was set to requested value
>>>> tools: kwboot: Cosmetic fix
>>>> tools: kwboot: Avoid code repetition in kwboot_img_patch()
>>>> tools: kwboot: Update file header
>>>> doc/kwboot.1: Update man page
>>>> MAINTAINERS: Add entry for kwbimage / kwboot tools
>>>>
>>>> Pali Rohár (20):
>>>> tools: kwboot: Print version information header
>>>> tools: kwboot: Fix kwboot_xm_sendblock() function when
>>>> kwboot_tty_recv() fails
>>>> tools: kwboot: Fix return type of kwboot_xm_makeblock() function
>>>> tools: kwboot: Fix printing progress
>>>> tools: kwboot: Print newline on error when progress was not completed
>>>> tools: kwboot: Split sending image into header and data stages
>>>> tools: kwboot: Allow non-xmodem text output from BootROM only in a
>>>> specific case
>>>> tools: kwboot: Properly finish xmodem transfer
>>>> tools: kwboot: Always call kwboot_img_patch_hdr()
>>>> tools: kwboot: Don't patch image header if signed
>>>> tools: kwboot: Patch source address in image header
>>>> tools: kwboot: Patch destination address to DDR area for SPI image
>>>> tools: kwbimage: Update comments describing kwbimage v1 structures
>>>> tools: kwboot: Round up header size to 128 B when patching
>>>> tools: kwboot: Support higher baudrates when booting via UART
>>>> tools: kwboot: Allow any baudrate on Linux
>>>> tools: kwboot: Fix initializing tty device
>>>> tools: kwboot: Disable tty interbyte timeout
>>>> tools: kwboot: Disable non-blocking mode
>>>> tools: kwboot: Add Pali and Marek as authors
>>>>
>>>> MAINTAINERS | 10 +
>>>> doc/kwboot.1 | 60 ++-
>>>> tools/kwbimage.c | 130 ++---
>>>> tools/kwbimage.h | 99 +++-
>>>> tools/kwboot.c | 1197 +++++++++++++++++++++++++++++++++++------
>>>> tools/termios_linux.h | 189 +++++++
>>>> 6 files changed, 1385 insertions(+), 300 deletions(-)
>>>> create mode 100644 tools/termios_linux.h
>>>>
>>>> --
>>>> 2.32.0
>>>>
>>
>>
>> Viele Grüße,
>> Stefan
>>
>> --
>> DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
>> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
>> Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
Viele Grüße,
Stefan
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
More information about the U-Boot
mailing list