[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 3/4] dt-uart: use ':' as default separator between path and options

',' is a valid character in a device-tree path (see ePAPR v1.1 Table
2-1), in fact ',' is actually pretty common in node names.

Using ',' as a separator breaks for example on fast models. If you use
the full path (/smb/motherboard/iofpga@3,00000000/uart@090000) rather
than the alias then earlyprintk gives:

(XEN) Looking for UART console /smb/motherboard/iofpga@3
(XEN) Unable to find device "/smb/motherboard/iofpga@3"
(XEN) Bad console= option 'dtuart'

I actually noticed this on Jetson where the uart is
"/serial@0,70006300" and there happened to be no alias defined.

Instead use ':' as the separator, it is defined to terminate the path
in the context of /chosen/stdout-path (Table 3-4) which is pretty
closely analogous to the dtuart= option and so makes a pretty good
choice (especially since the next patch adds support for stdout-path).

We still handle ',' for backwards compatibility. Note that this
introduces a wrinkle in that in order to specify a dtuart path
containing a ',' with no options you need to append an otherwise
pointless ':' (or use an alias with no ',' in it).

Additionally, expand the buffer for the dtuart option, a path can be
far longer than 30 characters (in fact the maximum size of a single
node name is 31, so it's not even necessarily enough for an alias).
128 is completely arbitrary and allows for paths at least 8 deep even
with worst case node names.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
I've retained the handling of ',' for compatibility, but I'm almost
inclined to just drop it, if not now then in a release or two.
 docs/misc/xen-command-line.markdown |    9 ++++++++-
 xen/drivers/char/dt-uart.c          |    6 ++++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/docs/misc/xen-command-line.markdown 
index 152ae03..f7cb6d9 100644
--- a/docs/misc/xen-command-line.markdown
+++ b/docs/misc/xen-command-line.markdown
@@ -550,13 +550,20 @@ Pin dom0 vcpus to their respective pcpus
 Flag that makes a 64bit dom0 boot in PVH mode. No 32bit support at present.
 ### dtuart (ARM)
-> `= path [,options]`
+> `= path [:options]`
 > Default: `""`
 Specify the full path in the device tree for the UART.  If the path doesn't
 start with `/`, it is assumed to be an alias.  The options are device specific.
+The path should be separated from the options with a `:`. For
+backwards compatibility `,` is also supported, however this is
+deprecated because `,` is a valid character in a device tree path.
+To specify a path containing a `,` with no options simply append a `:`
+to the path.
 ### e820-mtrr-clip
 > `= <boolean>`
diff --git a/xen/drivers/char/dt-uart.c b/xen/drivers/char/dt-uart.c
index 04dbb97..54e65fc 100644
--- a/xen/drivers/char/dt-uart.c
+++ b/xen/drivers/char/dt-uart.c
@@ -31,7 +31,7 @@
  * doesn't start with '/', we assuming that it's an alias.
  * @options: UART speficic options (see in each UART driver)
-static char __initdata opt_dtuart[30] = "";
+static char __initdata opt_dtuart[256] = "";
 string_param("dtuart", opt_dtuart);
 void __init dt_uart_init(void)
@@ -50,7 +50,9 @@ void __init dt_uart_init(void)
-    options = strchr(opt_dtuart, ',');
+    options = strchr(opt_dtuart, ':');
+    if ( !options )
+        options = strchr(opt_dtuart, ',');
     if ( options != NULL )
         *(options++) = '\0';

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.