From: "Uwe Kleine-König" <u.kleine-koenig-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
To: David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org>
Cc: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
"devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org"
<kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>,
devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: using labels for stdout-path
Date: Fri, 12 May 2017 09:41:55 +0200 [thread overview]
Message-ID: <20170512074155.oshpdio2hb7cz377@pengutronix.de> (raw)
In-Reply-To: <20170512034816.GA12908-K0bRW+63XPQe6aEkudXLsA@public.gmane.org>
Hello David,
On Fri, May 12, 2017 at 01:48:16PM +1000, David Gibson wrote:
> On Thu, May 11, 2017 at 08:40:23PM +0200, Uwe Kleine-König wrote:
> > On Thu, May 11, 2017 at 10:49:15AM -0500, Rob Herring wrote:
> > > On Thu, May 11, 2017 at 8:05 AM, Uwe Kleine-König
> > > <u.kleine-koenig-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> wrote:
> > > > Hello,
> > > >
> > > > on an i.MX28 based machine I want to have the console on &duart with
> > > > 115200 Bd, 8 Bit, no parity.
> > > >
> > > > The options for that are AFAICT:
> > > >
> > > > - use an alias, like:
> > > >
> > > > stdout-path = "serialX:115200n8";
> > > >
> > > > the problem here is, that the duart doesn't have an alias. I guess I
> > > > shouldn't introduce a new one for my setup?
> > > >
> > > > - use a label, like:
> > > >
> > > > stdout-path = &duart, ":115200n8";
> > > >
> > > > This would be the prettiest, but that doesn't work, because there is
> > > > a '\0' separating the path and the options.
> > >
> > > You could make that work changing the kernel parsing, but that's
> > > probably not a good option if we ever want to support more than 1 out
> > > path.
> >
> > Good point. That's a good reason to not use this syntax.
>
> Yes, changing the actual property format is a bad idea.
>
> > > > - use the full path, like:
> > > >
> > > > stdout-path = "/apb@80000000/apbx@80040000/serial@80074000:115200n8";
> > > >
> > > > This is ugly.
> > > >
> > > > Do I miss something? Is that worth to introduce new syntax, maybe
> > > >
> > > > stdout-path = &duart . ":115200n8";
> > > >
> > > > or similar?
> > >
> > > Seems like we should make a comma be significant in splitting strings.
> > > I'm not sure if there's anything relying on "foo" "bar" and "foo",
> > > "bar" being the same. At least for numbers, a comma has no meaning, so
> > > it would complicate the parsing I'd imagine. Not really an area I'm
> > > familiar with.
> >
> > "foo" "bar" is a syntax error now (and another obvious candidate for
> > string concatination). So writing in the dts
>
> Right. "foo" "bar" would be my preferred syntax for string
> concatenation (the main guiding principle for dts syntax is "be like C
> where possible").
>
> >
> > stdout-path = &duart ":115200n8";
> >
> > and getting the same result as
> >
> > stdout-path = "/apb@80000000/apbx@80040000/serial@80074000:115200n8";
> >
> > looks nicely and consistent with
> >
> > stdout-path = &duart;
> >
> > being equivalent to
> >
> > stdout-path = "/apb@80000000/apbx@80040000/serial@80074000";
> >
> > After a quick look into the dtc sources I imagine that wouldn't be too
> > hard to implement for someone being fluent in lex and yacc.
>
> Unfortunately, there are two complications with this. The more minor
> one is that an "implicit" operation like this (no actual operator
> symbol) can make things get a bit curly in the grammar - mostly by
> allowing potential ambiguity in situations which are obviously
> different to a human, but not to the parser.
/me remembers his algorithms courses about ambiguous grammars and
mumbles something about left and right recursion.
> The bigger problem is that during the parse which is when we're (for
> example) evaluating integer expressions, we haven't yet resolved
> labels. So, we can't expand the reference, we just insert a "marker"
> in the property bytestring which says to insert the node path later.
> That means we can't just have simple code to do a string concatenation
> here. That marker gets expanded later on, once we've resolved all
> references.
>
> Note that this is the same reason you can do:
> prop = < (1+2+3) &foo >;
> But you can't do
> prop = < (&foo + 1) >;
>
> There are two ways we could deal with this:
>
> 1) The quick and dirty way: special case string append with a
> reference, so that we insert a new type of marker which will be
> expaned to the node path without the final \0.
>
> 2) The complicated but powerful way: rather than (mostly)
> constructing the property values as bytestrings at parse time, we
> just construct the property values as expression trees at parse
> time, then evaluate those expression trees later on, once we're
> able to resolve references.
>
> Approach (2) has been suggested before. As well as this case it would
> be a necessary step for allowing defined "functions" (for integers or
> otherwise) in dtc. It has some nice properties, but it's a rather a
> lot of work.
lex and yacc are great, but I'm not into them to be of help here :-|
> > And probably
> > it would be cheap to add the other obvious extensions like:
> >
> > property = < 0x12 0x43 > "a string" &label /incbin/(filename);
>
> Um.. what? That's not an obvious extension at all. The proposed
> change is to have (a b) be a string concatenation, but several of the
> things above aren't strings, so it's not clear what it should do. If
> you want _bytestring_ concatenation, we already have syntax for that -
> that's exactly what ',' does in dtc.
When compiling and then decompiling a node that contains
property = < 0x41424344 0x45464700 >;
I get
property = "ABCDEFG";
in the dts output. So I assumed that strings and arrays are just
different syntactic ways to define a value and so concatenation would
work for both the same way. Now thinking a bit more there are some
problems that are likely solved best by not allowing concatenation for
arrays and binary data.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
next prev parent reply other threads:[~2017-05-12 7:41 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-11 13:05 using labels for stdout-path Uwe Kleine-König
[not found] ` <20170511130545.co6pyyvlwuitbyne-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2017-05-11 15:49 ` Rob Herring
[not found] ` <CAL_JsqL66sWFovGhYGaA_sB_pnvTrjyaQ7MW3=5pkD5Qwb6y_w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-11 18:40 ` Uwe Kleine-König
[not found] ` <20170511184023.oi4bwwrutllexjen-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2017-05-12 3:48 ` David Gibson
[not found] ` <20170512034816.GA12908-K0bRW+63XPQe6aEkudXLsA@public.gmane.org>
2017-05-12 7:41 ` Uwe Kleine-König [this message]
[not found] ` <20170512074155.oshpdio2hb7cz377-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2017-05-13 8:29 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170512074155.oshpdio2hb7cz377@pengutronix.de \
--to=u.kleine-koenig-bicnvbalz9megne8c9+irq@public.gmane.org \
--cc=david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org \
--cc=devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
--cc=robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).