platform_external_dtc/tests/overlay_overlay_bypath.dts
David Gibson 8f1b35f883 Correct overlay syntactic sugar for generating target-path fragments
We've recently added "syntactic sugar" support to generate runtime dtb
overlays using similar syntax to the compile time overlays we've had for
a while.  This worked with the &label { ... } syntax, adjusting an existing
labelled node, but would fail with the &{/path} { ... } syntax attempting
to adjust an existing node referenced by its path.

The previous code would always try to use the "target" property in the
output overlay, which needs to be fixed up, and __fixups__ can only encode
symbols, not paths, so the result could never work properly.

This adds support for the &{/path} syntax for overlays, translating it into
the "target-path" encoding in the output.  It also changes existing
behaviour a little because we now unconditionally one fragment for each
overlay section in the source.  Previously we would only create a fragment
if we couldn't locally resolve the node referenced.  We need this for
path references, because the path is supposed to be referencing something
in the (not yet known) base tree, rather than the overlay tree we are
working with now.  In particular one useful case for path based overlays
is using &{/} - but the constructed overlay tree will always have a root
node, meaning that without the change that would attempt to resolve the
fragment locally, which is not what we want.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2018-03-06 14:53:27 +11:00

48 lines
746 B
Text

/*
* Copyright (c) 2016 NextThing Co
* Copyright (c) 2016 Free Electrons
* Copyright (c) 2016 Konsulko Inc.
*
* SPDX-License-Identifier: GPL-2.0+
*/
/dts-v1/;
/plugin/;
/* Test that we can change an int by another */
&{/test-node} {
test-int-property = <43>;
};
/* Test that we can replace a string by a longer one */
&{/test-node} {
test-str-property = "foobar";
};
/* Test that we add a new property */
&{/test-node} {
test-str-property-2 = "foobar2";
};
/* Test that we add a new node (by phandle) */
&{/test-node} {
new-node {
new-property;
};
};
&{/} {
local: new-local-node {
new-property;
};
};
&{/} {
test-several-phandle = <&local>, <&local>;
};
&{/test-node} {
sub-test-node {
new-sub-test-property;
};
};