lib: utils: consider ':' in stdout-path
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Fri, 28 May 2021 17:06:32 +0000 (19:06 +0200)
committerAnup Patel <anup@brainfault.org>
Wed, 2 Jun 2021 11:36:17 +0000 (17:06 +0530)
The value of the /chosen/stdout-path devicetree property is used to
determine the UART used by openSBI. According to the devicetree
specification the value may contain a hyphen, e.g.

chosen {
                stdout-path = "/serial@f00:115200";
        };

If the character ':' is present, it terminates the path of the device.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
lib/utils/serial/fdt_serial.c

index 25982ec..1d1eba8 100644 (file)
@@ -42,12 +42,21 @@ int fdt_serial_init(void)
        int pos, noff = -1, len, coff, rc;
        void *fdt = sbi_scratch_thishart_arg1_ptr();
 
-       /* Find offset of node pointed by stdout-path */
+       /* Find offset of node pointed to by stdout-path */
        coff = fdt_path_offset(fdt, "/chosen");
        if (-1 < coff) {
                prop = fdt_getprop(fdt, coff, "stdout-path", &len);
-               if (prop && len)
-                       noff = fdt_path_offset(fdt, prop);
+               if (prop && len) {
+                       const char *sep, *start = prop;
+
+                       /* The device path may be followed by ':' */
+                       sep = strchr(start, ':');
+                       if (sep)
+                               noff = fdt_path_offset_namelen(fdt, prop,
+                                                              sep - start);
+                       else
+                               noff = fdt_path_offset(fdt, prop);
+               }
        }
 
        /* First check DT node pointed by stdout-path */