diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2016-12-09 15:56:44 +1100 |
---|---|---|
committer | David Gibson <david@gibson.dropbear.id.au> | 2016-12-09 16:13:35 +1100 |
commit | 6ea8cd944fcd09dfbda672c6bf6205ec8a5fc152 (patch) | |
tree | 2beb92b73ee792ba6a8e6afe6cfda5c9dbea7acd | |
parent | 7d8ef6e1db9794f72805a0855f4f7f12fadd03d3 (diff) | |
download | device-tree-compiler-6ea8cd944fcd09dfbda672c6bf6205ec8a5fc152.tar.gz |
tests: More thorough tests of libfdt overlay application without dtc
At the moment we have some rudimentary tests of the fdt_overlay_apply()
function which don't rely on overlay generation support in dtc. This is
done by avoiding any external references in the sample overlay, in
particularly using the 'target-path' syntax instead of 'target' to avoid
needing external references in the fragment targets. Thus this test case
doesn't exercise libfdt's processing of the __fixups__ node at all.
We do test that somewhat in combination with dtc's overlay support.
However, in the interests of being able to quickly determine which side a
bug is on, it would be nice to exercise this without requiring the dtc
support.
This adds testcases to do so, by making some examples with manually
constructed __symbols__ and __fixups__ nodes. In addition we rename some
of the test data files and add some extra check_path tests to make it a bit
clearer what's going on here.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r-- | tests/overlay_base_manual_symbols.dts | 25 | ||||
-rw-r--r-- | tests/overlay_overlay_manual_fixups.dts | 112 | ||||
-rw-r--r-- | tests/overlay_overlay_no_fixups.dts (renamed from tests/overlay_overlay_nodtc.dts) | 0 | ||||
-rwxr-xr-x | tests/run_tests.sh | 26 |
4 files changed, 161 insertions, 2 deletions
diff --git a/tests/overlay_base_manual_symbols.dts b/tests/overlay_base_manual_symbols.dts new file mode 100644 index 0000000..7e4d17d --- /dev/null +++ b/tests/overlay_base_manual_symbols.dts @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2016 NextThing Co + * Copyright (c) 2016 Free Electrons + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/dts-v1/; + +/ { + test: test-node { + phandle = <&test>; /* Force phandle generation */ + test-int-property = <42>; + test-str-property = "foo"; + + subtest: sub-test-node { + sub-test-property; + }; + }; + __symbols__ { + test = &test; + }; +}; + + diff --git a/tests/overlay_overlay_manual_fixups.dts b/tests/overlay_overlay_manual_fixups.dts new file mode 100644 index 0000000..e34c4fc --- /dev/null +++ b/tests/overlay_overlay_manual_fixups.dts @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2016 NextThing Co + * Copyright (c) 2016 Free Electrons + * Copyright (c) 2016 Konsulko Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/dts-v1/; + +/* Note no /plugin/ tag - we're manually generating the metadata for + testing purposes */ + +/ { + /* Test that we can change an int by another */ + fragment@0 { + target = <0xffffffff /*&test*/>; + + __overlay__ { + test-int-property = <43>; + }; + }; + + /* Test that we can replace a string by a longer one */ + fragment@1 { + target = <0xffffffff /*&test*/>; + + __overlay__ { + test-str-property = "foobar"; + }; + }; + + /* Test that we add a new property */ + fragment@2 { + target = <0xffffffff /*&test*/>; + + __overlay__ { + test-str-property-2 = "foobar2"; + }; + }; + + /* Test that we add a new node (by phandle) */ + fragment@3 { + target = <0xffffffff /*&test*/>; + + __overlay__ { + new-node { + new-property; + }; + }; + }; + + fragment@5 { + target = <0xffffffff /*&test*/>; + + __overlay__ { + local: new-local-node { + new-property; + }; + }; + }; + + fragment@6 { + target = <0xffffffff /*&test*/>; + + __overlay__ { + test-phandle = <0xffffffff /*&test*/>, <&local>; + }; + }; + + fragment@7 { + target = <0xffffffff /*&test*/>; + + __overlay__ { + test-several-phandle = <&local>, <&local>; + }; + }; + + fragment@8 { + target = <0xffffffff /*&test*/>; + + __overlay__ { + sub-test-node { + new-sub-test-property; + }; + }; + }; + + __local_fixups__ { + fragment@6 { + __overlay__ { + test-phandle = <4>; + }; + }; + fragment@7 { + __overlay__ { + test-several-phandle = <0 4>; + }; + }; + }; + __fixups__ { + test = "/fragment@0:target:0", + "/fragment@1:target:0", + "/fragment@2:target:0", + "/fragment@3:target:0", + "/fragment@5:target:0", + "/fragment@6:target:0", + "/fragment@6/__overlay__:test-phandle:0", + "/fragment@7:target:0", + "/fragment@8:target:0"; + }; +}; diff --git a/tests/overlay_overlay_nodtc.dts b/tests/overlay_overlay_no_fixups.dts index e8d0f96..e8d0f96 100644 --- a/tests/overlay_overlay_nodtc.dts +++ b/tests/overlay_overlay_no_fixups.dts diff --git a/tests/run_tests.sh b/tests/run_tests.sh index bd94604..8ac46e6 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -171,9 +171,31 @@ BAD_FIXUP_TREES="bad_index \ # Test to exercise libfdt overlay application without dtc's overlay support libfdt_overlay_tests () { + # First test a doctored overlay which requires only local fixups run_dtc_test -I dts -O dtb -o overlay_base_no_symbols.test.dtb overlay_base.dts - run_dtc_test -I dts -O dtb -o overlay_overlay_no_symbols.test.dtb overlay_overlay_nodtc.dts - run_test overlay overlay_base_no_symbols.test.dtb overlay_overlay_no_symbols.test.dtb + run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__symbols__" + run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__fixups__" + run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__local_fixups__" + + run_dtc_test -I dts -O dtb -o overlay_overlay_no_fixups.test.dtb overlay_overlay_no_fixups.dts + run_test check_path overlay_overlay_no_fixups.test.dtb not-exists "/__symbols__" + run_test check_path overlay_overlay_no_fixups.test.dtb not-exists "/__fixups__" + run_test check_path overlay_overlay_no_fixups.test.dtb exists "/__local_fixups__" + + run_test overlay overlay_base_no_symbols.test.dtb overlay_overlay_no_fixups.test.dtb + + # Then test with manually constructed fixups + run_dtc_test -I dts -O dtb -o overlay_base_manual_symbols.test.dtb overlay_base_manual_symbols.dts + run_test check_path overlay_base_manual_symbols.test.dtb exists "/__symbols__" + run_test check_path overlay_base_manual_symbols.test.dtb not-exists "/__fixups__" + run_test check_path overlay_base_manual_symbols.test.dtb not-exists "/__local_fixups__" + + run_dtc_test -I dts -O dtb -o overlay_overlay_manual_fixups.test.dtb overlay_overlay_manual_fixups.dts + run_test check_path overlay_overlay_manual_fixups.test.dtb not-exists "/__symbols__" + run_test check_path overlay_overlay_manual_fixups.test.dtb exists "/__fixups__" + run_test check_path overlay_overlay_manual_fixups.test.dtb exists "/__local_fixups__" + + run_test overlay overlay_base_manual_symbols.test.dtb overlay_overlay_manual_fixups.test.dtb # Bad fixup tests for test in $BAD_FIXUP_TREES; do |