[v2,2/2] of: support passing console options with stdout-path

Message ID 1417023640-23464-3-git-send-email-leif.lindholm@linaro.org
State New
Headers show

Commit Message

Leif Lindholm Nov. 26, 2014, 5:40 p.m.
Support specifying console options (like with console=ttyXN,<options>)
by appending them to the stdout-path property after a separating ':'.

Example:
        stdout-path = "uart0:115200";

Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org>
---
 drivers/of/base.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Grant Likely Nov. 26, 2014, 9:07 p.m. | #1
On Wed, Nov 26, 2014 at 6:30 PM, Andrew Lunn <andrew@lunn.ch> wrote:
> On Wed, Nov 26, 2014 at 05:40:40PM +0000, Leif Lindholm wrote:
>> Support specifying console options (like with console=ttyXN,<options>)
>> by appending them to the stdout-path property after a separating ':'.
>>
>> Example:
>>         stdout-path = "uart0:115200";
>
> Hi Leif
>
> This should be documented somewhere under
> Documentation/devicetree/bindings/
>
> Not sure where thought. Maybe a top level chosen.txt?

Actually, this one doesn't. It is already documented in ePAPR

g.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Leif Lindholm Nov. 27, 2014, 1:16 p.m. | #2
On Thu, Nov 27, 2014 at 12:15:43PM +0000, Mark Rutland wrote:
> On Wed, Nov 26, 2014 at 09:48:47PM +0000, Andrew Lunn wrote:
> > On Wed, Nov 26, 2014 at 09:07:33PM +0000, Grant Likely wrote:
> > > On Wed, Nov 26, 2014 at 6:30 PM, Andrew Lunn <andrew@lunn.ch> wrote:
> > > > On Wed, Nov 26, 2014 at 05:40:40PM +0000, Leif Lindholm wrote:
> > > >> Support specifying console options (like with console=ttyXN,<options>)
> > > >> by appending them to the stdout-path property after a separating ':'.
> > > >>
> > > >> Example:
> > > >>         stdout-path = "uart0:115200";
> > > >
> > > > Hi Leif
> > > >
> > > > This should be documented somewhere under
> > > > Documentation/devicetree/bindings/
> > > >
> > > > Not sure where thought. Maybe a top level chosen.txt?
> > > 
> > > Actually, this one doesn't. It is already documented in ePAPR
> > 
> > Hi Grant
> > 
> > Humm, do i have an old version of ePAPR?
> > 
> > All i see is that in Table 3-4 It says:
> > 
> > stdout-path O <string> A string that specifies the full path to the
> > 	      	       node representing the device to be used for
> > 	      	       boot console output. If the character ":" is
> > 	      	       present in the value it terminates the
> > 	      	       path. The value may be an alias.
> > 
> > 		       If the stdin-path property is not specified,
> > 		       stdout-path should be assumed to define the input device.
> > 
> > So what is before the : is defined. What comes afterwards,
> > baudrate/parity/bits/flow control does not appear to the defined in
> > ePAPR. Should we not document the extension being added here?
> 
> I believe that we should, and it should be relatively trivial to add a
> document stating that the format and meaning of the parts after the ':'
> are device-specific. 

Device-specific is a bit broad though?

> So how about Documentation/devicetree/bindings/serial/stdout-path.txt,
> with something like the following:

There is, however, nothing serial-specific about this functionality -
it console-specific.

Could it be bindings/console/stdout-path.txt?
 
> ---->8----
> Device trees may specify the device to be used for boot console output
> with a stdout-path property under /chosen, as described in ePAPR, e.g.
> 
> / {
> 	chosen {
> 		stdout-path = "/serial@f00:115200";
> 	};
> 
> 	serial@f00 {
> 		compatible = "vendor,some-uart";
> 		reg = <0xf00 0x10>;
> 	};
> };
> 
> If the character ":" is present in the value, this terminates the path.
> The meaning of any cahracters following the ":" is device-specific, and
> must be specified in the relevant binding documentation.
> ---->8----
> 
> The more difficult part is documenting those (and I'm still uneasy about
> conflating the Linux driver command line options with the DT binding for
> that reason).

For the current situation, which _is_ serial-specific, could we then
add a serial/stdout-path.txt describing the mapping to
uart_parse_options - making that interface an implicit requirement for
the use of stdout-path?

/
    Leif
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Grant Likely Nov. 27, 2014, 1:39 p.m. | #3
On Wed, Nov 26, 2014 at 9:48 PM, Andrew Lunn <andrew@lunn.ch> wrote:
> On Wed, Nov 26, 2014 at 09:07:33PM +0000, Grant Likely wrote:
>> On Wed, Nov 26, 2014 at 6:30 PM, Andrew Lunn <andrew@lunn.ch> wrote:
>> > On Wed, Nov 26, 2014 at 05:40:40PM +0000, Leif Lindholm wrote:
>> >> Support specifying console options (like with console=ttyXN,<options>)
>> >> by appending them to the stdout-path property after a separating ':'.
>> >>
>> >> Example:
>> >>         stdout-path = "uart0:115200";
>> >
>> > Hi Leif
>> >
>> > This should be documented somewhere under
>> > Documentation/devicetree/bindings/
>> >
>> > Not sure where thought. Maybe a top level chosen.txt?
>>
>> Actually, this one doesn't. It is already documented in ePAPR
>
> Hi Grant
>
> Humm, do i have an old version of ePAPR?
>
> All i see is that in Table 3-4 It says:
>
> stdout-path O <string> A string that specifies the full path to the
>                        node representing the device to be used for
>                        boot console output. If the character ":" is
>                        present in the value it terminates the
>                        path. The value may be an alias.
>
>                        If the stdin-path property is not specified,
>                        stdout-path should be assumed to define the input device.
>
> So what is before the : is defined. What comes afterwards,
> baudrate/parity/bits/flow control does not appear to the defined in
> ePAPR. Should we not document the extension being added here?

Ah, good point. I had thought you were referring to the argument separator.

Yes, the extension should be documented. The binding can actually be
driver specific, but there is little to no reason for each uart driver
to be unique in this regard and the b/p/b/f format is very well
established, so I agree. Other drivers, say video out or netcon, could
use different arguments.

g.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Grant Likely Nov. 27, 2014, 1:45 p.m. | #4
On Thu, Nov 27, 2014 at 1:16 PM, Leif Lindholm <leif.lindholm@linaro.org> wrote:
> On Thu, Nov 27, 2014 at 12:15:43PM +0000, Mark Rutland wrote:
>> On Wed, Nov 26, 2014 at 09:48:47PM +0000, Andrew Lunn wrote:
>> > On Wed, Nov 26, 2014 at 09:07:33PM +0000, Grant Likely wrote:
>> > > On Wed, Nov 26, 2014 at 6:30 PM, Andrew Lunn <andrew@lunn.ch> wrote:
>> > > > On Wed, Nov 26, 2014 at 05:40:40PM +0000, Leif Lindholm wrote:
>> > > >> Support specifying console options (like with console=ttyXN,<options>)
>> > > >> by appending them to the stdout-path property after a separating ':'.
>> > > >>
>> > > >> Example:
>> > > >>         stdout-path = "uart0:115200";
>> > > >
>> > > > Hi Leif
>> > > >
>> > > > This should be documented somewhere under
>> > > > Documentation/devicetree/bindings/
>> > > >
>> > > > Not sure where thought. Maybe a top level chosen.txt?
>> > >
>> > > Actually, this one doesn't. It is already documented in ePAPR
>> >
>> > Hi Grant
>> >
>> > Humm, do i have an old version of ePAPR?
>> >
>> > All i see is that in Table 3-4 It says:
>> >
>> > stdout-path O <string> A string that specifies the full path to the
>> >                    node representing the device to be used for
>> >                    boot console output. If the character ":" is
>> >                    present in the value it terminates the
>> >                    path. The value may be an alias.
>> >
>> >                    If the stdin-path property is not specified,
>> >                    stdout-path should be assumed to define the input device.
>> >
>> > So what is before the : is defined. What comes afterwards,
>> > baudrate/parity/bits/flow control does not appear to the defined in
>> > ePAPR. Should we not document the extension being added here?
>>
>> I believe that we should, and it should be relatively trivial to add a
>> document stating that the format and meaning of the parts after the ':'
>> are device-specific.
>
> Device-specific is a bit broad though?

Not really, but the expectation should be quite strong that for UARTs,
the first argument after the ':' is the b/p/b/f string. We could also
specify that ',' is used as a separator when multiple arguments are to
be passed to a device.

>
>> So how about Documentation/devicetree/bindings/serial/stdout-path.txt,
>> with something like the following:
>
> There is, however, nothing serial-specific about this functionality -
> it console-specific.
>
> Could it be bindings/console/stdout-path.txt?
>
>> ---->8----
>> Device trees may specify the device to be used for boot console output
>> with a stdout-path property under /chosen, as described in ePAPR, e.g.
>>
>> / {
>>       chosen {
>>               stdout-path = "/serial@f00:115200";
>>       };
>>
>>       serial@f00 {
>>               compatible = "vendor,some-uart";
>>               reg = <0xf00 0x10>;
>>       };
>> };
>>
>> If the character ":" is present in the value, this terminates the path.
>> The meaning of any cahracters following the ":" is device-specific, and
>> must be specified in the relevant binding documentation.
>> ---->8----
>>
>> The more difficult part is documenting those (and I'm still uneasy about
>> conflating the Linux driver command line options with the DT binding for
>> that reason).
>
> For the current situation, which _is_ serial-specific, could we then
> add a serial/stdout-path.txt describing the mapping to
> uart_parse_options - making that interface an implicit requirement for
> the use of stdout-path?

Put it in Documentation/devicetree/bindings/chosen.txt

We may as well have one file for all the common stuff that goes into chosen.

g.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Patch

diff --git a/drivers/of/base.c b/drivers/of/base.c
index 3e764bd..d265514 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -37,6 +37,7 @@  EXPORT_SYMBOL(of_allnodes);
 struct device_node *of_chosen;
 struct device_node *of_aliases;
 struct device_node *of_stdout;
+static char *of_stdout_options;
 
 struct kset *of_kset;
 
@@ -1844,7 +1845,7 @@  void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align))
 		if (IS_ENABLED(CONFIG_PPC) && !name)
 			name = of_get_property(of_aliases, "stdout", NULL);
 		if (name)
-			of_stdout = of_find_node_by_path(name, NULL);
+			of_stdout = of_find_node_by_path(name, &of_stdout_options);
 	}
 
 	if (!of_aliases)
@@ -1970,7 +1971,7 @@  bool of_console_check(struct device_node *dn, char *name, int index)
 {
 	if (!dn || dn != of_stdout || console_set_on_cmdline)
 		return false;
-	return !add_preferred_console(name, index, NULL);
+	return !add_preferred_console(name, index, of_stdout_options);
 }
 EXPORT_SYMBOL_GPL(of_console_check);