Add merging of labelled subnodes. This patch allows the following
PATCH 1/1 Add merging of labelled subnodes. This patch allows the following
From: David Gibson <[email protected]>
syntax:
/ {
child {
label: subchild {
};
};
};&label {
prop = "value";
};which will result in the following tree:
/ {
child {
label: subchild {
prop = "value";
};
};
};Signed-off-by David Gibson <[email protected]>
Signed-off-by Grant Likely <grant.likely-s3s/[email protected]>
--- dtc-lexer.l | 2 +- dtc-parser.y | 28 ++++++++++++++---------- 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, 73 insertions(+), 17 deletions(-) create mode 100644 tests/nonexist-node-ref2.dts create mode 100644 tests/test_tree1_merge_labelled.dts
dtc-lexer.l +1 -1
@@ -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 +16 -12
@@ -75,7 +75,6 @@ static unsigned long long eval_literal(const char *s, int base, int bits); %type <proplist> proplist %type <node> devicetree -%type <node> devicetrees %type <node> nodedef %type <node> subnode %type <nodelist> subnodes
@@ -83,7 +82,7 @@ static unsigned long long eval_literal(const char *s, int base, int bits); %% sourcefile: - DT_V1 ';' memreserves devicetrees + DT_V1 ';' memreserves devicetree { the_boot_info = build_boot_info($3, $4, guess_boot_cpuid($4));
@@ -120,21 +119,26 @@ addr: } ; -devicetrees: - devicetree +devicetree: + '/' nodedef { - $$ = $1; + $$ = name_node($2, ""); } - | devicetrees devicetree + | devicetree '/' nodedef { - $$ = merge_nodes($1, $2); + $$ = merge_nodes($1, $3); } - ; - -devicetree: - '/' nodedef + | devicetree 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 +3 -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 +1 -1
@@ -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 +1 -3
@@ -34,12 +34,10 @@ prop-int = [deadbeef]; }; subnode@2 { - subsubnode@0 { + ssn0: subsubnode@0 { phandle = <0x2001>; compatible = "subsubnode2", "subsubnode"; prop-int = <0726746425>; }; }; }; - -
tests/test_tree1_merge_labelled.dts new file +41 -0
41 lines not on this page · raw message
Quoted 25 lines
From: David Gibson <[email protected]>
syntax:
/ { child { label: subchild { }; }; };&label { prop = "value"; };which will result in the following tree:
/ { child { label: subchild { prop = "value"; }; }; };
Quoted 2 lines
Signed-off-by David Gibson <[email protected]>Signed-off-by Grant Likely <grant.likely-s3s/[email protected]>
Applied and pushed out.
Thanks!
jdl