[PATCH 8/9 V3] Add documentation for the new DTS language.
Scott Wood
scottwood at freescale.com
Tue Mar 2 08:06:20 EST 2010
Stephen Neuendorffer wrote:
> One thing I've seen in the past is that there is a sequentialization question in this, which becomes
> more apparent once deletion is allowed.
>
> First off, my assumption is that each node name is always unique in a tree, even when overrides are allowed.
> Otherwise the sub-node and property ordering becomes important.
>
> foo {
> bar = 2;
> bar = 3; // Illegal
> } ;
>
>
> foo {
> bar = 2;
> }
> foo {
> bar = 3; // Legal
> };
>
>
> So, essentially, sequentialization of operation is forced by the concatenation of trees.
Hmm, I'd think it would be useful to e.g. include a template and subsequently
modify it within the same node, rather than a more verbose and error-prone
process of referencing labels later.
If sequential operations within a tree are supported, I'm not sure that there's
any remaining need for separate top-level trees -- you could express the same
thing as top-level property/node redefinitions.
What are the problems with supporting this?
> foo {
> bar-label: bar = 2;
> }
> delete(&bar-label); // Legal.
> foo {
> bar-label: bar = 4; // Legal, even though previously deleted
> }
Is it legal to reuse the label, even though it sort of points to the same spot?
If you don't reuse the label, but bar is redefined, where does bar-label point?
Do all labels to nodes in separate trees that end up referring to the same node
in the final tree have the same phandle? Are they interchangeable in subsequent
delete commands?
> One trick is that the below is problematic, or at least hard to verify statically.
>
> foo {
> delete(&bar-label); // Legal.
> delete(bar); // May or may not be Illegal, since don't know what bar-label references
> }
That raises the question of whether it's legal to delete things that aren't
there. There may be cases where a dts fragment A doesn't know whether fragment
B will have defined something, and fragment A wants to make sure it ends up
undefined one way or another.
> So, to syntax: the sequentialization property may be more syntactically obvious if deletion resembles
> setting a property or node like:
>
> ^bar
> !bar
> or even
> bar = !;
> bar !;
What specifically is made more obvious? Using symbols rather than names seems
more cryptic to me.
Only the "bar = !" form seems to clearly indicate that, for the purposes of this
particular tree, you're assigning some special placeholder to bar rather than
performing an immediate action. That could just as well be done with something
like "bar = /delete-prop/".
I'd rather make them actually behave like immediate commands, though.
> Which brings up the question 'undeletion question'. Can you do:
>
> d-label: delete(bar);
> delete(&d-label);
I'd say no -- delete operates on data, not commands.
-Scott
More information about the devicetree-discuss
mailing list