Add merging of labelled subnodes. This patch allows the following]
PATCH 1/1 Add merging of labelled subnodes. This patch allows the following]
Done. I think the testcase we have for it is not ideal, but that's easily fixed later.
----- Forwarded message from Grant Likely <grant.likely-s3s/[email protected]> -----
Date: Sat, 18 Sep 2010 17:54:47 -0600
From: Grant Likely <grant.likely-s3s/[email protected]>
To: [email protected], jdl-CYoMK+44s/[email protected],
devicetree-discuss-uLR06cmDAlY/[email protected]
Subject: Re: [PATCH] Add merging of labelled subnodes. This patch allows the following
David, can you please ack adding your s-o-b to this one? It is mostly your patch anyway, but I had tested it and added a failure test case. Then Jon will be able to merge it.
g.
---------- Forwarded message ----------
From: Grant Likely <grant.likely-s3s/[email protected]>
Date: Mon, Mar 1, 2010 at 9:54 AM
Subject: [PATCH] Add merging of labelled subnodes. This patch allows
the following
To: [email protected], jdl-CYoMK+44s/[email protected], devicetree-discuss-uLR06cmDAlY/[email protected]
From: David Gibson <[email protected]>
syntax:
/ {
child {
label: subchild {
};
};
};
&label {
prop = "value";
};
which will result in the following tree:
/ {
child {
label: subchild {
prop = "value";
};
};
};
---
Hi Jon,
This works well for me. I've added another test case to ensure that using a non-existent label will fail. This patch is primarily from David now, so I've changed the From: attribution, but it still needs his s-o-b line.
Cheers,
g.
dtc-lexer.l | 2 +-
dtc-parser.y | 24 ++++++++++++-------- tests/nonexist-node-ref2.dts | 10 +++++++++ tests/run_tests.sh | 3 +++ tests/test_tree1.dts | 2 +- tests/test_tree1_merge.dts | 4 +-- tests/test_tree1_merge_labelled.dts | 41 +++++++++++++++++++++++++++++++++++
7 files changed, 71 insertions(+), 15 deletions(-)
create mode 100644 tests/nonexist-node-ref2.dts create mode 100644 tests/test_tree1_merge_labelled.dts
dtc-lexer.l +0 -0
@@ -109,7 +109,7 @@ static int pop_input_file(void);
return DT_LITERAL;
}
-\&{LABEL} { /* label reference */ +<*>\&{LABEL} { /* label reference */ DPRINT("Ref: %s\n", yytext+1); yylval.labelref = xstrdup(yytext+1); return DT_REF;
dtc-parser.y +0 -0
@@ -74,7 +74,6 @@ static unsigned long long eval_literal(const char
*s, int base, int bits);
%type <prop> propdef
%type <proplist> proplist
-%type <node> devicetree
%type <node> devicetrees
%type <node> nodedef
%type <node> subnode
@@ -121,20 +120,25 @@ addr:
;
devicetrees:
- devicetree
+ '/' nodedef
{
- $$ = $1;
+ $$ = name_node($2, "");
}
- | devicetrees devicetree
+ | devicetrees '/' nodedef
{
- $$ = merge_nodes($1, $2);
+ $$ = merge_nodes($1, $3);
}
- ;
-
-devicetree:
- '/' nodedef
+ | devicetrees DT_REF nodedef
{
- $$ = name_node($2, "");
+ struct node *target;
+
+ target = get_node_by_label($1, $2);
+ if (target)
+ merge_nodes(target, $3);
+ else
+ yyerror("label does not exist in "
+ " node redefinition");
+ $$ = $1;
}
;
tests/nonexist-node-ref2.dts new file +10 -0
@@ -0,0 +1,10 @@ +/dts-v1/; + +/ { + label: node { + }; +}; + +/* Try to redefine a node using a non-existent label */ +&nosuchnode { +};
tests/run_tests.sh +0 -0
@@ -300,6 +300,8 @@ dtc_tests () {
# Check merge/overlay functionality
run_dtc_test -I dts -O dtb -o dtc_tree1_merge.test.dtb test_tree1_merge.dts tree1_tests dtc_tree1_merge.test.dtb test_tree1.dtb
+ run_dtc_test -I dts -O dtb -o dtc_tree1_merge_labelled.test.dtb test_tree1_merge_labelled.dts
+ tree1_tests dtc_tree1_merge_labelled.test.dtb test_tree1.dtb run_dtc_test -I dts -O dtb -o multilabel_merge.test.dtb multilabel_merge.dts run_test references multilabel.test.dtb
run_test dtbs_equal_ordered multilabel.test.dtb multilabel_merge.test.dtb @@ -312,6 +314,7 @@ dtc_tests () {
check_tests minusone-phandle.dts explicit_phandles
run_sh_test dtc-checkfails.sh phandle_references -- -I dts -O dtb nonexist-node-ref.dts
run_sh_test dtc-checkfails.sh phandle_references -- -I dts -O dtb nonexist-label-ref.dts
+ run_sh_test dtc-fatal.sh -I dts -O dtb nonexist-node-ref2.dts check_tests bad-name-property.dts name_properties
check_tests bad-ncells.dts address_cells_is_cell size_cells_is_cell interrupt_cells_is_cell
tests/test_tree1.dts +0 -0
@@ -25,7 +25,7 @@
linux,phandle = <0x2000>;
prop-int = <123456789>;
- subsubnode@0 {
+ ssn0: subsubnode@0 {
phandle = <0x2001>;
compatible = "subsubnode2", "subsubnode"; prop-int = <0726746425>;
tests/test_tree1_merge.dts +0 -0
@@ -34,12 +34,10 @@
prop-int = [deadbeef];
};
subnode@2 {
- subsubnode@0 {
+ ssn0: subsubnode@0 {
phandle = <0x2001>;
compatible = "subsubnode2", "subsubnode"; prop-int = <0726746425>;
};
};
};
-
-
(quoted diff) +0 -0
b/tests/test_tree1_merge_labelled.dts
new file mode 100644
index 0000000..46a6840
tests/test_tree1_merge_labelled.dts new file +41 -0
41 lines not on this page · raw message
Signature · 11 lines
Grant Likely, B.Sc., P.Eng. Secret Lab Technologies Ltd. ----- End forwarded message ----- -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
Quoted 2 lines
Done. I think the testcase we have for it is not ideal, but that's easily fixed later.
Guys,
Any chance I can get a clean patch that has clean tabs and doesn't have high-bit-set characters embedded in it?
Thanks!
jdl
Quoted 27 lines
From: David Gibson <[email protected]>
syntax:
/ {
=A0 =A0 =A0 =A0child {
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0label: subchild {
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0};
=A0 =A0 =A0 =A0};
};&label {
=A0 =A0 =A0 =A0prop =3D "value";
};which will result in the following tree:
/ {
=A0 =A0 =A0 =A0child {
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0label: subchild {
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0prop =3D "value"; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0};
=A0 =A0 =A0 =A0};
};Signed-off-by David Gibson <[email protected]>Signed-off-by Grant Likely <grant.likely-s3s/[email protected]>
A message that is not in the archive (sent off-list or not yet received): E1Oxhfz-0006np-W9-CYoMK+44s/[email protected]
Quoted 7 lines · Jon Loeliger
Quoted 2 lines
Done. I think the testcase we have for it is not ideal, but that's easily fixed later.
Guys,
Any chance I can get a clean patch that has clean tabs and doesn't have high-bit-set characters embedded in it?
done.
g.