diff mbox series

boot: Pass baud rate to stdout-path

Message ID 20240411-stdout-v1-1-66ebe5bb152f@jookia.org
State Changes Requested
Delegated to: Tom Rini
Headers show
Series boot: Pass baud rate to stdout-path | expand

Commit Message

John Watts April 11, 2024, 5:03 a.m. UTC
Linux might use the wrong baud rate such as 9600 by default, make sure
to specify it when passing the serial port over.

Signed-off-by: John Watts <contact@jookia.org>
---
On my board at least (a sunxi T113) the serial console will initialize
as 9600 baud instead of the set baud. Pass the baud with the serial
device to Linux to solve this issue.
---
 boot/fdt_support.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)


---
base-commit: 777c28460947371ada40868dc994dfe8537d7115
change-id: 20240411-stdout-4f91b566a0f2

Best regards,

Comments

Mark Kettenis April 11, 2024, 3:11 p.m. UTC | #1
> From: John Watts <contact@jookia.org>
> Date: Thu, 11 Apr 2024 15:03:20 +1000
> 
> Linux might use the wrong baud rate such as 9600 by default, make sure
> to specify it when passing the serial port over.
> 
> Signed-off-by: John Watts <contact@jookia.org>
> ---
> On my board at least (a sunxi T113) the serial console will initialize
> as 9600 baud instead of the set baud. Pass the baud with the serial
> device to Linux to solve this issue.

You probably should fix this by making sure the device tree you're
using has the appropriate stdout-path node.  Because I think the
functionality you're trying to use here is deprecated:

* The linux,stdout-path property has been superseded by the
  stdout-path property.

* The description of the OF_STDOUT_VIA_ALIAS option suggests that it
  is seprecated as well:

    This option currently references CONFIG_CONS_INDEX, which is
    incorrect when used with device tree as this option does not
    exist / should not be used.

  It just happens that sunxi is one of the few remaining "modenr"
  platforms that still uses CONFIG_CONS_INDEX.

That said, the diff is interesting.  To me it doesn't really make
sense that you can change the serial port and its parameters in
U-Boot, but that this choice doesn't always make it into the device
tree that is passed to the OS.

A particular case that I'm dealing with is the default speed of
1500000 that the various Rockchip SoCs use.  This doesn't work with
many of the USB-to-serial interfaces on the market and is also rather
susceptible to line noise.  So for OpenBSD packages I've decide to use
115200 instead.  But that means I have to patch all the device trees
in addition to changing the CONFIG_BAUDRATE setting.  If U-Boot would
tweak the stdout-path property based on CONFIG_BAUDRATE that would
make things easier.

Cheers,

Mark

> ---
>  boot/fdt_support.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/boot/fdt_support.c b/boot/fdt_support.c
> index 090d82ee80..83e62f47b5 100644
> --- a/boot/fdt_support.c
> +++ b/boot/fdt_support.c
> @@ -153,9 +153,9 @@ static int fdt_fixup_stdout(void *fdt, int chosenoff)
>  	}
>  
>  	/* fdt_setprop may break "path" so we copy it to tmp buffer */
> -	memcpy(tmp, path, len);
> +	len = sprintf(tmp, "%.*s:%d", len, (char *)path, CONFIG_BAUDRATE);
>  
> -	err = fdt_setprop(fdt, chosenoff, "linux,stdout-path", tmp, len);
> +	err = fdt_setprop(fdt, chosenoff, "linux,stdout-path", tmp, len + 1);
>  	if (err < 0)
>  		printf("WARNING: could not set linux,stdout-path %s.\n",
>  		       fdt_strerror(err));
> 
> ---
> base-commit: 777c28460947371ada40868dc994dfe8537d7115
> change-id: 20240411-stdout-4f91b566a0f2
> 
> Best regards,
> -- 
> John Watts <contact@jookia.org>
> 
>
John Watts April 11, 2024, 9:03 p.m. UTC | #2
On Thu, Apr 11, 2024 at 05:11:46PM +0200, Mark Kettenis wrote:
> You probably should fix this by making sure the device tree you're
> using has the appropriate stdout-path node.  Because I think the
> functionality you're trying to use here is deprecated:

Hi Mark,

Interesting, I'll go with that approach instead.

> ...
> 
> A particular case that I'm dealing with is the default speed of
> 1500000 that the various Rockchip SoCs use.  This doesn't work with
> many of the USB-to-serial interfaces on the market and is also rather
> susceptible to line noise.  So for OpenBSD packages I've decide to use
> 115200 instead.  But that means I have to patch all the device trees
> in addition to changing the CONFIG_BAUDRATE setting.  If U-Boot would
> tweak the stdout-path property based on CONFIG_BAUDRATE that would
> make things easier.

That's an interesting use case! Would you mind testing this patch if possible?

> Cheers,
> 
> Mark

John.
diff mbox series

Patch

diff --git a/boot/fdt_support.c b/boot/fdt_support.c
index 090d82ee80..83e62f47b5 100644
--- a/boot/fdt_support.c
+++ b/boot/fdt_support.c
@@ -153,9 +153,9 @@  static int fdt_fixup_stdout(void *fdt, int chosenoff)
 	}
 
 	/* fdt_setprop may break "path" so we copy it to tmp buffer */
-	memcpy(tmp, path, len);
+	len = sprintf(tmp, "%.*s:%d", len, (char *)path, CONFIG_BAUDRATE);
 
-	err = fdt_setprop(fdt, chosenoff, "linux,stdout-path", tmp, len);
+	err = fdt_setprop(fdt, chosenoff, "linux,stdout-path", tmp, len + 1);
 	if (err < 0)
 		printf("WARNING: could not set linux,stdout-path %s.\n",
 		       fdt_strerror(err));