Browse Source

Alter grammar to allow multiple /dts-v1/ tags

This patch allows dtc to accept multiple /dts-v1/ tags (provided they're
all at the beginning of the input), rather than giving a syntax error.

This makes it more convenient to include one .dts file from another without
having to be careful that the /dts-v1/ tag is in exactly one of them.

We a couple of existing testcases to take advantage of this, which
simplifies them slightly.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
main
David Gibson 11 years ago
parent
commit
c4cb12e193
  1. 11
      dtc-parser.y
  2. 44
      tests/test_tree1.dts
  3. 43
      tests/test_tree1_body.dtsi
  4. 2
      tests/test_tree1_delete.dts

11
dtc-parser.y

@ -101,13 +101,18 @@ extern bool treesource_error; @@ -101,13 +101,18 @@ extern bool treesource_error;
%%

sourcefile:
DT_V1 ';' memreserves devicetree
v1tag memreserves devicetree
{
the_boot_info = build_boot_info($3, $4,
guess_boot_cpuid($4));
the_boot_info = build_boot_info($2, $3,
guess_boot_cpuid($3));
}
;

v1tag:
DT_V1 ';'
| DT_V1 ';' v1tag
;

memreserves:
/* empty */
{

44
tests/test_tree1.dts

@ -1,3 +1,45 @@ @@ -1,3 +1,45 @@
/dts-v1/;

/include/ "test_tree1_body.dtsi"
/memreserve/ 0xdeadbeef00000000 0x100000;
/memreserve/ 123456789 010000;

/ {
compatible = "test_tree1";
prop-int = <0xdeadbeef>;
prop-int64 = /bits/ 64 <0xdeadbeef01abcdef>;
prop-str = "hello world";
#address-cells = <1>;
#size-cells = <0>;

subnode@1 {
compatible = "subnode1";
reg = <1>;
prop-int = [deadbeef];

subsubnode {
compatible = "subsubnode1", "subsubnode";
prop-int = <0xdeadbeef>;
};

ss1 {
};
};

subnode@2 {
reg = <2>;
linux,phandle = <0x2000>;
prop-int = <123456789>;
#address-cells = <1>;
#size-cells = <0>;

ssn0: subsubnode@0 {
reg = <0>;
phandle = <0x2001>;
compatible = "subsubnode2", "subsubnode";
prop-int = <0726746425>;
};

ss2 {
};
};
};

43
tests/test_tree1_body.dtsi

@ -1,43 +0,0 @@ @@ -1,43 +0,0 @@
/memreserve/ 0xdeadbeef00000000 0x100000;
/memreserve/ 123456789 010000;

/ {
compatible = "test_tree1";
prop-int = <0xdeadbeef>;
prop-int64 = /bits/ 64 <0xdeadbeef01abcdef>;
prop-str = "hello world";
#address-cells = <1>;
#size-cells = <0>;

subnode@1 {
compatible = "subnode1";
reg = <1>;
prop-int = [deadbeef];

subsubnode {
compatible = "subsubnode1", "subsubnode";
prop-int = <0xdeadbeef>;
};

ss1 {
};
};

subnode@2 {
reg = <2>;
linux,phandle = <0x2000>;
prop-int = <123456789>;
#address-cells = <1>;
#size-cells = <0>;

ssn0: subsubnode@0 {
reg = <0>;
phandle = <0x2001>;
compatible = "subsubnode2", "subsubnode";
prop-int = <0726746425>;
};

ss2 {
};
};
};

2
tests/test_tree1_delete.dts

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
/dts-v1/;

/include/ "test_tree1_body.dtsi"
/include/ "test_tree1.dts"

/ {
nonexistant-property = <0xdeadbeef>;

Loading…
Cancel
Save