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

Pali Rohár pali at kernel.org
Tue Oct 26 20:48:24 CEST 2021


On Tuesday 26 October 2021 16:21:02 Stefan Roese wrote:
> On 26.10.21 14:40, Pali Rohár wrote:
> > My another guess there could be a problem is usage of stack. Maybe it is
> > possible that register with stack pointer is not initialized after the
> > full transfer when going to execute main image. Same arm baudrate change
> > code is used after the SPL and before main U-Boot, and the first
> > instruction is "push". Maybe modifying the arm code to not use stack
> > when switching the baudrate back to 115200 could also help. I will look
> > at it.
> 
> Thanks.

Here is dirty hack patch which completely disable calling code for
changing baudrate back to 115200 on ARM side:

diff --git a/tools/kwboot.c b/tools/kwboot.c
index 5f4ff673972e..00d58a239c71 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -1070,17 +1070,17 @@ kwboot_xmodem(int tty, const void *_img, size_t size, int baudrate)
 		return rc;
 
 	if (baudrate) {
-		char buf[sizeof(kwb_baud_magic)];
-
-		kwboot_printv("Waiting 1s for baudrate change magic\n");
-		rc = kwboot_tty_recv(tty, buf, sizeof(buf), 1000);
-		if (rc)
-			return rc;
-
-		if (memcmp(buf, kwb_baud_magic, sizeof(buf))) {
-			errno = EPROTO;
-			return -1;
-		}
+//		char buf[sizeof(kwb_baud_magic)];
+//
+//		kwboot_printv("Waiting 1s for baudrate change magic\n");
+//		rc = kwboot_tty_recv(tty, buf, sizeof(buf), 1000);
+//		if (rc)
+//			return rc;
+//
+//		if (memcmp(buf, kwb_baud_magic, sizeof(buf))) {
+//			errno = EPROTO;
+//			return -1;
+//		}
 
 		kwboot_printv("\nChanging baudrate back to 115200 Bd\n\n");
 		rc = kwboot_tty_change_baudrate(tty, 115200);
@@ -1551,8 +1551,8 @@ kwboot_img_patch(void *img, size_t *size, int baudrate)
 		 * This code is appended after the data part of the image and
 		 * execaddr is changed to execute this code before U-Boot proper.
 		 */
-		kwboot_printv("Injecting code for changing baudrate back\n");
-		_copy_baudrate_change_code(hdr, size, 1, baudrate, 115200);
+//		kwboot_printv("Injecting code for changing baudrate back\n");
+//		_copy_baudrate_change_code(hdr, size, 1, baudrate, 115200);
 
 		/* recompute header size */
 		hdrsz = kwbheader_size(hdr);

As main U-Boot binary on ARM resets UART, it means that baudrate is
properly set to 115200. Probably beginning of the U-Boot output could be
lost but at least console should start.

Could you try this patch if it starts working now?


More information about the U-Boot mailing list