aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2018-01-17 05:08:01 +0000
committerKyle Evans <kevans@FreeBSD.org>2018-01-17 05:08:01 +0000
commitfd06f809dbeccaf4318b587dbec69a56636e054b (patch)
treeda8e802a53648f138b2f2be8091e1ffb0913d57f
parent2f36e4ecd0f0c04781c752e5382906a43feaf4e3 (diff)
downloadsrc-vendor/libfdt/1.4.6.tar.gz
src-vendor/libfdt/1.4.6.zip
Create vendor-sys/libfdt from libfdt in vendor/dtcvendor/libfdt/1.4.6
There are no plans at the moment to continue updating GPL dtc in the tree as BSDL dtc is slowly replacing it. We use libfdt in the kernel and loaders, so fork off the libfdt bits from vendor/dtc into vendor-sys/libfdt rather than continuing to update vendor/dtc when we have no intention of updating anything in userland as a result of these imports. This also leaves us with a vendor branch whose content has a consistent license- the entirety of libfdt is dual license, GPL/BSD, although that was not a primary concern.
-rw-r--r--Documentation/dt-object-internal.txt310
-rw-r--r--Documentation/dtc-paper.bib43
-rw-r--r--Documentation/dtc-paper.tex597
-rw-r--r--Documentation/dts-format.txt122
-rw-r--r--Documentation/manual.txt695
-rw-r--r--GPL340
-rw-r--r--Makefile354
-rw-r--r--Makefile.convert-dtsv013
-rw-r--r--Makefile.dtc18
-rw-r--r--Makefile.libfdt (renamed from libfdt/Makefile.libfdt)0
-rw-r--r--Makefile.utils30
-rw-r--r--README93
-rw-r--r--README.license56
-rw-r--r--TODO11
-rw-r--r--checks.c1518
-rw-r--r--convert-dtsv0-lexer.l249
-rw-r--r--data.c269
-rw-r--r--dtc-lexer.l306
-rw-r--r--dtc-parser.y538
-rw-r--r--dtc.c364
-rw-r--r--dtc.h293
-rw-r--r--dtdiff38
-rw-r--r--fdt.c (renamed from libfdt/fdt.c)0
-rw-r--r--fdt.h (renamed from libfdt/fdt.h)0
-rw-r--r--fdt_addresses.c (renamed from libfdt/fdt_addresses.c)0
-rw-r--r--fdt_empty_tree.c (renamed from libfdt/fdt_empty_tree.c)0
-rw-r--r--fdt_overlay.c (renamed from libfdt/fdt_overlay.c)0
-rw-r--r--fdt_ro.c (renamed from libfdt/fdt_ro.c)0
-rw-r--r--fdt_rw.c (renamed from libfdt/fdt_rw.c)0
-rw-r--r--fdt_strerror.c (renamed from libfdt/fdt_strerror.c)0
-rw-r--r--fdt_sw.c (renamed from libfdt/fdt_sw.c)0
-rw-r--r--fdt_wip.c (renamed from libfdt/fdt_wip.c)0
-rw-r--r--fdtdump.c245
-rw-r--r--fdtget.c385
-rw-r--r--fdtoverlay.c175
-rw-r--r--fdtput.c480
-rw-r--r--flattree.c940
-rw-r--r--fstree.c90
-rw-r--r--libfdt.h (renamed from libfdt/libfdt.h)0
-rw-r--r--libfdt/TODO3
-rw-r--r--libfdt_env.h (renamed from libfdt/libfdt_env.h)0
-rw-r--r--libfdt_internal.h (renamed from libfdt/libfdt_internal.h)0
-rw-r--r--livetree.c1013
-rw-r--r--pylibfdt/Makefile.pylibfdt24
-rw-r--r--pylibfdt/libfdt.i493
-rwxr-xr-xpylibfdt/setup.py121
-rwxr-xr-xscripts/kup-dtc31
-rwxr-xr-xscripts/setlocalversion22
-rw-r--r--srcpos.c302
-rw-r--r--srcpos.h117
-rw-r--r--tests/Makefile.tests87
-rw-r--r--tests/add_subnode_with_nops.c84
-rw-r--r--tests/addr_size_cells.c64
-rw-r--r--tests/addresses.dts15
-rw-r--r--tests/aliases.dts25
-rw-r--r--tests/appendprop.dts8
-rw-r--r--tests/appendprop1.c70
-rw-r--r--tests/appendprop2.c64
-rw-r--r--tests/asm_tree_dump.c61
-rw-r--r--tests/bad-chosen.dts10
-rw-r--r--tests/bad-empty-ranges.dts11
-rw-r--r--tests/bad-gpio.dts13
-rw-r--r--tests/bad-interrupt-cells.dts12
-rw-r--r--tests/bad-name-property.dts7
-rw-r--r--tests/bad-ncells.dts7
-rw-r--r--tests/bad-octal-literal.dts5
-rw-r--r--tests/bad-phandle-cells.dts11
-rw-r--r--tests/bad-reg-ranges.dts12
-rw-r--r--tests/bad-size-cells.dts12
-rw-r--r--tests/bad-string-props.dts14
-rw-r--r--tests/base01.asm175
-rw-r--r--tests/base01.cmd1
-rw-r--r--tests/base01.dts33
-rw-r--r--tests/base01.stderr6
-rw-r--r--tests/boot-cpuid.c47
-rw-r--r--tests/boot-cpuid.dts16
-rw-r--r--tests/char_literal.c49
-rw-r--r--tests/char_literal.dts5
-rw-r--r--tests/check_path.c83
-rw-r--r--tests/comments-cmp.dts16
-rw-r--r--tests/comments.dts39
-rw-r--r--tests/data.S3
-rw-r--r--tests/default-addr-size.dts7
-rw-r--r--tests/del_node.c123
-rw-r--r--tests/del_property.c90
-rw-r--r--tests/delete_reinstate_multilabel.dts37
-rw-r--r--tests/delete_reinstate_multilabel_ref.dts9
-rw-r--r--tests/dependencies.cmp1
-rw-r--r--tests/dependencies.dts6
-rw-r--r--tests/deps_inc1.dtsi1
-rw-r--r--tests/deps_inc2.dtsi1
-rw-r--r--tests/division-by-zero.dts6
-rw-r--r--tests/dtb_reverse.c163
-rw-r--r--tests/dtbs_equal_ordered.c173
-rw-r--r--tests/dtbs_equal_unordered.c223
-rwxr-xr-xtests/dtc-checkfails.sh44
-rwxr-xr-xtests/dtc-fails.sh30
-rwxr-xr-xtests/dtc-fatal.sh14
-rw-r--r--tests/dumptrees.c70
-rw-r--r--tests/dup-nodename.dts8
-rw-r--r--tests/dup-phandle.dts10
-rw-r--r--tests/dup-propname.dts6
-rw-r--r--tests/embedded_nul.dtsbin152 -> 0 bytes
-rw-r--r--tests/embedded_nul_equiv.dts6
-rw-r--r--tests/empty.dts4
-rw-r--r--tests/escapes.dts7
-rw-r--r--tests/extra-terminating-null.c58
-rw-r--r--tests/extra-terminating-null.dts11
-rwxr-xr-xtests/fdtdump-runtest.sh30
-rw-r--r--tests/fdtdump.dts38
-rwxr-xr-xtests/fdtget-runtest.sh24
-rwxr-xr-xtests/fdtoverlay-runtest.sh40
-rwxr-xr-xtests/fdtput-runtest.sh39
-rw-r--r--tests/find_property.c41
-rw-r--r--tests/get_alias.c57
-rw-r--r--tests/get_mem_rsv.c48
-rw-r--r--tests/get_name.c82
-rw-r--r--tests/get_path.c92
-rw-r--r--tests/get_phandle.c63
-rw-r--r--tests/getprop.c42
-rw-r--r--tests/incbin.bin1
-rw-r--r--tests/incbin.c75
-rw-r--r--tests/incbin.dts6
-rw-r--r--tests/include0.dts1
-rw-r--r--tests/include1.dts32
-rw-r--r--tests/include2.dts1
-rw-r--r--tests/include3.dts1
-rw-r--r--tests/include4.dts1
-rw-r--r--tests/include5.dts1
-rw-r--r--tests/include5a.dts1
-rw-r--r--tests/include6.dts1
-rw-r--r--tests/include7.dts14
-rw-r--r--tests/include8.dts2
-rw-r--r--tests/integer-expressions.c116
-rw-r--r--tests/label01.dts63
-rw-r--r--tests/label_repeated.dts15
-rw-r--r--tests/line_directives.dts26
-rw-r--r--tests/lorem.txt35
-rw-r--r--tests/mangle-layout.c164
-rw-r--r--tests/mangle-layout.supp7
-rw-r--r--tests/minusone-phandle.dts7
-rw-r--r--tests/move_and_save.c75
-rw-r--r--tests/multilabel.dts44
-rw-r--r--tests/multilabel_merge.dts70
-rw-r--r--tests/node_check_compatible.c81
-rw-r--r--tests/node_offset_by_compatible.c85
-rw-r--r--tests/node_offset_by_phandle.c63
-rw-r--r--tests/node_offset_by_prop_value.c110
-rw-r--r--tests/nonexist-label-ref.dts8
-rw-r--r--tests/nonexist-node-ref.dts8
-rw-r--r--tests/nonexist-node-ref2.dts10
-rw-r--r--tests/nop_node.c104
-rw-r--r--tests/nop_property.c70
-rw-r--r--tests/nopulate.c105
-rw-r--r--tests/notfound.c70
-rw-r--r--tests/nul-in-escape.dtsbin36 -> 0 bytes
-rw-r--r--tests/nul-in-line-info1.dtsbin8 -> 0 bytes
-rw-r--r--tests/nul-in-line-info2.dts1
-rw-r--r--tests/obsolete-chosen-interrupt-controller.dts13
-rw-r--r--tests/open_pack.c71
-rw-r--r--tests/open_pack.supp7
-rw-r--r--tests/overlay.c233
-rw-r--r--tests/overlay_bad_fixup.c70
-rw-r--r--tests/overlay_bad_fixup_bad_index.dts14
-rw-r--r--tests/overlay_bad_fixup_base.dtsi18
-rw-r--r--tests/overlay_bad_fixup_empty.dts14
-rw-r--r--tests/overlay_bad_fixup_empty_index.dts14
-rw-r--r--tests/overlay_bad_fixup_index_trailing.dts14
-rw-r--r--tests/overlay_bad_fixup_path_empty_prop.dts14
-rw-r--r--tests/overlay_bad_fixup_path_only.dts14
-rw-r--r--tests/overlay_bad_fixup_path_only_sep.dts14
-rw-r--r--tests/overlay_bad_fixup_path_prop.dts14
-rw-r--r--tests/overlay_base.dts21
-rw-r--r--tests/overlay_base_manual_symbols.dts25
-rw-r--r--tests/overlay_overlay.dts86
-rw-r--r--tests/overlay_overlay_manual_fixups.dts112
-rw-r--r--tests/overlay_overlay_no_fixups.dts82
-rw-r--r--tests/overlay_overlay_simple.dts12
-rw-r--r--tests/parent_offset.c90
-rw-r--r--tests/path-references.c108
-rw-r--r--tests/path-references.dts28
-rw-r--r--tests/path_offset.c137
-rw-r--r--tests/path_offset_aliases.c58
-rw-r--r--tests/pci-bridge-bad1.dts16
-rw-r--r--tests/pci-bridge-bad2.dts16
-rw-r--r--tests/pci-bridge-ok.dts25
-rw-r--r--tests/phandle_format.c77
-rw-r--r--tests/prop-after-subnode.dts9
-rw-r--r--tests/property_iterate.c97
-rw-r--r--tests/property_iterate.dts23
-rw-r--r--tests/propname_escapes.c42
-rw-r--r--tests/propname_escapes.dts6
-rw-r--r--tests/pylibfdt_tests.py334
-rw-r--r--tests/references.c127
-rw-r--r--tests/references.dts36
-rw-r--r--tests/reg-ranges-root.dts8
-rw-r--r--tests/reg-without-unit-addr.dts10
-rw-r--r--tests/reuse-label.dts15
-rw-r--r--tests/reuse-label1.dts10
-rw-r--r--tests/reuse-label2.dts6
-rw-r--r--tests/reuse-label3.dts9
-rw-r--r--tests/reuse-label4.dts5
-rw-r--r--tests/reuse-label5.dts6
-rw-r--r--tests/reuse-label6.dts6
-rw-r--r--tests/root_node.c52
-rwxr-xr-xtests/run_tests.sh925
-rw-r--r--tests/rw_tree1.c95
-rw-r--r--tests/search_dir/search_test.dtsi4
-rw-r--r--tests/search_dir/search_test2.dtsi3
-rw-r--r--tests/search_dir_b/search_paths_subdir.dts6
-rw-r--r--tests/search_dir_b/search_test_b.dtsi4
-rw-r--r--tests/search_dir_b/search_test_b2.dtsi5
-rw-r--r--tests/search_dir_b/search_test_c.dtsi2
-rw-r--r--tests/search_paths.dts6
-rw-r--r--tests/search_paths_b.dts6
-rw-r--r--tests/set_name.c90
-rw-r--r--tests/setprop.c95
-rw-r--r--tests/setprop_inplace.c97
-rw-r--r--tests/sized_cells.c83
-rw-r--r--tests/sized_cells.dts11
-rw-r--r--tests/sourceoutput.dts14
-rw-r--r--tests/stacked_overlay_bar.dts13
-rw-r--r--tests/stacked_overlay_base.dts6
-rw-r--r--tests/stacked_overlay_baz.dts13
-rw-r--r--tests/string_escapes.c43
-rw-r--r--tests/stringlist.c155
-rw-r--r--tests/stringlist.dts12
-rw-r--r--tests/subnode_iterate.c90
-rw-r--r--tests/subnode_iterate.dts44
-rw-r--r--tests/subnode_offset.c98
-rw-r--r--tests/supernode_atdepth_offset.c145
-rw-r--r--tests/sw_tree1.c181
-rw-r--r--tests/sw_tree1.supp18
-rw-r--r--tests/test01.asm294
-rw-r--r--tests/test01.dts57
-rw-r--r--tests/test01.stderr4
-rwxr-xr-xtests/test_kernel_dts86
-rw-r--r--tests/test_label_ref.dts9
-rw-r--r--tests/test_tree1.dts46
-rw-r--r--tests/test_tree1_delete.dts68
-rw-r--r--tests/test_tree1_label_noderef.dts56
-rw-r--r--tests/test_tree1_merge.dts51
-rw-r--r--tests/test_tree1_merge_labelled.dts49
-rw-r--r--tests/test_tree1_merge_path.dts49
-rw-r--r--tests/test_tree1_wrong1.dts43
-rw-r--r--tests/test_tree1_wrong2.dts43
-rw-r--r--tests/test_tree1_wrong3.dts43
-rw-r--r--tests/test_tree1_wrong4.dts41
-rw-r--r--tests/test_tree1_wrong5.dts44
-rw-r--r--tests/test_tree1_wrong6.dts45
-rw-r--r--tests/test_tree1_wrong7.dts46
-rw-r--r--tests/test_tree1_wrong8.dts44
-rw-r--r--tests/test_tree1_wrong9.dts45
-rw-r--r--tests/testdata.h50
-rw-r--r--tests/tests.h129
-rwxr-xr-xtests/tests.sh63
-rw-r--r--tests/testutils.c202
-rw-r--r--tests/trees.S235
-rw-r--r--tests/truncated_property.c47
-rw-r--r--tests/unit-addr-leading-0s.dts12
-rw-r--r--tests/unit-addr-leading-0x.dts12
-rw-r--r--tests/unit-addr-without-reg.dts9
-rw-r--r--tests/utilfdt_test.c127
-rw-r--r--tests/value-labels.c127
-rw-r--r--tests/value-labels.dts8
-rw-r--r--tests/zero-phandle.dts7
-rw-r--r--treesource.c284
-rw-r--r--util.c474
-rw-r--r--util.h266
-rw-r--r--version.lds (renamed from libfdt/version.lds)0
270 files changed, 3 insertions, 22635 deletions
diff --git a/Documentation/dt-object-internal.txt b/Documentation/dt-object-internal.txt
deleted file mode 100644
index 51d68ab93ac9..000000000000
--- a/Documentation/dt-object-internal.txt
+++ /dev/null
@@ -1,310 +0,0 @@
-Device Tree Dynamic Object format internals
--------------------------------------------
-
-The Device Tree for most platforms is a static representation of
-the hardware capabilities. This is insufficient for platforms
-that need to dynamically insert Device Tree fragments into the
-live tree.
-
-This document explains the the Device Tree object format and
-modifications made to the Device Tree compiler, which make it possible.
-
-1. Simplified Problem Definition
---------------------------------
-
-Assume we have a platform which boots using following simplified Device Tree.
-
----- foo.dts -----------------------------------------------------------------
- /* FOO platform */
- / {
- compatible = "corp,foo";
-
- /* shared resources */
- res: res {
- };
-
- /* On chip peripherals */
- ocp: ocp {
- /* peripherals that are always instantiated */
- peripheral1 { ... };
- };
- };
----- foo.dts -----------------------------------------------------------------
-
-We have a number of peripherals that after probing (using some undefined method)
-should result in different Device Tree configuration.
-
-We cannot boot with this static tree because due to the configuration of the
-foo platform there exist multiple conficting peripherals DT fragments.
-
-So for the bar peripheral we would have this:
-
----- foo+bar.dts -------------------------------------------------------------
- /* FOO platform + bar peripheral */
- / {
- compatible = "corp,foo";
-
- /* shared resources */
- res: res {
- };
-
- /* On chip peripherals */
- ocp: ocp {
- /* peripherals that are always instantiated */
- peripheral1 { ... };
-
- /* bar peripheral */
- bar {
- compatible = "corp,bar";
- ... /* various properties and child nodes */
- };
- };
- };
----- foo+bar.dts -------------------------------------------------------------
-
-While for the baz peripheral we would have this:
-
----- foo+baz.dts -------------------------------------------------------------
- /* FOO platform + baz peripheral */
- / {
- compatible = "corp,foo";
-
- /* shared resources */
- res: res {
- /* baz resources */
- baz_res: res_baz { ... };
- };
-
- /* On chip peripherals */
- ocp: ocp {
- /* peripherals that are always instantiated */
- peripheral1 { ... };
-
- /* baz peripheral */
- baz {
- compatible = "corp,baz";
- /* reference to another point in the tree */
- ref-to-res = <&baz_res>;
- ... /* various properties and child nodes */
- };
- };
- };
----- foo+baz.dts -------------------------------------------------------------
-
-We note that the baz case is more complicated, since the baz peripheral needs to
-reference another node in the DT tree.
-
-2. Device Tree Object Format Requirements
------------------------------------------
-
-Since the Device Tree is used for booting a number of very different hardware
-platforms it is imperative that we tread very carefully.
-
-2.a) No changes to the Device Tree binary format for the base tree. We cannot
-modify the tree format at all and all the information we require should be
-encoded using Device Tree itself. We can add nodes that can be safely ignored
-by both bootloaders and the kernel. The plugin dtbs are optionally tagged
-with a different magic number in the header but otherwise they're simple
-blobs.
-
-2.b) Changes to the DTS source format should be absolutely minimal, and should
-only be needed for the DT fragment definitions, and not the base boot DT.
-
-2.c) An explicit option should be used to instruct DTC to generate the required
-information needed for object resolution. Platforms that don't use the
-dynamic object format can safely ignore it.
-
-2.d) Finally, DT syntax changes should be kept to a minimum. It should be
-possible to express everything using the existing DT syntax.
-
-3. Implementation
------------------
-
-The basic unit of addressing in Device Tree is the phandle. Turns out it's
-relatively simple to extend the way phandles are generated and referenced
-so that it's possible to dynamically convert symbolic references (labels)
-to phandle values. This is a valid assumption as long as the author uses
-reference syntax and does not assign phandle values manually (which might
-be a problem with decompiled source files).
-
-We can roughly divide the operation into two steps.
-
-3.a) Compilation of the base board DTS file using the '-@' option
-generates a valid DT blob with an added __symbols__ node at the root node,
-containing a list of all nodes that are marked with a label.
-
-Using the foo.dts file above the following node will be generated;
-
-$ dtc -@ -O dtb -o foo.dtb -b 0 foo.dts
-$ fdtdump foo.dtb
-...
-/ {
- ...
- res {
- ...
- phandle = <0x00000001>;
- ...
- };
- ocp {
- ...
- phandle = <0x00000002>;
- ...
- };
- __symbols__ {
- res="/res";
- ocp="/ocp";
- };
-};
-
-Notice that all the nodes that had a label have been recorded, and that
-phandles have been generated for them.
-
-This blob can be used to boot the board normally, the __symbols__ node will
-be safely ignored both by the bootloader and the kernel (the only loss will
-be a few bytes of memory and disk space).
-
-We generate a __symbols__ node to record nodes that had labels in the base
-tree (or subsequent loaded overlays) so that they can be matched up with
-references made to them in Device Tree objects.
-
-3.b) The Device Tree fragments must be compiled with the same option but they
-must also have a tag (/plugin/) that allows undefined references to nodes
-that are not present at compilation time to be recorded so that the runtime
-loader can fix them.
-
-So the bar peripheral's DTS format would be of the form:
-
-/dts-v1/;
-/plugin/; /* allow undefined references and record them */
-/ {
- .... /* various properties for loader use; i.e. part id etc. */
- fragment@0 {
- target = <&ocp>;
- __overlay__ {
- /* bar peripheral */
- bar {
- compatible = "corp,bar";
- ... /* various properties and child nodes */
- }
- };
- };
-};
-
-Note that there's a target property that specifies the location where the
-contents of the overlay node will be placed, and it references the node
-in the foo.dts file.
-
-$ dtc -@ -O dtb -o bar.dtbo -b 0 bar.dts
-$ fdtdump bar.dtbo
-...
-/ {
- ... /* properties */
- fragment@0 {
- target = <0xffffffff>;
- __overlay__ {
- bar {
- compatible = "corp,bar";
- ... /* various properties and child nodes */
- }
- };
- };
- __fixups__ {
- ocp = "/fragment@0:target:0";
- };
-};
-
-No __symbols__ node has been generated (no label in bar.dts).
-Note that the target's ocp label is undefined, so the phandle
-value is filled with the illegal value '0xffffffff', while a __fixups__
-node has been generated, which marks the location in the tree where
-the label lookup should store the runtime phandle value of the ocp node.
-
-The format of the __fixups__ node entry is
-
- <label> = "<local-full-path>:<property-name>:<offset>"
- [, "<local-full-path>:<property-name>:<offset>"...];
-
- <label> Is the label we're referring
- <local-full-path> Is the full path of the node the reference is
- <property-name> Is the name of the property containing the
- reference
- <offset> The offset (in bytes) of where the property's
- phandle value is located.
-
-Doing the same with the baz peripheral's DTS format is a little bit more
-involved, since baz contains references to local labels which require
-local fixups.
-
-/dts-v1/;
-/plugin/; /* allow undefined label references and record them */
-/ {
- .... /* various properties for loader use; i.e. part id etc. */
- fragment@0 {
- target = <&res>;
- __overlay__ {
- /* baz resources */
- baz_res: res_baz { ... };
- };
- };
- fragment@1 {
- target = <&ocp>;
- __overlay__ {
- /* baz peripheral */
- baz {
- compatible = "corp,baz";
- /* reference to another point in the tree */
- ref-to-res = <&baz_res>;
- ... /* various properties and child nodes */
- }
- };
- };
-};
-
-Note that &bar_res reference.
-
-$ dtc -@ -O dtb -o baz.dtbo -b 0 baz.dts
-$ fdtdump baz.dtbo
-...
-/ {
- ... /* properties */
- fragment@0 {
- target = <0xffffffff>;
- __overlay__ {
- res_baz {
- ....
- phandle = <0x00000001>;
- };
- };
- };
- fragment@1 {
- target = <0xffffffff>;
- __overlay__ {
- baz {
- compatible = "corp,baz";
- ... /* various properties and child nodes */
- ref-to-res = <0x00000001>;
- }
- };
- };
- __fixups__ {
- res = "/fragment@0:target:0";
- ocp = "/fragment@1:target:0";
- };
- __local_fixups__ {
- fragment@1 {
- __overlay__ {
- baz {
- ref-to-res = <0>;
- };
- };
- };
- };
-};
-
-This is similar to the bar case, but the reference of a local label by the
-baz node generates a __local_fixups__ entry that records the place that the
-local reference is being made. No matter how phandles are allocated from dtc
-the run time loader must apply an offset to each phandle in every dynamic
-DT object loaded. The __local_fixups__ node records the offset relative to the
-start of every local reference within that property so that the loader can apply
-the offset.
diff --git a/Documentation/dtc-paper.bib b/Documentation/dtc-paper.bib
deleted file mode 100644
index d01e2ff9e9a5..000000000000
--- a/Documentation/dtc-paper.bib
+++ /dev/null
@@ -1,43 +0,0 @@
-@STRING{pub-IEEE = "IEEE Computer Society"}
-@STRING{pub-IEEE:adr = "345 E. 47th St, New York, NY 10017, USA"}
-
-@BOOK{IEEE1275,
- key = "IEEE1275",
- title = "{IEEE} {S}tandard for {B}oot ({I}nitialization {C}onfiguration) {F}irmware: {C}ore {R}equirements and {P}ractices",
- publisher = pub-IEEE,
- address = pub-IEEE:adr,
- series = "IEEE Std 1275-1994",
- year = 1994,
-}
-
-@BOOK{IEEE1275-pci,
- key = "IEEE1275-pci",
- title = "{PCI} {B}us {B}inding to: {IEEE} {S}td 1275-1994 {S}tandard for {B}oot ({I}nitialization {C}onfiguration) {F}irmware",
- publisher = pub-IEEE,
- address = pub-IEEE:adr,
- note = "Revision 2.1",
- year = 1998,
-}
-
-@MISC{noof1,
- author = "Benjamin Herrenschmidt",
- title = "Booting the {L}inux/ppc kernel without {O}pen {F}irmware",
- month = may,
- year = 2005,
- note = "v0.1, \url{http://ozlabs.org/pipermail/linuxppc64-dev/2005-May/004073.html}",
-}
-
-@MISC{noof5,
- author = "Benjamin Herrenschmidt",
- title = "Booting the {L}inux/ppc kernel without {O}pen {F}irmware",
- month = nov,
- year = 2005,
- note = "v0.5, \url{http://ozlabs.org/pipermail/linuxppc64-dev/2005-December/006994.html}",
-}
-
-@MISC{dtcgit,
- author = "David Gibson et al.",
- title = "\dtc{}",
- howpublished = "git tree",
- note = "\url{http://ozlabs.org/~dgibson/dtc/dtc.git}",
-}
diff --git a/Documentation/dtc-paper.tex b/Documentation/dtc-paper.tex
deleted file mode 100644
index 4494226d86bd..000000000000
--- a/Documentation/dtc-paper.tex
+++ /dev/null
@@ -1,597 +0,0 @@
-\documentclass[a4paper,twocolumn]{article}
-
-\usepackage{abstract}
-\usepackage{xspace}
-\usepackage{amssymb}
-\usepackage{latexsym}
-\usepackage{tabularx}
-\usepackage[T1]{fontenc}
-\usepackage{calc}
-\usepackage{listings}
-\usepackage{color}
-\usepackage{url}
-
-\title{Device trees everywhere}
-
-\author{David Gibson \texttt{<{dwg}{@}{au1.ibm.com}>}\\
- Benjamin Herrenschmidt \texttt{<{benh}{@}{kernel.crashing.org}>}\\
- \emph{OzLabs, IBM Linux Technology Center}}
-
-\newcommand{\R}{\textsuperscript{\textregistered}\xspace}
-\newcommand{\tm}{\textsuperscript{\texttrademark}\xspace}
-\newcommand{\tge}{$\geqslant$}
-%\newcommand{\ditto}{\textquotedbl\xspace}
-
-\newcommand{\fixme}[1]{$\bigstar$\emph{\textbf{\large #1}}$\bigstar$\xspace}
-
-\newcommand{\ppc}{\mbox{PowerPC}\xspace}
-\newcommand{\of}{Open Firmware\xspace}
-\newcommand{\benh}{Ben Herrenschmidt\xspace}
-\newcommand{\kexec}{\texttt{kexec()}\xspace}
-\newcommand{\dtbeginnode}{\texttt{OF\_DT\_BEGIN\_NODE\xspace}}
-\newcommand{\dtendnode}{\texttt{OF\_DT\_END\_NODE\xspace}}
-\newcommand{\dtprop}{\texttt{OF\_DT\_PROP\xspace}}
-\newcommand{\dtend}{\texttt{OF\_DT\_END\xspace}}
-\newcommand{\dtc}{\texttt{dtc}\xspace}
-\newcommand{\phandle}{\texttt{linux,phandle}\xspace}
-\begin{document}
-
-\maketitle
-
-\begin{abstract}
- We present a method for booting a \ppc{}\R Linux\R kernel on an
- embedded machine. To do this, we supply the kernel with a compact
- flattened-tree representation of the system's hardware based on the
- device tree supplied by Open Firmware on IBM\R servers and Apple\R
- Power Macintosh\R machines.
-
- The ``blob'' representing the device tree can be created using \dtc
- --- the Device Tree Compiler --- that turns a simple text
- representation of the tree into the compact representation used by
- the kernel. The compiler can produce either a binary ``blob'' or an
- assembler file ready to be built into a firmware or bootwrapper
- image.
-
- This flattened-tree approach is now the only supported method of
- booting a \texttt{ppc64} kernel without Open Firmware, and we plan
- to make it the only supported method for all \texttt{powerpc}
- kernels in the future.
-\end{abstract}
-
-\section{Introduction}
-
-\subsection{OF and the device tree}
-
-Historically, ``everyday'' \ppc machines have booted with the help of
-\of (OF), a firmware environment defined by IEEE1275 \cite{IEEE1275}.
-Among other boot-time services, OF maintains a device tree that
-describes all of the system's hardware devices and how they're
-connected. During boot, before taking control of memory management,
-the Linux kernel uses OF calls to scan the device tree and transfer it
-to an internal representation that is used at run time to look up
-various device information.
-
-The device tree consists of nodes representing devices or
-buses\footnote{Well, mostly. There are a few special exceptions.}.
-Each node contains \emph{properties}, name--value pairs that give
-information about the device. The values are arbitrary byte strings,
-and for some properties, they contain tables or other structured
-information.
-
-\subsection{The bad old days}
-
-Embedded systems, by contrast, usually have a minimal firmware that
-might supply a few vital system parameters (size of RAM and the like),
-but nothing as detailed or complete as the OF device tree. This has
-meant that the various 32-bit \ppc embedded ports have required a
-variety of hacks spread across the kernel to deal with the lack of
-device tree. These vary from specialised boot wrappers to parse
-parameters (which are at least reasonably localised) to
-CONFIG-dependent hacks in drivers to override normal probe logic with
-hardcoded addresses for a particular board. As well as being ugly of
-itself, such CONFIG-dependent hacks make it hard to build a single
-kernel image that supports multiple embedded machines.
-
-Until relatively recently, the only 64-bit \ppc machines without OF
-were legacy (pre-POWER5\R) iSeries\R machines. iSeries machines often
-only have virtual IO devices, which makes it quite simple to work
-around the lack of a device tree. Even so, the lack means the iSeries
-boot sequence must be quite different from the pSeries or Macintosh,
-which is not ideal.
-
-The device tree also presents a problem for implementing \kexec. When
-the kernel boots, it takes over full control of the system from OF,
-even re-using OF's memory. So, when \kexec comes to boot another
-kernel, OF is no longer around for the second kernel to query.
-
-\section{The Flattened Tree}
-
-In May 2005 \benh implemented a new approach to handling the device
-tree that addresses all these problems. When booting on OF systems,
-the first thing the kernel runs is a small piece of code in
-\texttt{prom\_init.c}, which executes in the context of OF. This code
-walks the device tree using OF calls, and transcribes it into a
-compact, flattened format. The resulting device tree ``blob'' is then
-passed to the kernel proper, which eventually unflattens the tree into
-its runtime form. This blob is the only data communicated between the
-\texttt{prom\_init.c} bootstrap and the rest of the kernel.
-
-When OF isn't available, either because the machine doesn't have it at
-all or because \kexec has been used, the kernel instead starts
-directly from the entry point taking a flattened device tree. The
-device tree blob must be passed in from outside, rather than generated
-by part of the kernel from OF. For \kexec, the userland
-\texttt{kexec} tools build the blob from the runtime device tree
-before invoking the new kernel. For embedded systems the blob can
-come either from the embedded bootloader, or from a specialised
-version of the \texttt{zImage} wrapper for the system in question.
-
-\subsection{Properties of the flattened tree}
-
-The flattened tree format should be easy to handle, both for the
-kernel that parses it and the bootloader that generates it. In
-particular, the following properties are desirable:
-
-\begin{itemize}
-\item \emph{relocatable}: the bootloader or kernel should be able to
- move the blob around as a whole, without needing to parse or adjust
- its internals. In practice that means we must not use pointers
- within the blob.
-\item \emph{insert and delete}: sometimes the bootloader might want to
- make tweaks to the flattened tree, such as deleting or inserting a
- node (or whole subtree). It should be possible to do this without
- having to effectively regenerate the whole flattened tree. In
- practice this means limiting the use of internal offsets in the blob
- that need recalculation if a section is inserted or removed with
- \texttt{memmove()}.
-\item \emph{compact}: embedded systems are frequently short of
- resources, particularly RAM and flash memory space. Thus, the tree
- representation should be kept as small as conveniently possible.
-\end{itemize}
-
-\subsection{Format of the device tree blob}
-\label{sec:format}
-
-\begin{figure}[htb!]
- \centering
- \footnotesize
- \begin{tabular}{r|c|l}
- \multicolumn{1}{r}{\textbf{Offset}}& \multicolumn{1}{c}{\textbf{Contents}} \\\cline{2-2}
- \texttt{0x00} & \texttt{0xd00dfeed} & magic number \\\cline{2-2}
- \texttt{0x04} & \emph{totalsize} \\\cline{2-2}
- \texttt{0x08} & \emph{off\_struct} & \\\cline{2-2}
- \texttt{0x0C} & \emph{off\_strs} & \\\cline{2-2}
- \texttt{0x10} & \emph{off\_rsvmap} & \\\cline{2-2}
- \texttt{0x14} & \emph{version} \\\cline{2-2}
- \texttt{0x18} & \emph{last\_comp\_ver} & \\\cline{2-2}
- \texttt{0x1C} & \emph{boot\_cpu\_id} & \tge v2 only\\\cline{2-2}
- \texttt{0x20} & \emph{size\_strs} & \tge v3 only\\\cline{2-2}
- \multicolumn{1}{r}{\vdots} & \multicolumn{1}{c}{\vdots} & \\\cline{2-2}
- \emph{off\_rsvmap} & \emph{address0} & memory reserve \\
- + \texttt{0x04} & ...& table \\\cline{2-2}
- + \texttt{0x08} & \emph{len0} & \\
- + \texttt{0x0C} & ...& \\\cline{2-2}
- \vdots & \multicolumn{1}{c|}{\vdots} & \\\cline{2-2}
- & \texttt{0x00000000}- & end marker\\
- & \texttt{00000000} & \\\cline{2-2}
- & \texttt{0x00000000}- & \\
- & \texttt{00000000} & \\\cline{2-2}
- \multicolumn{1}{r}{\vdots} & \multicolumn{1}{c}{\vdots} & \\\cline{2-2}
- \emph{off\_strs} & \texttt{'n' 'a' 'm' 'e'} & strings block \\
- + \texttt{0x04} & \texttt{~0~ 'm' 'o' 'd'} & \\
- + \texttt{0x08} & \texttt{'e' 'l' ~0~ \makebox[\widthof{~~~}]{\textrm{...}}} & \\
- \vdots & \multicolumn{1}{c|}{\vdots} & \\\cline{2-2}
- \multicolumn{1}{r}{+ \emph{size\_strs}} \\
- \multicolumn{1}{r}{\vdots} & \multicolumn{1}{c}{\vdots} & \\\cline{2-2}
- \emph{off\_struct} & \dtbeginnode & structure block \\\cline{2-2}
- + \texttt{0x04} & \texttt{'/' ~0~ ~0~ ~0~} & root node\\\cline{2-2}
- + \texttt{0x08} & \dtprop & \\\cline{2-2}
- + \texttt{0x0C} & \texttt{0x00000005} & ``\texttt{model}''\\\cline{2-2}
- + \texttt{0x10} & \texttt{0x00000008} & \\\cline{2-2}
- + \texttt{0x14} & \texttt{'M' 'y' 'B' 'o'} & \\
- + \texttt{0x18} & \texttt{'a' 'r' 'd' ~0~} & \\\cline{2-2}
- \vdots & \multicolumn{1}{c|}{\vdots} & \\\cline{2-2}
- & \texttt{\dtendnode} \\\cline{2-2}
- & \texttt{\dtend} \\\cline{2-2}
- \multicolumn{1}{r}{\vdots} & \multicolumn{1}{c}{\vdots} & \\\cline{2-2}
- \multicolumn{1}{r}{\emph{totalsize}} \\
- \end{tabular}
- \caption{Device tree blob layout}
- \label{fig:blob-layout}
-\end{figure}
-
-The format for the blob we devised, was first described on the
-\texttt{linuxppc64-dev} mailing list in \cite{noof1}. The format has
-since evolved through various revisions, and the current version is
-included as part of the \dtc (see \S\ref{sec:dtc}) git tree,
-\cite{dtcgit}.
-
-Figure \ref{fig:blob-layout} shows the layout of the blob of data
-containing the device tree. It has three sections of variable size:
-the \emph{memory reserve table}, the \emph{structure block} and the
-\emph{strings block}. A small header gives the blob's size and
-version and the locations of the three sections, plus a handful of
-vital parameters used during early boot.
-
-The memory reserve map section gives a list of regions of memory that
-the kernel must not use\footnote{Usually such ranges contain some data
-structure initialised by the firmware that must be preserved by the
-kernel.}. The list is represented as a simple array of (address,
-size) pairs of 64 bit values, terminated by a zero size entry. The
-strings block is similarly simple, consisting of a number of
-null-terminated strings appended together, which are referenced from
-the structure block as described below.
-
-The structure block contains the device tree proper. Each node is
-introduced with a 32-bit \dtbeginnode tag, followed by the node's name
-as a null-terminated string, padded to a 32-bit boundary. Then
-follows all of the properties of the node, each introduced with a
-\dtprop tag, then all of the node's subnodes, each introduced with
-their own \dtbeginnode tag. The node ends with an \dtendnode tag, and
-after the \dtendnode for the root node is an \dtend tag, indicating
-the end of the whole tree\footnote{This is redundant, but included for
-ease of parsing.}. The structure block starts with the \dtbeginnode
-introducing the description of the root node (named \texttt{/}).
-
-Each property, after the \dtprop, has a 32-bit value giving an offset
-from the beginning of the strings block at which the property name is
-stored. Because it's common for many nodes to have properties with
-the same name, this approach can substantially reduce the total size
-of the blob. The name offset is followed by the length of the
-property value (as a 32-bit value) and then the data itself padded to
-a 32-bit boundary.
-
-\subsection{Contents of the tree}
-\label{sec:treecontents}
-
-Having seen how to represent the device tree structure as a flattened
-blob, what actually goes into the tree? The short answer is ``the
-same as an OF tree''. On OF systems, the flattened tree is
-transcribed directly from the OF device tree, so for simplicity we
-also use OF conventions for the tree on other systems.
-
-In many cases a flat tree can be simpler than a typical OF provided
-device tree. The flattened tree need only provide those nodes and
-properties that the kernel actually requires; the flattened tree
-generally need not include devices that the kernel can probe itself.
-For example, an OF device tree would normally include nodes for each
-PCI device on the system. A flattened tree need only include nodes
-for the PCI host bridges; the kernel will scan the buses thus
-described to find the subsidiary devices. The device tree can include
-nodes for devices where the kernel needs extra information, though:
-for example, for ISA devices on a subsidiary PCI/ISA bridge, or for
-devices with unusual interrupt routing.
-
-Where they exist, we follow the IEEE1275 bindings that specify how to
-describe various buses in the device tree (for example,
-\cite{IEEE1275-pci} describe how to represent PCI devices). The
-standard has not been updated for a long time, however, and lacks
-bindings for many modern buses and devices. In particular, embedded
-specific devices such as the various System-on-Chip buses are not
-covered. We intend to create new bindings for such buses, in keeping
-with the general conventions of IEEE1275 (a simple such binding for a
-System-on-Chip bus was included in \cite{noof5} a revision of
-\cite{noof1}).
-
-One complication arises for representing ``phandles'' in the flattened
-tree. In OF, each node in the tree has an associated phandle, a
-32-bit integer that uniquely identifies the node\footnote{In practice
-usually implemented as a pointer or offset within OF memory.}. This
-handle is used by the various OF calls to query and traverse the tree.
-Sometimes phandles are also used within the tree to refer to other
-nodes in the tree. For example, devices that produce interrupts
-generally have an \texttt{interrupt-parent} property giving the
-phandle of the interrupt controller that handles interrupts from this
-device. Parsing these and other interrupt related properties allows
-the kernel to build a complete representation of the system's
-interrupt tree, which can be quite different from the tree of bus
-connections.
-
-In the flattened tree, a node's phandle is represented by a special
-\phandle property. When the kernel generates a flattened tree from
-OF, it adds a \phandle property to each node, containing the phandle
-retrieved from OF. When the tree is generated without OF, however,
-only nodes that are actually referred to by phandle need to have this
-property.
-
-Another complication arises because nodes in an OF tree have two
-names. First they have the ``unit name'', which is how the node is
-referred to in an OF path. The unit name generally consists of a
-device type followed by an \texttt{@} followed by a \emph{unit
-address}. For example \texttt{/memory@0} is the full path of a memory
-node at address 0, \texttt{/ht@0,f2000000/pci@1} is the path of a PCI
-bus node, which is under a HyperTransport\tm bus node. The form of
-the unit address is bus dependent, but is generally derived from the
-node's \texttt{reg} property. In addition, nodes have a property,
-\texttt{name}, whose value is usually equal to the first path of the
-unit name. For example, the nodes in the previous example would have
-\texttt{name} properties equal to \texttt{memory} and \texttt{pci},
-respectively. To save space in the blob, the current version of the
-flattened tree format only requires the unit names to be present.
-When the kernel unflattens the tree, it automatically generates a
-\texttt{name} property from the node's path name.
-
-\section{The Device Tree Compiler}
-\label{sec:dtc}
-
-\begin{figure}[htb!]
- \centering
- \begin{lstlisting}[frame=single,basicstyle=\footnotesize\ttfamily,
- tabsize=3,numbers=left,xleftmargin=2em]
-/memreserve/ 0x20000000-0x21FFFFFF;
-
-/ {
- model = "MyBoard";
- compatible = "MyBoardFamily";
- #address-cells = <2>;
- #size-cells = <2>;
-
- cpus {
- #address-cells = <1>;
- #size-cells = <0>;
- PowerPC,970@0 {
- device_type = "cpu";
- reg = <0>;
- clock-frequency = <5f5e1000>;
- timebase-frequency = <1FCA055>;
- linux,boot-cpu;
- i-cache-size = <10000>;
- d-cache-size = <8000>;
- };
- };
-
- memory@0 {
- device_type = "memory";
- memreg: reg = <00000000 00000000
- 00000000 20000000>;
- };
-
- mpic@0x3fffdd08400 {
- /* Interrupt controller */
- /* ... */
- };
-
- pci@40000000000000 {
- /* PCI host bridge */
- /* ... */
- };
-
- chosen {
- bootargs = "root=/dev/sda2";
- linux,platform = <00000600>;
- interrupt-controller =
- < &/mpic@0x3fffdd08400 >;
- };
-};
-\end{lstlisting}
- \caption{Example \dtc source}
- \label{fig:dts}
-\end{figure}
-
-As we've seen, the flattened device tree format provides a convenient
-way of communicating device tree information to the kernel. It's
-simple for the kernel to parse, and simple for bootloaders to
-manipulate. On OF systems, it's easy to generate the flattened tree
-by walking the OF maintained tree. However, for embedded systems, the
-flattened tree must be generated from scratch.
-
-Embedded bootloaders are generally built for a particular board. So,
-it's usually possible to build the device tree blob at compile time
-and include it in the bootloader image. For minor revisions of the
-board, the bootloader can contain code to make the necessary tweaks to
-the tree before passing it to the booted kernel.
-
-The device trees for embedded boards are usually quite simple, and
-it's possible to hand construct the necessary blob by hand, but doing
-so is tedious. The ``device tree compiler'', \dtc{}\footnote{\dtc can
-be obtained from \cite{dtcgit}.}, is designed to make creating device
-tree blobs easier by converting a text representation of the tree
-into the necessary blob.
-
-\subsection{Input and output formats}
-
-As well as the normal mode of compiling a device tree blob from text
-source, \dtc can convert a device tree between a number of
-representations. It can take its input in one of three different
-formats:
-\begin{itemize}
-\item source, the normal case. The device tree is described in a text
- form, described in \S\ref{sec:dts}.
-\item blob (\texttt{dtb}), the flattened tree format described in
- \S\ref{sec:format}. This mode is useful for checking a pre-existing
- device tree blob.
-\item filesystem (\texttt{fs}), input is a directory tree in the
- layout of \texttt{/proc/device-tree} (roughly, a directory for each
- node in the device tree, a file for each property). This is useful
- for building a blob for the device tree in use by the currently
- running kernel.
-\end{itemize}
-
-In addition, \dtc can output the tree in one of three different
-formats:
-\begin{itemize}
-\item blob (\texttt{dtb}), as in \S\ref{sec:format}. The most
- straightforward use of \dtc is to compile from ``source'' to
- ``blob'' format.
-\item source (\texttt{dts}), as in \S\ref{sec:dts}. If used with blob
- input, this allows \dtc to act as a ``decompiler''.
-\item assembler source (\texttt{asm}). \dtc can produce an assembler
- file, which will assemble into a \texttt{.o} file containing the
- device tree blob, with symbols giving the beginning of the blob and
- its various subsections. This can then be linked directly into a
- bootloader or firmware image.
-\end{itemize}
-
-For maximum applicability, \dtc can both read and write any of the
-existing revisions of the blob format. When reading, \dtc takes the
-version from the blob header, and when writing it takes a command line
-option specifying the desired version. It automatically makes any
-necessary adjustments to the tree that are necessary for the specified
-version. For example, formats before 0x10 require each node to have
-an explicit \texttt{name} property. When \dtc creates such a blob, it
-will automatically generate \texttt{name} properties from the unit
-names.
-
-\subsection{Source format}
-\label{sec:dts}
-
-The ``source'' format for \dtc is a text description of the device
-tree in a vaguely C-like form. Figure \ref{fig:dts} shows an
-example. The file starts with \texttt{/memreserve/} directives, which
-gives address ranges to add to the output blob's memory reserve table,
-then the device tree proper is described.
-
-Nodes of the tree are introduced with the node name, followed by a
-\texttt{\{} ... \texttt{\};} block containing the node's properties
-and subnodes. Properties are given as just {\emph{name} \texttt{=}
- \emph{value}\texttt{;}}. The property values can be given in any
-of three forms:
-\begin{itemize}
-\item \emph{string} (for example, \texttt{"MyBoard"}). The property
- value is the given string, including terminating NULL. C-style
- escapes (\verb+\t+, \verb+\n+, \verb+\0+ and so forth) are allowed.
-\item \emph{cells} (for example, \texttt{<0 8000 f0000000>}). The
- property value is made up of a list of 32-bit ``cells'', each given
- as a hex value.
-\item \emph{bytestring} (for example, \texttt{[1234abcdef]}). The
- property value is given as a hex bytestring.
-\end{itemize}
-
-Cell properties can also contain \emph{references}. Instead of a hex
-number, the source can give an ampersand (\texttt{\&}) followed by the
-full path to some node in the tree. For example, in Figure
-\ref{fig:dts}, the \texttt{/chosen} node has an
-\texttt{interrupt-controller} property referring to the interrupt
-controller described by the node \texttt{/mpic@0x3fffdd08400}. In the
-output tree, the value of the referenced node's phandle is included in
-the property. If that node doesn't have an explicit phandle property,
-\dtc will automatically create a unique phandle for it. This approach
-makes it easy to create interrupt trees without having to explicitly
-assign and remember phandles for the various interrupt controller
-nodes.
-
-The \dtc source can also include ``labels'', which are placed on a
-particular node or property. For example, Figure \ref{fig:dts} has a
-label ``\texttt{memreg}'' on the \texttt{reg} property of the node
-\texttt{/memory@0}. When using assembler output, corresponding labels
-in the output are generated, which will assemble into symbols
-addressing the part of the blob with the node or property in question.
-This is useful for the common case where an embedded board has an
-essentially fixed device tree with a few variable properties, such as
-the size of memory. The bootloader for such a board can have a device
-tree linked in, including a symbol referring to the right place in the
-blob to update the parameter with the correct value determined at
-runtime.
-
-\subsection{Tree checking}
-
-Between reading in the device tree and writing it out in the new
-format, \dtc performs a number of checks on the tree:
-\begin{itemize}
-\item \emph{syntactic structure}: \dtc checks that node and property
- names contain only allowed characters and meet length restrictions.
- It checks that a node does not have multiple properties or subnodes
- with the same name.
-\item \emph{semantic structure}: In some cases, \dtc checks that
- properties whose contents are defined by convention have appropriate
- values. For example, it checks that \texttt{reg} properties have a
- length that makes sense given the address forms specified by the
- \texttt{\#address-cells} and \texttt{\#size-cells} properties. It
- checks that properties such as \texttt{interrupt-parent} contain a
- valid phandle.
-\item \emph{Linux requirements}: \dtc checks that the device tree
- contains those nodes and properties that are required by the Linux
- kernel to boot correctly.
-\end{itemize}
-
-These checks are useful to catch simple problems with the device tree,
-rather than having to debug the results on an embedded kernel. With
-the blob input mode, it can also be used for diagnosing problems with
-an existing blob.
-
-\section{Future Work}
-
-\subsection{Board ports}
-
-The flattened device tree has always been the only supported way to
-boot a \texttt{ppc64} kernel on an embedded system. With the merge of
-\texttt{ppc32} and \texttt{ppc64} code it has also become the only
-supported way to boot any merged \texttt{powerpc} kernel, 32-bit or
-64-bit. In fact, the old \texttt{ppc} architecture exists mainly just
-to support the old ppc32 embedded ports that have not been migrated
-to the flattened device tree approach. We plan to remove the
-\texttt{ppc} architecture eventually, which will mean porting all the
-various embedded boards to use the flattened device tree.
-
-\subsection{\dtc features}
-
-While it is already quite usable, there are a number of extra features
-that \dtc could include to make creating device trees more convenient:
-\begin{itemize}
-\item \emph{better tree checking}: Although \dtc already performs a
- number of checks on the device tree, they are rather haphazard. In
- many cases \dtc will give up after detecting a minor error early and
- won't pick up more interesting errors later on. There is a
- \texttt{-f} parameter that forces \dtc to generate an output tree
- even if there are errors. At present, this needs to be used more
- often than one might hope, because \dtc is bad at deciding which
- errors should really be fatal, and which rate mere warnings.
-\item \emph{binary include}: Occasionally, it is useful for the device
- tree to incorporate as a property a block of binary data for some
- board-specific purpose. For example, many of Apple's device trees
- incorporate bytecode drivers for certain platform devices. \dtc's
- source format ought to allow this by letting a property's value be
- read directly from a binary file.
-\item \emph{macros}: it might be useful for \dtc to implement some
- sort of macros so that a tree containing a number of similar devices
- (for example, multiple identical ethernet controllers or PCI buses)
- can be written more quickly. At present, this can be accomplished
- in part by running the source file through CPP before compiling with
- \dtc. It's not clear whether ``native'' support for macros would be
- more useful.
-\end{itemize}
-
-\bibliographystyle{amsplain}
-\bibliography{dtc-paper}
-
-\section*{About the authors}
-
-David Gibson has been a member of the IBM Linux Technology Center,
-working from Canberra, Australia, since 2001. Recently he has worked
-on Linux hugepage support and performance counter support for ppc64,
-as well as the device tree compiler. In the past, he has worked on
-bringup for various ppc and ppc64 embedded systems, the orinoco
-wireless driver, ramfs, and a userspace checkpointing system
-(\texttt{esky}).
-
-Benjamin Herrenschmidt was a MacOS developer for about 10 years, but
-ultimately saw the light and installed Linux on his Apple PowerPC
-machine. After writing a bootloader, BootX, for it in 1998, he
-started contributing to the PowerPC Linux port in various areas,
-mostly around the support for Apple machines. He became official
-PowerMac maintainer in 2001. In 2003, he joined the IBM Linux
-Technology Center in Canberra, Australia, where he ported the 64 bit
-PowerPC kernel to Apple G5 machines and the Maple embedded board,
-among others things. He's a member of the ppc64 development ``team''
-and one of his current goals is to make the integration of embedded
-platforms smoother and more maintainable than in the 32-bit PowerPC
-kernel.
-
-\section*{Legal Statement}
-
-This work represents the view of the author and does not necessarily
-represent the view of IBM.
-
-IBM, \ppc, \ppc Architecture, POWER5, pSeries and iSeries are
-trademarks or registered trademarks of International Business Machines
-Corporation in the United States and/or other countries.
-
-Apple and Power Macintosh are a registered trademarks of Apple
-Computer Inc. in the United States, other countries, or both.
-
-Linux is a registered trademark of Linus Torvalds.
-
-Other company, product, and service names may be trademarks or service
-marks of others.
-
-\end{document}
diff --git a/Documentation/dts-format.txt b/Documentation/dts-format.txt
deleted file mode 100644
index 41741dffca40..000000000000
--- a/Documentation/dts-format.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-Device Tree Source Format (version 1)
-=====================================
-
-The Device Tree Source (DTS) format is a textual representation of a
-device tree in a form that can be processed by dtc into a binary
-device tree in the form expected by the kernel. The description below
-is not a formal syntax definition of DTS, but describes the basic
-constructs used to represent device trees.
-
-Node and property definitions
------------------------------
-
-Device tree nodes are defined with a node name and unit address with
-braces marking the start and end of the node definition. They may be
-preceded by a label.
-
- [label:] node-name[@unit-address] {
- [properties definitions]
- [child nodes]
- }
-
-Nodes may contain property definitions and/or child node
-definitions. If both are present, properties must come before child
-nodes.
-
-Property definitions are name value pairs in the form:
- [label:] property-name = value;
-except for properties with empty (zero length) value which have the
-form:
- [label:] property-name;
-
-Property values may be defined as an array of 8, 16, 32, or 64-bit integer
-elements, as NUL-terminated strings, as bytestrings or a combination of these.
-
-* Arrays are represented by angle brackets surrounding a space separated list
- of C-style integers or character literals. Array elements default to 32-bits
- in size. An array of 32-bit elements is also known as a cell list or a list
- of cells. A cell being an unsigned 32-bit integer.
-
- e.g. interrupts = <17 0xc>;
-
-* A 64-bit value can be represented with two 32-bit elements.
-
- e.g. clock-frequency = <0x00000001 0x00000000>;
-
-* The storage size of an element can be changed using the /bits/ prefix. The
- /bits/ prefix allows for the creation of 8, 16, 32, and 64-bit elements.
- The resulting array will not be padded to a multiple of the default 32-bit
- element size.
-
- e.g. interrupts = /bits/ 8 <17 0xc>;
- e.g. clock-frequency = /bits/ 64 <0x0000000100000000>;
-
-* A NUL-terminated string value is represented using double quotes
- (the property value is considered to include the terminating NUL
- character).
-
- e.g. compatible = "simple-bus";
-
-* A bytestring is enclosed in square brackets [] with each byte
- represented by two hexadecimal digits. Spaces between each byte are
- optional.
-
- e.g. local-mac-address = [00 00 12 34 56 78]; or equivalently
- local-mac-address = [000012345678];
-
-* Values may have several comma-separated components, which are
- concatenated together.
- e.g. compatible = "ns16550", "ns8250";
- example = <0xf00f0000 19>, "a strange property format";
-
-* In an array a reference to another node will be expanded to that node's
- phandle. References may by '&' followed by a node's label:
- e.g. interrupt-parent = < &mpic >;
- or they may be '&' followed by a node's full path in braces:
- e.g. interrupt-parent = < &{/soc/interrupt-controller@40000} >;
- References are only permitted in arrays that have an element size of
- 32-bits.
-
-* Outside an array, a reference to another node will be expanded to that
- node's full path.
- e.g. ethernet0 = &EMAC0;
-
-* Labels may also appear before or after any component of a property
- value, or between elements of an array, or between bytes of a bytestring.
- e.g. reg = reglabel: <0 sizelabel: 0x1000000>;
- e.g. prop = [ab cd ef byte4: 00 ff fe];
- e.g. str = start: "string value" end: ;
-
-
-File layout
------------
-
-Version 1 DTS files have the overall layout:
- /dts-v1/;
-
- [memory reservations]
-
- / {
- [property definitions]
- [child nodes]
- };
-
-* The "/dts-v1/;" must be present to identify the file as a version 1
- DTS (dts files without this tag will be treated by dtc as being in
- the obsolete "version 0", which uses a different format for integers
- amongst other small but incompatible changes).
-
-* Memory reservations define an entry for the device tree blob's
- memory reservation table. They have the form:
- e.g. /memreserve/ <address> <length>;
- Where <address> and <length> are 64-bit C-style integers.
-
-* The / { ... }; section defines the root node of the device tree.
-
-* C style (/* ... */) and C++ style (// ...) comments are supported.
-
-
-
- -- David Gibson <david@gibson.dropbear.id.au>
- -- Yoder Stuart <stuart.yoder@freescale.com>
- -- Anton Staaf <robotboy@chromium.org>
diff --git a/Documentation/manual.txt b/Documentation/manual.txt
deleted file mode 100644
index 72403ac325c0..000000000000
--- a/Documentation/manual.txt
+++ /dev/null
@@ -1,695 +0,0 @@
-Device Tree Compiler Manual
-===========================
-
-I - "dtc", the device tree compiler
- 1) Obtaining Sources
- 1.1) Submitting Patches
- 2) Description
- 3) Command Line
- 4) Source File
- 4.1) Overview
- 4.2) Properties
- 4.3) Labels and References
-
-II - The DT block format
- 1) Header
- 2) Device tree generalities
- 3) Device tree "structure" block
- 4) Device tree "strings" block
-
-
-III - libfdt
-
-IV - Utility Tools
- 1) convert-dtsv0 -- Conversion to Version 1
- 1) fdtdump
-
-
-I - "dtc", the device tree compiler
-===================================
-
-1) Sources
-
-Source code for the Device Tree Compiler can be found at git.kernel.org.
-
-The upstream repository is here:
-
- git://git.kernel.org/pub/scm/utils/dtc/dtc.git
- https://git.kernel.org/pub/scm/utils/dtc/dtc.git
-
-The gitweb interface for the upstream respository is:
-
- https://git.kernel.org/cgit/utils/dtc/dtc.git/
-
-1.1) Submitting Patches
-
-Patches should be sent to the maintainers:
- David Gibson <david@gibson.dropbear.id.au>
- Jon Loeliger <jdl@jdl.com>
-and CCed to <devicetree-compiler@vger.kernel.org>.
-
-2) Description
-
-The Device Tree Compiler, dtc, takes as input a device-tree in
-a given format and outputs a device-tree in another format.
-Typically, the input format is "dts", a human readable source
-format, and creates a "dtb", or binary format as output.
-
-The currently supported Input Formats are:
-
- - "dtb": "blob" format. A flattened device-tree block with
- header in one binary blob.
-
- - "dts": "source" format. A text file containing a "source"
- for a device-tree.
-
- - "fs" format. A representation equivalent to the output of
- /proc/device-tree where nodes are directories and
- properties are files.
-
-The currently supported Output Formats are:
-
- - "dtb": "blob" format
-
- - "dts": "source" format
-
- - "asm": assembly language file. A file that can be sourced
- by gas to generate a device-tree "blob". That file can
- then simply be added to your Makefile. Additionally, the
- assembly file exports some symbols that can be used.
-
-
-3) Command Line
-
-The syntax of the dtc command line is:
-
- dtc [options] [<input_filename>]
-
-Options:
-
- <input_filename>
- The name of the input source file. If no <input_filename>
- or "-" is given, stdin is used.
-
- -b <number>
- Set the physical boot cpu.
-
- -f
- Force. Try to produce output even if the input tree has errors.
-
- -h
- Emit a brief usage and help message.
-
- -I <input_format>
- The source input format, as listed above.
-
- -o <output_filename>
- The name of the generated output file. Use "-" for stdout.
-
- -O <output_format>
- The generated output format, as listed above.
-
- -d <dependency_filename>
- Generate a dependency file during compilation.
-
- -q
- Quiet: -q suppress warnings, -qq errors, -qqq all
-
- -R <number>
- Make space for <number> reserve map entries
- Relevant for dtb and asm output only.
-
- -@
- Generates a __symbols__ node at the root node of the resulting blob
- for any node labels used, and for any local references using phandles
- it also generates a __local_fixups__ node that tracks them.
-
- When using the /plugin/ tag all unresolved label references to
- be tracked in the __fixups__ node, making dynamic resolution possible.
-
- -A
- Generate automatically aliases for all node labels. This is similar to
- the -@ option (the __symbols__ node contain identical information) but
- the semantics are slightly different since no phandles are automatically
- generated for labeled nodes.
-
- -S <bytes>
- Ensure the blob at least <bytes> long, adding additional
- space if needed.
-
- -v
- Print DTC version and exit.
-
- -V <output_version>
- Generate output conforming to the given <output_version>.
- By default the most recent version is generated.
- Relevant for dtb and asm output only.
-
-
-The <output_version> defines what version of the "blob" format will be
-generated. Supported versions are 1, 2, 3, 16 and 17. The default is
-always the most recent version and is likely the highest number.
-
-Additionally, dtc performs various sanity checks on the tree.
-
-
-4) Device Tree Source file
-
-4.1) Overview
-
-Here is a very rough overview of the layout of a DTS source file:
-
-
- sourcefile: versioninfo plugindecl list_of_memreserve devicetree
-
- memreserve: label 'memreserve' ADDR ADDR ';'
- | label 'memreserve' ADDR '-' ADDR ';'
-
- devicetree: '/' nodedef
-
- versioninfo: '/' 'dts-v1' '/' ';'
-
- plugindecl: '/' 'plugin' '/' ';'
- | /* empty */
-
- nodedef: '{' list_of_property list_of_subnode '}' ';'
-
- property: label PROPNAME '=' propdata ';'
-
- propdata: STRING
- | '<' list_of_cells '>'
- | '[' list_of_bytes ']'
-
- subnode: label nodename nodedef
-
-That structure forms a hierarchical layout of nodes and properties
-rooted at an initial node as:
-
- / {
- }
-
-Both classic C style and C++ style comments are supported.
-
-Source files may be directly included using the syntax:
-
- /include/ "filename"
-
-
-4.2) Properties
-
-Properties are named, possibly labeled, values. Each value
-is one of:
-
- - A null-teminated C-like string,
- - A numeric value fitting in 32 bits,
- - A list of 32-bit values
- - A byte sequence
-
-Here are some example property definitions:
-
- - A property containing a 0 terminated string
-
- property1 = "string_value";
-
- - A property containing a numerical 32-bit hexadecimal value
-
- property2 = <1234abcd>;
-
- - A property containing 3 numerical 32-bit hexadecimal values
-
- property3 = <12345678 12345678 deadbeef>;
-
- - A property whose content is an arbitrary array of bytes
-
- property4 = [0a 0b 0c 0d de ea ad be ef];
-
-
-Node may contain sub-nodes to obtain a hierarchical structure.
-For example:
-
- - A child node named "childnode" whose unit name is
- "childnode at address". It in turn has a string property
- called "childprop".
-
- childnode@addresss {
- childprop = "hello\n";
- };
-
-
-By default, all numeric values are hexadecimal. Alternate bases
-may be specified using a prefix "d#" for decimal, "b#" for binary,
-and "o#" for octal.
-
-Strings support common escape sequences from C: "\n", "\t", "\r",
-"\(octal value)", "\x(hex value)".
-
-
-4.3) Labels and References
-
-Labels may be applied to nodes or properties. Labels appear
-before a node name, and are referenced using an ampersand: &label.
-Absolute node path names are also allowed in node references.
-
-In this exmaple, a node is labled "mpic" and then referenced:
-
- mpic: interrupt-controller@40000 {
- ...
- };
-
- ethernet-phy@3 {
- interrupt-parent = <&mpic>;
- ...
- };
-
-And used in properties, lables may appear before or after any value:
-
- randomnode {
- prop: string = data: "mystring\n" data_end: ;
- ...
- };
-
-
-
-II - The DT block format
-========================
-
-This chapter defines the format of the flattened device-tree
-passed to the kernel. The actual content of the device tree
-are described in the kernel documentation in the file
-
- linux-2.6/Documentation/powerpc/booting-without-of.txt
-
-You can find example of code manipulating that format within
-the kernel. For example, the file:
-
- including arch/powerpc/kernel/prom_init.c
-
-will generate a flattened device-tree from the Open Firmware
-representation. Other utilities such as fs2dt, which is part of
-the kexec tools, will generate one from a filesystem representation.
-Some bootloaders such as U-Boot provide a bit more support by
-using the libfdt code.
-
-For booting the kernel, the device tree block has to be in main memory.
-It has to be accessible in both real mode and virtual mode with no
-mapping other than main memory. If you are writing a simple flash
-bootloader, it should copy the block to RAM before passing it to
-the kernel.
-
-
-1) Header
----------
-
-The kernel is entered with r3 pointing to an area of memory that is
-roughly described in include/asm-powerpc/prom.h by the structure
-boot_param_header:
-
- struct boot_param_header {
- u32 magic; /* magic word OF_DT_HEADER */
- u32 totalsize; /* total size of DT block */
- u32 off_dt_struct; /* offset to structure */
- u32 off_dt_strings; /* offset to strings */
- u32 off_mem_rsvmap; /* offset to memory reserve map */
- u32 version; /* format version */
- u32 last_comp_version; /* last compatible version */
-
- /* version 2 fields below */
- u32 boot_cpuid_phys; /* Which physical CPU id we're
- booting on */
- /* version 3 fields below */
- u32 size_dt_strings; /* size of the strings block */
-
- /* version 17 fields below */
- u32 size_dt_struct; /* size of the DT structure block */
- };
-
-Along with the constants:
-
- /* Definitions used by the flattened device tree */
- #define OF_DT_HEADER 0xd00dfeed /* 4: version,
- 4: total size */
- #define OF_DT_BEGIN_NODE 0x1 /* Start node: full name
- */
- #define OF_DT_END_NODE 0x2 /* End node */
- #define OF_DT_PROP 0x3 /* Property: name off,
- size, content */
- #define OF_DT_END 0x9
-
-All values in this header are in big endian format, the various
-fields in this header are defined more precisely below. All "offset"
-values are in bytes from the start of the header; that is from the
-value of r3.
-
- - magic
-
- This is a magic value that "marks" the beginning of the
- device-tree block header. It contains the value 0xd00dfeed and is
- defined by the constant OF_DT_HEADER
-
- - totalsize
-
- This is the total size of the DT block including the header. The
- "DT" block should enclose all data structures defined in this
- chapter (who are pointed to by offsets in this header). That is,
- the device-tree structure, strings, and the memory reserve map.
-
- - off_dt_struct
-
- This is an offset from the beginning of the header to the start
- of the "structure" part the device tree. (see 2) device tree)
-
- - off_dt_strings
-
- This is an offset from the beginning of the header to the start
- of the "strings" part of the device-tree
-
- - off_mem_rsvmap
-
- This is an offset from the beginning of the header to the start
- of the reserved memory map. This map is a list of pairs of 64-
- bit integers. Each pair is a physical address and a size. The
- list is terminated by an entry of size 0. This map provides the
- kernel with a list of physical memory areas that are "reserved"
- and thus not to be used for memory allocations, especially during
- early initialization. The kernel needs to allocate memory during
- boot for things like un-flattening the device-tree, allocating an
- MMU hash table, etc... Those allocations must be done in such a
- way to avoid overriding critical things like, on Open Firmware
- capable machines, the RTAS instance, or on some pSeries, the TCE
- tables used for the iommu. Typically, the reserve map should
- contain _at least_ this DT block itself (header,total_size). If
- you are passing an initrd to the kernel, you should reserve it as
- well. You do not need to reserve the kernel image itself. The map
- should be 64-bit aligned.
-
- - version
-
- This is the version of this structure. Version 1 stops
- here. Version 2 adds an additional field boot_cpuid_phys.
- Version 3 adds the size of the strings block, allowing the kernel
- to reallocate it easily at boot and free up the unused flattened
- structure after expansion. Version 16 introduces a new more
- "compact" format for the tree itself that is however not backward
- compatible. Version 17 adds an additional field, size_dt_struct,
- allowing it to be reallocated or moved more easily (this is
- particularly useful for bootloaders which need to make
- adjustments to a device tree based on probed information). You
- should always generate a structure of the highest version defined
- at the time of your implementation. Currently that is version 17,
- unless you explicitly aim at being backward compatible.
-
- - last_comp_version
-
- Last compatible version. This indicates down to what version of
- the DT block you are backward compatible. For example, version 2
- is backward compatible with version 1 (that is, a kernel build
- for version 1 will be able to boot with a version 2 format). You
- should put a 1 in this field if you generate a device tree of
- version 1 to 3, or 16 if you generate a tree of version 16 or 17
- using the new unit name format.
-
- - boot_cpuid_phys
-
- This field only exist on version 2 headers. It indicate which
- physical CPU ID is calling the kernel entry point. This is used,
- among others, by kexec. If you are on an SMP system, this value
- should match the content of the "reg" property of the CPU node in
- the device-tree corresponding to the CPU calling the kernel entry
- point (see further chapters for more informations on the required
- device-tree contents)
-
- - size_dt_strings
-
- This field only exists on version 3 and later headers. It
- gives the size of the "strings" section of the device tree (which
- starts at the offset given by off_dt_strings).
-
- - size_dt_struct
-
- This field only exists on version 17 and later headers. It gives
- the size of the "structure" section of the device tree (which
- starts at the offset given by off_dt_struct).
-
-So the typical layout of a DT block (though the various parts don't
-need to be in that order) looks like this (addresses go from top to
-bottom):
-
- ------------------------------
- r3 -> | struct boot_param_header |
- ------------------------------
- | (alignment gap) (*) |
- ------------------------------
- | memory reserve map |
- ------------------------------
- | (alignment gap) |
- ------------------------------
- | |
- | device-tree structure |
- | |
- ------------------------------
- | (alignment gap) |
- ------------------------------
- | |
- | device-tree strings |
- | |
- -----> ------------------------------
- |
- |
- --- (r3 + totalsize)
-
- (*) The alignment gaps are not necessarily present; their presence
- and size are dependent on the various alignment requirements of
- the individual data blocks.
-
-
-2) Device tree generalities
----------------------------
-
-This device-tree itself is separated in two different blocks, a
-structure block and a strings block. Both need to be aligned to a 4
-byte boundary.
-
-First, let's quickly describe the device-tree concept before detailing
-the storage format. This chapter does _not_ describe the detail of the
-required types of nodes & properties for the kernel, this is done
-later in chapter III.
-
-The device-tree layout is strongly inherited from the definition of
-the Open Firmware IEEE 1275 device-tree. It's basically a tree of
-nodes, each node having two or more named properties. A property can
-have a value or not.
-
-It is a tree, so each node has one and only one parent except for the
-root node who has no parent.
-
-A node has 2 names. The actual node name is generally contained in a
-property of type "name" in the node property list whose value is a
-zero terminated string and is mandatory for version 1 to 3 of the
-format definition (as it is in Open Firmware). Version 16 makes it
-optional as it can generate it from the unit name defined below.
-
-There is also a "unit name" that is used to differentiate nodes with
-the same name at the same level, it is usually made of the node
-names, the "@" sign, and a "unit address", which definition is
-specific to the bus type the node sits on.
-
-The unit name doesn't exist as a property per-se but is included in
-the device-tree structure. It is typically used to represent "path" in
-the device-tree. More details about the actual format of these will be
-below.
-
-The kernel powerpc generic code does not make any formal use of the
-unit address (though some board support code may do) so the only real
-requirement here for the unit address is to ensure uniqueness of
-the node unit name at a given level of the tree. Nodes with no notion
-of address and no possible sibling of the same name (like /memory or
-/cpus) may omit the unit address in the context of this specification,
-or use the "@0" default unit address. The unit name is used to define
-a node "full path", which is the concatenation of all parent node
-unit names separated with "/".
-
-The root node doesn't have a defined name, and isn't required to have
-a name property either if you are using version 3 or earlier of the
-format. It also has no unit address (no @ symbol followed by a unit
-address). The root node unit name is thus an empty string. The full
-path to the root node is "/".
-
-Every node which actually represents an actual device (that is, a node
-which isn't only a virtual "container" for more nodes, like "/cpus"
-is) is also required to have a "device_type" property indicating the
-type of node .
-
-Finally, every node that can be referenced from a property in another
-node is required to have a "linux,phandle" property. Real open
-firmware implementations provide a unique "phandle" value for every
-node that the "prom_init()" trampoline code turns into
-"linux,phandle" properties. However, this is made optional if the
-flattened device tree is used directly. An example of a node
-referencing another node via "phandle" is when laying out the
-interrupt tree which will be described in a further version of this
-document.
-
-This "linux, phandle" property is a 32-bit value that uniquely
-identifies a node. You are free to use whatever values or system of
-values, internal pointers, or whatever to generate these, the only
-requirement is that every node for which you provide that property has
-a unique value for it.
-
-Here is an example of a simple device-tree. In this example, an "o"
-designates a node followed by the node unit name. Properties are
-presented with their name followed by their content. "content"
-represents an ASCII string (zero terminated) value, while <content>
-represents a 32-bit hexadecimal value. The various nodes in this
-example will be discussed in a later chapter. At this point, it is
-only meant to give you a idea of what a device-tree looks like. I have
-purposefully kept the "name" and "linux,phandle" properties which
-aren't necessary in order to give you a better idea of what the tree
-looks like in practice.
-
- / o device-tree
- |- name = "device-tree"
- |- model = "MyBoardName"
- |- compatible = "MyBoardFamilyName"
- |- #address-cells = <2>
- |- #size-cells = <2>
- |- linux,phandle = <0>
- |
- o cpus
- | | - name = "cpus"
- | | - linux,phandle = <1>
- | | - #address-cells = <1>
- | | - #size-cells = <0>
- | |
- | o PowerPC,970@0
- | |- name = "PowerPC,970"
- | |- device_type = "cpu"
- | |- reg = <0>
- | |- clock-frequency = <5f5e1000>
- | |- 64-bit
- | |- linux,phandle = <2>
- |
- o memory@0
- | |- name = "memory"
- | |- device_type = "memory"
- | |- reg = <00000000 00000000 00000000 20000000>
- | |- linux,phandle = <3>
- |
- o chosen
- |- name = "chosen"
- |- bootargs = "root=/dev/sda2"
- |- linux,phandle = <4>
-
-This tree is almost a minimal tree. It pretty much contains the
-minimal set of required nodes and properties to boot a linux kernel;
-that is, some basic model informations at the root, the CPUs, and the
-physical memory layout. It also includes misc information passed
-through /chosen, like in this example, the platform type (mandatory)
-and the kernel command line arguments (optional).
-
-The /cpus/PowerPC,970@0/64-bit property is an example of a
-property without a value. All other properties have a value. The
-significance of the #address-cells and #size-cells properties will be
-explained in chapter IV which defines precisely the required nodes and
-properties and their content.
-
-
-3) Device tree "structure" block
-
-The structure of the device tree is a linearized tree structure. The
-"OF_DT_BEGIN_NODE" token starts a new node, and the "OF_DT_END_NODE"
-ends that node definition. Child nodes are simply defined before
-"OF_DT_END_NODE" (that is nodes within the node). A 'token' is a 32
-bit value. The tree has to be "finished" with a OF_DT_END token
-
-Here's the basic structure of a single node:
-
- * token OF_DT_BEGIN_NODE (that is 0x00000001)
- * for version 1 to 3, this is the node full path as a zero
- terminated string, starting with "/". For version 16 and later,
- this is the node unit name only (or an empty string for the
- root node)
- * [align gap to next 4 bytes boundary]
- * for each property:
- * token OF_DT_PROP (that is 0x00000003)
- * 32-bit value of property value size in bytes (or 0 if no
- value)
- * 32-bit value of offset in string block of property name
- * property value data if any
- * [align gap to next 4 bytes boundary]
- * [child nodes if any]
- * token OF_DT_END_NODE (that is 0x00000002)
-
-So the node content can be summarized as a start token, a full path,
-a list of properties, a list of child nodes, and an end token. Every
-child node is a full node structure itself as defined above.
-
-NOTE: The above definition requires that all property definitions for
-a particular node MUST precede any subnode definitions for that node.
-Although the structure would not be ambiguous if properties and
-subnodes were intermingled, the kernel parser requires that the
-properties come first (up until at least 2.6.22). Any tools
-manipulating a flattened tree must take care to preserve this
-constraint.
-
-4) Device tree "strings" block
-
-In order to save space, property names, which are generally redundant,
-are stored separately in the "strings" block. This block is simply the
-whole bunch of zero terminated strings for all property names
-concatenated together. The device-tree property definitions in the
-structure block will contain offset values from the beginning of the
-strings block.
-
-
-III - libfdt
-============
-
-This library should be merged into dtc proper.
-This library should likely be worked into U-Boot and the kernel.
-
-
-IV - Utility Tools
-==================
-
-1) convert-dtsv0 -- Conversion to Version 1
-
-convert-dtsv0 is a small utility program which converts (DTS)
-Device Tree Source from the obsolete version 0 to version 1.
-
-Version 1 DTS files are marked by line "/dts-v1/;" at the top of the file.
-
-The syntax of the convert-dtsv0 command line is:
-
- convert-dtsv0 [<input_filename ... >]
-
-Each file passed will be converted to the new /dts-v1/ version by creating
-a new file with a "v1" appended the filename.
-
-Comments, empty lines, etc. are preserved.
-
-
-2) fdtdump -- Flat Device Tree dumping utility
-
-The fdtdump program prints a readable version of a flat device tree file.
-
-The syntax of the fdtdump command line is:
-
- fdtdump [options] <DTB-file-name>
-
-Where options are:
- -d,--debug Dump debug information while decoding the file
- -s,--scan Scan for an embedded fdt in given file
-
-3) fdtoverlay -- Flat Device Tree overlay applicator
-
-The fdtoverlay applies an arbitrary number of FDT overlays to a base FDT blob
-to a given output file.
-
-The syntax of the fdtoverlay command line is:
-
- fdtoverlay -i <base-blob> -o <output-blob> <overlay-blob0> [<overlay-blob1> ...]
-
-Where options are:
- -i, --input Input base DT blob
- -o, --output Output DT blob
- -v, --verbose Verbose message output
diff --git a/GPL b/GPL
deleted file mode 100644
index d60c31a97a54..000000000000
--- a/GPL
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 9ba8121c6f97..000000000000
--- a/Makefile
+++ /dev/null
@@ -1,354 +0,0 @@
-#
-# Device Tree Compiler
-#
-
-#
-# Version information will be constructed in this order:
-# EXTRAVERSION might be "-rc", for example.
-# LOCAL_VERSION is likely from command line.
-# CONFIG_LOCALVERSION from some future config system.
-#
-VERSION = 1
-PATCHLEVEL = 4
-SUBLEVEL = 6
-EXTRAVERSION =
-LOCAL_VERSION =
-CONFIG_LOCALVERSION =
-
-CPPFLAGS = -I libfdt -I .
-WARNINGS = -Wall -Wpointer-arith -Wcast-qual -Wnested-externs \
- -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wshadow
-CFLAGS = -g -Os $(SHAREDLIB_CFLAGS) -Werror $(WARNINGS)
-
-BISON = bison
-LEX = flex
-SWIG = swig
-PKG_CONFIG ?= pkg-config
-
-INSTALL = /usr/bin/install
-DESTDIR =
-PREFIX = $(HOME)
-BINDIR = $(PREFIX)/bin
-LIBDIR = $(PREFIX)/lib
-INCLUDEDIR = $(PREFIX)/include
-
-HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
- sed -e 's/\(cygwin\|msys\).*/\1/')
-
-ifeq ($(HOSTOS),darwin)
-SHAREDLIB_EXT = dylib
-SHAREDLIB_CFLAGS = -fPIC
-SHAREDLIB_LDFLAGS = -fPIC -dynamiclib -Wl,-install_name -Wl,
-else ifeq ($(HOSTOS),$(filter $(HOSTOS),msys cygwin))
-SHAREDLIB_EXT = so
-SHAREDLIB_CFLAGS =
-SHAREDLIB_LDFLAGS = -shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname,
-else
-SHAREDLIB_EXT = so
-SHAREDLIB_CFLAGS = -fPIC
-SHAREDLIB_LDFLAGS = -fPIC -shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname,
-endif
-
-#
-# Overall rules
-#
-ifdef V
-VECHO = :
-else
-VECHO = echo " "
-ARFLAGS = rc
-.SILENT:
-endif
-
-NODEPTARGETS = clean
-ifeq ($(MAKECMDGOALS),)
-DEPTARGETS = all
-else
-DEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS))
-endif
-
-#
-# Rules for versioning
-#
-
-DTC_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
-VERSION_FILE = version_gen.h
-
-CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
- else if [ -x /bin/bash ]; then echo /bin/bash; \
- else echo sh; fi ; fi)
-
-nullstring :=
-space := $(nullstring) # end of line
-
-localver_config = $(subst $(space),, $(string) \
- $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
-
-localver_cmd = $(subst $(space),, $(string) \
- $(patsubst "%",%,$(LOCALVERSION)))
-
-localver_scm = $(shell $(CONFIG_SHELL) ./scripts/setlocalversion)
-localver_full = $(localver_config)$(localver_cmd)$(localver_scm)
-
-dtc_version = $(DTC_VERSION)$(localver_full)
-
-# Contents of the generated version file.
-define filechk_version
- (echo "#define DTC_VERSION \"DTC $(dtc_version)\""; )
-endef
-
-define filechk
- set -e; \
- echo ' CHK $@'; \
- mkdir -p $(dir $@); \
- $(filechk_$(1)) < $< > $@.tmp; \
- if [ -r $@ ] && cmp -s $@ $@.tmp; then \
- rm -f $@.tmp; \
- else \
- echo ' UPD $@'; \
- mv -f $@.tmp $@; \
- fi;
-endef
-
-
-include Makefile.convert-dtsv0
-include Makefile.dtc
-include Makefile.utils
-
-BIN += convert-dtsv0
-BIN += dtc
-BIN += fdtdump
-BIN += fdtget
-BIN += fdtput
-BIN += fdtoverlay
-
-SCRIPTS = dtdiff
-
-all: $(BIN) libfdt
-
-# We need both Python and swig to build pylibfdt.
-.PHONY: maybe_pylibfdt
-maybe_pylibfdt: FORCE
- if $(PKG_CONFIG) --cflags python2 >/dev/null 2>&1; then \
- if which swig >/dev/null 2>&1; then \
- can_build=yes; \
- fi; \
- fi; \
- if [ "$$can_build" = "yes" ]; then \
- $(MAKE) pylibfdt; \
- else \
- echo "## Skipping pylibfdt (install python dev and swig to build)"; \
- fi
-
-ifeq ($(NO_PYTHON),)
-all: maybe_pylibfdt
-endif
-
-
-ifneq ($(DEPTARGETS),)
--include $(DTC_OBJS:%.o=%.d)
--include $(CONVERT_OBJS:%.o=%.d)
--include $(FDTDUMP_OBJS:%.o=%.d)
--include $(FDTGET_OBJS:%.o=%.d)
--include $(FDTPUT_OBJS:%.o=%.d)
--include $(FDTOVERLAY_OBJS:%.o=%.d)
-endif
-
-
-
-#
-# Rules for libfdt
-#
-LIBFDT_objdir = libfdt
-LIBFDT_srcdir = libfdt
-LIBFDT_archive = $(LIBFDT_objdir)/libfdt.a
-LIBFDT_lib = $(LIBFDT_objdir)/libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT)
-LIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES))
-LIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION))
-
-include $(LIBFDT_srcdir)/Makefile.libfdt
-
-.PHONY: libfdt
-libfdt: $(LIBFDT_archive) $(LIBFDT_lib)
-
-$(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
-$(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
-
-libfdt_clean:
- @$(VECHO) CLEAN "(libfdt)"
- rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES))
- rm -f $(LIBFDT_objdir)/*.so
-
-ifneq ($(DEPTARGETS),)
--include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d)
-endif
-
-# This stops make from generating the lex and bison output during
-# auto-dependency computation, but throwing them away as an
-# intermediate target and building them again "for real"
-.SECONDARY: $(DTC_GEN_SRCS) $(CONVERT_GEN_SRCS)
-
-install-bin: all $(SCRIPTS)
- @$(VECHO) INSTALL-BIN
- $(INSTALL) -d $(DESTDIR)$(BINDIR)
- $(INSTALL) $(BIN) $(SCRIPTS) $(DESTDIR)$(BINDIR)
-
-install-lib: all
- @$(VECHO) INSTALL-LIB
- $(INSTALL) -d $(DESTDIR)$(LIBDIR)
- $(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR)
- ln -sf $(notdir $(LIBFDT_lib)) $(DESTDIR)$(LIBDIR)/$(LIBFDT_soname)
- ln -sf $(LIBFDT_soname) $(DESTDIR)$(LIBDIR)/libfdt.$(SHAREDLIB_EXT)
- $(INSTALL) -m 644 $(LIBFDT_archive) $(DESTDIR)$(LIBDIR)
-
-install-includes:
- @$(VECHO) INSTALL-INC
- $(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)
- $(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR)
-
-install: install-bin install-lib install-includes
-
-ifeq ($(NO_PYTHON),)
-install: install_pylibfdt
-endif
-
-$(VERSION_FILE): Makefile FORCE
- $(call filechk,version)
-
-
-dtc: $(DTC_OBJS)
-
-convert-dtsv0: $(CONVERT_OBJS)
- @$(VECHO) LD $@
- $(LINK.c) -o $@ $^
-
-fdtdump: $(FDTDUMP_OBJS)
-
-fdtget: $(FDTGET_OBJS) $(LIBFDT_archive)
-
-fdtput: $(FDTPUT_OBJS) $(LIBFDT_archive)
-
-fdtoverlay: $(FDTOVERLAY_OBJS) $(LIBFDT_archive)
-
-dist:
- git archive --format=tar --prefix=dtc-$(dtc_version)/ HEAD \
- > ../dtc-$(dtc_version).tar
- cat ../dtc-$(dtc_version).tar | \
- gzip -9 > ../dtc-$(dtc_version).tar.gz
-
-
-#
-# Rules for pylibfdt
-#
-PYLIBFDT_srcdir = pylibfdt
-PYLIBFDT_objdir = pylibfdt
-
-include $(PYLIBFDT_srcdir)/Makefile.pylibfdt
-
-.PHONY: pylibfdt
-pylibfdt: $(PYLIBFDT_objdir)/_libfdt.so
-
-pylibfdt_clean:
- @$(VECHO) CLEAN "(pylibfdt)"
- rm -f $(addprefix $(PYLIBFDT_objdir)/,$(PYLIBFDT_cleanfiles))
-
-#
-# Release signing and uploading
-# This is for maintainer convenience, don't try this at home.
-#
-ifeq ($(MAINTAINER),y)
-GPG = gpg2
-KUP = kup
-KUPDIR = /pub/software/utils/dtc
-
-kup: dist
- $(GPG) --detach-sign --armor -o ../dtc-$(dtc_version).tar.sign \
- ../dtc-$(dtc_version).tar
- $(KUP) put ../dtc-$(dtc_version).tar.gz ../dtc-$(dtc_version).tar.sign \
- $(KUPDIR)/dtc-$(dtc_version).tar.gz
-endif
-
-tags: FORCE
- rm -f tags
- find . \( -name tests -type d -prune \) -o \
- \( ! -name '*.tab.[ch]' ! -name '*.lex.c' \
- -name '*.[chly]' -type f -print \) | xargs ctags -a
-
-#
-# Testsuite rules
-#
-TESTS_PREFIX=tests/
-
-TESTS_BIN += dtc
-TESTS_BIN += convert-dtsv0
-TESTS_BIN += fdtput
-TESTS_BIN += fdtget
-TESTS_BIN += fdtdump
-TESTS_BIN += fdtoverlay
-ifeq ($(NO_PYTHON),)
-TESTS_PYLIBFDT += maybe_pylibfdt
-endif
-
-include tests/Makefile.tests
-
-#
-# Clean rules
-#
-STD_CLEANFILES = *~ *.o *.$(SHAREDLIB_EXT) *.d *.a *.i *.s core a.out vgcore.* \
- *.tab.[ch] *.lex.c *.output
-
-clean: libfdt_clean pylibfdt_clean tests_clean
- @$(VECHO) CLEAN
- rm -f $(STD_CLEANFILES)
- rm -f $(VERSION_FILE)
- rm -f $(BIN)
- rm -f dtc-*.tar dtc-*.tar.sign dtc-*.tar.asc
-
-#
-# Generic compile rules
-#
-%: %.o
- @$(VECHO) LD $@
- $(LINK.c) -o $@ $^
-
-%.o: %.c
- @$(VECHO) CC $@
- $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
-
-%.o: %.S
- @$(VECHO) AS $@
- $(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $<
-
-%.d: %.c
- @$(VECHO) DEP $<
- $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
-
-%.d: %.S
- @$(VECHO) DEP $<
- $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
-
-%.i: %.c
- @$(VECHO) CPP $@
- $(CC) $(CPPFLAGS) -E $< > $@
-
-%.s: %.c
- @$(VECHO) CC -S $@
- $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $<
-
-%.a:
- @$(VECHO) AR $@
- $(AR) $(ARFLAGS) $@ $^
-
-$(LIBFDT_lib):
- @$(VECHO) LD $@
- $(CC) $(LDFLAGS) $(SHAREDLIB_LDFLAGS)$(LIBFDT_soname) -o $(LIBFDT_lib) $^
-
-%.lex.c: %.l
- @$(VECHO) LEX $@
- $(LEX) -o$@ $<
-
-%.tab.c %.tab.h %.output: %.y
- @$(VECHO) BISON $@
- $(BISON) -d $<
-
-FORCE:
diff --git a/Makefile.convert-dtsv0 b/Makefile.convert-dtsv0
deleted file mode 100644
index 08ea40a03a71..000000000000
--- a/Makefile.convert-dtsv0
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# This is not a complete Makefile of itself.
-# Instead, it is designed to be easily embeddable
-# into other systems of Makefiles.
-#
-
-CONVERT_SRCS = \
- srcpos.c \
- util.c
-
-CONVERT_GEN_SRCS = convert-dtsv0-lexer.lex.c
-
-CONVERT_OBJS = $(CONVERT_SRCS:%.c=%.o) $(CONVERT_GEN_SRCS:%.c=%.o)
diff --git a/Makefile.dtc b/Makefile.dtc
deleted file mode 100644
index bece49b35535..000000000000
--- a/Makefile.dtc
+++ /dev/null
@@ -1,18 +0,0 @@
-# Makefile.dtc
-#
-# This is not a complete Makefile of itself. Instead, it is designed to
-# be easily embeddable into other systems of Makefiles.
-#
-DTC_SRCS = \
- checks.c \
- data.c \
- dtc.c \
- flattree.c \
- fstree.c \
- livetree.c \
- srcpos.c \
- treesource.c \
- util.c
-
-DTC_GEN_SRCS = dtc-lexer.lex.c dtc-parser.tab.c
-DTC_OBJS = $(DTC_SRCS:%.c=%.o) $(DTC_GEN_SRCS:%.c=%.o)
diff --git a/libfdt/Makefile.libfdt b/Makefile.libfdt
index 098b3f36e668..098b3f36e668 100644
--- a/libfdt/Makefile.libfdt
+++ b/Makefile.libfdt
diff --git a/Makefile.utils b/Makefile.utils
deleted file mode 100644
index e0289229e6a5..000000000000
--- a/Makefile.utils
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# This is not a complete Makefile of itself. Instead, it is designed to
-# be easily embeddable into other systems of Makefiles.
-#
-
-FDTDUMP_SRCS = \
- fdtdump.c \
- util.c
-
-FDTDUMP_OBJS = $(FDTDUMP_SRCS:%.c=%.o)
-
-
-FDTGET_SRCS = \
- fdtget.c \
- util.c
-
-FDTGET_OBJS = $(FDTGET_SRCS:%.c=%.o)
-
-
-FDTPUT_SRCS = \
- fdtput.c \
- util.c
-
-FDTPUT_OBJS = $(FDTPUT_SRCS:%.c=%.o)
-
-FDTOVERLAY_SRCS = \
- fdtoverlay.c \
- util.c
-
-FDTOVERLAY_OBJS = $(FDTOVERLAY_SRCS:%.c=%.o)
diff --git a/README b/README
deleted file mode 100644
index 15232ab8a91d..000000000000
--- a/README
+++ /dev/null
@@ -1,93 +0,0 @@
-The source tree contains the Device Tree Compiler (dtc) toolchain for
-working with device tree source and binary files and also libfdt, a
-utility library for reading and manipulating the binary format.
-
-DTC and LIBFDT are maintained by:
-
-David Gibson <david@gibson.dropbear.id.au>
-Jon Loeliger <jdl@jdl.com>
-
-
-Python library
---------------
-
-A Python library is also available. To build this you will need to install
-swig and Python development files. On Debian distributions:
-
- sudo apt-get install swig python-dev
-
-The library provides an Fdt class which you can use like this:
-
-$ PYTHONPATH=../pylibfdt python
->>> import libfdt
->>> fdt = libfdt.Fdt(open('test_tree1.dtb').read())
->>> node = fdt.path_offset('/subnode@1')
->>> print node
-124
->>> prop_offset = fdt.first_property_offset(node)
->>> prop = fdt.get_property_by_offset(prop_offset)
->>> print '%s=%r' % (prop.name, prop.value)
-compatible=bytearray(b'subnode1\x00')
->>> print '%s=%s' % (prop.name, prop.value)
-compatible=subnode1
->>> node2 = fdt.path_offset('/')
->>> print fdt.getprop(node2, 'compatible')
-test_tree1
-
-You will find tests in tests/pylibfdt_tests.py showing how to use each
-method. Help is available using the Python help command, e.g.:
-
- $ cd pylibfdt
- $ python -c "import libfdt; help(libfdt)"
-
-If you add new features, please check code coverage:
-
- $ sudo apt-get install python-pip python-pytest
- $ sudo pip install coverage
- $ cd tests
- $ coverage run pylibfdt_tests.py
- $ coverage html
- # Open 'htmlcov/index.html' in your browser
-
-
-To install the library via the normal setup.py method, use:
-
- ./pylibfdt/setup.py [--prefix=/path/to/install_dir]
-
-If --prefix is not provided, the default prefix is used, typically '/usr'
-or '/usr/local'. See Python's distutils documentation for details. You can
-also install via the Makefile if you like, but the above is more common.
-
-To install both libfdt and pylibfdt you can use:
-
- make install [SETUP_PREFIX=/path/to/install_dir] \
- [PREFIX=/path/to/install_dir]
-
-To disable building the python library, even if swig and Python are available,
-use:
-
- make NO_PYTHON=1
-
-
-More work remains to support all of libfdt, including access to numeric
-values.
-
-
-Tests
------
-
-Test files are kept in the tests/ directory. Use 'make check' to build and run
-all tests.
-
-If you want to adjust a test file, be aware that tree_tree1.dts is compiled
-and checked against a binary tree from assembler macros in trees.S. So
-if you change that file you must change tree.S also.
-
-
-Mailing list
-------------
-The following list is for discussion about dtc and libfdt implementation
-mailto:devicetree-compiler@vger.kernel.org
-
-Core device tree bindings are discussed on the devicetree-spec list:
-mailto:devicetree-spec@vger.kernel.org
diff --git a/README.license b/README.license
deleted file mode 100644
index d56c88f528a3..000000000000
--- a/README.license
+++ /dev/null
@@ -1,56 +0,0 @@
-Licensing and contribution policy of dtc and libfdt
-===================================================
-
-This dtc package contains two pieces of software: dtc itself, and
-libfdt which comprises the files in the libfdt/ subdirectory. These
-two pieces of software, although closely related, are quite distinct.
-dtc does not incoporate or rely on libfdt for its operation, nor vice
-versa. It is important that these two pieces of software have
-different license conditions.
-
-As the copyright banners in each source file attest, dtc is licensed
-under the GNU GPL. The full text of the GPL can be found in the file
-entitled 'GPL' which should be included in this package. dtc code,
-therefore, may not be incorporated into works which do not have a GPL
-compatible license.
-
-libfdt, however, is GPL/BSD dual-licensed. That is, it may be used
-either under the terms of the GPL, or under the terms of the 2-clause
-BSD license (aka the ISC license). The full terms of that license are
-given in the copyright banners of each of the libfdt source files.
-This is, in practice, equivalent to being BSD licensed, since the
-terms of the BSD license are strictly more permissive than the GPL.
-
-I made the decision to license libfdt in this way because I want to
-encourage widespread and correct usage of flattened device trees,
-including by proprietary or otherwise GPL-incompatible firmware or
-tools. Allowing libfdt to be used under the terms of the BSD license
-makes that it easier for vendors or authors of such software to do so.
-
-This does mean that libfdt code could be "stolen" - say, included in a
-proprietary fimware and extended without contributing those extensions
-back to the libfdt mainline. While I hope that doesn't happen, I
-believe the goal of allowing libfdt to be widely used is more
-important than avoiding that. libfdt is quite small, and hardly
-rocket science; so the incentive for such impolite behaviour is small,
-and the inconvenience caused therby is not dire.
-
-Licenses such as the LGPL which would allow code to be used in non-GPL
-software, but also require contributions to be returned were
-considered. However, libfdt is designed to be used in firmwares and
-other environments with unusual technical constraints. It's difficult
-to anticipate all possible changes which might be needed to meld
-libfdt into such environments and so difficult to suitably word a
-license that puts the boundary between what is and isn't permitted in
-the intended place. Again, I judged encouraging widespread use of
-libfdt by keeping the license terms simple and familiar to be the more
-important goal.
-
-**IMPORTANT** It's intended that all of libfdt as released remain
-permissively licensed this way. Therefore only contributions which
-are released under these terms can be merged into the libfdt mainline.
-
-
-David Gibson <david@gibson.dropbear.id.au>
-(principal original author of dtc and libfdt)
-2 November 2007
diff --git a/TODO b/TODO
index a3e71828c834..288437e394fc 100644
--- a/TODO
+++ b/TODO
@@ -1,8 +1,3 @@
-- Bugfixes:
- * Proper handling of boot cpu information
-- Generate mem reserve map
- * linux,reserve-map property
- * generating reserve entry for device tree itself
- * generating reserve entries from tce, rtas etc. properties
-- Expression support
-- Macro system
+- Tree traversal functions
+- Graft function
+- Complete libfdt.h documenting comments
diff --git a/checks.c b/checks.c
deleted file mode 100644
index 1cded3658491..000000000000
--- a/checks.c
+++ /dev/null
@@ -1,1518 +0,0 @@
-/*
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2007.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "dtc.h"
-
-#ifdef TRACE_CHECKS
-#define TRACE(c, ...) \
- do { \
- fprintf(stderr, "=== %s: ", (c)->name); \
- fprintf(stderr, __VA_ARGS__); \
- fprintf(stderr, "\n"); \
- } while (0)
-#else
-#define TRACE(c, fmt, ...) do { } while (0)
-#endif
-
-enum checkstatus {
- UNCHECKED = 0,
- PREREQ,
- PASSED,
- FAILED,
-};
-
-struct check;
-
-typedef void (*check_fn)(struct check *c, struct dt_info *dti, struct node *node);
-
-struct check {
- const char *name;
- check_fn fn;
- void *data;
- bool warn, error;
- enum checkstatus status;
- bool inprogress;
- int num_prereqs;
- struct check **prereq;
-};
-
-#define CHECK_ENTRY(nm_, fn_, d_, w_, e_, ...) \
- static struct check *nm_##_prereqs[] = { __VA_ARGS__ }; \
- static struct check nm_ = { \
- .name = #nm_, \
- .fn = (fn_), \
- .data = (d_), \
- .warn = (w_), \
- .error = (e_), \
- .status = UNCHECKED, \
- .num_prereqs = ARRAY_SIZE(nm_##_prereqs), \
- .prereq = nm_##_prereqs, \
- };
-#define WARNING(nm_, fn_, d_, ...) \
- CHECK_ENTRY(nm_, fn_, d_, true, false, __VA_ARGS__)
-#define ERROR(nm_, fn_, d_, ...) \
- CHECK_ENTRY(nm_, fn_, d_, false, true, __VA_ARGS__)
-#define CHECK(nm_, fn_, d_, ...) \
- CHECK_ENTRY(nm_, fn_, d_, false, false, __VA_ARGS__)
-
-static inline void PRINTF(3, 4) check_msg(struct check *c, struct dt_info *dti,
- const char *fmt, ...)
-{
- va_list ap;
- va_start(ap, fmt);
-
- if ((c->warn && (quiet < 1))
- || (c->error && (quiet < 2))) {
- fprintf(stderr, "%s: %s (%s): ",
- strcmp(dti->outname, "-") ? dti->outname : "<stdout>",
- (c->error) ? "ERROR" : "Warning", c->name);
- vfprintf(stderr, fmt, ap);
- fprintf(stderr, "\n");
- }
- va_end(ap);
-}
-
-#define FAIL(c, dti, ...) \
- do { \
- TRACE((c), "\t\tFAILED at %s:%d", __FILE__, __LINE__); \
- (c)->status = FAILED; \
- check_msg((c), dti, __VA_ARGS__); \
- } while (0)
-
-static void check_nodes_props(struct check *c, struct dt_info *dti, struct node *node)
-{
- struct node *child;
-
- TRACE(c, "%s", node->fullpath);
- if (c->fn)
- c->fn(c, dti, node);
-
- for_each_child(node, child)
- check_nodes_props(c, dti, child);
-}
-
-static bool run_check(struct check *c, struct dt_info *dti)
-{
- struct node *dt = dti->dt;
- bool error = false;
- int i;
-
- assert(!c->inprogress);
-
- if (c->status != UNCHECKED)
- goto out;
-
- c->inprogress = true;
-
- for (i = 0; i < c->num_prereqs; i++) {
- struct check *prq = c->prereq[i];
- error = error || run_check(prq, dti);
- if (prq->status != PASSED) {
- c->status = PREREQ;
- check_msg(c, dti, "Failed prerequisite '%s'",
- c->prereq[i]->name);
- }
- }
-
- if (c->status != UNCHECKED)
- goto out;
-
- check_nodes_props(c, dti, dt);
-
- if (c->status == UNCHECKED)
- c->status = PASSED;
-
- TRACE(c, "\tCompleted, status %d", c->status);
-
-out:
- c->inprogress = false;
- if ((c->status != PASSED) && (c->error))
- error = true;
- return error;
-}
-
-/*
- * Utility check functions
- */
-
-/* A check which always fails, for testing purposes only */
-static inline void check_always_fail(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- FAIL(c, dti, "always_fail check");
-}
-CHECK(always_fail, check_always_fail, NULL);
-
-static void check_is_string(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
- char *propname = c->data;
-
- prop = get_property(node, propname);
- if (!prop)
- return; /* Not present, assumed ok */
-
- if (!data_is_one_string(prop->val))
- FAIL(c, dti, "\"%s\" property in %s is not a string",
- propname, node->fullpath);
-}
-#define WARNING_IF_NOT_STRING(nm, propname) \
- WARNING(nm, check_is_string, (propname))
-#define ERROR_IF_NOT_STRING(nm, propname) \
- ERROR(nm, check_is_string, (propname))
-
-static void check_is_string_list(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- int rem, l;
- struct property *prop;
- char *propname = c->data;
- char *str;
-
- prop = get_property(node, propname);
- if (!prop)
- return; /* Not present, assumed ok */
-
- str = prop->val.val;
- rem = prop->val.len;
- while (rem > 0) {
- l = strnlen(str, rem);
- if (l == rem) {
- FAIL(c, dti, "\"%s\" property in %s is not a string list",
- propname, node->fullpath);
- break;
- }
- rem -= l + 1;
- str += l + 1;
- }
-}
-#define WARNING_IF_NOT_STRING_LIST(nm, propname) \
- WARNING(nm, check_is_string_list, (propname))
-#define ERROR_IF_NOT_STRING_LIST(nm, propname) \
- ERROR(nm, check_is_string_list, (propname))
-
-static void check_is_cell(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
- char *propname = c->data;
-
- prop = get_property(node, propname);
- if (!prop)
- return; /* Not present, assumed ok */
-
- if (prop->val.len != sizeof(cell_t))
- FAIL(c, dti, "\"%s\" property in %s is not a single cell",
- propname, node->fullpath);
-}
-#define WARNING_IF_NOT_CELL(nm, propname) \
- WARNING(nm, check_is_cell, (propname))
-#define ERROR_IF_NOT_CELL(nm, propname) \
- ERROR(nm, check_is_cell, (propname))
-
-/*
- * Structural check functions
- */
-
-static void check_duplicate_node_names(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct node *child, *child2;
-
- for_each_child(node, child)
- for (child2 = child->next_sibling;
- child2;
- child2 = child2->next_sibling)
- if (streq(child->name, child2->name))
- FAIL(c, dti, "Duplicate node name %s",
- child->fullpath);
-}
-ERROR(duplicate_node_names, check_duplicate_node_names, NULL);
-
-static void check_duplicate_property_names(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop, *prop2;
-
- for_each_property(node, prop) {
- for (prop2 = prop->next; prop2; prop2 = prop2->next) {
- if (prop2->deleted)
- continue;
- if (streq(prop->name, prop2->name))
- FAIL(c, dti, "Duplicate property name %s in %s",
- prop->name, node->fullpath);
- }
- }
-}
-ERROR(duplicate_property_names, check_duplicate_property_names, NULL);
-
-#define LOWERCASE "abcdefghijklmnopqrstuvwxyz"
-#define UPPERCASE "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-#define DIGITS "0123456789"
-#define PROPNODECHARS LOWERCASE UPPERCASE DIGITS ",._+*#?-"
-#define PROPNODECHARSSTRICT LOWERCASE UPPERCASE DIGITS ",-"
-
-static void check_node_name_chars(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- int n = strspn(node->name, c->data);
-
- if (n < strlen(node->name))
- FAIL(c, dti, "Bad character '%c' in node %s",
- node->name[n], node->fullpath);
-}
-ERROR(node_name_chars, check_node_name_chars, PROPNODECHARS "@");
-
-static void check_node_name_chars_strict(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- int n = strspn(node->name, c->data);
-
- if (n < node->basenamelen)
- FAIL(c, dti, "Character '%c' not recommended in node %s",
- node->name[n], node->fullpath);
-}
-CHECK(node_name_chars_strict, check_node_name_chars_strict, PROPNODECHARSSTRICT);
-
-static void check_node_name_format(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- if (strchr(get_unitname(node), '@'))
- FAIL(c, dti, "Node %s has multiple '@' characters in name",
- node->fullpath);
-}
-ERROR(node_name_format, check_node_name_format, NULL, &node_name_chars);
-
-static void check_unit_address_vs_reg(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- const char *unitname = get_unitname(node);
- struct property *prop = get_property(node, "reg");
-
- if (!prop) {
- prop = get_property(node, "ranges");
- if (prop && !prop->val.len)
- prop = NULL;
- }
-
- if (prop) {
- if (!unitname[0])
- FAIL(c, dti, "Node %s has a reg or ranges property, but no unit name",
- node->fullpath);
- } else {
- if (unitname[0])
- FAIL(c, dti, "Node %s has a unit name, but no reg property",
- node->fullpath);
- }
-}
-WARNING(unit_address_vs_reg, check_unit_address_vs_reg, NULL);
-
-static void check_property_name_chars(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
-
- for_each_property(node, prop) {
- int n = strspn(prop->name, c->data);
-
- if (n < strlen(prop->name))
- FAIL(c, dti, "Bad character '%c' in property name \"%s\", node %s",
- prop->name[n], prop->name, node->fullpath);
- }
-}
-ERROR(property_name_chars, check_property_name_chars, PROPNODECHARS);
-
-static void check_property_name_chars_strict(struct check *c,
- struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
-
- for_each_property(node, prop) {
- const char *name = prop->name;
- int n = strspn(name, c->data);
-
- if (n == strlen(prop->name))
- continue;
-
- /* Certain names are whitelisted */
- if (streq(name, "device_type"))
- continue;
-
- /*
- * # is only allowed at the beginning of property names not counting
- * the vendor prefix.
- */
- if (name[n] == '#' && ((n == 0) || (name[n-1] == ','))) {
- name += n + 1;
- n = strspn(name, c->data);
- }
- if (n < strlen(name))
- FAIL(c, dti, "Character '%c' not recommended in property name \"%s\", node %s",
- name[n], prop->name, node->fullpath);
- }
-}
-CHECK(property_name_chars_strict, check_property_name_chars_strict, PROPNODECHARSSTRICT);
-
-#define DESCLABEL_FMT "%s%s%s%s%s"
-#define DESCLABEL_ARGS(node,prop,mark) \
- ((mark) ? "value of " : ""), \
- ((prop) ? "'" : ""), \
- ((prop) ? (prop)->name : ""), \
- ((prop) ? "' in " : ""), (node)->fullpath
-
-static void check_duplicate_label(struct check *c, struct dt_info *dti,
- const char *label, struct node *node,
- struct property *prop, struct marker *mark)
-{
- struct node *dt = dti->dt;
- struct node *othernode = NULL;
- struct property *otherprop = NULL;
- struct marker *othermark = NULL;
-
- othernode = get_node_by_label(dt, label);
-
- if (!othernode)
- otherprop = get_property_by_label(dt, label, &othernode);
- if (!othernode)
- othermark = get_marker_label(dt, label, &othernode,
- &otherprop);
-
- if (!othernode)
- return;
-
- if ((othernode != node) || (otherprop != prop) || (othermark != mark))
- FAIL(c, dti, "Duplicate label '%s' on " DESCLABEL_FMT
- " and " DESCLABEL_FMT,
- label, DESCLABEL_ARGS(node, prop, mark),
- DESCLABEL_ARGS(othernode, otherprop, othermark));
-}
-
-static void check_duplicate_label_node(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct label *l;
- struct property *prop;
-
- for_each_label(node->labels, l)
- check_duplicate_label(c, dti, l->label, node, NULL, NULL);
-
- for_each_property(node, prop) {
- struct marker *m = prop->val.markers;
-
- for_each_label(prop->labels, l)
- check_duplicate_label(c, dti, l->label, node, prop, NULL);
-
- for_each_marker_of_type(m, LABEL)
- check_duplicate_label(c, dti, m->ref, node, prop, m);
- }
-}
-ERROR(duplicate_label, check_duplicate_label_node, NULL);
-
-static cell_t check_phandle_prop(struct check *c, struct dt_info *dti,
- struct node *node, const char *propname)
-{
- struct node *root = dti->dt;
- struct property *prop;
- struct marker *m;
- cell_t phandle;
-
- prop = get_property(node, propname);
- if (!prop)
- return 0;
-
- if (prop->val.len != sizeof(cell_t)) {
- FAIL(c, dti, "%s has bad length (%d) %s property",
- node->fullpath, prop->val.len, prop->name);
- return 0;
- }
-
- m = prop->val.markers;
- for_each_marker_of_type(m, REF_PHANDLE) {
- assert(m->offset == 0);
- if (node != get_node_by_ref(root, m->ref))
- /* "Set this node's phandle equal to some
- * other node's phandle". That's nonsensical
- * by construction. */ {
- FAIL(c, dti, "%s in %s is a reference to another node",
- prop->name, node->fullpath);
- }
- /* But setting this node's phandle equal to its own
- * phandle is allowed - that means allocate a unique
- * phandle for this node, even if it's not otherwise
- * referenced. The value will be filled in later, so
- * we treat it as having no phandle data for now. */
- return 0;
- }
-
- phandle = propval_cell(prop);
-
- if ((phandle == 0) || (phandle == -1)) {
- FAIL(c, dti, "%s has bad value (0x%x) in %s property",
- node->fullpath, phandle, prop->name);
- return 0;
- }
-
- return phandle;
-}
-
-static void check_explicit_phandles(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct node *root = dti->dt;
- struct node *other;
- cell_t phandle, linux_phandle;
-
- /* Nothing should have assigned phandles yet */
- assert(!node->phandle);
-
- phandle = check_phandle_prop(c, dti, node, "phandle");
-
- linux_phandle = check_phandle_prop(c, dti, node, "linux,phandle");
-
- if (!phandle && !linux_phandle)
- /* No valid phandles; nothing further to check */
- return;
-
- if (linux_phandle && phandle && (phandle != linux_phandle))
- FAIL(c, dti, "%s has mismatching 'phandle' and 'linux,phandle'"
- " properties", node->fullpath);
-
- if (linux_phandle && !phandle)
- phandle = linux_phandle;
-
- other = get_node_by_phandle(root, phandle);
- if (other && (other != node)) {
- FAIL(c, dti, "%s has duplicated phandle 0x%x (seen before at %s)",
- node->fullpath, phandle, other->fullpath);
- return;
- }
-
- node->phandle = phandle;
-}
-ERROR(explicit_phandles, check_explicit_phandles, NULL);
-
-static void check_name_properties(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property **pp, *prop = NULL;
-
- for (pp = &node->proplist; *pp; pp = &((*pp)->next))
- if (streq((*pp)->name, "name")) {
- prop = *pp;
- break;
- }
-
- if (!prop)
- return; /* No name property, that's fine */
-
- if ((prop->val.len != node->basenamelen+1)
- || (memcmp(prop->val.val, node->name, node->basenamelen) != 0)) {
- FAIL(c, dti, "\"name\" property in %s is incorrect (\"%s\" instead"
- " of base node name)", node->fullpath, prop->val.val);
- } else {
- /* The name property is correct, and therefore redundant.
- * Delete it */
- *pp = prop->next;
- free(prop->name);
- data_free(prop->val);
- free(prop);
- }
-}
-ERROR_IF_NOT_STRING(name_is_string, "name");
-ERROR(name_properties, check_name_properties, NULL, &name_is_string);
-
-/*
- * Reference fixup functions
- */
-
-static void fixup_phandle_references(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct node *dt = dti->dt;
- struct property *prop;
-
- for_each_property(node, prop) {
- struct marker *m = prop->val.markers;
- struct node *refnode;
- cell_t phandle;
-
- for_each_marker_of_type(m, REF_PHANDLE) {
- assert(m->offset + sizeof(cell_t) <= prop->val.len);
-
- refnode = get_node_by_ref(dt, m->ref);
- if (! refnode) {
- if (!(dti->dtsflags & DTSF_PLUGIN))
- FAIL(c, dti, "Reference to non-existent node or "
- "label \"%s\"\n", m->ref);
- else /* mark the entry as unresolved */
- *((fdt32_t *)(prop->val.val + m->offset)) =
- cpu_to_fdt32(0xffffffff);
- continue;
- }
-
- phandle = get_node_phandle(dt, refnode);
- *((fdt32_t *)(prop->val.val + m->offset)) = cpu_to_fdt32(phandle);
- }
- }
-}
-ERROR(phandle_references, fixup_phandle_references, NULL,
- &duplicate_node_names, &explicit_phandles);
-
-static void fixup_path_references(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct node *dt = dti->dt;
- struct property *prop;
-
- for_each_property(node, prop) {
- struct marker *m = prop->val.markers;
- struct node *refnode;
- char *path;
-
- for_each_marker_of_type(m, REF_PATH) {
- assert(m->offset <= prop->val.len);
-
- refnode = get_node_by_ref(dt, m->ref);
- if (!refnode) {
- FAIL(c, dti, "Reference to non-existent node or label \"%s\"\n",
- m->ref);
- continue;
- }
-
- path = refnode->fullpath;
- prop->val = data_insert_at_marker(prop->val, m, path,
- strlen(path) + 1);
- }
- }
-}
-ERROR(path_references, fixup_path_references, NULL, &duplicate_node_names);
-
-/*
- * Semantic checks
- */
-WARNING_IF_NOT_CELL(address_cells_is_cell, "#address-cells");
-WARNING_IF_NOT_CELL(size_cells_is_cell, "#size-cells");
-WARNING_IF_NOT_CELL(interrupt_cells_is_cell, "#interrupt-cells");
-
-WARNING_IF_NOT_STRING(device_type_is_string, "device_type");
-WARNING_IF_NOT_STRING(model_is_string, "model");
-WARNING_IF_NOT_STRING(status_is_string, "status");
-WARNING_IF_NOT_STRING(label_is_string, "label");
-
-WARNING_IF_NOT_STRING_LIST(compatible_is_string_list, "compatible");
-
-static void check_names_is_string_list(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
-
- for_each_property(node, prop) {
- const char *s = strrchr(prop->name, '-');
- if (!s || !streq(s, "-names"))
- continue;
-
- c->data = prop->name;
- check_is_string_list(c, dti, node);
- }
-}
-WARNING(names_is_string_list, check_names_is_string_list, NULL);
-
-static void check_alias_paths(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
-
- if (!streq(node->name, "aliases"))
- return;
-
- for_each_property(node, prop) {
- if (!prop->val.val || !get_node_by_path(dti->dt, prop->val.val)) {
- FAIL(c, dti, "aliases property '%s' is not a valid node (%s)",
- prop->name, prop->val.val);
- continue;
- }
- if (strspn(prop->name, LOWERCASE DIGITS "-") != strlen(prop->name))
- FAIL(c, dti, "aliases property name '%s' is not valid",
- prop->name);
-
- }
-}
-WARNING(alias_paths, check_alias_paths, NULL);
-
-static void fixup_addr_size_cells(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
-
- node->addr_cells = -1;
- node->size_cells = -1;
-
- prop = get_property(node, "#address-cells");
- if (prop)
- node->addr_cells = propval_cell(prop);
-
- prop = get_property(node, "#size-cells");
- if (prop)
- node->size_cells = propval_cell(prop);
-}
-WARNING(addr_size_cells, fixup_addr_size_cells, NULL,
- &address_cells_is_cell, &size_cells_is_cell);
-
-#define node_addr_cells(n) \
- (((n)->addr_cells == -1) ? 2 : (n)->addr_cells)
-#define node_size_cells(n) \
- (((n)->size_cells == -1) ? 1 : (n)->size_cells)
-
-static void check_reg_format(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
- int addr_cells, size_cells, entrylen;
-
- prop = get_property(node, "reg");
- if (!prop)
- return; /* No "reg", that's fine */
-
- if (!node->parent) {
- FAIL(c, dti, "Root node has a \"reg\" property");
- return;
- }
-
- if (prop->val.len == 0)
- FAIL(c, dti, "\"reg\" property in %s is empty", node->fullpath);
-
- addr_cells = node_addr_cells(node->parent);
- size_cells = node_size_cells(node->parent);
- entrylen = (addr_cells + size_cells) * sizeof(cell_t);
-
- if (!entrylen || (prop->val.len % entrylen) != 0)
- FAIL(c, dti, "\"reg\" property in %s has invalid length (%d bytes) "
- "(#address-cells == %d, #size-cells == %d)",
- node->fullpath, prop->val.len, addr_cells, size_cells);
-}
-WARNING(reg_format, check_reg_format, NULL, &addr_size_cells);
-
-static void check_ranges_format(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
- int c_addr_cells, p_addr_cells, c_size_cells, p_size_cells, entrylen;
-
- prop = get_property(node, "ranges");
- if (!prop)
- return;
-
- if (!node->parent) {
- FAIL(c, dti, "Root node has a \"ranges\" property");
- return;
- }
-
- p_addr_cells = node_addr_cells(node->parent);
- p_size_cells = node_size_cells(node->parent);
- c_addr_cells = node_addr_cells(node);
- c_size_cells = node_size_cells(node);
- entrylen = (p_addr_cells + c_addr_cells + c_size_cells) * sizeof(cell_t);
-
- if (prop->val.len == 0) {
- if (p_addr_cells != c_addr_cells)
- FAIL(c, dti, "%s has empty \"ranges\" property but its "
- "#address-cells (%d) differs from %s (%d)",
- node->fullpath, c_addr_cells, node->parent->fullpath,
- p_addr_cells);
- if (p_size_cells != c_size_cells)
- FAIL(c, dti, "%s has empty \"ranges\" property but its "
- "#size-cells (%d) differs from %s (%d)",
- node->fullpath, c_size_cells, node->parent->fullpath,
- p_size_cells);
- } else if ((prop->val.len % entrylen) != 0) {
- FAIL(c, dti, "\"ranges\" property in %s has invalid length (%d bytes) "
- "(parent #address-cells == %d, child #address-cells == %d, "
- "#size-cells == %d)", node->fullpath, prop->val.len,
- p_addr_cells, c_addr_cells, c_size_cells);
- }
-}
-WARNING(ranges_format, check_ranges_format, NULL, &addr_size_cells);
-
-static const struct bus_type pci_bus = {
- .name = "PCI",
-};
-
-static void check_pci_bridge(struct check *c, struct dt_info *dti, struct node *node)
-{
- struct property *prop;
- cell_t *cells;
-
- prop = get_property(node, "device_type");
- if (!prop || !streq(prop->val.val, "pci"))
- return;
-
- node->bus = &pci_bus;
-
- if (!strprefixeq(node->name, node->basenamelen, "pci") &&
- !strprefixeq(node->name, node->basenamelen, "pcie"))
- FAIL(c, dti, "Node %s node name is not \"pci\" or \"pcie\"",
- node->fullpath);
-
- prop = get_property(node, "ranges");
- if (!prop)
- FAIL(c, dti, "Node %s missing ranges for PCI bridge (or not a bridge)",
- node->fullpath);
-
- if (node_addr_cells(node) != 3)
- FAIL(c, dti, "Node %s incorrect #address-cells for PCI bridge",
- node->fullpath);
- if (node_size_cells(node) != 2)
- FAIL(c, dti, "Node %s incorrect #size-cells for PCI bridge",
- node->fullpath);
-
- prop = get_property(node, "bus-range");
- if (!prop) {
- FAIL(c, dti, "Node %s missing bus-range for PCI bridge",
- node->fullpath);
- return;
- }
- if (prop->val.len != (sizeof(cell_t) * 2)) {
- FAIL(c, dti, "Node %s bus-range must be 2 cells",
- node->fullpath);
- return;
- }
- cells = (cell_t *)prop->val.val;
- if (fdt32_to_cpu(cells[0]) > fdt32_to_cpu(cells[1]))
- FAIL(c, dti, "Node %s bus-range 1st cell must be less than or equal to 2nd cell",
- node->fullpath);
- if (fdt32_to_cpu(cells[1]) > 0xff)
- FAIL(c, dti, "Node %s bus-range maximum bus number must be less than 256",
- node->fullpath);
-}
-WARNING(pci_bridge, check_pci_bridge, NULL,
- &device_type_is_string, &addr_size_cells);
-
-static void check_pci_device_bus_num(struct check *c, struct dt_info *dti, struct node *node)
-{
- struct property *prop;
- unsigned int bus_num, min_bus, max_bus;
- cell_t *cells;
-
- if (!node->parent || (node->parent->bus != &pci_bus))
- return;
-
- prop = get_property(node, "reg");
- if (!prop)
- return;
-
- cells = (cell_t *)prop->val.val;
- bus_num = (fdt32_to_cpu(cells[0]) & 0x00ff0000) >> 16;
-
- prop = get_property(node->parent, "bus-range");
- if (!prop) {
- min_bus = max_bus = 0;
- } else {
- cells = (cell_t *)prop->val.val;
- min_bus = fdt32_to_cpu(cells[0]);
- max_bus = fdt32_to_cpu(cells[0]);
- }
- if ((bus_num < min_bus) || (bus_num > max_bus))
- FAIL(c, dti, "Node %s PCI bus number %d out of range, expected (%d - %d)",
- node->fullpath, bus_num, min_bus, max_bus);
-}
-WARNING(pci_device_bus_num, check_pci_device_bus_num, NULL, &reg_format, &pci_bridge);
-
-static void check_pci_device_reg(struct check *c, struct dt_info *dti, struct node *node)
-{
- struct property *prop;
- const char *unitname = get_unitname(node);
- char unit_addr[5];
- unsigned int dev, func, reg;
- cell_t *cells;
-
- if (!node->parent || (node->parent->bus != &pci_bus))
- return;
-
- prop = get_property(node, "reg");
- if (!prop) {
- FAIL(c, dti, "Node %s missing PCI reg property", node->fullpath);
- return;
- }
-
- cells = (cell_t *)prop->val.val;
- if (cells[1] || cells[2])
- FAIL(c, dti, "Node %s PCI reg config space address cells 2 and 3 must be 0",
- node->fullpath);
-
- reg = fdt32_to_cpu(cells[0]);
- dev = (reg & 0xf800) >> 11;
- func = (reg & 0x700) >> 8;
-
- if (reg & 0xff000000)
- FAIL(c, dti, "Node %s PCI reg address is not configuration space",
- node->fullpath);
- if (reg & 0x000000ff)
- FAIL(c, dti, "Node %s PCI reg config space address register number must be 0",
- node->fullpath);
-
- if (func == 0) {
- snprintf(unit_addr, sizeof(unit_addr), "%x", dev);
- if (streq(unitname, unit_addr))
- return;
- }
-
- snprintf(unit_addr, sizeof(unit_addr), "%x,%x", dev, func);
- if (streq(unitname, unit_addr))
- return;
-
- FAIL(c, dti, "Node %s PCI unit address format error, expected \"%s\"",
- node->fullpath, unit_addr);
-}
-WARNING(pci_device_reg, check_pci_device_reg, NULL, &reg_format, &pci_bridge);
-
-static const struct bus_type simple_bus = {
- .name = "simple-bus",
-};
-
-static bool node_is_compatible(struct node *node, const char *compat)
-{
- struct property *prop;
- const char *str, *end;
-
- prop = get_property(node, "compatible");
- if (!prop)
- return false;
-
- for (str = prop->val.val, end = str + prop->val.len; str < end;
- str += strnlen(str, end - str) + 1) {
- if (strprefixeq(str, end - str, compat))
- return true;
- }
- return false;
-}
-
-static void check_simple_bus_bridge(struct check *c, struct dt_info *dti, struct node *node)
-{
- if (node_is_compatible(node, "simple-bus"))
- node->bus = &simple_bus;
-}
-WARNING(simple_bus_bridge, check_simple_bus_bridge, NULL, &addr_size_cells);
-
-static void check_simple_bus_reg(struct check *c, struct dt_info *dti, struct node *node)
-{
- struct property *prop;
- const char *unitname = get_unitname(node);
- char unit_addr[17];
- unsigned int size;
- uint64_t reg = 0;
- cell_t *cells = NULL;
-
- if (!node->parent || (node->parent->bus != &simple_bus))
- return;
-
- prop = get_property(node, "reg");
- if (prop)
- cells = (cell_t *)prop->val.val;
- else {
- prop = get_property(node, "ranges");
- if (prop && prop->val.len)
- /* skip of child address */
- cells = ((cell_t *)prop->val.val) + node_addr_cells(node);
- }
-
- if (!cells) {
- if (node->parent->parent && !(node->bus == &simple_bus))
- FAIL(c, dti, "Node %s missing or empty reg/ranges property", node->fullpath);
- return;
- }
-
- size = node_addr_cells(node->parent);
- while (size--)
- reg = (reg << 32) | fdt32_to_cpu(*(cells++));
-
- snprintf(unit_addr, sizeof(unit_addr), "%"PRIx64, reg);
- if (!streq(unitname, unit_addr))
- FAIL(c, dti, "Node %s simple-bus unit address format error, expected \"%s\"",
- node->fullpath, unit_addr);
-}
-WARNING(simple_bus_reg, check_simple_bus_reg, NULL, &reg_format, &simple_bus_bridge);
-
-static void check_unit_address_format(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- const char *unitname = get_unitname(node);
-
- if (node->parent && node->parent->bus)
- return;
-
- if (!unitname[0])
- return;
-
- if (!strncmp(unitname, "0x", 2)) {
- FAIL(c, dti, "Node %s unit name should not have leading \"0x\"",
- node->fullpath);
- /* skip over 0x for next test */
- unitname += 2;
- }
- if (unitname[0] == '0' && isxdigit(unitname[1]))
- FAIL(c, dti, "Node %s unit name should not have leading 0s",
- node->fullpath);
-}
-WARNING(unit_address_format, check_unit_address_format, NULL,
- &node_name_format, &pci_bridge, &simple_bus_bridge);
-
-/*
- * Style checks
- */
-static void check_avoid_default_addr_size(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *reg, *ranges;
-
- if (!node->parent)
- return; /* Ignore root node */
-
- reg = get_property(node, "reg");
- ranges = get_property(node, "ranges");
-
- if (!reg && !ranges)
- return;
-
- if (node->parent->addr_cells == -1)
- FAIL(c, dti, "Relying on default #address-cells value for %s",
- node->fullpath);
-
- if (node->parent->size_cells == -1)
- FAIL(c, dti, "Relying on default #size-cells value for %s",
- node->fullpath);
-}
-WARNING(avoid_default_addr_size, check_avoid_default_addr_size, NULL,
- &addr_size_cells);
-
-static void check_avoid_unnecessary_addr_size(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
- struct node *child;
- bool has_reg = false;
-
- if (!node->parent || node->addr_cells < 0 || node->size_cells < 0)
- return;
-
- if (get_property(node, "ranges") || !node->children)
- return;
-
- for_each_child(node, child) {
- prop = get_property(child, "reg");
- if (prop)
- has_reg = true;
- }
-
- if (!has_reg)
- FAIL(c, dti, "unnecessary #address-cells/#size-cells without \"ranges\" or child \"reg\" property in %s",
- node->fullpath);
-}
-WARNING(avoid_unnecessary_addr_size, check_avoid_unnecessary_addr_size, NULL, &avoid_default_addr_size);
-
-static void check_obsolete_chosen_interrupt_controller(struct check *c,
- struct dt_info *dti,
- struct node *node)
-{
- struct node *dt = dti->dt;
- struct node *chosen;
- struct property *prop;
-
- if (node != dt)
- return;
-
-
- chosen = get_node_by_path(dt, "/chosen");
- if (!chosen)
- return;
-
- prop = get_property(chosen, "interrupt-controller");
- if (prop)
- FAIL(c, dti, "/chosen has obsolete \"interrupt-controller\" "
- "property");
-}
-WARNING(obsolete_chosen_interrupt_controller,
- check_obsolete_chosen_interrupt_controller, NULL);
-
-static void check_chosen_node_is_root(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- if (!streq(node->name, "chosen"))
- return;
-
- if (node->parent != dti->dt)
- FAIL(c, dti, "chosen node '%s' must be at root node",
- node->fullpath);
-}
-WARNING(chosen_node_is_root, check_chosen_node_is_root, NULL);
-
-static void check_chosen_node_bootargs(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
-
- if (!streq(node->name, "chosen"))
- return;
-
- prop = get_property(node, "bootargs");
- if (!prop)
- return;
-
- c->data = prop->name;
- check_is_string(c, dti, node);
-}
-WARNING(chosen_node_bootargs, check_chosen_node_bootargs, NULL);
-
-static void check_chosen_node_stdout_path(struct check *c, struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
-
- if (!streq(node->name, "chosen"))
- return;
-
- prop = get_property(node, "stdout-path");
- if (!prop) {
- prop = get_property(node, "linux,stdout-path");
- if (!prop)
- return;
- FAIL(c, dti, "Use 'stdout-path' instead of 'linux,stdout-path'");
- }
-
- c->data = prop->name;
- check_is_string(c, dti, node);
-}
-WARNING(chosen_node_stdout_path, check_chosen_node_stdout_path, NULL);
-
-struct provider {
- const char *prop_name;
- const char *cell_name;
- bool optional;
-};
-
-static void check_property_phandle_args(struct check *c,
- struct dt_info *dti,
- struct node *node,
- struct property *prop,
- const struct provider *provider)
-{
- struct node *root = dti->dt;
- int cell, cellsize = 0;
-
- if (prop->val.len % sizeof(cell_t)) {
- FAIL(c, dti, "property '%s' size (%d) is invalid, expected multiple of %zu in node %s",
- prop->name, prop->val.len, sizeof(cell_t), node->fullpath);
- return;
- }
-
- for (cell = 0; cell < prop->val.len / sizeof(cell_t); cell += cellsize + 1) {
- struct node *provider_node;
- struct property *cellprop;
- int phandle;
-
- phandle = propval_cell_n(prop, cell);
- /*
- * Some bindings use a cell value 0 or -1 to skip over optional
- * entries when each index position has a specific definition.
- */
- if (phandle == 0 || phandle == -1) {
- /* Give up if this is an overlay with external references */
- if (dti->dtsflags & DTSF_PLUGIN)
- break;
-
- cellsize = 0;
- continue;
- }
-
- /* If we have markers, verify the current cell is a phandle */
- if (prop->val.markers) {
- struct marker *m = prop->val.markers;
- for_each_marker_of_type(m, REF_PHANDLE) {
- if (m->offset == (cell * sizeof(cell_t)))
- break;
- }
- if (!m)
- FAIL(c, dti, "Property '%s', cell %d is not a phandle reference in %s",
- prop->name, cell, node->fullpath);
- }
-
- provider_node = get_node_by_phandle(root, phandle);
- if (!provider_node) {
- FAIL(c, dti, "Could not get phandle node for %s:%s(cell %d)",
- node->fullpath, prop->name, cell);
- break;
- }
-
- cellprop = get_property(provider_node, provider->cell_name);
- if (cellprop) {
- cellsize = propval_cell(cellprop);
- } else if (provider->optional) {
- cellsize = 0;
- } else {
- FAIL(c, dti, "Missing property '%s' in node %s or bad phandle (referred from %s:%s[%d])",
- provider->cell_name,
- provider_node->fullpath,
- node->fullpath, prop->name, cell);
- break;
- }
-
- if (prop->val.len < ((cell + cellsize + 1) * sizeof(cell_t))) {
- FAIL(c, dti, "%s property size (%d) too small for cell size %d in %s",
- prop->name, prop->val.len, cellsize, node->fullpath);
- }
- }
-}
-
-static void check_provider_cells_property(struct check *c,
- struct dt_info *dti,
- struct node *node)
-{
- struct provider *provider = c->data;
- struct property *prop;
-
- prop = get_property(node, provider->prop_name);
- if (!prop)
- return;
-
- check_property_phandle_args(c, dti, node, prop, provider);
-}
-#define WARNING_PROPERTY_PHANDLE_CELLS(nm, propname, cells_name, ...) \
- static struct provider nm##_provider = { (propname), (cells_name), __VA_ARGS__ }; \
- WARNING(nm##_property, check_provider_cells_property, &nm##_provider, &phandle_references);
-
-WARNING_PROPERTY_PHANDLE_CELLS(clocks, "clocks", "#clock-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(cooling_device, "cooling-device", "#cooling-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(dmas, "dmas", "#dma-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(hwlocks, "hwlocks", "#hwlock-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(interrupts_extended, "interrupts-extended", "#interrupt-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(io_channels, "io-channels", "#io-channel-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(iommus, "iommus", "#iommu-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(mboxes, "mboxes", "#mbox-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(msi_parent, "msi-parent", "#msi-cells", true);
-WARNING_PROPERTY_PHANDLE_CELLS(mux_controls, "mux-controls", "#mux-control-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(phys, "phys", "#phy-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(power_domains, "power-domains", "#power-domain-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(pwms, "pwms", "#pwm-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(resets, "resets", "#reset-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(sound_dai, "sound-dai", "#sound-dai-cells");
-WARNING_PROPERTY_PHANDLE_CELLS(thermal_sensors, "thermal-sensors", "#thermal-sensor-cells");
-
-static bool prop_is_gpio(struct property *prop)
-{
- char *str;
-
- /*
- * *-gpios and *-gpio can appear in property names,
- * so skip over any false matches (only one known ATM)
- */
- if (strstr(prop->name, "nr-gpio"))
- return false;
-
- str = strrchr(prop->name, '-');
- if (str)
- str++;
- else
- str = prop->name;
- if (!(streq(str, "gpios") || streq(str, "gpio")))
- return false;
-
- return true;
-}
-
-static void check_gpios_property(struct check *c,
- struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
-
- /* Skip GPIO hog nodes which have 'gpios' property */
- if (get_property(node, "gpio-hog"))
- return;
-
- for_each_property(node, prop) {
- struct provider provider;
-
- if (!prop_is_gpio(prop))
- continue;
-
- provider.prop_name = prop->name;
- provider.cell_name = "#gpio-cells";
- provider.optional = false;
- check_property_phandle_args(c, dti, node, prop, &provider);
- }
-
-}
-WARNING(gpios_property, check_gpios_property, NULL, &phandle_references);
-
-static void check_deprecated_gpio_property(struct check *c,
- struct dt_info *dti,
- struct node *node)
-{
- struct property *prop;
-
- for_each_property(node, prop) {
- char *str;
-
- if (!prop_is_gpio(prop))
- continue;
-
- str = strstr(prop->name, "gpio");
- if (!streq(str, "gpio"))
- continue;
-
- FAIL(c, dti, "'[*-]gpio' is deprecated, use '[*-]gpios' instead for %s:%s",
- node->fullpath, prop->name);
- }
-
-}
-CHECK(deprecated_gpio_property, check_deprecated_gpio_property, NULL);
-
-static bool node_is_interrupt_provider(struct node *node)
-{
- struct property *prop;
-
- prop = get_property(node, "interrupt-controller");
- if (prop)
- return true;
-
- prop = get_property(node, "interrupt-map");
- if (prop)
- return true;
-
- return false;
-}
-static void check_interrupts_property(struct check *c,
- struct dt_info *dti,
- struct node *node)
-{
- struct node *root = dti->dt;
- struct node *irq_node = NULL, *parent = node;
- struct property *irq_prop, *prop = NULL;
- int irq_cells, phandle;
-
- irq_prop = get_property(node, "interrupts");
- if (!irq_prop)
- return;
-
- if (irq_prop->val.len % sizeof(cell_t))
- FAIL(c, dti, "property '%s' size (%d) is invalid, expected multiple of %zu in node %s",
- irq_prop->name, irq_prop->val.len, sizeof(cell_t),
- node->fullpath);
-
- while (parent && !prop) {
- if (parent != node && node_is_interrupt_provider(parent)) {
- irq_node = parent;
- break;
- }
-
- prop = get_property(parent, "interrupt-parent");
- if (prop) {
- phandle = propval_cell(prop);
- /* Give up if this is an overlay with external references */
- if ((phandle == 0 || phandle == -1) &&
- (dti->dtsflags & DTSF_PLUGIN))
- return;
-
- irq_node = get_node_by_phandle(root, phandle);
- if (!irq_node) {
- FAIL(c, dti, "Bad interrupt-parent phandle for %s",
- node->fullpath);
- return;
- }
- if (!node_is_interrupt_provider(irq_node))
- FAIL(c, dti,
- "Missing interrupt-controller or interrupt-map property in %s",
- irq_node->fullpath);
-
- break;
- }
-
- parent = parent->parent;
- }
-
- if (!irq_node) {
- FAIL(c, dti, "Missing interrupt-parent for %s", node->fullpath);
- return;
- }
-
- prop = get_property(irq_node, "#interrupt-cells");
- if (!prop) {
- FAIL(c, dti, "Missing #interrupt-cells in interrupt-parent %s",
- irq_node->fullpath);
- return;
- }
-
- irq_cells = propval_cell(prop);
- if (irq_prop->val.len % (irq_cells * sizeof(cell_t))) {
- FAIL(c, dti,
- "interrupts size is (%d), expected multiple of %d in %s",
- irq_prop->val.len, (int)(irq_cells * sizeof(cell_t)),
- node->fullpath);
- }
-}
-WARNING(interrupts_property, check_interrupts_property, &phandle_references);
-
-static struct check *check_table[] = {
- &duplicate_node_names, &duplicate_property_names,
- &node_name_chars, &node_name_format, &property_name_chars,
- &name_is_string, &name_properties,
-
- &duplicate_label,
-
- &explicit_phandles,
- &phandle_references, &path_references,
-
- &address_cells_is_cell, &size_cells_is_cell, &interrupt_cells_is_cell,
- &device_type_is_string, &model_is_string, &status_is_string,
- &label_is_string,
-
- &compatible_is_string_list, &names_is_string_list,
-
- &property_name_chars_strict,
- &node_name_chars_strict,
-
- &addr_size_cells, &reg_format, &ranges_format,
-
- &unit_address_vs_reg,
- &unit_address_format,
-
- &pci_bridge,
- &pci_device_reg,
- &pci_device_bus_num,
-
- &simple_bus_bridge,
- &simple_bus_reg,
-
- &avoid_default_addr_size,
- &avoid_unnecessary_addr_size,
- &obsolete_chosen_interrupt_controller,
- &chosen_node_is_root, &chosen_node_bootargs, &chosen_node_stdout_path,
-
- &clocks_property,
- &cooling_device_property,
- &dmas_property,
- &hwlocks_property,
- &interrupts_extended_property,
- &io_channels_property,
- &iommus_property,
- &mboxes_property,
- &msi_parent_property,
- &mux_controls_property,
- &phys_property,
- &power_domains_property,
- &pwms_property,
- &resets_property,
- &sound_dai_property,
- &thermal_sensors_property,
-
- &deprecated_gpio_property,
- &gpios_property,
- &interrupts_property,
-
- &alias_paths,
-
- &always_fail,
-};
-
-static void enable_warning_error(struct check *c, bool warn, bool error)
-{
- int i;
-
- /* Raising level, also raise it for prereqs */
- if ((warn && !c->warn) || (error && !c->error))
- for (i = 0; i < c->num_prereqs; i++)
- enable_warning_error(c->prereq[i], warn, error);
-
- c->warn = c->warn || warn;
- c->error = c->error || error;
-}
-
-static void disable_warning_error(struct check *c, bool warn, bool error)
-{
- int i;
-
- /* Lowering level, also lower it for things this is the prereq
- * for */
- if ((warn && c->warn) || (error && c->error)) {
- for (i = 0; i < ARRAY_SIZE(check_table); i++) {
- struct check *cc = check_table[i];
- int j;
-
- for (j = 0; j < cc->num_prereqs; j++)
- if (cc->prereq[j] == c)
- disable_warning_error(cc, warn, error);
- }
- }
-
- c->warn = c->warn && !warn;
- c->error = c->error && !error;
-}
-
-void parse_checks_option(bool warn, bool error, const char *arg)
-{
- int i;
- const char *name = arg;
- bool enable = true;
-
- if ((strncmp(arg, "no-", 3) == 0)
- || (strncmp(arg, "no_", 3) == 0)) {
- name = arg + 3;
- enable = false;
- }
-
- for (i = 0; i < ARRAY_SIZE(check_table); i++) {
- struct check *c = check_table[i];
-
- if (streq(c->name, name)) {
- if (enable)
- enable_warning_error(c, warn, error);
- else
- disable_warning_error(c, warn, error);
- return;
- }
- }
-
- die("Unrecognized check name \"%s\"\n", name);
-}
-
-void process_checks(bool force, struct dt_info *dti)
-{
- int i;
- int error = 0;
-
- for (i = 0; i < ARRAY_SIZE(check_table); i++) {
- struct check *c = check_table[i];
-
- if (c->warn || c->error)
- error = error || run_check(c, dti);
- }
-
- if (error) {
- if (!force) {
- fprintf(stderr, "ERROR: Input tree has errors, aborting "
- "(use -f to force output)\n");
- exit(2);
- } else if (quiet < 3) {
- fprintf(stderr, "Warning: Input tree has errors, "
- "output forced\n");
- }
- }
-}
diff --git a/convert-dtsv0-lexer.l b/convert-dtsv0-lexer.l
deleted file mode 100644
index d6d68cdcaa8e..000000000000
--- a/convert-dtsv0-lexer.l
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005, 2008.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-%option noyywrap nounput noinput never-interactive
-
-%x BYTESTRING
-%x PROPNODENAME
-
-PROPNODECHAR [a-zA-Z0-9,._+*#?@-]
-PATHCHAR ({PROPNODECHAR}|[/])
-LABEL [a-zA-Z_][a-zA-Z0-9_]*
-STRING \"([^\\"]|\\.)*\"
-WS [[:space:]]
-COMMENT "/*"([^*]|\*+[^*/])*\*+"/"
-LINECOMMENT "//".*\n
-GAP ({WS}|{COMMENT}|{LINECOMMENT})*
-
-%{
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include <errno.h>
-#include <assert.h>
-#include <fnmatch.h>
-
-#include "srcpos.h"
-#include "util.h"
-
-static int v1_tagged; /* = 0 */
-static int cbase = 16;
-static int saw_hyphen; /* = 0 */
-static unsigned long long last_val;
-static char *last_name; /* = NULL */
-
-static const struct {
- const char *pattern;
- int obase, width;
-} guess_table[] = {
- { "*-frequency", 10, 0 },
- { "num-*", 10, 0 },
- { "#*-cells", 10, 0 },
- { "*cache-line-size", 10, 0 },
- { "*cache-block-size", 10, 0 },
- { "*cache-size", 10, 0 },
- { "*cache-sets", 10, 0 },
- { "cell-index", 10, 0 },
- { "bank-width", 10, 0 },
- { "*-fifo-size", 10, 0 },
- { "*-frame-size", 10, 0 },
- { "*-channel", 10, 0 },
- { "current-speed", 10, 0 },
- { "phy-map", 16, 8 },
- { "dcr-reg", 16, 3 },
- { "reg", 16, 8 },
- { "ranges", 16, 8},
-};
-%}
-
-%%
-<*>"/include/"{GAP}{STRING} ECHO;
-
-<*>\"([^\\"]|\\.)*\" ECHO;
-
-<*>"/dts-v1/" {
- die("Input dts file is already version 1\n");
- }
-
-<*>"/memreserve/" {
- if (!v1_tagged) {
- fprintf(yyout, "/dts-v1/;\n\n");
- v1_tagged = 1;
- }
-
- ECHO;
- BEGIN(INITIAL);
- }
-
-<*>{LABEL}: ECHO;
-
-<INITIAL>[bodh]# {
- if (*yytext == 'b')
- cbase = 2;
- else if (*yytext == 'o')
- cbase = 8;
- else if (*yytext == 'd')
- cbase = 10;
- else
- cbase = 16;
- }
-
-<INITIAL>[0-9a-fA-F]+ {
- unsigned long long val;
- int obase = 16, width = 0;
- int i;
-
- val = strtoull(yytext, NULL, cbase);
-
- if (saw_hyphen)
- val = val - last_val + 1;
-
- if (last_name) {
- for (i = 0; i < ARRAY_SIZE(guess_table); i++)
- if (fnmatch(guess_table[i].pattern,
- last_name, 0) == 0) {
- obase = guess_table[i].obase;
- width = guess_table[i].width;
- }
- } else {
- obase = 16;
- width = 16;
- }
-
- if (cbase != 16)
- obase = cbase;
-
- switch (obase) {
- case 2:
- case 16:
- fprintf(yyout, "0x%0*llx", width, val);
- break;
- case 8:
- fprintf(yyout, "0%0*llo", width, val);
- break;
- case 10:
- fprintf(yyout, "%*llu", width, val);
- break;
- }
-
- cbase = 16;
- last_val = val;
- saw_hyphen = 0;
- }
-
-\&{LABEL} ECHO;
-
-"&{/"{PATHCHAR}+\} ECHO;
-
-<INITIAL>"&/"{PATHCHAR}+ fprintf(yyout, "&{/%s}", yytext + 2);
-
-<BYTESTRING>[0-9a-fA-F]{2} ECHO;
-
-<BYTESTRING>"]" {
- ECHO;
- BEGIN(INITIAL);
- }
-
-<PROPNODENAME>{PROPNODECHAR}+ {
- ECHO;
- last_name = xstrdup(yytext);
- BEGIN(INITIAL);
- }
-
-<*>{GAP} ECHO;
-
-<*>- { /* Hack to convert old style memreserves */
- saw_hyphen = 1;
- fprintf(yyout, " ");
- }
-
-<*>. {
- if (!v1_tagged) {
- fprintf(yyout, "/dts-v1/;\n\n");
- v1_tagged = 1;
- }
-
- ECHO;
- if (yytext[0] == '[') {
- BEGIN(BYTESTRING);
- }
- if ((yytext[0] == '{')
- || (yytext[0] == ';')) {
- BEGIN(PROPNODENAME);
- }
- }
-
-%%
-/* Usage related data. */
-static const char usage_synopsis[] = "convert-dtsv0 [options] <v0 dts file>...";
-static const char usage_short_opts[] = "" USAGE_COMMON_SHORT_OPTS;
-static struct option const usage_long_opts[] = {
- USAGE_COMMON_LONG_OPTS
-};
-static const char * const usage_opts_help[] = {
- USAGE_COMMON_OPTS_HELP
-};
-
-static void convert_file(const char *fname)
-{
- const char suffix[] = "v1";
- int len = strlen(fname);
- char *newname;
-
- newname = xmalloc(len + sizeof(suffix));
- memcpy(newname, fname, len);
- memcpy(newname + len, suffix, sizeof(suffix));
-
- yyin = fopen(fname, "r");
- if (!yyin)
- die("Couldn't open input file %s: %s\n",
- fname, strerror(errno));
-
- yyout = fopen(newname, "w");
- if (!yyout)
- die("Couldn't open output file %s: %s\n",
- newname, strerror(errno));
-
- while(yylex())
- ;
-
- free(newname);
-}
-
-int main(int argc, char *argv[])
-{
- int opt;
- int i;
-
- while ((opt = util_getopt_long()) != EOF) {
- switch (opt) {
- case_USAGE_COMMON_FLAGS
- }
- }
- if (argc < 2)
- usage("missing filename");
-
- for (i = 1; i < argc; i++) {
- fprintf(stderr, "Converting %s from dts v0 to dts v1\n", argv[i]);
- convert_file(argv[i]);
- }
-
- exit(0);
-}
diff --git a/data.c b/data.c
deleted file mode 100644
index aa37a16c8891..000000000000
--- a/data.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "dtc.h"
-
-void data_free(struct data d)
-{
- struct marker *m, *nm;
-
- m = d.markers;
- while (m) {
- nm = m->next;
- free(m->ref);
- free(m);
- m = nm;
- }
-
- if (d.val)
- free(d.val);
-}
-
-struct data data_grow_for(struct data d, int xlen)
-{
- struct data nd;
- int newsize;
-
- if (xlen == 0)
- return d;
-
- nd = d;
-
- newsize = xlen;
-
- while ((d.len + xlen) > newsize)
- newsize *= 2;
-
- nd.val = xrealloc(d.val, newsize);
-
- return nd;
-}
-
-struct data data_copy_mem(const char *mem, int len)
-{
- struct data d;
-
- d = data_grow_for(empty_data, len);
-
- d.len = len;
- memcpy(d.val, mem, len);
-
- return d;
-}
-
-struct data data_copy_escape_string(const char *s, int len)
-{
- int i = 0;
- struct data d;
- char *q;
-
- d = data_grow_for(empty_data, len + 1);
-
- q = d.val;
- while (i < len) {
- char c = s[i++];
-
- if (c == '\\')
- c = get_escape_char(s, &i);
-
- q[d.len++] = c;
- }
-
- q[d.len++] = '\0';
- return d;
-}
-
-struct data data_copy_file(FILE *f, size_t maxlen)
-{
- struct data d = empty_data;
-
- while (!feof(f) && (d.len < maxlen)) {
- size_t chunksize, ret;
-
- if (maxlen == -1)
- chunksize = 4096;
- else
- chunksize = maxlen - d.len;
-
- d = data_grow_for(d, chunksize);
- ret = fread(d.val + d.len, 1, chunksize, f);
-
- if (ferror(f))
- die("Error reading file into data: %s", strerror(errno));
-
- if (d.len + ret < d.len)
- die("Overflow reading file into data\n");
-
- d.len += ret;
- }
-
- return d;
-}
-
-struct data data_append_data(struct data d, const void *p, int len)
-{
- d = data_grow_for(d, len);
- memcpy(d.val + d.len, p, len);
- d.len += len;
- return d;
-}
-
-struct data data_insert_at_marker(struct data d, struct marker *m,
- const void *p, int len)
-{
- d = data_grow_for(d, len);
- memmove(d.val + m->offset + len, d.val + m->offset, d.len - m->offset);
- memcpy(d.val + m->offset, p, len);
- d.len += len;
-
- /* Adjust all markers after the one we're inserting at */
- m = m->next;
- for_each_marker(m)
- m->offset += len;
- return d;
-}
-
-static struct data data_append_markers(struct data d, struct marker *m)
-{
- struct marker **mp = &d.markers;
-
- /* Find the end of the markerlist */
- while (*mp)
- mp = &((*mp)->next);
- *mp = m;
- return d;
-}
-
-struct data data_merge(struct data d1, struct data d2)
-{
- struct data d;
- struct marker *m2 = d2.markers;
-
- d = data_append_markers(data_append_data(d1, d2.val, d2.len), m2);
-
- /* Adjust for the length of d1 */
- for_each_marker(m2)
- m2->offset += d1.len;
-
- d2.markers = NULL; /* So data_free() doesn't clobber them */
- data_free(d2);
-
- return d;
-}
-
-struct data data_append_integer(struct data d, uint64_t value, int bits)
-{
- uint8_t value_8;
- fdt16_t value_16;
- fdt32_t value_32;
- fdt64_t value_64;
-
- switch (bits) {
- case 8:
- value_8 = value;
- return data_append_data(d, &value_8, 1);
-
- case 16:
- value_16 = cpu_to_fdt16(value);
- return data_append_data(d, &value_16, 2);
-
- case 32:
- value_32 = cpu_to_fdt32(value);
- return data_append_data(d, &value_32, 4);
-
- case 64:
- value_64 = cpu_to_fdt64(value);
- return data_append_data(d, &value_64, 8);
-
- default:
- die("Invalid literal size (%d)\n", bits);
- }
-}
-
-struct data data_append_re(struct data d, uint64_t address, uint64_t size)
-{
- struct fdt_reserve_entry re;
-
- re.address = cpu_to_fdt64(address);
- re.size = cpu_to_fdt64(size);
-
- return data_append_data(d, &re, sizeof(re));
-}
-
-struct data data_append_cell(struct data d, cell_t word)
-{
- return data_append_integer(d, word, sizeof(word) * 8);
-}
-
-struct data data_append_addr(struct data d, uint64_t addr)
-{
- return data_append_integer(d, addr, sizeof(addr) * 8);
-}
-
-struct data data_append_byte(struct data d, uint8_t byte)
-{
- return data_append_data(d, &byte, 1);
-}
-
-struct data data_append_zeroes(struct data d, int len)
-{
- d = data_grow_for(d, len);
-
- memset(d.val + d.len, 0, len);
- d.len += len;
- return d;
-}
-
-struct data data_append_align(struct data d, int align)
-{
- int newlen = ALIGN(d.len, align);
- return data_append_zeroes(d, newlen - d.len);
-}
-
-struct data data_add_marker(struct data d, enum markertype type, char *ref)
-{
- struct marker *m;
-
- m = xmalloc(sizeof(*m));
- m->offset = d.len;
- m->type = type;
- m->ref = ref;
- m->next = NULL;
-
- return data_append_markers(d, m);
-}
-
-bool data_is_one_string(struct data d)
-{
- int i;
- int len = d.len;
-
- if (len == 0)
- return false;
-
- for (i = 0; i < len-1; i++)
- if (d.val[i] == '\0')
- return false;
-
- if (d.val[len-1] != '\0')
- return false;
-
- return true;
-}
diff --git a/dtc-lexer.l b/dtc-lexer.l
deleted file mode 100644
index fd825ebba69c..000000000000
--- a/dtc-lexer.l
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-%option noyywrap nounput noinput never-interactive
-
-%x BYTESTRING
-%x PROPNODENAME
-%s V1
-
-PROPNODECHAR [a-zA-Z0-9,._+*#?@-]
-PATHCHAR ({PROPNODECHAR}|[/])
-LABEL [a-zA-Z_][a-zA-Z0-9_]*
-STRING \"([^\\"]|\\.)*\"
-CHAR_LITERAL '([^']|\\')*'
-WS [[:space:]]
-COMMENT "/*"([^*]|\*+[^*/])*\*+"/"
-LINECOMMENT "//".*\n
-
-%{
-#include "dtc.h"
-#include "srcpos.h"
-#include "dtc-parser.tab.h"
-
-YYLTYPE yylloc;
-extern bool treesource_error;
-
-/* CAUTION: this will stop working if we ever use yyless() or yyunput() */
-#define YY_USER_ACTION \
- { \
- srcpos_update(&yylloc, yytext, yyleng); \
- }
-
-/*#define LEXDEBUG 1*/
-
-#ifdef LEXDEBUG
-#define DPRINT(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)
-#else
-#define DPRINT(fmt, ...) do { } while (0)
-#endif
-
-static int dts_version = 1;
-
-#define BEGIN_DEFAULT() DPRINT("<V1>\n"); \
- BEGIN(V1); \
-
-static void push_input_file(const char *filename);
-static bool pop_input_file(void);
-static void PRINTF(1, 2) lexical_error(const char *fmt, ...);
-
-%}
-
-%%
-<*>"/include/"{WS}*{STRING} {
- char *name = strchr(yytext, '\"') + 1;
- yytext[yyleng-1] = '\0';
- push_input_file(name);
- }
-
-<*>^"#"(line)?[ \t]+[0-9]+[ \t]+{STRING}([ \t]+[0-9]+)? {
- char *line, *fnstart, *fnend;
- struct data fn;
- /* skip text before line # */
- line = yytext;
- while (!isdigit((unsigned char)*line))
- line++;
-
- /* regexp ensures that first and list "
- * in the whole yytext are those at
- * beginning and end of the filename string */
- fnstart = memchr(yytext, '"', yyleng);
- for (fnend = yytext + yyleng - 1;
- *fnend != '"'; fnend--)
- ;
- assert(fnstart && fnend && (fnend > fnstart));
-
- fn = data_copy_escape_string(fnstart + 1,
- fnend - fnstart - 1);
-
- /* Don't allow nuls in filenames */
- if (memchr(fn.val, '\0', fn.len - 1))
- lexical_error("nul in line number directive");
-
- /* -1 since #line is the number of the next line */
- srcpos_set_line(xstrdup(fn.val), atoi(line) - 1);
- data_free(fn);
- }
-
-<*><<EOF>> {
- if (!pop_input_file()) {
- yyterminate();
- }
- }
-
-<*>{STRING} {
- DPRINT("String: %s\n", yytext);
- yylval.data = data_copy_escape_string(yytext+1,
- yyleng-2);
- return DT_STRING;
- }
-
-<*>"/dts-v1/" {
- DPRINT("Keyword: /dts-v1/\n");
- dts_version = 1;
- BEGIN_DEFAULT();
- return DT_V1;
- }
-
-<*>"/plugin/" {
- DPRINT("Keyword: /plugin/\n");
- return DT_PLUGIN;
- }
-
-<*>"/memreserve/" {
- DPRINT("Keyword: /memreserve/\n");
- BEGIN_DEFAULT();
- return DT_MEMRESERVE;
- }
-
-<*>"/bits/" {
- DPRINT("Keyword: /bits/\n");
- BEGIN_DEFAULT();
- return DT_BITS;
- }
-
-<*>"/delete-property/" {
- DPRINT("Keyword: /delete-property/\n");
- DPRINT("<PROPNODENAME>\n");
- BEGIN(PROPNODENAME);
- return DT_DEL_PROP;
- }
-
-<*>"/delete-node/" {
- DPRINT("Keyword: /delete-node/\n");
- DPRINT("<PROPNODENAME>\n");
- BEGIN(PROPNODENAME);
- return DT_DEL_NODE;
- }
-
-<*>{LABEL}: {
- DPRINT("Label: %s\n", yytext);
- yylval.labelref = xstrdup(yytext);
- yylval.labelref[yyleng-1] = '\0';
- return DT_LABEL;
- }
-
-<V1>([0-9]+|0[xX][0-9a-fA-F]+)(U|L|UL|LL|ULL)? {
- char *e;
- DPRINT("Integer Literal: '%s'\n", yytext);
-
- errno = 0;
- yylval.integer = strtoull(yytext, &e, 0);
-
- if (*e && e[strspn(e, "UL")]) {
- lexical_error("Bad integer literal '%s'",
- yytext);
- }
-
- if (errno == ERANGE)
- lexical_error("Integer literal '%s' out of range",
- yytext);
- else
- /* ERANGE is the only strtoull error triggerable
- * by strings matching the pattern */
- assert(errno == 0);
- return DT_LITERAL;
- }
-
-<*>{CHAR_LITERAL} {
- struct data d;
- DPRINT("Character literal: %s\n", yytext);
-
- d = data_copy_escape_string(yytext+1, yyleng-2);
- if (d.len == 1) {
- lexical_error("Empty character literal");
- yylval.integer = 0;
- } else {
- yylval.integer = (unsigned char)d.val[0];
-
- if (d.len > 2)
- lexical_error("Character literal has %d"
- " characters instead of 1",
- d.len - 1);
- }
-
- data_free(d);
- return DT_CHAR_LITERAL;
- }
-
-<*>\&{LABEL} { /* label reference */
- DPRINT("Ref: %s\n", yytext+1);
- yylval.labelref = xstrdup(yytext+1);
- return DT_REF;
- }
-
-<*>"&{/"{PATHCHAR}*\} { /* new-style path reference */
- yytext[yyleng-1] = '\0';
- DPRINT("Ref: %s\n", yytext+2);
- yylval.labelref = xstrdup(yytext+2);
- return DT_REF;
- }
-
-<BYTESTRING>[0-9a-fA-F]{2} {
- yylval.byte = strtol(yytext, NULL, 16);
- DPRINT("Byte: %02x\n", (int)yylval.byte);
- return DT_BYTE;
- }
-
-<BYTESTRING>"]" {
- DPRINT("/BYTESTRING\n");
- BEGIN_DEFAULT();
- return ']';
- }
-
-<PROPNODENAME>\\?{PROPNODECHAR}+ {
- DPRINT("PropNodeName: %s\n", yytext);
- yylval.propnodename = xstrdup((yytext[0] == '\\') ?
- yytext + 1 : yytext);
- BEGIN_DEFAULT();
- return DT_PROPNODENAME;
- }
-
-"/incbin/" {
- DPRINT("Binary Include\n");
- return DT_INCBIN;
- }
-
-<*>{WS}+ /* eat whitespace */
-<*>{COMMENT}+ /* eat C-style comments */
-<*>{LINECOMMENT}+ /* eat C++-style comments */
-
-<*>"<<" { return DT_LSHIFT; };
-<*>">>" { return DT_RSHIFT; };
-<*>"<=" { return DT_LE; };
-<*>">=" { return DT_GE; };
-<*>"==" { return DT_EQ; };
-<*>"!=" { return DT_NE; };
-<*>"&&" { return DT_AND; };
-<*>"||" { return DT_OR; };
-
-<*>. {
- DPRINT("Char: %c (\\x%02x)\n", yytext[0],
- (unsigned)yytext[0]);
- if (yytext[0] == '[') {
- DPRINT("<BYTESTRING>\n");
- BEGIN(BYTESTRING);
- }
- if ((yytext[0] == '{')
- || (yytext[0] == ';')) {
- DPRINT("<PROPNODENAME>\n");
- BEGIN(PROPNODENAME);
- }
- return yytext[0];
- }
-
-%%
-
-static void push_input_file(const char *filename)
-{
- assert(filename);
-
- srcfile_push(filename);
-
- yyin = current_srcfile->f;
-
- yypush_buffer_state(yy_create_buffer(yyin, YY_BUF_SIZE));
-}
-
-
-static bool pop_input_file(void)
-{
- if (srcfile_pop() == 0)
- return false;
-
- yypop_buffer_state();
- yyin = current_srcfile->f;
-
- return true;
-}
-
-static void lexical_error(const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- srcpos_verror(&yylloc, "Lexical error", fmt, ap);
- va_end(ap);
-
- treesource_error = true;
-}
diff --git a/dtc-parser.y b/dtc-parser.y
deleted file mode 100644
index 44af170abfea..000000000000
--- a/dtc-parser.y
+++ /dev/null
@@ -1,538 +0,0 @@
-/*
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-%{
-#include <stdio.h>
-#include <inttypes.h>
-
-#include "dtc.h"
-#include "srcpos.h"
-
-extern int yylex(void);
-extern void yyerror(char const *s);
-#define ERROR(loc, ...) \
- do { \
- srcpos_error((loc), "Error", __VA_ARGS__); \
- treesource_error = true; \
- } while (0)
-
-extern struct dt_info *parser_output;
-extern bool treesource_error;
-%}
-
-%union {
- char *propnodename;
- char *labelref;
- uint8_t byte;
- struct data data;
-
- struct {
- struct data data;
- int bits;
- } array;
-
- struct property *prop;
- struct property *proplist;
- struct node *node;
- struct node *nodelist;
- struct reserve_info *re;
- uint64_t integer;
- unsigned int flags;
-}
-
-%token DT_V1
-%token DT_PLUGIN
-%token DT_MEMRESERVE
-%token DT_LSHIFT DT_RSHIFT DT_LE DT_GE DT_EQ DT_NE DT_AND DT_OR
-%token DT_BITS
-%token DT_DEL_PROP
-%token DT_DEL_NODE
-%token <propnodename> DT_PROPNODENAME
-%token <integer> DT_LITERAL
-%token <integer> DT_CHAR_LITERAL
-%token <byte> DT_BYTE
-%token <data> DT_STRING
-%token <labelref> DT_LABEL
-%token <labelref> DT_REF
-%token DT_INCBIN
-
-%type <data> propdata
-%type <data> propdataprefix
-%type <flags> header
-%type <flags> headers
-%type <re> memreserve
-%type <re> memreserves
-%type <array> arrayprefix
-%type <data> bytestring
-%type <prop> propdef
-%type <proplist> proplist
-
-%type <node> devicetree
-%type <node> nodedef
-%type <node> subnode
-%type <nodelist> subnodes
-
-%type <integer> integer_prim
-%type <integer> integer_unary
-%type <integer> integer_mul
-%type <integer> integer_add
-%type <integer> integer_shift
-%type <integer> integer_rela
-%type <integer> integer_eq
-%type <integer> integer_bitand
-%type <integer> integer_bitxor
-%type <integer> integer_bitor
-%type <integer> integer_and
-%type <integer> integer_or
-%type <integer> integer_trinary
-%type <integer> integer_expr
-
-%%
-
-sourcefile:
- headers memreserves devicetree
- {
- parser_output = build_dt_info($1, $2, $3,
- guess_boot_cpuid($3));
- }
- ;
-
-header:
- DT_V1 ';'
- {
- $$ = DTSF_V1;
- }
- | DT_V1 ';' DT_PLUGIN ';'
- {
- $$ = DTSF_V1 | DTSF_PLUGIN;
- }
- ;
-
-headers:
- header
- | header headers
- {
- if ($2 != $1)
- ERROR(&@2, "Header flags don't match earlier ones");
- $$ = $1;
- }
- ;
-
-memreserves:
- /* empty */
- {
- $$ = NULL;
- }
- | memreserve memreserves
- {
- $$ = chain_reserve_entry($1, $2);
- }
- ;
-
-memreserve:
- DT_MEMRESERVE integer_prim integer_prim ';'
- {
- $$ = build_reserve_entry($2, $3);
- }
- | DT_LABEL memreserve
- {
- add_label(&$2->labels, $1);
- $$ = $2;
- }
- ;
-
-devicetree:
- '/' nodedef
- {
- $$ = name_node($2, "");
- }
- | devicetree '/' nodedef
- {
- $$ = merge_nodes($1, $3);
- }
- | DT_REF nodedef
- {
- /*
- * We rely on the rule being always:
- * versioninfo plugindecl memreserves devicetree
- * so $-1 is what we want (plugindecl)
- */
- if (!($<flags>-1 & DTSF_PLUGIN))
- ERROR(&@2, "Label or path %s not found", $1);
- $$ = add_orphan_node(name_node(build_node(NULL, NULL), ""), $2, $1);
- }
- | devicetree DT_LABEL DT_REF nodedef
- {
- struct node *target = get_node_by_ref($1, $3);
-
- if (target) {
- add_label(&target->labels, $2);
- merge_nodes(target, $4);
- } else
- ERROR(&@3, "Label or path %s not found", $3);
- $$ = $1;
- }
- | devicetree DT_REF nodedef
- {
- struct node *target = get_node_by_ref($1, $2);
-
- if (target) {
- merge_nodes(target, $3);
- } else {
- /*
- * We rely on the rule being always:
- * versioninfo plugindecl memreserves devicetree
- * so $-1 is what we want (plugindecl)
- */
- if ($<flags>-1 & DTSF_PLUGIN)
- add_orphan_node($1, $3, $2);
- else
- ERROR(&@2, "Label or path %s not found", $2);
- }
- $$ = $1;
- }
- | devicetree DT_DEL_NODE DT_REF ';'
- {
- struct node *target = get_node_by_ref($1, $3);
-
- if (target)
- delete_node(target);
- else
- ERROR(&@3, "Label or path %s not found", $3);
-
-
- $$ = $1;
- }
- ;
-
-nodedef:
- '{' proplist subnodes '}' ';'
- {
- $$ = build_node($2, $3);
- }
- ;
-
-proplist:
- /* empty */
- {
- $$ = NULL;
- }
- | proplist propdef
- {
- $$ = chain_property($2, $1);
- }
- ;
-
-propdef:
- DT_PROPNODENAME '=' propdata ';'
- {
- $$ = build_property($1, $3);
- }
- | DT_PROPNODENAME ';'
- {
- $$ = build_property($1, empty_data);
- }
- | DT_DEL_PROP DT_PROPNODENAME ';'
- {
- $$ = build_property_delete($2);
- }
- | DT_LABEL propdef
- {
- add_label(&$2->labels, $1);
- $$ = $2;
- }
- ;
-
-propdata:
- propdataprefix DT_STRING
- {
- $$ = data_merge($1, $2);
- }
- | propdataprefix arrayprefix '>'
- {
- $$ = data_merge($1, $2.data);
- }
- | propdataprefix '[' bytestring ']'
- {
- $$ = data_merge($1, $3);
- }
- | propdataprefix DT_REF
- {
- $$ = data_add_marker($1, REF_PATH, $2);
- }
- | propdataprefix DT_INCBIN '(' DT_STRING ',' integer_prim ',' integer_prim ')'
- {
- FILE *f = srcfile_relative_open($4.val, NULL);
- struct data d;
-
- if ($6 != 0)
- if (fseek(f, $6, SEEK_SET) != 0)
- die("Couldn't seek to offset %llu in \"%s\": %s",
- (unsigned long long)$6, $4.val,
- strerror(errno));
-
- d = data_copy_file(f, $8);
-
- $$ = data_merge($1, d);
- fclose(f);
- }
- | propdataprefix DT_INCBIN '(' DT_STRING ')'
- {
- FILE *f = srcfile_relative_open($4.val, NULL);
- struct data d = empty_data;
-
- d = data_copy_file(f, -1);
-
- $$ = data_merge($1, d);
- fclose(f);
- }
- | propdata DT_LABEL
- {
- $$ = data_add_marker($1, LABEL, $2);
- }
- ;
-
-propdataprefix:
- /* empty */
- {
- $$ = empty_data;
- }
- | propdata ','
- {
- $$ = $1;
- }
- | propdataprefix DT_LABEL
- {
- $$ = data_add_marker($1, LABEL, $2);
- }
- ;
-
-arrayprefix:
- DT_BITS DT_LITERAL '<'
- {
- unsigned long long bits;
-
- bits = $2;
-
- if ((bits != 8) && (bits != 16) &&
- (bits != 32) && (bits != 64)) {
- ERROR(&@2, "Array elements must be"
- " 8, 16, 32 or 64-bits");
- bits = 32;
- }
-
- $$.data = empty_data;
- $$.bits = bits;
- }
- | '<'
- {
- $$.data = empty_data;
- $$.bits = 32;
- }
- | arrayprefix integer_prim
- {
- if ($1.bits < 64) {
- uint64_t mask = (1ULL << $1.bits) - 1;
- /*
- * Bits above mask must either be all zero
- * (positive within range of mask) or all one
- * (negative and sign-extended). The second
- * condition is true if when we set all bits
- * within the mask to one (i.e. | in the
- * mask), all bits are one.
- */
- if (($2 > mask) && (($2 | mask) != -1ULL))
- ERROR(&@2, "Value out of range for"
- " %d-bit array element", $1.bits);
- }
-
- $$.data = data_append_integer($1.data, $2, $1.bits);
- }
- | arrayprefix DT_REF
- {
- uint64_t val = ~0ULL >> (64 - $1.bits);
-
- if ($1.bits == 32)
- $1.data = data_add_marker($1.data,
- REF_PHANDLE,
- $2);
- else
- ERROR(&@2, "References are only allowed in "
- "arrays with 32-bit elements.");
-
- $$.data = data_append_integer($1.data, val, $1.bits);
- }
- | arrayprefix DT_LABEL
- {
- $$.data = data_add_marker($1.data, LABEL, $2);
- }
- ;
-
-integer_prim:
- DT_LITERAL
- | DT_CHAR_LITERAL
- | '(' integer_expr ')'
- {
- $$ = $2;
- }
- ;
-
-integer_expr:
- integer_trinary
- ;
-
-integer_trinary:
- integer_or
- | integer_or '?' integer_expr ':' integer_trinary { $$ = $1 ? $3 : $5; }
- ;
-
-integer_or:
- integer_and
- | integer_or DT_OR integer_and { $$ = $1 || $3; }
- ;
-
-integer_and:
- integer_bitor
- | integer_and DT_AND integer_bitor { $$ = $1 && $3; }
- ;
-
-integer_bitor:
- integer_bitxor
- | integer_bitor '|' integer_bitxor { $$ = $1 | $3; }
- ;
-
-integer_bitxor:
- integer_bitand
- | integer_bitxor '^' integer_bitand { $$ = $1 ^ $3; }
- ;
-
-integer_bitand:
- integer_eq
- | integer_bitand '&' integer_eq { $$ = $1 & $3; }
- ;
-
-integer_eq:
- integer_rela
- | integer_eq DT_EQ integer_rela { $$ = $1 == $3; }
- | integer_eq DT_NE integer_rela { $$ = $1 != $3; }
- ;
-
-integer_rela:
- integer_shift
- | integer_rela '<' integer_shift { $$ = $1 < $3; }
- | integer_rela '>' integer_shift { $$ = $1 > $3; }
- | integer_rela DT_LE integer_shift { $$ = $1 <= $3; }
- | integer_rela DT_GE integer_shift { $$ = $1 >= $3; }
- ;
-
-integer_shift:
- integer_shift DT_LSHIFT integer_add { $$ = $1 << $3; }
- | integer_shift DT_RSHIFT integer_add { $$ = $1 >> $3; }
- | integer_add
- ;
-
-integer_add:
- integer_add '+' integer_mul { $$ = $1 + $3; }
- | integer_add '-' integer_mul { $$ = $1 - $3; }
- | integer_mul
- ;
-
-integer_mul:
- integer_mul '*' integer_unary { $$ = $1 * $3; }
- | integer_mul '/' integer_unary
- {
- if ($3 != 0) {
- $$ = $1 / $3;
- } else {
- ERROR(&@$, "Division by zero");
- $$ = 0;
- }
- }
- | integer_mul '%' integer_unary
- {
- if ($3 != 0) {
- $$ = $1 % $3;
- } else {
- ERROR(&@$, "Division by zero");
- $$ = 0;
- }
- }
- | integer_unary
- ;
-
-integer_unary:
- integer_prim
- | '-' integer_unary { $$ = -$2; }
- | '~' integer_unary { $$ = ~$2; }
- | '!' integer_unary { $$ = !$2; }
- ;
-
-bytestring:
- /* empty */
- {
- $$ = empty_data;
- }
- | bytestring DT_BYTE
- {
- $$ = data_append_byte($1, $2);
- }
- | bytestring DT_LABEL
- {
- $$ = data_add_marker($1, LABEL, $2);
- }
- ;
-
-subnodes:
- /* empty */
- {
- $$ = NULL;
- }
- | subnode subnodes
- {
- $$ = chain_node($1, $2);
- }
- | subnode propdef
- {
- ERROR(&@2, "Properties must precede subnodes");
- YYERROR;
- }
- ;
-
-subnode:
- DT_PROPNODENAME nodedef
- {
- $$ = name_node($2, $1);
- }
- | DT_DEL_NODE DT_PROPNODENAME ';'
- {
- $$ = name_node(build_node_delete(), $2);
- }
- | DT_LABEL subnode
- {
- add_label(&$2->labels, $1);
- $$ = $2;
- }
- ;
-
-%%
-
-void yyerror(char const *s)
-{
- ERROR(&yylloc, "%s", s);
-}
diff --git a/dtc.c b/dtc.c
deleted file mode 100644
index c36994e6eac5..000000000000
--- a/dtc.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include <sys/stat.h>
-
-#include "dtc.h"
-#include "srcpos.h"
-
-/*
- * Command line options
- */
-int quiet; /* Level of quietness */
-int reservenum; /* Number of memory reservation slots */
-int minsize; /* Minimum blob size */
-int padsize; /* Additional padding to blob */
-int alignsize; /* Additional padding to blob accroding to the alignsize */
-int phandle_format = PHANDLE_EPAPR; /* Use linux,phandle or phandle properties */
-int generate_symbols; /* enable symbols & fixup support */
-int generate_fixups; /* suppress generation of fixups on symbol support */
-int auto_label_aliases; /* auto generate labels -> aliases */
-
-static int is_power_of_2(int x)
-{
- return (x > 0) && ((x & (x - 1)) == 0);
-}
-
-static void fill_fullpaths(struct node *tree, const char *prefix)
-{
- struct node *child;
- const char *unit;
-
- tree->fullpath = join_path(prefix, tree->name);
-
- unit = strchr(tree->name, '@');
- if (unit)
- tree->basenamelen = unit - tree->name;
- else
- tree->basenamelen = strlen(tree->name);
-
- for_each_child(tree, child)
- fill_fullpaths(child, tree->fullpath);
-}
-
-/* Usage related data. */
-static const char usage_synopsis[] = "dtc [options] <input file>";
-static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:a:fb:i:H:sW:E:@Ahv";
-static struct option const usage_long_opts[] = {
- {"quiet", no_argument, NULL, 'q'},
- {"in-format", a_argument, NULL, 'I'},
- {"out", a_argument, NULL, 'o'},
- {"out-format", a_argument, NULL, 'O'},
- {"out-version", a_argument, NULL, 'V'},
- {"out-dependency", a_argument, NULL, 'd'},
- {"reserve", a_argument, NULL, 'R'},
- {"space", a_argument, NULL, 'S'},
- {"pad", a_argument, NULL, 'p'},
- {"align", a_argument, NULL, 'a'},
- {"boot-cpu", a_argument, NULL, 'b'},
- {"force", no_argument, NULL, 'f'},
- {"include", a_argument, NULL, 'i'},
- {"sort", no_argument, NULL, 's'},
- {"phandle", a_argument, NULL, 'H'},
- {"warning", a_argument, NULL, 'W'},
- {"error", a_argument, NULL, 'E'},
- {"symbols", no_argument, NULL, '@'},
- {"auto-alias", no_argument, NULL, 'A'},
- {"help", no_argument, NULL, 'h'},
- {"version", no_argument, NULL, 'v'},
- {NULL, no_argument, NULL, 0x0},
-};
-static const char * const usage_opts_help[] = {
- "\n\tQuiet: -q suppress warnings, -qq errors, -qqq all",
- "\n\tInput formats are:\n"
- "\t\tdts - device tree source text\n"
- "\t\tdtb - device tree blob\n"
- "\t\tfs - /proc/device-tree style directory",
- "\n\tOutput file",
- "\n\tOutput formats are:\n"
- "\t\tdts - device tree source text\n"
- "\t\tdtb - device tree blob\n"
- "\t\tasm - assembler source",
- "\n\tBlob version to produce, defaults to "stringify(DEFAULT_FDT_VERSION)" (for dtb and asm output)",
- "\n\tOutput dependency file",
- "\n\tMake space for <number> reserve map entries (for dtb and asm output)",
- "\n\tMake the blob at least <bytes> long (extra space)",
- "\n\tAdd padding to the blob of <bytes> long (extra space)",
- "\n\tMake the blob align to the <bytes> (extra space)",
- "\n\tSet the physical boot cpu",
- "\n\tTry to produce output even if the input tree has errors",
- "\n\tAdd a path to search for include files",
- "\n\tSort nodes and properties before outputting (useful for comparing trees)",
- "\n\tValid phandle formats are:\n"
- "\t\tlegacy - \"linux,phandle\" properties only\n"
- "\t\tepapr - \"phandle\" properties only\n"
- "\t\tboth - Both \"linux,phandle\" and \"phandle\" properties",
- "\n\tEnable/disable warnings (prefix with \"no-\")",
- "\n\tEnable/disable errors (prefix with \"no-\")",
- "\n\tEnable generation of symbols",
- "\n\tEnable auto-alias of labels",
- "\n\tPrint this help and exit",
- "\n\tPrint version and exit",
- NULL,
-};
-
-static const char *guess_type_by_name(const char *fname, const char *fallback)
-{
- const char *s;
-
- s = strrchr(fname, '.');
- if (s == NULL)
- return fallback;
- if (!strcasecmp(s, ".dts"))
- return "dts";
- if (!strcasecmp(s, ".dtb"))
- return "dtb";
- return fallback;
-}
-
-static const char *guess_input_format(const char *fname, const char *fallback)
-{
- struct stat statbuf;
- fdt32_t magic;
- FILE *f;
-
- if (stat(fname, &statbuf) != 0)
- return fallback;
-
- if (S_ISDIR(statbuf.st_mode))
- return "fs";
-
- if (!S_ISREG(statbuf.st_mode))
- return fallback;
-
- f = fopen(fname, "r");
- if (f == NULL)
- return fallback;
- if (fread(&magic, 4, 1, f) != 1) {
- fclose(f);
- return fallback;
- }
- fclose(f);
-
- if (fdt32_to_cpu(magic) == FDT_MAGIC)
- return "dtb";
-
- return guess_type_by_name(fname, fallback);
-}
-
-int main(int argc, char *argv[])
-{
- struct dt_info *dti;
- const char *inform = NULL;
- const char *outform = NULL;
- const char *outname = "-";
- const char *depname = NULL;
- bool force = false, sort = false;
- const char *arg;
- int opt;
- FILE *outf = NULL;
- int outversion = DEFAULT_FDT_VERSION;
- long long cmdline_boot_cpuid = -1;
-
- quiet = 0;
- reservenum = 0;
- minsize = 0;
- padsize = 0;
- alignsize = 0;
-
- while ((opt = util_getopt_long()) != EOF) {
- switch (opt) {
- case 'I':
- inform = optarg;
- break;
- case 'O':
- outform = optarg;
- break;
- case 'o':
- outname = optarg;
- break;
- case 'V':
- outversion = strtol(optarg, NULL, 0);
- break;
- case 'd':
- depname = optarg;
- break;
- case 'R':
- reservenum = strtol(optarg, NULL, 0);
- break;
- case 'S':
- minsize = strtol(optarg, NULL, 0);
- break;
- case 'p':
- padsize = strtol(optarg, NULL, 0);
- break;
- case 'a':
- alignsize = strtol(optarg, NULL, 0);
- if (!is_power_of_2(alignsize))
- die("Invalid argument \"%d\" to -a option\n",
- alignsize);
- break;
- case 'f':
- force = true;
- break;
- case 'q':
- quiet++;
- break;
- case 'b':
- cmdline_boot_cpuid = strtoll(optarg, NULL, 0);
- break;
- case 'i':
- srcfile_add_search_path(optarg);
- break;
- case 'v':
- util_version();
- case 'H':
- if (streq(optarg, "legacy"))
- phandle_format = PHANDLE_LEGACY;
- else if (streq(optarg, "epapr"))
- phandle_format = PHANDLE_EPAPR;
- else if (streq(optarg, "both"))
- phandle_format = PHANDLE_BOTH;
- else
- die("Invalid argument \"%s\" to -H option\n",
- optarg);
- break;
-
- case 's':
- sort = true;
- break;
-
- case 'W':
- parse_checks_option(true, false, optarg);
- break;
-
- case 'E':
- parse_checks_option(false, true, optarg);
- break;
-
- case '@':
- generate_symbols = 1;
- break;
- case 'A':
- auto_label_aliases = 1;
- break;
-
- case 'h':
- usage(NULL);
- default:
- usage("unknown option");
- }
- }
-
- if (argc > (optind+1))
- usage("missing files");
- else if (argc < (optind+1))
- arg = "-";
- else
- arg = argv[optind];
-
- /* minsize and padsize are mutually exclusive */
- if (minsize && padsize)
- die("Can't set both -p and -S\n");
-
- if (depname) {
- depfile = fopen(depname, "w");
- if (!depfile)
- die("Couldn't open dependency file %s: %s\n", depname,
- strerror(errno));
- fprintf(depfile, "%s:", outname);
- }
-
- if (inform == NULL)
- inform = guess_input_format(arg, "dts");
- if (outform == NULL) {
- outform = guess_type_by_name(outname, NULL);
- if (outform == NULL) {
- if (streq(inform, "dts"))
- outform = "dtb";
- else
- outform = "dts";
- }
- }
- if (streq(inform, "dts"))
- dti = dt_from_source(arg);
- else if (streq(inform, "fs"))
- dti = dt_from_fs(arg);
- else if(streq(inform, "dtb"))
- dti = dt_from_blob(arg);
- else
- die("Unknown input format \"%s\"\n", inform);
-
- dti->outname = outname;
-
- if (depfile) {
- fputc('\n', depfile);
- fclose(depfile);
- }
-
- if (cmdline_boot_cpuid != -1)
- dti->boot_cpuid_phys = cmdline_boot_cpuid;
-
- fill_fullpaths(dti->dt, "");
-
- /* on a plugin, generate by default */
- if (dti->dtsflags & DTSF_PLUGIN) {
- generate_fixups = 1;
- }
-
- process_checks(force, dti);
-
- if (auto_label_aliases)
- generate_label_tree(dti, "aliases", false);
-
- if (generate_symbols)
- generate_label_tree(dti, "__symbols__", true);
-
- if (generate_fixups) {
- generate_fixups_tree(dti, "__fixups__");
- generate_local_fixups_tree(dti, "__local_fixups__");
- }
-
- if (sort)
- sort_tree(dti);
-
- if (streq(outname, "-")) {
- outf = stdout;
- } else {
- outf = fopen(outname, "wb");
- if (! outf)
- die("Couldn't open output file %s: %s\n",
- outname, strerror(errno));
- }
-
- if (streq(outform, "dts")) {
- dt_to_source(outf, dti);
- } else if (streq(outform, "dtb")) {
- dt_to_blob(outf, dti, outversion);
- } else if (streq(outform, "asm")) {
- dt_to_asm(outf, dti, outversion);
- } else if (streq(outform, "null")) {
- /* do nothing */
- } else {
- die("Unknown output format \"%s\"\n", outform);
- }
-
- exit(0);
-}
diff --git a/dtc.h b/dtc.h
deleted file mode 100644
index 3b18a42b866e..000000000000
--- a/dtc.h
+++ /dev/null
@@ -1,293 +0,0 @@
-#ifndef DTC_H
-#define DTC_H
-
-/*
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <unistd.h>
-#include <inttypes.h>
-
-#include <libfdt_env.h>
-#include <fdt.h>
-
-#include "util.h"
-
-#ifdef DEBUG
-#define debug(...) printf(__VA_ARGS__)
-#else
-#define debug(...)
-#endif
-
-#define DEFAULT_FDT_VERSION 17
-
-/*
- * Command line options
- */
-extern int quiet; /* Level of quietness */
-extern int reservenum; /* Number of memory reservation slots */
-extern int minsize; /* Minimum blob size */
-extern int padsize; /* Additional padding to blob */
-extern int alignsize; /* Additional padding to blob accroding to the alignsize */
-extern int phandle_format; /* Use linux,phandle or phandle properties */
-extern int generate_symbols; /* generate symbols for nodes with labels */
-extern int generate_fixups; /* generate fixups */
-extern int auto_label_aliases; /* auto generate labels -> aliases */
-
-#define PHANDLE_LEGACY 0x1
-#define PHANDLE_EPAPR 0x2
-#define PHANDLE_BOTH 0x3
-
-typedef uint32_t cell_t;
-
-
-#define streq(a, b) (strcmp((a), (b)) == 0)
-#define strstarts(s, prefix) (strncmp((s), (prefix), strlen(prefix)) == 0)
-#define strprefixeq(a, n, b) (strlen(b) == (n) && (memcmp(a, b, n) == 0))
-
-#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1))
-
-/* Data blobs */
-enum markertype {
- REF_PHANDLE,
- REF_PATH,
- LABEL,
-};
-
-struct marker {
- enum markertype type;
- int offset;
- char *ref;
- struct marker *next;
-};
-
-struct data {
- int len;
- char *val;
- struct marker *markers;
-};
-
-
-#define empty_data ((struct data){ 0 /* all .members = 0 or NULL */ })
-
-#define for_each_marker(m) \
- for (; (m); (m) = (m)->next)
-#define for_each_marker_of_type(m, t) \
- for_each_marker(m) \
- if ((m)->type == (t))
-
-void data_free(struct data d);
-
-struct data data_grow_for(struct data d, int xlen);
-
-struct data data_copy_mem(const char *mem, int len);
-struct data data_copy_escape_string(const char *s, int len);
-struct data data_copy_file(FILE *f, size_t len);
-
-struct data data_append_data(struct data d, const void *p, int len);
-struct data data_insert_at_marker(struct data d, struct marker *m,
- const void *p, int len);
-struct data data_merge(struct data d1, struct data d2);
-struct data data_append_cell(struct data d, cell_t word);
-struct data data_append_integer(struct data d, uint64_t word, int bits);
-struct data data_append_re(struct data d, uint64_t address, uint64_t size);
-struct data data_append_addr(struct data d, uint64_t addr);
-struct data data_append_byte(struct data d, uint8_t byte);
-struct data data_append_zeroes(struct data d, int len);
-struct data data_append_align(struct data d, int align);
-
-struct data data_add_marker(struct data d, enum markertype type, char *ref);
-
-bool data_is_one_string(struct data d);
-
-/* DT constraints */
-
-#define MAX_PROPNAME_LEN 31
-#define MAX_NODENAME_LEN 31
-
-/* Live trees */
-struct label {
- bool deleted;
- char *label;
- struct label *next;
-};
-
-struct bus_type {
- const char *name;
-};
-
-struct property {
- bool deleted;
- char *name;
- struct data val;
-
- struct property *next;
-
- struct label *labels;
-};
-
-struct node {
- bool deleted;
- char *name;
- struct property *proplist;
- struct node *children;
-
- struct node *parent;
- struct node *next_sibling;
-
- char *fullpath;
- int basenamelen;
-
- cell_t phandle;
- int addr_cells, size_cells;
-
- struct label *labels;
- const struct bus_type *bus;
-};
-
-#define for_each_label_withdel(l0, l) \
- for ((l) = (l0); (l); (l) = (l)->next)
-
-#define for_each_label(l0, l) \
- for_each_label_withdel(l0, l) \
- if (!(l)->deleted)
-
-#define for_each_property_withdel(n, p) \
- for ((p) = (n)->proplist; (p); (p) = (p)->next)
-
-#define for_each_property(n, p) \
- for_each_property_withdel(n, p) \
- if (!(p)->deleted)
-
-#define for_each_child_withdel(n, c) \
- for ((c) = (n)->children; (c); (c) = (c)->next_sibling)
-
-#define for_each_child(n, c) \
- for_each_child_withdel(n, c) \
- if (!(c)->deleted)
-
-void add_label(struct label **labels, char *label);
-void delete_labels(struct label **labels);
-
-struct property *build_property(char *name, struct data val);
-struct property *build_property_delete(char *name);
-struct property *chain_property(struct property *first, struct property *list);
-struct property *reverse_properties(struct property *first);
-
-struct node *build_node(struct property *proplist, struct node *children);
-struct node *build_node_delete(void);
-struct node *name_node(struct node *node, char *name);
-struct node *chain_node(struct node *first, struct node *list);
-struct node *merge_nodes(struct node *old_node, struct node *new_node);
-struct node *add_orphan_node(struct node *old_node, struct node *new_node, char *ref);
-
-void add_property(struct node *node, struct property *prop);
-void delete_property_by_name(struct node *node, char *name);
-void delete_property(struct property *prop);
-void add_child(struct node *parent, struct node *child);
-void delete_node_by_name(struct node *parent, char *name);
-void delete_node(struct node *node);
-void append_to_property(struct node *node,
- char *name, const void *data, int len);
-
-const char *get_unitname(struct node *node);
-struct property *get_property(struct node *node, const char *propname);
-cell_t propval_cell(struct property *prop);
-cell_t propval_cell_n(struct property *prop, int n);
-struct property *get_property_by_label(struct node *tree, const char *label,
- struct node **node);
-struct marker *get_marker_label(struct node *tree, const char *label,
- struct node **node, struct property **prop);
-struct node *get_subnode(struct node *node, const char *nodename);
-struct node *get_node_by_path(struct node *tree, const char *path);
-struct node *get_node_by_label(struct node *tree, const char *label);
-struct node *get_node_by_phandle(struct node *tree, cell_t phandle);
-struct node *get_node_by_ref(struct node *tree, const char *ref);
-cell_t get_node_phandle(struct node *root, struct node *node);
-
-uint32_t guess_boot_cpuid(struct node *tree);
-
-/* Boot info (tree plus memreserve information */
-
-struct reserve_info {
- uint64_t address, size;
-
- struct reserve_info *next;
-
- struct label *labels;
-};
-
-struct reserve_info *build_reserve_entry(uint64_t start, uint64_t len);
-struct reserve_info *chain_reserve_entry(struct reserve_info *first,
- struct reserve_info *list);
-struct reserve_info *add_reserve_entry(struct reserve_info *list,
- struct reserve_info *new);
-
-
-struct dt_info {
- unsigned int dtsflags;
- struct reserve_info *reservelist;
- uint32_t boot_cpuid_phys;
- struct node *dt; /* the device tree */
- const char *outname; /* filename being written to, "-" for stdout */
-};
-
-/* DTS version flags definitions */
-#define DTSF_V1 0x0001 /* /dts-v1/ */
-#define DTSF_PLUGIN 0x0002 /* /plugin/ */
-
-struct dt_info *build_dt_info(unsigned int dtsflags,
- struct reserve_info *reservelist,
- struct node *tree, uint32_t boot_cpuid_phys);
-void sort_tree(struct dt_info *dti);
-void generate_label_tree(struct dt_info *dti, char *name, bool allocph);
-void generate_fixups_tree(struct dt_info *dti, char *name);
-void generate_local_fixups_tree(struct dt_info *dti, char *name);
-
-/* Checks */
-
-void parse_checks_option(bool warn, bool error, const char *arg);
-void process_checks(bool force, struct dt_info *dti);
-
-/* Flattened trees */
-
-void dt_to_blob(FILE *f, struct dt_info *dti, int version);
-void dt_to_asm(FILE *f, struct dt_info *dti, int version);
-
-struct dt_info *dt_from_blob(const char *fname);
-
-/* Tree source */
-
-void dt_to_source(FILE *f, struct dt_info *dti);
-struct dt_info *dt_from_source(const char *f);
-
-/* FS trees */
-
-struct dt_info *dt_from_fs(const char *dirname);
-
-#endif /* DTC_H */
diff --git a/dtdiff b/dtdiff
deleted file mode 100644
index 5fa772b0ab62..000000000000
--- a/dtdiff
+++ /dev/null
@@ -1,38 +0,0 @@
-#! /bin/bash
-
-# This script uses the bash <(...) extension.
-# If you want to change this to work with a generic /bin/sh, make sure
-# you fix that.
-
-
-DTC=dtc
-
-source_and_sort () {
- DT="$1"
- if [ -d "$DT" ]; then
- IFORMAT=fs
- elif [ -f "$DT" ]; then
- case "$DT" in
- *.dts)
- IFORMAT=dts
- ;;
- *.dtb)
- IFORMAT=dtb
- ;;
- esac
- fi
-
- if [ -z "$IFORMAT" ]; then
- echo "Unrecognized format for $DT" >&2
- exit 2
- fi
-
- $DTC -I $IFORMAT -O dts -qq -f -s -o - "$DT"
-}
-
-if [ $# != 2 ]; then
- echo "Usage: dtdiff <device tree> <device tree>" >&2
- exit 1
-fi
-
-diff -u <(source_and_sort "$1") <(source_and_sort "$2")
diff --git a/libfdt/fdt.c b/fdt.c
index fd132367362e..fd132367362e 100644
--- a/libfdt/fdt.c
+++ b/fdt.c
diff --git a/libfdt/fdt.h b/fdt.h
index 74961f9026d1..74961f9026d1 100644
--- a/libfdt/fdt.h
+++ b/fdt.h
diff --git a/libfdt/fdt_addresses.c b/fdt_addresses.c
index eff4dbcc729d..eff4dbcc729d 100644
--- a/libfdt/fdt_addresses.c
+++ b/fdt_addresses.c
diff --git a/libfdt/fdt_empty_tree.c b/fdt_empty_tree.c
index f2ae9b77c285..f2ae9b77c285 100644
--- a/libfdt/fdt_empty_tree.c
+++ b/fdt_empty_tree.c
diff --git a/libfdt/fdt_overlay.c b/fdt_overlay.c
index bd81241e6658..bd81241e6658 100644
--- a/libfdt/fdt_overlay.c
+++ b/fdt_overlay.c
diff --git a/libfdt/fdt_ro.c b/fdt_ro.c
index ce17814b2b20..ce17814b2b20 100644
--- a/libfdt/fdt_ro.c
+++ b/fdt_ro.c
diff --git a/libfdt/fdt_rw.c b/fdt_rw.c
index 9b829051e444..9b829051e444 100644
--- a/libfdt/fdt_rw.c
+++ b/fdt_rw.c
diff --git a/libfdt/fdt_strerror.c b/fdt_strerror.c
index 9677a1887e57..9677a1887e57 100644
--- a/libfdt/fdt_strerror.c
+++ b/fdt_strerror.c
diff --git a/libfdt/fdt_sw.c b/fdt_sw.c
index 6d33cc29d022..6d33cc29d022 100644
--- a/libfdt/fdt_sw.c
+++ b/fdt_sw.c
diff --git a/libfdt/fdt_wip.c b/fdt_wip.c
index 534c1cbbb2f3..534c1cbbb2f3 100644
--- a/libfdt/fdt_wip.c
+++ b/fdt_wip.c
diff --git a/fdtdump.c b/fdtdump.c
deleted file mode 100644
index fa3b56130e0d..000000000000
--- a/fdtdump.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * fdtdump.c - Contributed by Pantelis Antoniou <pantelis.antoniou AT gmail.com>
- */
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <libfdt.h>
-#include <libfdt_env.h>
-#include <fdt.h>
-
-#include "util.h"
-
-#define FDT_MAGIC_SIZE 4
-#define MAX_VERSION 17
-
-#define ALIGN(x, a) (((x) + ((a) - 1)) & ~((a) - 1))
-#define PALIGN(p, a) ((void *)(ALIGN((unsigned long)(p), (a))))
-#define GET_CELL(p) (p += 4, *((const fdt32_t *)(p-4)))
-
-static const char *tagname(uint32_t tag)
-{
- static const char * const names[] = {
-#define TN(t) [t] = #t
- TN(FDT_BEGIN_NODE),
- TN(FDT_END_NODE),
- TN(FDT_PROP),
- TN(FDT_NOP),
- TN(FDT_END),
-#undef TN
- };
- if (tag < ARRAY_SIZE(names))
- if (names[tag])
- return names[tag];
- return "FDT_???";
-}
-
-#define dumpf(fmt, args...) \
- do { if (debug) printf("// " fmt, ## args); } while (0)
-
-static void dump_blob(void *blob, bool debug)
-{
- uintptr_t blob_off = (uintptr_t)blob;
- struct fdt_header *bph = blob;
- uint32_t off_mem_rsvmap = fdt32_to_cpu(bph->off_mem_rsvmap);
- uint32_t off_dt = fdt32_to_cpu(bph->off_dt_struct);
- uint32_t off_str = fdt32_to_cpu(bph->off_dt_strings);
- struct fdt_reserve_entry *p_rsvmap =
- (struct fdt_reserve_entry *)((char *)blob + off_mem_rsvmap);
- const char *p_struct = (const char *)blob + off_dt;
- const char *p_strings = (const char *)blob + off_str;
- uint32_t version = fdt32_to_cpu(bph->version);
- uint32_t totalsize = fdt32_to_cpu(bph->totalsize);
- uint32_t tag;
- const char *p, *s, *t;
- int depth, sz, shift;
- int i;
- uint64_t addr, size;
-
- depth = 0;
- shift = 4;
-
- printf("/dts-v1/;\n");
- printf("// magic:\t\t0x%x\n", fdt32_to_cpu(bph->magic));
- printf("// totalsize:\t\t0x%x (%d)\n", totalsize, totalsize);
- printf("// off_dt_struct:\t0x%x\n", off_dt);
- printf("// off_dt_strings:\t0x%x\n", off_str);
- printf("// off_mem_rsvmap:\t0x%x\n", off_mem_rsvmap);
- printf("// version:\t\t%d\n", version);
- printf("// last_comp_version:\t%d\n",
- fdt32_to_cpu(bph->last_comp_version));
- if (version >= 2)
- printf("// boot_cpuid_phys:\t0x%x\n",
- fdt32_to_cpu(bph->boot_cpuid_phys));
-
- if (version >= 3)
- printf("// size_dt_strings:\t0x%x\n",
- fdt32_to_cpu(bph->size_dt_strings));
- if (version >= 17)
- printf("// size_dt_struct:\t0x%x\n",
- fdt32_to_cpu(bph->size_dt_struct));
- printf("\n");
-
- for (i = 0; ; i++) {
- addr = fdt64_to_cpu(p_rsvmap[i].address);
- size = fdt64_to_cpu(p_rsvmap[i].size);
- if (addr == 0 && size == 0)
- break;
-
- printf("/memreserve/ %#llx %#llx;\n",
- (unsigned long long)addr, (unsigned long long)size);
- }
-
- p = p_struct;
- while ((tag = fdt32_to_cpu(GET_CELL(p))) != FDT_END) {
-
- dumpf("%04zx: tag: 0x%08x (%s)\n",
- (uintptr_t)p - blob_off - 4, tag, tagname(tag));
-
- if (tag == FDT_BEGIN_NODE) {
- s = p;
- p = PALIGN(p + strlen(s) + 1, 4);
-
- if (*s == '\0')
- s = "/";
-
- printf("%*s%s {\n", depth * shift, "", s);
-
- depth++;
- continue;
- }
-
- if (tag == FDT_END_NODE) {
- depth--;
-
- printf("%*s};\n", depth * shift, "");
- continue;
- }
-
- if (tag == FDT_NOP) {
- printf("%*s// [NOP]\n", depth * shift, "");
- continue;
- }
-
- if (tag != FDT_PROP) {
- fprintf(stderr, "%*s ** Unknown tag 0x%08x\n", depth * shift, "", tag);
- break;
- }
- sz = fdt32_to_cpu(GET_CELL(p));
- s = p_strings + fdt32_to_cpu(GET_CELL(p));
- if (version < 16 && sz >= 8)
- p = PALIGN(p, 8);
- t = p;
-
- p = PALIGN(p + sz, 4);
-
- dumpf("%04zx: string: %s\n", (uintptr_t)s - blob_off, s);
- dumpf("%04zx: value\n", (uintptr_t)t - blob_off);
- printf("%*s%s", depth * shift, "", s);
- utilfdt_print_data(t, sz);
- printf(";\n");
- }
-}
-
-/* Usage related data. */
-static const char usage_synopsis[] = "fdtdump [options] <file>";
-static const char usage_short_opts[] = "ds" USAGE_COMMON_SHORT_OPTS;
-static struct option const usage_long_opts[] = {
- {"debug", no_argument, NULL, 'd'},
- {"scan", no_argument, NULL, 's'},
- USAGE_COMMON_LONG_OPTS
-};
-static const char * const usage_opts_help[] = {
- "Dump debug information while decoding the file",
- "Scan for an embedded fdt in file",
- USAGE_COMMON_OPTS_HELP
-};
-
-static bool valid_header(char *p, off_t len)
-{
- if (len < sizeof(struct fdt_header) ||
- fdt_magic(p) != FDT_MAGIC ||
- fdt_version(p) > MAX_VERSION ||
- fdt_last_comp_version(p) > MAX_VERSION ||
- fdt_totalsize(p) >= len ||
- fdt_off_dt_struct(p) >= len ||
- fdt_off_dt_strings(p) >= len)
- return 0;
- else
- return 1;
-}
-
-int main(int argc, char *argv[])
-{
- int opt;
- const char *file;
- char *buf;
- bool debug = false;
- bool scan = false;
- off_t len;
-
- fprintf(stderr, "\n"
-"**** fdtdump is a low-level debugging tool, not meant for general use.\n"
-"**** If you want to decompile a dtb, you probably want\n"
-"**** dtc -I dtb -O dts <filename>\n\n"
- );
- while ((opt = util_getopt_long()) != EOF) {
- switch (opt) {
- case_USAGE_COMMON_FLAGS
-
- case 'd':
- debug = true;
- break;
- case 's':
- scan = true;
- break;
- }
- }
- if (optind != argc - 1)
- usage("missing input filename");
- file = argv[optind];
-
- buf = utilfdt_read_len(file, &len);
- if (!buf)
- die("could not read: %s\n", file);
-
- /* try and locate an embedded fdt in a bigger blob */
- if (scan) {
- unsigned char smagic[FDT_MAGIC_SIZE];
- char *p = buf;
- char *endp = buf + len;
-
- fdt_set_magic(smagic, FDT_MAGIC);
-
- /* poor man's memmem */
- while ((endp - p) >= FDT_MAGIC_SIZE) {
- p = memchr(p, smagic[0], endp - p - FDT_MAGIC_SIZE);
- if (!p)
- break;
- if (fdt_magic(p) == FDT_MAGIC) {
- /* try and validate the main struct */
- off_t this_len = endp - p;
- if (valid_header(p, this_len))
- break;
- if (debug)
- printf("%s: skipping fdt magic at offset %#zx\n",
- file, p - buf);
- }
- ++p;
- }
- if (!p || endp - p < sizeof(struct fdt_header))
- die("%s: could not locate fdt magic\n", file);
- printf("%s: found fdt at offset %#zx\n", file, p - buf);
- buf = p;
- } else if (!valid_header(buf, len))
- die("%s: header is not valid\n", file);
-
- dump_blob(buf, debug);
-
- return 0;
-}
diff --git a/fdtget.c b/fdtget.c
deleted file mode 100644
index 6cc5242f102b..000000000000
--- a/fdtget.c
+++ /dev/null
@@ -1,385 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
- *
- * Portions from U-Boot cmd_fdt.c (C) Copyright 2007
- * Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com
- * Based on code written by:
- * Pantelis Antoniou <pantelis.antoniou@gmail.com> and
- * Matthew McClintock <msm@freescale.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <assert.h>
-#include <ctype.h>
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <libfdt.h>
-
-#include "util.h"
-
-enum display_mode {
- MODE_SHOW_VALUE, /* show values for node properties */
- MODE_LIST_PROPS, /* list the properties for a node */
- MODE_LIST_SUBNODES, /* list the subnodes of a node */
-};
-
-/* Holds information which controls our output and options */
-struct display_info {
- int type; /* data type (s/i/u/x or 0 for default) */
- int size; /* data size (1/2/4) */
- enum display_mode mode; /* display mode that we are using */
- const char *default_val; /* default value if node/property not found */
-};
-
-static void report_error(const char *where, int err)
-{
- fprintf(stderr, "Error at '%s': %s\n", where, fdt_strerror(err));
-}
-
-/**
- * Shows a list of cells in the requested format
- *
- * @param disp Display information / options
- * @param data Data to display
- * @param len Maximum length of buffer
- * @param size Data size to use for display (e.g. 4 for 32-bit)
- * @return 0 if ok, -1 on error
- */
-static int show_cell_list(struct display_info *disp, const char *data, int len,
- int size)
-{
- const uint8_t *p = (const uint8_t *)data;
- char fmt[3];
- int value;
- int i;
-
- fmt[0] = '%';
- fmt[1] = disp->type ? disp->type : 'd';
- fmt[2] = '\0';
- for (i = 0; i < len; i += size, p += size) {
- if (i)
- printf(" ");
- value = size == 4 ? fdt32_to_cpu(*(const fdt32_t *)p) :
- size == 2 ? (*p << 8) | p[1] : *p;
- printf(fmt, value);
- }
-
- return 0;
-}
-
-/**
- * Displays data of a given length according to selected options
- *
- * If a specific data type is provided in disp, then this is used. Otherwise
- * we try to guess the data type / size from the contents.
- *
- * @param disp Display information / options
- * @param data Data to display
- * @param len Maximum length of buffer
- * @return 0 if ok, -1 if data does not match format
- */
-static int show_data(struct display_info *disp, const char *data, int len)
-{
- int size;
- const char *s;
- int is_string;
-
- /* no data, don't print */
- if (len == 0)
- return 0;
-
- is_string = (disp->type) == 's' ||
- (!disp->type && util_is_printable_string(data, len));
- if (is_string) {
- if (data[len - 1] != '\0') {
- fprintf(stderr, "Unterminated string\n");
- return -1;
- }
- for (s = data; s - data < len; s += strlen(s) + 1) {
- if (s != data)
- printf(" ");
- printf("%s", (const char *)s);
- }
- return 0;
- }
- size = disp->size;
- if (size == -1) {
- size = (len % 4) == 0 ? 4 : 1;
- } else if (len % size) {
- fprintf(stderr, "Property length must be a multiple of "
- "selected data size\n");
- return -1;
- }
-
- return show_cell_list(disp, data, len, size);
-}
-
-/**
- * List all properties in a node, one per line.
- *
- * @param blob FDT blob
- * @param node Node to display
- * @return 0 if ok, or FDT_ERR... if not.
- */
-static int list_properties(const void *blob, int node)
-{
- const struct fdt_property *data;
- const char *name;
- int prop;
-
- prop = fdt_first_property_offset(blob, node);
- do {
- /* Stop silently when there are no more properties */
- if (prop < 0)
- return prop == -FDT_ERR_NOTFOUND ? 0 : prop;
- data = fdt_get_property_by_offset(blob, prop, NULL);
- name = fdt_string(blob, fdt32_to_cpu(data->nameoff));
- if (name)
- puts(name);
- prop = fdt_next_property_offset(blob, prop);
- } while (1);
-}
-
-#define MAX_LEVEL 32 /* how deeply nested we will go */
-
-/**
- * List all subnodes in a node, one per line
- *
- * @param blob FDT blob
- * @param node Node to display
- * @return 0 if ok, or FDT_ERR... if not.
- */
-static int list_subnodes(const void *blob, int node)
-{
- int nextoffset; /* next node offset from libfdt */
- uint32_t tag; /* current tag */
- int level = 0; /* keep track of nesting level */
- const char *pathp;
- int depth = 1; /* the assumed depth of this node */
-
- while (level >= 0) {
- tag = fdt_next_tag(blob, node, &nextoffset);
- switch (tag) {
- case FDT_BEGIN_NODE:
- pathp = fdt_get_name(blob, node, NULL);
- if (level <= depth) {
- if (pathp == NULL)
- pathp = "/* NULL pointer error */";
- if (*pathp == '\0')
- pathp = "/"; /* root is nameless */
- if (level == 1)
- puts(pathp);
- }
- level++;
- if (level >= MAX_LEVEL) {
- printf("Nested too deep, aborting.\n");
- return 1;
- }
- break;
- case FDT_END_NODE:
- level--;
- if (level == 0)
- level = -1; /* exit the loop */
- break;
- case FDT_END:
- return 1;
- case FDT_PROP:
- break;
- default:
- if (level <= depth)
- printf("Unknown tag 0x%08X\n", tag);
- return 1;
- }
- node = nextoffset;
- }
- return 0;
-}
-
-/**
- * Show the data for a given node (and perhaps property) according to the
- * display option provided.
- *
- * @param blob FDT blob
- * @param disp Display information / options
- * @param node Node to display
- * @param property Name of property to display, or NULL if none
- * @return 0 if ok, -ve on error
- */
-static int show_data_for_item(const void *blob, struct display_info *disp,
- int node, const char *property)
-{
- const void *value = NULL;
- int len, err = 0;
-
- switch (disp->mode) {
- case MODE_LIST_PROPS:
- err = list_properties(blob, node);
- break;
-
- case MODE_LIST_SUBNODES:
- err = list_subnodes(blob, node);
- break;
-
- default:
- assert(property);
- value = fdt_getprop(blob, node, property, &len);
- if (value) {
- if (show_data(disp, value, len))
- err = -1;
- else
- printf("\n");
- } else if (disp->default_val) {
- puts(disp->default_val);
- } else {
- report_error(property, len);
- err = -1;
- }
- break;
- }
-
- return err;
-}
-
-/**
- * Run the main fdtget operation, given a filename and valid arguments
- *
- * @param disp Display information / options
- * @param filename Filename of blob file
- * @param arg List of arguments to process
- * @param arg_count Number of arguments
- * @return 0 if ok, -ve on error
- */
-static int do_fdtget(struct display_info *disp, const char *filename,
- char **arg, int arg_count, int args_per_step)
-{
- char *blob;
- const char *prop;
- int i, node;
-
- blob = utilfdt_read(filename);
- if (!blob)
- return -1;
-
- for (i = 0; i + args_per_step <= arg_count; i += args_per_step) {
- node = fdt_path_offset(blob, arg[i]);
- if (node < 0) {
- if (disp->default_val) {
- puts(disp->default_val);
- continue;
- } else {
- report_error(arg[i], node);
- free(blob);
- return -1;
- }
- }
- prop = args_per_step == 1 ? NULL : arg[i + 1];
-
- if (show_data_for_item(blob, disp, node, prop)) {
- free(blob);
- return -1;
- }
- }
-
- free(blob);
-
- return 0;
-}
-
-/* Usage related data. */
-static const char usage_synopsis[] =
- "read values from device tree\n"
- " fdtget <options> <dt file> [<node> <property>]...\n"
- " fdtget -p <options> <dt file> [<node> ]...\n"
- "\n"
- "Each value is printed on a new line.\n"
- USAGE_TYPE_MSG;
-static const char usage_short_opts[] = "t:pld:" USAGE_COMMON_SHORT_OPTS;
-static struct option const usage_long_opts[] = {
- {"type", a_argument, NULL, 't'},
- {"properties", no_argument, NULL, 'p'},
- {"list", no_argument, NULL, 'l'},
- {"default", a_argument, NULL, 'd'},
- USAGE_COMMON_LONG_OPTS,
-};
-static const char * const usage_opts_help[] = {
- "Type of data",
- "List properties for each node",
- "List subnodes for each node",
- "Default value to display when the property is missing",
- USAGE_COMMON_OPTS_HELP
-};
-
-int main(int argc, char *argv[])
-{
- int opt;
- char *filename = NULL;
- struct display_info disp;
- int args_per_step = 2;
-
- /* set defaults */
- memset(&disp, '\0', sizeof(disp));
- disp.size = -1;
- disp.mode = MODE_SHOW_VALUE;
- while ((opt = util_getopt_long()) != EOF) {
- switch (opt) {
- case_USAGE_COMMON_FLAGS
-
- case 't':
- if (utilfdt_decode_type(optarg, &disp.type,
- &disp.size))
- usage("invalid type string");
- break;
-
- case 'p':
- disp.mode = MODE_LIST_PROPS;
- args_per_step = 1;
- break;
-
- case 'l':
- disp.mode = MODE_LIST_SUBNODES;
- args_per_step = 1;
- break;
-
- case 'd':
- disp.default_val = optarg;
- break;
- }
- }
-
- if (optind < argc)
- filename = argv[optind++];
- if (!filename)
- usage("missing filename");
-
- argv += optind;
- argc -= optind;
-
- /* Allow no arguments, and silently succeed */
- if (!argc)
- return 0;
-
- /* Check for node, property arguments */
- if (args_per_step == 2 && (argc % 2))
- usage("must have an even number of arguments");
-
- if (do_fdtget(&disp, filename, argv, argc, args_per_step))
- return 1;
- return 0;
-}
diff --git a/fdtoverlay.c b/fdtoverlay.c
deleted file mode 100644
index 62a942d80dda..000000000000
--- a/fdtoverlay.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 2017 Konsulko Group Inc. All rights reserved.
- *
- * Author:
- * Pantelis Antoniou <pantelis.antoniou@konsulko.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <assert.h>
-#include <ctype.h>
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <inttypes.h>
-
-#include <libfdt.h>
-
-#include "util.h"
-
-/* Usage related data. */
-static const char usage_synopsis[] =
- "apply a number of overlays to a base blob\n"
- " fdtoverlay <options> [<overlay.dtbo> [<overlay.dtbo>]]\n"
- "\n"
- USAGE_TYPE_MSG;
-static const char usage_short_opts[] = "i:o:v" USAGE_COMMON_SHORT_OPTS;
-static struct option const usage_long_opts[] = {
- {"input", required_argument, NULL, 'i'},
- {"output", required_argument, NULL, 'o'},
- {"verbose", no_argument, NULL, 'v'},
- USAGE_COMMON_LONG_OPTS,
-};
-static const char * const usage_opts_help[] = {
- "Input base DT blob",
- "Output DT blob",
- "Verbose messages",
- USAGE_COMMON_OPTS_HELP
-};
-
-int verbose = 0;
-
-static int do_fdtoverlay(const char *input_filename,
- const char *output_filename,
- int argc, char *argv[])
-{
- char *blob = NULL;
- char **ovblob = NULL;
- off_t blob_len, ov_len, total_len;
- int i, ret = -1;
-
- blob = utilfdt_read_len(input_filename, &blob_len);
- if (!blob) {
- fprintf(stderr, "\nFailed to read base blob %s\n",
- input_filename);
- goto out_err;
- }
- if (fdt_totalsize(blob) > blob_len) {
- fprintf(stderr,
- "\nBase blob is incomplete (%lu / %" PRIu32 " bytes read)\n",
- (unsigned long)blob_len, fdt_totalsize(blob));
- goto out_err;
- }
- ret = 0;
-
- /* allocate blob pointer array */
- ovblob = malloc(sizeof(*ovblob) * argc);
- memset(ovblob, 0, sizeof(*ovblob) * argc);
-
- /* read and keep track of the overlay blobs */
- total_len = 0;
- for (i = 0; i < argc; i++) {
- ovblob[i] = utilfdt_read_len(argv[i], &ov_len);
- if (!ovblob[i]) {
- fprintf(stderr, "\nFailed to read overlay %s\n",
- argv[i]);
- goto out_err;
- }
- total_len += ov_len;
- }
-
- /* grow the blob to worst case */
- blob_len = fdt_totalsize(blob) + total_len;
- blob = xrealloc(blob, blob_len);
- fdt_open_into(blob, blob, blob_len);
-
- /* apply the overlays in sequence */
- for (i = 0; i < argc; i++) {
- ret = fdt_overlay_apply(blob, ovblob[i]);
- if (ret) {
- fprintf(stderr, "\nFailed to apply %s (%d)\n",
- argv[i], ret);
- goto out_err;
- }
- }
-
- fdt_pack(blob);
- ret = utilfdt_write(output_filename, blob);
- if (ret)
- fprintf(stderr, "\nFailed to write output blob %s\n",
- output_filename);
-
-out_err:
- if (ovblob) {
- for (i = 0; i < argc; i++) {
- if (ovblob[i])
- free(ovblob[i]);
- }
- free(ovblob);
- }
- free(blob);
-
- return ret;
-}
-
-int main(int argc, char *argv[])
-{
- int opt, i;
- char *input_filename = NULL;
- char *output_filename = NULL;
-
- while ((opt = util_getopt_long()) != EOF) {
- switch (opt) {
- case_USAGE_COMMON_FLAGS
-
- case 'i':
- input_filename = optarg;
- break;
- case 'o':
- output_filename = optarg;
- break;
- case 'v':
- verbose = 1;
- break;
- }
- }
-
- if (!input_filename)
- usage("missing input file");
-
- if (!output_filename)
- usage("missing output file");
-
- argv += optind;
- argc -= optind;
-
- if (argc <= 0)
- usage("missing overlay file(s)");
-
- if (verbose) {
- printf("input = %s\n", input_filename);
- printf("output = %s\n", output_filename);
- for (i = 0; i < argc; i++)
- printf("overlay[%d] = %s\n", i, argv[i]);
- }
-
- if (do_fdtoverlay(input_filename, output_filename, argc, argv))
- return 1;
-
- return 0;
-}
diff --git a/fdtput.c b/fdtput.c
deleted file mode 100644
index 72a0058761d5..000000000000
--- a/fdtput.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <assert.h>
-#include <ctype.h>
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <libfdt.h>
-
-#include "util.h"
-
-/* These are the operations we support */
-enum oper_type {
- OPER_WRITE_PROP, /* Write a property in a node */
- OPER_CREATE_NODE, /* Create a new node */
- OPER_REMOVE_NODE, /* Delete a node */
- OPER_DELETE_PROP, /* Delete a property in a node */
-};
-
-struct display_info {
- enum oper_type oper; /* operation to perform */
- int type; /* data type (s/i/u/x or 0 for default) */
- int size; /* data size (1/2/4) */
- int verbose; /* verbose output */
- int auto_path; /* automatically create all path components */
-};
-
-
-/**
- * Report an error with a particular node.
- *
- * @param name Node name to report error on
- * @param namelen Length of node name, or -1 to use entire string
- * @param err Error number to report (-FDT_ERR_...)
- */
-static void report_error(const char *name, int namelen, int err)
-{
- if (namelen == -1)
- namelen = strlen(name);
- fprintf(stderr, "Error at '%1.*s': %s\n", namelen, name,
- fdt_strerror(err));
-}
-
-/**
- * Encode a series of arguments in a property value.
- *
- * @param disp Display information / options
- * @param arg List of arguments from command line
- * @param arg_count Number of arguments (may be 0)
- * @param valuep Returns buffer containing value
- * @param value_len Returns length of value encoded
- */
-static int encode_value(struct display_info *disp, char **arg, int arg_count,
- char **valuep, int *value_len)
-{
- char *value = NULL; /* holding area for value */
- int value_size = 0; /* size of holding area */
- char *ptr; /* pointer to current value position */
- int len; /* length of this cell/string/byte */
- int ival;
- int upto; /* the number of bytes we have written to buf */
- char fmt[3];
-
- upto = 0;
-
- if (disp->verbose)
- fprintf(stderr, "Decoding value:\n");
-
- fmt[0] = '%';
- fmt[1] = disp->type ? disp->type : 'd';
- fmt[2] = '\0';
- for (; arg_count > 0; arg++, arg_count--, upto += len) {
- /* assume integer unless told otherwise */
- if (disp->type == 's')
- len = strlen(*arg) + 1;
- else
- len = disp->size == -1 ? 4 : disp->size;
-
- /* enlarge our value buffer by a suitable margin if needed */
- if (upto + len > value_size) {
- value_size = (upto + len) + 500;
- value = xrealloc(value, value_size);
- }
-
- ptr = value + upto;
- if (disp->type == 's') {
- memcpy(ptr, *arg, len);
- if (disp->verbose)
- fprintf(stderr, "\tstring: '%s'\n", ptr);
- } else {
- fdt32_t *iptr = (fdt32_t *)ptr;
- sscanf(*arg, fmt, &ival);
- if (len == 4)
- *iptr = cpu_to_fdt32(ival);
- else
- *ptr = (uint8_t)ival;
- if (disp->verbose) {
- fprintf(stderr, "\t%s: %d\n",
- disp->size == 1 ? "byte" :
- disp->size == 2 ? "short" : "int",
- ival);
- }
- }
- }
- *value_len = upto;
- *valuep = value;
- if (disp->verbose)
- fprintf(stderr, "Value size %d\n", upto);
- return 0;
-}
-
-#define ALIGN(x) (((x) + (FDT_TAGSIZE) - 1) & ~((FDT_TAGSIZE) - 1))
-
-static char *realloc_fdt(char *fdt, int delta)
-{
- int new_sz = fdt_totalsize(fdt) + delta;
- fdt = xrealloc(fdt, new_sz);
- fdt_open_into(fdt, fdt, new_sz);
- return fdt;
-}
-
-static char *realloc_node(char *fdt, const char *name)
-{
- int delta;
- /* FDT_BEGIN_NODE, node name in off_struct and FDT_END_NODE */
- delta = sizeof(struct fdt_node_header) + ALIGN(strlen(name) + 1)
- + FDT_TAGSIZE;
- return realloc_fdt(fdt, delta);
-}
-
-static char *realloc_property(char *fdt, int nodeoffset,
- const char *name, int newlen)
-{
- int delta = 0;
- int oldlen = 0;
-
- if (!fdt_get_property(fdt, nodeoffset, name, &oldlen))
- /* strings + property header */
- delta = sizeof(struct fdt_property) + strlen(name) + 1;
-
- if (newlen > oldlen)
- /* actual value in off_struct */
- delta += ALIGN(newlen) - ALIGN(oldlen);
-
- return realloc_fdt(fdt, delta);
-}
-
-static int store_key_value(char **blob, const char *node_name,
- const char *property, const char *buf, int len)
-{
- int node;
- int err;
-
- node = fdt_path_offset(*blob, node_name);
- if (node < 0) {
- report_error(node_name, -1, node);
- return -1;
- }
-
- err = fdt_setprop(*blob, node, property, buf, len);
- if (err == -FDT_ERR_NOSPACE) {
- *blob = realloc_property(*blob, node, property, len);
- err = fdt_setprop(*blob, node, property, buf, len);
- }
- if (err) {
- report_error(property, -1, err);
- return -1;
- }
- return 0;
-}
-
-/**
- * Create paths as needed for all components of a path
- *
- * Any components of the path that do not exist are created. Errors are
- * reported.
- *
- * @param blob FDT blob to write into
- * @param in_path Path to process
- * @return 0 if ok, -1 on error
- */
-static int create_paths(char **blob, const char *in_path)
-{
- const char *path = in_path;
- const char *sep;
- int node, offset = 0;
-
- /* skip leading '/' */
- while (*path == '/')
- path++;
-
- for (sep = path; *sep; path = sep + 1, offset = node) {
- /* equivalent to strchrnul(), but it requires _GNU_SOURCE */
- sep = strchr(path, '/');
- if (!sep)
- sep = path + strlen(path);
-
- node = fdt_subnode_offset_namelen(*blob, offset, path,
- sep - path);
- if (node == -FDT_ERR_NOTFOUND) {
- *blob = realloc_node(*blob, path);
- node = fdt_add_subnode_namelen(*blob, offset, path,
- sep - path);
- }
- if (node < 0) {
- report_error(path, sep - path, node);
- return -1;
- }
- }
-
- return 0;
-}
-
-/**
- * Create a new node in the fdt.
- *
- * This will overwrite the node_name string. Any error is reported.
- *
- * TODO: Perhaps create fdt_path_offset_namelen() so we don't need to do this.
- *
- * @param blob FDT blob to write into
- * @param node_name Name of node to create
- * @return new node offset if found, or -1 on failure
- */
-static int create_node(char **blob, const char *node_name)
-{
- int node = 0;
- char *p;
-
- p = strrchr(node_name, '/');
- if (!p) {
- report_error(node_name, -1, -FDT_ERR_BADPATH);
- return -1;
- }
- *p = '\0';
-
- *blob = realloc_node(*blob, p + 1);
-
- if (p > node_name) {
- node = fdt_path_offset(*blob, node_name);
- if (node < 0) {
- report_error(node_name, -1, node);
- return -1;
- }
- }
-
- node = fdt_add_subnode(*blob, node, p + 1);
- if (node < 0) {
- report_error(p + 1, -1, node);
- return -1;
- }
-
- return 0;
-}
-
-/**
- * Delete a property of a node in the fdt.
- *
- * @param blob FDT blob to write into
- * @param node_name Path to node containing the property to delete
- * @param prop_name Name of property to delete
- * @return 0 on success, or -1 on failure
- */
-static int delete_prop(char *blob, const char *node_name, const char *prop_name)
-{
- int node = 0;
-
- node = fdt_path_offset(blob, node_name);
- if (node < 0) {
- report_error(node_name, -1, node);
- return -1;
- }
-
- node = fdt_delprop(blob, node, prop_name);
- if (node < 0) {
- report_error(node_name, -1, node);
- return -1;
- }
-
- return 0;
-}
-
-/**
- * Delete a node in the fdt.
- *
- * @param blob FDT blob to write into
- * @param node_name Name of node to delete
- * @return 0 on success, or -1 on failure
- */
-static int delete_node(char *blob, const char *node_name)
-{
- int node = 0;
-
- node = fdt_path_offset(blob, node_name);
- if (node < 0) {
- report_error(node_name, -1, node);
- return -1;
- }
-
- node = fdt_del_node(blob, node);
- if (node < 0) {
- report_error(node_name, -1, node);
- return -1;
- }
-
- return 0;
-}
-
-static int do_fdtput(struct display_info *disp, const char *filename,
- char **arg, int arg_count)
-{
- char *value = NULL;
- char *blob;
- char *node;
- int len, ret = 0;
-
- blob = utilfdt_read(filename);
- if (!blob)
- return -1;
-
- switch (disp->oper) {
- case OPER_WRITE_PROP:
- /*
- * Convert the arguments into a single binary value, then
- * store them into the property.
- */
- assert(arg_count >= 2);
- if (disp->auto_path && create_paths(&blob, *arg))
- return -1;
- if (encode_value(disp, arg + 2, arg_count - 2, &value, &len) ||
- store_key_value(&blob, *arg, arg[1], value, len))
- ret = -1;
- break;
- case OPER_CREATE_NODE:
- for (; ret >= 0 && arg_count--; arg++) {
- if (disp->auto_path)
- ret = create_paths(&blob, *arg);
- else
- ret = create_node(&blob, *arg);
- }
- break;
- case OPER_REMOVE_NODE:
- for (; ret >= 0 && arg_count--; arg++)
- ret = delete_node(blob, *arg);
- break;
- case OPER_DELETE_PROP:
- node = *arg;
- for (arg++; ret >= 0 && arg_count-- > 1; arg++)
- ret = delete_prop(blob, node, *arg);
- break;
- }
- if (ret >= 0) {
- fdt_pack(blob);
- ret = utilfdt_write(filename, blob);
- }
-
- free(blob);
-
- if (value) {
- free(value);
- }
-
- return ret;
-}
-
-/* Usage related data. */
-static const char usage_synopsis[] =
- "write a property value to a device tree\n"
- " fdtput <options> <dt file> <node> <property> [<value>...]\n"
- " fdtput -c <options> <dt file> [<node>...]\n"
- " fdtput -r <options> <dt file> [<node>...]\n"
- " fdtput -d <options> <dt file> <node> [<property>...]\n"
- "\n"
- "The command line arguments are joined together into a single value.\n"
- USAGE_TYPE_MSG;
-static const char usage_short_opts[] = "crdpt:v" USAGE_COMMON_SHORT_OPTS;
-static struct option const usage_long_opts[] = {
- {"create", no_argument, NULL, 'c'},
- {"remove", no_argument, NULL, 'r'},
- {"delete", no_argument, NULL, 'd'},
- {"auto-path", no_argument, NULL, 'p'},
- {"type", a_argument, NULL, 't'},
- {"verbose", no_argument, NULL, 'v'},
- USAGE_COMMON_LONG_OPTS,
-};
-static const char * const usage_opts_help[] = {
- "Create nodes if they don't already exist",
- "Delete nodes (and any subnodes) if they already exist",
- "Delete properties if they already exist",
- "Automatically create nodes as needed for the node path",
- "Type of data",
- "Display each value decoded from command line",
- USAGE_COMMON_OPTS_HELP
-};
-
-int main(int argc, char *argv[])
-{
- int opt;
- struct display_info disp;
- char *filename = NULL;
-
- memset(&disp, '\0', sizeof(disp));
- disp.size = -1;
- disp.oper = OPER_WRITE_PROP;
- while ((opt = util_getopt_long()) != EOF) {
- /*
- * TODO: add options to:
- * - rename node
- * - pack fdt before writing
- * - set amount of free space when writing
- */
- switch (opt) {
- case_USAGE_COMMON_FLAGS
-
- case 'c':
- disp.oper = OPER_CREATE_NODE;
- break;
- case 'r':
- disp.oper = OPER_REMOVE_NODE;
- break;
- case 'd':
- disp.oper = OPER_DELETE_PROP;
- break;
- case 'p':
- disp.auto_path = 1;
- break;
- case 't':
- if (utilfdt_decode_type(optarg, &disp.type,
- &disp.size))
- usage("Invalid type string");
- break;
-
- case 'v':
- disp.verbose = 1;
- break;
- }
- }
-
- if (optind < argc)
- filename = argv[optind++];
- if (!filename)
- usage("missing filename");
-
- argv += optind;
- argc -= optind;
-
- if (disp.oper == OPER_WRITE_PROP) {
- if (argc < 1)
- usage("missing node");
- if (argc < 2)
- usage("missing property");
- }
-
- if (disp.oper == OPER_DELETE_PROP)
- if (argc < 1)
- usage("missing node");
-
- if (do_fdtput(&disp, filename, argv, argc))
- return 1;
- return 0;
-}
diff --git a/flattree.c b/flattree.c
deleted file mode 100644
index 8d268fb785db..000000000000
--- a/flattree.c
+++ /dev/null
@@ -1,940 +0,0 @@
-/*
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "dtc.h"
-#include "srcpos.h"
-
-#define FTF_FULLPATH 0x1
-#define FTF_VARALIGN 0x2
-#define FTF_NAMEPROPS 0x4
-#define FTF_BOOTCPUID 0x8
-#define FTF_STRTABSIZE 0x10
-#define FTF_STRUCTSIZE 0x20
-#define FTF_NOPS 0x40
-
-static struct version_info {
- int version;
- int last_comp_version;
- int hdr_size;
- int flags;
-} version_table[] = {
- {1, 1, FDT_V1_SIZE,
- FTF_FULLPATH|FTF_VARALIGN|FTF_NAMEPROPS},
- {2, 1, FDT_V2_SIZE,
- FTF_FULLPATH|FTF_VARALIGN|FTF_NAMEPROPS|FTF_BOOTCPUID},
- {3, 1, FDT_V3_SIZE,
- FTF_FULLPATH|FTF_VARALIGN|FTF_NAMEPROPS|FTF_BOOTCPUID|FTF_STRTABSIZE},
- {16, 16, FDT_V3_SIZE,
- FTF_BOOTCPUID|FTF_STRTABSIZE|FTF_NOPS},
- {17, 16, FDT_V17_SIZE,
- FTF_BOOTCPUID|FTF_STRTABSIZE|FTF_STRUCTSIZE|FTF_NOPS},
-};
-
-struct emitter {
- void (*cell)(void *, cell_t);
- void (*string)(void *, const char *, int);
- void (*align)(void *, int);
- void (*data)(void *, struct data);
- void (*beginnode)(void *, struct label *labels);
- void (*endnode)(void *, struct label *labels);
- void (*property)(void *, struct label *labels);
-};
-
-static void bin_emit_cell(void *e, cell_t val)
-{
- struct data *dtbuf = e;
-
- *dtbuf = data_append_cell(*dtbuf, val);
-}
-
-static void bin_emit_string(void *e, const char *str, int len)
-{
- struct data *dtbuf = e;
-
- if (len == 0)
- len = strlen(str);
-
- *dtbuf = data_append_data(*dtbuf, str, len);
- *dtbuf = data_append_byte(*dtbuf, '\0');
-}
-
-static void bin_emit_align(void *e, int a)
-{
- struct data *dtbuf = e;
-
- *dtbuf = data_append_align(*dtbuf, a);
-}
-
-static void bin_emit_data(void *e, struct data d)
-{
- struct data *dtbuf = e;
-
- *dtbuf = data_append_data(*dtbuf, d.val, d.len);
-}
-
-static void bin_emit_beginnode(void *e, struct label *labels)
-{
- bin_emit_cell(e, FDT_BEGIN_NODE);
-}
-
-static void bin_emit_endnode(void *e, struct label *labels)
-{
- bin_emit_cell(e, FDT_END_NODE);
-}
-
-static void bin_emit_property(void *e, struct label *labels)
-{
- bin_emit_cell(e, FDT_PROP);
-}
-
-static struct emitter bin_emitter = {
- .cell = bin_emit_cell,
- .string = bin_emit_string,
- .align = bin_emit_align,
- .data = bin_emit_data,
- .beginnode = bin_emit_beginnode,
- .endnode = bin_emit_endnode,
- .property = bin_emit_property,
-};
-
-static void emit_label(FILE *f, const char *prefix, const char *label)
-{
- fprintf(f, "\t.globl\t%s_%s\n", prefix, label);
- fprintf(f, "%s_%s:\n", prefix, label);
- fprintf(f, "_%s_%s:\n", prefix, label);
-}
-
-static void emit_offset_label(FILE *f, const char *label, int offset)
-{
- fprintf(f, "\t.globl\t%s\n", label);
- fprintf(f, "%s\t= . + %d\n", label, offset);
-}
-
-#define ASM_EMIT_BELONG(f, fmt, ...) \
- { \
- fprintf((f), "\t.byte\t((" fmt ") >> 24) & 0xff\n", __VA_ARGS__); \
- fprintf((f), "\t.byte\t((" fmt ") >> 16) & 0xff\n", __VA_ARGS__); \
- fprintf((f), "\t.byte\t((" fmt ") >> 8) & 0xff\n", __VA_ARGS__); \
- fprintf((f), "\t.byte\t(" fmt ") & 0xff\n", __VA_ARGS__); \
- }
-
-static void asm_emit_cell(void *e, cell_t val)
-{
- FILE *f = e;
-
- fprintf(f, "\t.byte 0x%02x; .byte 0x%02x; .byte 0x%02x; .byte 0x%02x\n",
- (val >> 24) & 0xff, (val >> 16) & 0xff,
- (val >> 8) & 0xff, val & 0xff);
-}
-
-static void asm_emit_string(void *e, const char *str, int len)
-{
- FILE *f = e;
-
- if (len != 0)
- fprintf(f, "\t.string\t\"%.*s\"\n", len, str);
- else
- fprintf(f, "\t.string\t\"%s\"\n", str);
-}
-
-static void asm_emit_align(void *e, int a)
-{
- FILE *f = e;
-
- fprintf(f, "\t.balign\t%d, 0\n", a);
-}
-
-static void asm_emit_data(void *e, struct data d)
-{
- FILE *f = e;
- int off = 0;
- struct marker *m = d.markers;
-
- for_each_marker_of_type(m, LABEL)
- emit_offset_label(f, m->ref, m->offset);
-
- while ((d.len - off) >= sizeof(uint32_t)) {
- asm_emit_cell(e, fdt32_to_cpu(*((fdt32_t *)(d.val+off))));
- off += sizeof(uint32_t);
- }
-
- while ((d.len - off) >= 1) {
- fprintf(f, "\t.byte\t0x%hhx\n", d.val[off]);
- off += 1;
- }
-
- assert(off == d.len);
-}
-
-static void asm_emit_beginnode(void *e, struct label *labels)
-{
- FILE *f = e;
- struct label *l;
-
- for_each_label(labels, l) {
- fprintf(f, "\t.globl\t%s\n", l->label);
- fprintf(f, "%s:\n", l->label);
- }
- fprintf(f, "\t/* FDT_BEGIN_NODE */\n");
- asm_emit_cell(e, FDT_BEGIN_NODE);
-}
-
-static void asm_emit_endnode(void *e, struct label *labels)
-{
- FILE *f = e;
- struct label *l;
-
- fprintf(f, "\t/* FDT_END_NODE */\n");
- asm_emit_cell(e, FDT_END_NODE);
- for_each_label(labels, l) {
- fprintf(f, "\t.globl\t%s_end\n", l->label);
- fprintf(f, "%s_end:\n", l->label);
- }
-}
-
-static void asm_emit_property(void *e, struct label *labels)
-{
- FILE *f = e;
- struct label *l;
-
- for_each_label(labels, l) {
- fprintf(f, "\t.globl\t%s\n", l->label);
- fprintf(f, "%s:\n", l->label);
- }
- fprintf(f, "\t/* FDT_PROP */\n");
- asm_emit_cell(e, FDT_PROP);
-}
-
-static struct emitter asm_emitter = {
- .cell = asm_emit_cell,
- .string = asm_emit_string,
- .align = asm_emit_align,
- .data = asm_emit_data,
- .beginnode = asm_emit_beginnode,
- .endnode = asm_emit_endnode,
- .property = asm_emit_property,
-};
-
-static int stringtable_insert(struct data *d, const char *str)
-{
- int i;
-
- /* FIXME: do this more efficiently? */
-
- for (i = 0; i < d->len; i++) {
- if (streq(str, d->val + i))
- return i;
- }
-
- *d = data_append_data(*d, str, strlen(str)+1);
- return i;
-}
-
-static void flatten_tree(struct node *tree, struct emitter *emit,
- void *etarget, struct data *strbuf,
- struct version_info *vi)
-{
- struct property *prop;
- struct node *child;
- bool seen_name_prop = false;
-
- if (tree->deleted)
- return;
-
- emit->beginnode(etarget, tree->labels);
-
- if (vi->flags & FTF_FULLPATH)
- emit->string(etarget, tree->fullpath, 0);
- else
- emit->string(etarget, tree->name, 0);
-
- emit->align(etarget, sizeof(cell_t));
-
- for_each_property(tree, prop) {
- int nameoff;
-
- if (streq(prop->name, "name"))
- seen_name_prop = true;
-
- nameoff = stringtable_insert(strbuf, prop->name);
-
- emit->property(etarget, prop->labels);
- emit->cell(etarget, prop->val.len);
- emit->cell(etarget, nameoff);
-
- if ((vi->flags & FTF_VARALIGN) && (prop->val.len >= 8))
- emit->align(etarget, 8);
-
- emit->data(etarget, prop->val);
- emit->align(etarget, sizeof(cell_t));
- }
-
- if ((vi->flags & FTF_NAMEPROPS) && !seen_name_prop) {
- emit->property(etarget, NULL);
- emit->cell(etarget, tree->basenamelen+1);
- emit->cell(etarget, stringtable_insert(strbuf, "name"));
-
- if ((vi->flags & FTF_VARALIGN) && ((tree->basenamelen+1) >= 8))
- emit->align(etarget, 8);
-
- emit->string(etarget, tree->name, tree->basenamelen);
- emit->align(etarget, sizeof(cell_t));
- }
-
- for_each_child(tree, child) {
- flatten_tree(child, emit, etarget, strbuf, vi);
- }
-
- emit->endnode(etarget, tree->labels);
-}
-
-static struct data flatten_reserve_list(struct reserve_info *reservelist,
- struct version_info *vi)
-{
- struct reserve_info *re;
- struct data d = empty_data;
- int j;
-
- for (re = reservelist; re; re = re->next) {
- d = data_append_re(d, re->address, re->size);
- }
- /*
- * Add additional reserved slots if the user asked for them.
- */
- for (j = 0; j < reservenum; j++) {
- d = data_append_re(d, 0, 0);
- }
-
- return d;
-}
-
-static void make_fdt_header(struct fdt_header *fdt,
- struct version_info *vi,
- int reservesize, int dtsize, int strsize,
- int boot_cpuid_phys)
-{
- int reserve_off;
-
- reservesize += sizeof(struct fdt_reserve_entry);
-
- memset(fdt, 0xff, sizeof(*fdt));
-
- fdt->magic = cpu_to_fdt32(FDT_MAGIC);
- fdt->version = cpu_to_fdt32(vi->version);
- fdt->last_comp_version = cpu_to_fdt32(vi->last_comp_version);
-
- /* Reserve map should be doubleword aligned */
- reserve_off = ALIGN(vi->hdr_size, 8);
-
- fdt->off_mem_rsvmap = cpu_to_fdt32(reserve_off);
- fdt->off_dt_struct = cpu_to_fdt32(reserve_off + reservesize);
- fdt->off_dt_strings = cpu_to_fdt32(reserve_off + reservesize
- + dtsize);
- fdt->totalsize = cpu_to_fdt32(reserve_off + reservesize + dtsize + strsize);
-
- if (vi->flags & FTF_BOOTCPUID)
- fdt->boot_cpuid_phys = cpu_to_fdt32(boot_cpuid_phys);
- if (vi->flags & FTF_STRTABSIZE)
- fdt->size_dt_strings = cpu_to_fdt32(strsize);
- if (vi->flags & FTF_STRUCTSIZE)
- fdt->size_dt_struct = cpu_to_fdt32(dtsize);
-}
-
-void dt_to_blob(FILE *f, struct dt_info *dti, int version)
-{
- struct version_info *vi = NULL;
- int i;
- struct data blob = empty_data;
- struct data reservebuf = empty_data;
- struct data dtbuf = empty_data;
- struct data strbuf = empty_data;
- struct fdt_header fdt;
- int padlen = 0;
-
- for (i = 0; i < ARRAY_SIZE(version_table); i++) {
- if (version_table[i].version == version)
- vi = &version_table[i];
- }
- if (!vi)
- die("Unknown device tree blob version %d\n", version);
-
- flatten_tree(dti->dt, &bin_emitter, &dtbuf, &strbuf, vi);
- bin_emit_cell(&dtbuf, FDT_END);
-
- reservebuf = flatten_reserve_list(dti->reservelist, vi);
-
- /* Make header */
- make_fdt_header(&fdt, vi, reservebuf.len, dtbuf.len, strbuf.len,
- dti->boot_cpuid_phys);
-
- /*
- * If the user asked for more space than is used, adjust the totalsize.
- */
- if (minsize > 0) {
- padlen = minsize - fdt32_to_cpu(fdt.totalsize);
- if (padlen < 0) {
- padlen = 0;
- if (quiet < 1)
- fprintf(stderr,
- "Warning: blob size %d >= minimum size %d\n",
- fdt32_to_cpu(fdt.totalsize), minsize);
- }
- }
-
- if (padsize > 0)
- padlen = padsize;
-
- if (alignsize > 0)
- padlen = ALIGN(fdt32_to_cpu(fdt.totalsize) + padlen, alignsize)
- - fdt32_to_cpu(fdt.totalsize);
-
- if (padlen > 0) {
- int tsize = fdt32_to_cpu(fdt.totalsize);
- tsize += padlen;
- fdt.totalsize = cpu_to_fdt32(tsize);
- }
-
- /*
- * Assemble the blob: start with the header, add with alignment
- * the reserve buffer, add the reserve map terminating zeroes,
- * the device tree itself, and finally the strings.
- */
- blob = data_append_data(blob, &fdt, vi->hdr_size);
- blob = data_append_align(blob, 8);
- blob = data_merge(blob, reservebuf);
- blob = data_append_zeroes(blob, sizeof(struct fdt_reserve_entry));
- blob = data_merge(blob, dtbuf);
- blob = data_merge(blob, strbuf);
-
- /*
- * If the user asked for more space than is used, pad out the blob.
- */
- if (padlen > 0)
- blob = data_append_zeroes(blob, padlen);
-
- if (fwrite(blob.val, blob.len, 1, f) != 1) {
- if (ferror(f))
- die("Error writing device tree blob: %s\n",
- strerror(errno));
- else
- die("Short write on device tree blob\n");
- }
-
- /*
- * data_merge() frees the right-hand element so only the blob
- * remains to be freed.
- */
- data_free(blob);
-}
-
-static void dump_stringtable_asm(FILE *f, struct data strbuf)
-{
- const char *p;
- int len;
-
- p = strbuf.val;
-
- while (p < (strbuf.val + strbuf.len)) {
- len = strlen(p);
- fprintf(f, "\t.string \"%s\"\n", p);
- p += len+1;
- }
-}
-
-void dt_to_asm(FILE *f, struct dt_info *dti, int version)
-{
- struct version_info *vi = NULL;
- int i;
- struct data strbuf = empty_data;
- struct reserve_info *re;
- const char *symprefix = "dt";
-
- for (i = 0; i < ARRAY_SIZE(version_table); i++) {
- if (version_table[i].version == version)
- vi = &version_table[i];
- }
- if (!vi)
- die("Unknown device tree blob version %d\n", version);
-
- fprintf(f, "/* autogenerated by dtc, do not edit */\n\n");
-
- emit_label(f, symprefix, "blob_start");
- emit_label(f, symprefix, "header");
- fprintf(f, "\t/* magic */\n");
- asm_emit_cell(f, FDT_MAGIC);
- fprintf(f, "\t/* totalsize */\n");
- ASM_EMIT_BELONG(f, "_%s_blob_abs_end - _%s_blob_start",
- symprefix, symprefix);
- fprintf(f, "\t/* off_dt_struct */\n");
- ASM_EMIT_BELONG(f, "_%s_struct_start - _%s_blob_start",
- symprefix, symprefix);
- fprintf(f, "\t/* off_dt_strings */\n");
- ASM_EMIT_BELONG(f, "_%s_strings_start - _%s_blob_start",
- symprefix, symprefix);
- fprintf(f, "\t/* off_mem_rsvmap */\n");
- ASM_EMIT_BELONG(f, "_%s_reserve_map - _%s_blob_start",
- symprefix, symprefix);
- fprintf(f, "\t/* version */\n");
- asm_emit_cell(f, vi->version);
- fprintf(f, "\t/* last_comp_version */\n");
- asm_emit_cell(f, vi->last_comp_version);
-
- if (vi->flags & FTF_BOOTCPUID) {
- fprintf(f, "\t/* boot_cpuid_phys */\n");
- asm_emit_cell(f, dti->boot_cpuid_phys);
- }
-
- if (vi->flags & FTF_STRTABSIZE) {
- fprintf(f, "\t/* size_dt_strings */\n");
- ASM_EMIT_BELONG(f, "_%s_strings_end - _%s_strings_start",
- symprefix, symprefix);
- }
-
- if (vi->flags & FTF_STRUCTSIZE) {
- fprintf(f, "\t/* size_dt_struct */\n");
- ASM_EMIT_BELONG(f, "_%s_struct_end - _%s_struct_start",
- symprefix, symprefix);
- }
-
- /*
- * Reserve map entries.
- * Align the reserve map to a doubleword boundary.
- * Each entry is an (address, size) pair of u64 values.
- * Always supply a zero-sized temination entry.
- */
- asm_emit_align(f, 8);
- emit_label(f, symprefix, "reserve_map");
-
- fprintf(f, "/* Memory reserve map from source file */\n");
-
- /*
- * Use .long on high and low halfs of u64s to avoid .quad
- * as it appears .quad isn't available in some assemblers.
- */
- for (re = dti->reservelist; re; re = re->next) {
- struct label *l;
-
- for_each_label(re->labels, l) {
- fprintf(f, "\t.globl\t%s\n", l->label);
- fprintf(f, "%s:\n", l->label);
- }
- ASM_EMIT_BELONG(f, "0x%08x", (unsigned int)(re->address >> 32));
- ASM_EMIT_BELONG(f, "0x%08x",
- (unsigned int)(re->address & 0xffffffff));
- ASM_EMIT_BELONG(f, "0x%08x", (unsigned int)(re->size >> 32));
- ASM_EMIT_BELONG(f, "0x%08x", (unsigned int)(re->size & 0xffffffff));
- }
- for (i = 0; i < reservenum; i++) {
- fprintf(f, "\t.long\t0, 0\n\t.long\t0, 0\n");
- }
-
- fprintf(f, "\t.long\t0, 0\n\t.long\t0, 0\n");
-
- emit_label(f, symprefix, "struct_start");
- flatten_tree(dti->dt, &asm_emitter, f, &strbuf, vi);
-
- fprintf(f, "\t/* FDT_END */\n");
- asm_emit_cell(f, FDT_END);
- emit_label(f, symprefix, "struct_end");
-
- emit_label(f, symprefix, "strings_start");
- dump_stringtable_asm(f, strbuf);
- emit_label(f, symprefix, "strings_end");
-
- emit_label(f, symprefix, "blob_end");
-
- /*
- * If the user asked for more space than is used, pad it out.
- */
- if (minsize > 0) {
- fprintf(f, "\t.space\t%d - (_%s_blob_end - _%s_blob_start), 0\n",
- minsize, symprefix, symprefix);
- }
- if (padsize > 0) {
- fprintf(f, "\t.space\t%d, 0\n", padsize);
- }
- if (alignsize > 0)
- asm_emit_align(f, alignsize);
- emit_label(f, symprefix, "blob_abs_end");
-
- data_free(strbuf);
-}
-
-struct inbuf {
- char *base, *limit, *ptr;
-};
-
-static void inbuf_init(struct inbuf *inb, void *base, void *limit)
-{
- inb->base = base;
- inb->limit = limit;
- inb->ptr = inb->base;
-}
-
-static void flat_read_chunk(struct inbuf *inb, void *p, int len)
-{
- if ((inb->ptr + len) > inb->limit)
- die("Premature end of data parsing flat device tree\n");
-
- memcpy(p, inb->ptr, len);
-
- inb->ptr += len;
-}
-
-static uint32_t flat_read_word(struct inbuf *inb)
-{
- fdt32_t val;
-
- assert(((inb->ptr - inb->base) % sizeof(val)) == 0);
-
- flat_read_chunk(inb, &val, sizeof(val));
-
- return fdt32_to_cpu(val);
-}
-
-static void flat_realign(struct inbuf *inb, int align)
-{
- int off = inb->ptr - inb->base;
-
- inb->ptr = inb->base + ALIGN(off, align);
- if (inb->ptr > inb->limit)
- die("Premature end of data parsing flat device tree\n");
-}
-
-static char *flat_read_string(struct inbuf *inb)
-{
- int len = 0;
- const char *p = inb->ptr;
- char *str;
-
- do {
- if (p >= inb->limit)
- die("Premature end of data parsing flat device tree\n");
- len++;
- } while ((*p++) != '\0');
-
- str = xstrdup(inb->ptr);
-
- inb->ptr += len;
-
- flat_realign(inb, sizeof(uint32_t));
-
- return str;
-}
-
-static struct data flat_read_data(struct inbuf *inb, int len)
-{
- struct data d = empty_data;
-
- if (len == 0)
- return empty_data;
-
- d = data_grow_for(d, len);
- d.len = len;
-
- flat_read_chunk(inb, d.val, len);
-
- flat_realign(inb, sizeof(uint32_t));
-
- return d;
-}
-
-static char *flat_read_stringtable(struct inbuf *inb, int offset)
-{
- const char *p;
-
- p = inb->base + offset;
- while (1) {
- if (p >= inb->limit || p < inb->base)
- die("String offset %d overruns string table\n",
- offset);
-
- if (*p == '\0')
- break;
-
- p++;
- }
-
- return xstrdup(inb->base + offset);
-}
-
-static struct property *flat_read_property(struct inbuf *dtbuf,
- struct inbuf *strbuf, int flags)
-{
- uint32_t proplen, stroff;
- char *name;
- struct data val;
-
- proplen = flat_read_word(dtbuf);
- stroff = flat_read_word(dtbuf);
-
- name = flat_read_stringtable(strbuf, stroff);
-
- if ((flags & FTF_VARALIGN) && (proplen >= 8))
- flat_realign(dtbuf, 8);
-
- val = flat_read_data(dtbuf, proplen);
-
- return build_property(name, val);
-}
-
-
-static struct reserve_info *flat_read_mem_reserve(struct inbuf *inb)
-{
- struct reserve_info *reservelist = NULL;
- struct reserve_info *new;
- struct fdt_reserve_entry re;
-
- /*
- * Each entry is a pair of u64 (addr, size) values for 4 cell_t's.
- * List terminates at an entry with size equal to zero.
- *
- * First pass, count entries.
- */
- while (1) {
- uint64_t address, size;
-
- flat_read_chunk(inb, &re, sizeof(re));
- address = fdt64_to_cpu(re.address);
- size = fdt64_to_cpu(re.size);
- if (size == 0)
- break;
-
- new = build_reserve_entry(address, size);
- reservelist = add_reserve_entry(reservelist, new);
- }
-
- return reservelist;
-}
-
-
-static char *nodename_from_path(const char *ppath, const char *cpath)
-{
- int plen;
-
- plen = strlen(ppath);
-
- if (!strstarts(cpath, ppath))
- die("Path \"%s\" is not valid as a child of \"%s\"\n",
- cpath, ppath);
-
- /* root node is a special case */
- if (!streq(ppath, "/"))
- plen++;
-
- return xstrdup(cpath + plen);
-}
-
-static struct node *unflatten_tree(struct inbuf *dtbuf,
- struct inbuf *strbuf,
- const char *parent_flatname, int flags)
-{
- struct node *node;
- char *flatname;
- uint32_t val;
-
- node = build_node(NULL, NULL);
-
- flatname = flat_read_string(dtbuf);
-
- if (flags & FTF_FULLPATH)
- node->name = nodename_from_path(parent_flatname, flatname);
- else
- node->name = flatname;
-
- do {
- struct property *prop;
- struct node *child;
-
- val = flat_read_word(dtbuf);
- switch (val) {
- case FDT_PROP:
- if (node->children)
- fprintf(stderr, "Warning: Flat tree input has "
- "subnodes preceding a property.\n");
- prop = flat_read_property(dtbuf, strbuf, flags);
- add_property(node, prop);
- break;
-
- case FDT_BEGIN_NODE:
- child = unflatten_tree(dtbuf,strbuf, flatname, flags);
- add_child(node, child);
- break;
-
- case FDT_END_NODE:
- break;
-
- case FDT_END:
- die("Premature FDT_END in device tree blob\n");
- break;
-
- case FDT_NOP:
- if (!(flags & FTF_NOPS))
- fprintf(stderr, "Warning: NOP tag found in flat tree"
- " version <16\n");
-
- /* Ignore */
- break;
-
- default:
- die("Invalid opcode word %08x in device tree blob\n",
- val);
- }
- } while (val != FDT_END_NODE);
-
- if (node->name != flatname) {
- free(flatname);
- }
-
- return node;
-}
-
-
-struct dt_info *dt_from_blob(const char *fname)
-{
- FILE *f;
- fdt32_t magic_buf, totalsize_buf;
- uint32_t magic, totalsize, version, size_dt, boot_cpuid_phys;
- uint32_t off_dt, off_str, off_mem_rsvmap;
- int rc;
- char *blob;
- struct fdt_header *fdt;
- char *p;
- struct inbuf dtbuf, strbuf;
- struct inbuf memresvbuf;
- int sizeleft;
- struct reserve_info *reservelist;
- struct node *tree;
- uint32_t val;
- int flags = 0;
-
- f = srcfile_relative_open(fname, NULL);
-
- rc = fread(&magic_buf, sizeof(magic_buf), 1, f);
- if (ferror(f))
- die("Error reading DT blob magic number: %s\n",
- strerror(errno));
- if (rc < 1) {
- if (feof(f))
- die("EOF reading DT blob magic number\n");
- else
- die("Mysterious short read reading magic number\n");
- }
-
- magic = fdt32_to_cpu(magic_buf);
- if (magic != FDT_MAGIC)
- die("Blob has incorrect magic number\n");
-
- rc = fread(&totalsize_buf, sizeof(totalsize_buf), 1, f);
- if (ferror(f))
- die("Error reading DT blob size: %s\n", strerror(errno));
- if (rc < 1) {
- if (feof(f))
- die("EOF reading DT blob size\n");
- else
- die("Mysterious short read reading blob size\n");
- }
-
- totalsize = fdt32_to_cpu(totalsize_buf);
- if (totalsize < FDT_V1_SIZE)
- die("DT blob size (%d) is too small\n", totalsize);
-
- blob = xmalloc(totalsize);
-
- fdt = (struct fdt_header *)blob;
- fdt->magic = cpu_to_fdt32(magic);
- fdt->totalsize = cpu_to_fdt32(totalsize);
-
- sizeleft = totalsize - sizeof(magic) - sizeof(totalsize);
- p = blob + sizeof(magic) + sizeof(totalsize);
-
- while (sizeleft) {
- if (feof(f))
- die("EOF before reading %d bytes of DT blob\n",
- totalsize);
-
- rc = fread(p, 1, sizeleft, f);
- if (ferror(f))
- die("Error reading DT blob: %s\n",
- strerror(errno));
-
- sizeleft -= rc;
- p += rc;
- }
-
- off_dt = fdt32_to_cpu(fdt->off_dt_struct);
- off_str = fdt32_to_cpu(fdt->off_dt_strings);
- off_mem_rsvmap = fdt32_to_cpu(fdt->off_mem_rsvmap);
- version = fdt32_to_cpu(fdt->version);
- boot_cpuid_phys = fdt32_to_cpu(fdt->boot_cpuid_phys);
-
- if (off_mem_rsvmap >= totalsize)
- die("Mem Reserve structure offset exceeds total size\n");
-
- if (off_dt >= totalsize)
- die("DT structure offset exceeds total size\n");
-
- if (off_str > totalsize)
- die("String table offset exceeds total size\n");
-
- if (version >= 3) {
- uint32_t size_str = fdt32_to_cpu(fdt->size_dt_strings);
- if ((off_str+size_str < off_str) || (off_str+size_str > totalsize))
- die("String table extends past total size\n");
- inbuf_init(&strbuf, blob + off_str, blob + off_str + size_str);
- } else {
- inbuf_init(&strbuf, blob + off_str, blob + totalsize);
- }
-
- if (version >= 17) {
- size_dt = fdt32_to_cpu(fdt->size_dt_struct);
- if ((off_dt+size_dt < off_dt) || (off_dt+size_dt > totalsize))
- die("Structure block extends past total size\n");
- }
-
- if (version < 16) {
- flags |= FTF_FULLPATH | FTF_NAMEPROPS | FTF_VARALIGN;
- } else {
- flags |= FTF_NOPS;
- }
-
- inbuf_init(&memresvbuf,
- blob + off_mem_rsvmap, blob + totalsize);
- inbuf_init(&dtbuf, blob + off_dt, blob + totalsize);
-
- reservelist = flat_read_mem_reserve(&memresvbuf);
-
- val = flat_read_word(&dtbuf);
-
- if (val != FDT_BEGIN_NODE)
- die("Device tree blob doesn't begin with FDT_BEGIN_NODE (begins with 0x%08x)\n", val);
-
- tree = unflatten_tree(&dtbuf, &strbuf, "", flags);
-
- val = flat_read_word(&dtbuf);
- if (val != FDT_END)
- die("Device tree blob doesn't end with FDT_END\n");
-
- free(blob);
-
- fclose(f);
-
- return build_dt_info(DTSF_V1, reservelist, tree, boot_cpuid_phys);
-}
diff --git a/fstree.c b/fstree.c
deleted file mode 100644
index ae7d06c3c492..000000000000
--- a/fstree.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "dtc.h"
-
-#include <dirent.h>
-#include <sys/stat.h>
-
-static struct node *read_fstree(const char *dirname)
-{
- DIR *d;
- struct dirent *de;
- struct stat st;
- struct node *tree;
-
- d = opendir(dirname);
- if (!d)
- die("Couldn't opendir() \"%s\": %s\n", dirname, strerror(errno));
-
- tree = build_node(NULL, NULL);
-
- while ((de = readdir(d)) != NULL) {
- char *tmpname;
-
- if (streq(de->d_name, ".")
- || streq(de->d_name, ".."))
- continue;
-
- tmpname = join_path(dirname, de->d_name);
-
- if (lstat(tmpname, &st) < 0)
- die("stat(%s): %s\n", tmpname, strerror(errno));
-
- if (S_ISREG(st.st_mode)) {
- struct property *prop;
- FILE *pfile;
-
- pfile = fopen(tmpname, "rb");
- if (! pfile) {
- fprintf(stderr,
- "WARNING: Cannot open %s: %s\n",
- tmpname, strerror(errno));
- } else {
- prop = build_property(xstrdup(de->d_name),
- data_copy_file(pfile,
- st.st_size));
- add_property(tree, prop);
- fclose(pfile);
- }
- } else if (S_ISDIR(st.st_mode)) {
- struct node *newchild;
-
- newchild = read_fstree(tmpname);
- newchild = name_node(newchild, xstrdup(de->d_name));
- add_child(tree, newchild);
- }
-
- free(tmpname);
- }
-
- closedir(d);
- return tree;
-}
-
-struct dt_info *dt_from_fs(const char *dirname)
-{
- struct node *tree;
-
- tree = read_fstree(dirname);
- tree = name_node(tree, "");
-
- return build_dt_info(DTSF_V1, NULL, tree, guess_boot_cpuid(tree));
-}
diff --git a/libfdt/libfdt.h b/libfdt.h
index baa882cfa1df..baa882cfa1df 100644
--- a/libfdt/libfdt.h
+++ b/libfdt.h
diff --git a/libfdt/TODO b/libfdt/TODO
deleted file mode 100644
index 288437e394fc..000000000000
--- a/libfdt/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
-- Tree traversal functions
-- Graft function
-- Complete libfdt.h documenting comments
diff --git a/libfdt/libfdt_env.h b/libfdt_env.h
index bd2474628775..bd2474628775 100644
--- a/libfdt/libfdt_env.h
+++ b/libfdt_env.h
diff --git a/libfdt/libfdt_internal.h b/libfdt_internal.h
index 7681e192295b..7681e192295b 100644
--- a/libfdt/libfdt_internal.h
+++ b/libfdt_internal.h
diff --git a/livetree.c b/livetree.c
deleted file mode 100644
index 57b7db2ed153..000000000000
--- a/livetree.c
+++ /dev/null
@@ -1,1013 +0,0 @@
-/*
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "dtc.h"
-
-/*
- * Tree building functions
- */
-
-void add_label(struct label **labels, char *label)
-{
- struct label *new;
-
- /* Make sure the label isn't already there */
- for_each_label_withdel(*labels, new)
- if (streq(new->label, label)) {
- new->deleted = 0;
- return;
- }
-
- new = xmalloc(sizeof(*new));
- memset(new, 0, sizeof(*new));
- new->label = label;
- new->next = *labels;
- *labels = new;
-}
-
-void delete_labels(struct label **labels)
-{
- struct label *label;
-
- for_each_label(*labels, label)
- label->deleted = 1;
-}
-
-struct property *build_property(char *name, struct data val)
-{
- struct property *new = xmalloc(sizeof(*new));
-
- memset(new, 0, sizeof(*new));
-
- new->name = name;
- new->val = val;
-
- return new;
-}
-
-struct property *build_property_delete(char *name)
-{
- struct property *new = xmalloc(sizeof(*new));
-
- memset(new, 0, sizeof(*new));
-
- new->name = name;
- new->deleted = 1;
-
- return new;
-}
-
-struct property *chain_property(struct property *first, struct property *list)
-{
- assert(first->next == NULL);
-
- first->next = list;
- return first;
-}
-
-struct property *reverse_properties(struct property *first)
-{
- struct property *p = first;
- struct property *head = NULL;
- struct property *next;
-
- while (p) {
- next = p->next;
- p->next = head;
- head = p;
- p = next;
- }
- return head;
-}
-
-struct node *build_node(struct property *proplist, struct node *children)
-{
- struct node *new = xmalloc(sizeof(*new));
- struct node *child;
-
- memset(new, 0, sizeof(*new));
-
- new->proplist = reverse_properties(proplist);
- new->children = children;
-
- for_each_child(new, child) {
- child->parent = new;
- }
-
- return new;
-}
-
-struct node *build_node_delete(void)
-{
- struct node *new = xmalloc(sizeof(*new));
-
- memset(new, 0, sizeof(*new));
-
- new->deleted = 1;
-
- return new;
-}
-
-struct node *name_node(struct node *node, char *name)
-{
- assert(node->name == NULL);
-
- node->name = name;
-
- return node;
-}
-
-struct node *merge_nodes(struct node *old_node, struct node *new_node)
-{
- struct property *new_prop, *old_prop;
- struct node *new_child, *old_child;
- struct label *l;
-
- old_node->deleted = 0;
-
- /* Add new node labels to old node */
- for_each_label_withdel(new_node->labels, l)
- add_label(&old_node->labels, l->label);
-
- /* Move properties from the new node to the old node. If there
- * is a collision, replace the old value with the new */
- while (new_node->proplist) {
- /* Pop the property off the list */
- new_prop = new_node->proplist;
- new_node->proplist = new_prop->next;
- new_prop->next = NULL;
-
- if (new_prop->deleted) {
- delete_property_by_name(old_node, new_prop->name);
- free(new_prop);
- continue;
- }
-
- /* Look for a collision, set new value if there is */
- for_each_property_withdel(old_node, old_prop) {
- if (streq(old_prop->name, new_prop->name)) {
- /* Add new labels to old property */
- for_each_label_withdel(new_prop->labels, l)
- add_label(&old_prop->labels, l->label);
-
- old_prop->val = new_prop->val;
- old_prop->deleted = 0;
- free(new_prop);
- new_prop = NULL;
- break;
- }
- }
-
- /* if no collision occurred, add property to the old node. */
- if (new_prop)
- add_property(old_node, new_prop);
- }
-
- /* Move the override child nodes into the primary node. If
- * there is a collision, then merge the nodes. */
- while (new_node->children) {
- /* Pop the child node off the list */
- new_child = new_node->children;
- new_node->children = new_child->next_sibling;
- new_child->parent = NULL;
- new_child->next_sibling = NULL;
-
- if (new_child->deleted) {
- delete_node_by_name(old_node, new_child->name);
- free(new_child);
- continue;
- }
-
- /* Search for a collision. Merge if there is */
- for_each_child_withdel(old_node, old_child) {
- if (streq(old_child->name, new_child->name)) {
- merge_nodes(old_child, new_child);
- new_child = NULL;
- break;
- }
- }
-
- /* if no collision occurred, add child to the old node. */
- if (new_child)
- add_child(old_node, new_child);
- }
-
- /* The new node contents are now merged into the old node. Free
- * the new node. */
- free(new_node);
-
- return old_node;
-}
-
-struct node * add_orphan_node(struct node *dt, struct node *new_node, char *ref)
-{
- static unsigned int next_orphan_fragment = 0;
- struct node *node;
- struct property *p;
- struct data d = empty_data;
- char *name;
-
- d = data_add_marker(d, REF_PHANDLE, ref);
- d = data_append_integer(d, 0xffffffff, 32);
-
- p = build_property("target", d);
-
- xasprintf(&name, "fragment@%u",
- next_orphan_fragment++);
- name_node(new_node, "__overlay__");
- node = build_node(p, new_node);
- name_node(node, name);
-
- add_child(dt, node);
- return dt;
-}
-
-struct node *chain_node(struct node *first, struct node *list)
-{
- assert(first->next_sibling == NULL);
-
- first->next_sibling = list;
- return first;
-}
-
-void add_property(struct node *node, struct property *prop)
-{
- struct property **p;
-
- prop->next = NULL;
-
- p = &node->proplist;
- while (*p)
- p = &((*p)->next);
-
- *p = prop;
-}
-
-void delete_property_by_name(struct node *node, char *name)
-{
- struct property *prop = node->proplist;
-
- while (prop) {
- if (streq(prop->name, name)) {
- delete_property(prop);
- return;
- }
- prop = prop->next;
- }
-}
-
-void delete_property(struct property *prop)
-{
- prop->deleted = 1;
- delete_labels(&prop->labels);
-}
-
-void add_child(struct node *parent, struct node *child)
-{
- struct node **p;
-
- child->next_sibling = NULL;
- child->parent = parent;
-
- p = &parent->children;
- while (*p)
- p = &((*p)->next_sibling);
-
- *p = child;
-}
-
-void delete_node_by_name(struct node *parent, char *name)
-{
- struct node *node = parent->children;
-
- while (node) {
- if (streq(node->name, name)) {
- delete_node(node);
- return;
- }
- node = node->next_sibling;
- }
-}
-
-void delete_node(struct node *node)
-{
- struct property *prop;
- struct node *child;
-
- node->deleted = 1;
- for_each_child(node, child)
- delete_node(child);
- for_each_property(node, prop)
- delete_property(prop);
- delete_labels(&node->labels);
-}
-
-void append_to_property(struct node *node,
- char *name, const void *data, int len)
-{
- struct data d;
- struct property *p;
-
- p = get_property(node, name);
- if (p) {
- d = data_append_data(p->val, data, len);
- p->val = d;
- } else {
- d = data_append_data(empty_data, data, len);
- p = build_property(name, d);
- add_property(node, p);
- }
-}
-
-struct reserve_info *build_reserve_entry(uint64_t address, uint64_t size)
-{
- struct reserve_info *new = xmalloc(sizeof(*new));
-
- memset(new, 0, sizeof(*new));
-
- new->address = address;
- new->size = size;
-
- return new;
-}
-
-struct reserve_info *chain_reserve_entry(struct reserve_info *first,
- struct reserve_info *list)
-{
- assert(first->next == NULL);
-
- first->next = list;
- return first;
-}
-
-struct reserve_info *add_reserve_entry(struct reserve_info *list,
- struct reserve_info *new)
-{
- struct reserve_info *last;
-
- new->next = NULL;
-
- if (! list)
- return new;
-
- for (last = list; last->next; last = last->next)
- ;
-
- last->next = new;
-
- return list;
-}
-
-struct dt_info *build_dt_info(unsigned int dtsflags,
- struct reserve_info *reservelist,
- struct node *tree, uint32_t boot_cpuid_phys)
-{
- struct dt_info *dti;
-
- dti = xmalloc(sizeof(*dti));
- dti->dtsflags = dtsflags;
- dti->reservelist = reservelist;
- dti->dt = tree;
- dti->boot_cpuid_phys = boot_cpuid_phys;
-
- return dti;
-}
-
-/*
- * Tree accessor functions
- */
-
-const char *get_unitname(struct node *node)
-{
- if (node->name[node->basenamelen] == '\0')
- return "";
- else
- return node->name + node->basenamelen + 1;
-}
-
-struct property *get_property(struct node *node, const char *propname)
-{
- struct property *prop;
-
- for_each_property(node, prop)
- if (streq(prop->name, propname))
- return prop;
-
- return NULL;
-}
-
-cell_t propval_cell(struct property *prop)
-{
- assert(prop->val.len == sizeof(cell_t));
- return fdt32_to_cpu(*((fdt32_t *)prop->val.val));
-}
-
-cell_t propval_cell_n(struct property *prop, int n)
-{
- assert(prop->val.len / sizeof(cell_t) >= n);
- return fdt32_to_cpu(*((fdt32_t *)prop->val.val + n));
-}
-
-struct property *get_property_by_label(struct node *tree, const char *label,
- struct node **node)
-{
- struct property *prop;
- struct node *c;
-
- *node = tree;
-
- for_each_property(tree, prop) {
- struct label *l;
-
- for_each_label(prop->labels, l)
- if (streq(l->label, label))
- return prop;
- }
-
- for_each_child(tree, c) {
- prop = get_property_by_label(c, label, node);
- if (prop)
- return prop;
- }
-
- *node = NULL;
- return NULL;
-}
-
-struct marker *get_marker_label(struct node *tree, const char *label,
- struct node **node, struct property **prop)
-{
- struct marker *m;
- struct property *p;
- struct node *c;
-
- *node = tree;
-
- for_each_property(tree, p) {
- *prop = p;
- m = p->val.markers;
- for_each_marker_of_type(m, LABEL)
- if (streq(m->ref, label))
- return m;
- }
-
- for_each_child(tree, c) {
- m = get_marker_label(c, label, node, prop);
- if (m)
- return m;
- }
-
- *prop = NULL;
- *node = NULL;
- return NULL;
-}
-
-struct node *get_subnode(struct node *node, const char *nodename)
-{
- struct node *child;
-
- for_each_child(node, child)
- if (streq(child->name, nodename))
- return child;
-
- return NULL;
-}
-
-struct node *get_node_by_path(struct node *tree, const char *path)
-{
- const char *p;
- struct node *child;
-
- if (!path || ! (*path)) {
- if (tree->deleted)
- return NULL;
- return tree;
- }
-
- while (path[0] == '/')
- path++;
-
- p = strchr(path, '/');
-
- for_each_child(tree, child) {
- if (p && (strlen(child->name) == p-path) &&
- strprefixeq(path, p - path, child->name))
- return get_node_by_path(child, p+1);
- else if (!p && streq(path, child->name))
- return child;
- }
-
- return NULL;
-}
-
-struct node *get_node_by_label(struct node *tree, const char *label)
-{
- struct node *child, *node;
- struct label *l;
-
- assert(label && (strlen(label) > 0));
-
- for_each_label(tree->labels, l)
- if (streq(l->label, label))
- return tree;
-
- for_each_child(tree, child) {
- node = get_node_by_label(child, label);
- if (node)
- return node;
- }
-
- return NULL;
-}
-
-struct node *get_node_by_phandle(struct node *tree, cell_t phandle)
-{
- struct node *child, *node;
-
- if ((phandle == 0) || (phandle == -1)) {
- assert(generate_fixups);
- return NULL;
- }
-
- if (tree->phandle == phandle) {
- if (tree->deleted)
- return NULL;
- return tree;
- }
-
- for_each_child(tree, child) {
- node = get_node_by_phandle(child, phandle);
- if (node)
- return node;
- }
-
- return NULL;
-}
-
-struct node *get_node_by_ref(struct node *tree, const char *ref)
-{
- if (streq(ref, "/"))
- return tree;
- else if (ref[0] == '/')
- return get_node_by_path(tree, ref);
- else
- return get_node_by_label(tree, ref);
-}
-
-cell_t get_node_phandle(struct node *root, struct node *node)
-{
- static cell_t phandle = 1; /* FIXME: ick, static local */
-
- if ((node->phandle != 0) && (node->phandle != -1))
- return node->phandle;
-
- while (get_node_by_phandle(root, phandle))
- phandle++;
-
- node->phandle = phandle;
-
- if (!get_property(node, "linux,phandle")
- && (phandle_format & PHANDLE_LEGACY))
- add_property(node,
- build_property("linux,phandle",
- data_append_cell(empty_data, phandle)));
-
- if (!get_property(node, "phandle")
- && (phandle_format & PHANDLE_EPAPR))
- add_property(node,
- build_property("phandle",
- data_append_cell(empty_data, phandle)));
-
- /* If the node *does* have a phandle property, we must
- * be dealing with a self-referencing phandle, which will be
- * fixed up momentarily in the caller */
-
- return node->phandle;
-}
-
-uint32_t guess_boot_cpuid(struct node *tree)
-{
- struct node *cpus, *bootcpu;
- struct property *reg;
-
- cpus = get_node_by_path(tree, "/cpus");
- if (!cpus)
- return 0;
-
-
- bootcpu = cpus->children;
- if (!bootcpu)
- return 0;
-
- reg = get_property(bootcpu, "reg");
- if (!reg || (reg->val.len != sizeof(uint32_t)))
- return 0;
-
- /* FIXME: Sanity check node? */
-
- return propval_cell(reg);
-}
-
-static int cmp_reserve_info(const void *ax, const void *bx)
-{
- const struct reserve_info *a, *b;
-
- a = *((const struct reserve_info * const *)ax);
- b = *((const struct reserve_info * const *)bx);
-
- if (a->address < b->address)
- return -1;
- else if (a->address > b->address)
- return 1;
- else if (a->size < b->size)
- return -1;
- else if (a->size > b->size)
- return 1;
- else
- return 0;
-}
-
-static void sort_reserve_entries(struct dt_info *dti)
-{
- struct reserve_info *ri, **tbl;
- int n = 0, i = 0;
-
- for (ri = dti->reservelist;
- ri;
- ri = ri->next)
- n++;
-
- if (n == 0)
- return;
-
- tbl = xmalloc(n * sizeof(*tbl));
-
- for (ri = dti->reservelist;
- ri;
- ri = ri->next)
- tbl[i++] = ri;
-
- qsort(tbl, n, sizeof(*tbl), cmp_reserve_info);
-
- dti->reservelist = tbl[0];
- for (i = 0; i < (n-1); i++)
- tbl[i]->next = tbl[i+1];
- tbl[n-1]->next = NULL;
-
- free(tbl);
-}
-
-static int cmp_prop(const void *ax, const void *bx)
-{
- const struct property *a, *b;
-
- a = *((const struct property * const *)ax);
- b = *((const struct property * const *)bx);
-
- return strcmp(a->name, b->name);
-}
-
-static void sort_properties(struct node *node)
-{
- int n = 0, i = 0;
- struct property *prop, **tbl;
-
- for_each_property_withdel(node, prop)
- n++;
-
- if (n == 0)
- return;
-
- tbl = xmalloc(n * sizeof(*tbl));
-
- for_each_property_withdel(node, prop)
- tbl[i++] = prop;
-
- qsort(tbl, n, sizeof(*tbl), cmp_prop);
-
- node->proplist = tbl[0];
- for (i = 0; i < (n-1); i++)
- tbl[i]->next = tbl[i+1];
- tbl[n-1]->next = NULL;
-
- free(tbl);
-}
-
-static int cmp_subnode(const void *ax, const void *bx)
-{
- const struct node *a, *b;
-
- a = *((const struct node * const *)ax);
- b = *((const struct node * const *)bx);
-
- return strcmp(a->name, b->name);
-}
-
-static void sort_subnodes(struct node *node)
-{
- int n = 0, i = 0;
- struct node *subnode, **tbl;
-
- for_each_child_withdel(node, subnode)
- n++;
-
- if (n == 0)
- return;
-
- tbl = xmalloc(n * sizeof(*tbl));
-
- for_each_child_withdel(node, subnode)
- tbl[i++] = subnode;
-
- qsort(tbl, n, sizeof(*tbl), cmp_subnode);
-
- node->children = tbl[0];
- for (i = 0; i < (n-1); i++)
- tbl[i]->next_sibling = tbl[i+1];
- tbl[n-1]->next_sibling = NULL;
-
- free(tbl);
-}
-
-static void sort_node(struct node *node)
-{
- struct node *c;
-
- sort_properties(node);
- sort_subnodes(node);
- for_each_child_withdel(node, c)
- sort_node(c);
-}
-
-void sort_tree(struct dt_info *dti)
-{
- sort_reserve_entries(dti);
- sort_node(dti->dt);
-}
-
-/* utility helper to avoid code duplication */
-static struct node *build_and_name_child_node(struct node *parent, char *name)
-{
- struct node *node;
-
- node = build_node(NULL, NULL);
- name_node(node, xstrdup(name));
- add_child(parent, node);
-
- return node;
-}
-
-static struct node *build_root_node(struct node *dt, char *name)
-{
- struct node *an;
-
- an = get_subnode(dt, name);
- if (!an)
- an = build_and_name_child_node(dt, name);
-
- if (!an)
- die("Could not build root node /%s\n", name);
-
- return an;
-}
-
-static bool any_label_tree(struct dt_info *dti, struct node *node)
-{
- struct node *c;
-
- if (node->labels)
- return true;
-
- for_each_child(node, c)
- if (any_label_tree(dti, c))
- return true;
-
- return false;
-}
-
-static void generate_label_tree_internal(struct dt_info *dti,
- struct node *an, struct node *node,
- bool allocph)
-{
- struct node *dt = dti->dt;
- struct node *c;
- struct property *p;
- struct label *l;
-
- /* if there are labels */
- if (node->labels) {
-
- /* now add the label in the node */
- for_each_label(node->labels, l) {
-
- /* check whether the label already exists */
- p = get_property(an, l->label);
- if (p) {
- fprintf(stderr, "WARNING: label %s already"
- " exists in /%s", l->label,
- an->name);
- continue;
- }
-
- /* insert it */
- p = build_property(l->label,
- data_copy_mem(node->fullpath,
- strlen(node->fullpath) + 1));
- add_property(an, p);
- }
-
- /* force allocation of a phandle for this node */
- if (allocph)
- (void)get_node_phandle(dt, node);
- }
-
- for_each_child(node, c)
- generate_label_tree_internal(dti, an, c, allocph);
-}
-
-static bool any_fixup_tree(struct dt_info *dti, struct node *node)
-{
- struct node *c;
- struct property *prop;
- struct marker *m;
-
- for_each_property(node, prop) {
- m = prop->val.markers;
- for_each_marker_of_type(m, REF_PHANDLE) {
- if (!get_node_by_ref(dti->dt, m->ref))
- return true;
- }
- }
-
- for_each_child(node, c) {
- if (any_fixup_tree(dti, c))
- return true;
- }
-
- return false;
-}
-
-static void add_fixup_entry(struct dt_info *dti, struct node *fn,
- struct node *node, struct property *prop,
- struct marker *m)
-{
- char *entry;
-
- /* m->ref can only be a REF_PHANDLE, but check anyway */
- assert(m->type == REF_PHANDLE);
-
- /* there shouldn't be any ':' in the arguments */
- if (strchr(node->fullpath, ':') || strchr(prop->name, ':'))
- die("arguments should not contain ':'\n");
-
- xasprintf(&entry, "%s:%s:%u",
- node->fullpath, prop->name, m->offset);
- append_to_property(fn, m->ref, entry, strlen(entry) + 1);
-
- free(entry);
-}
-
-static void generate_fixups_tree_internal(struct dt_info *dti,
- struct node *fn,
- struct node *node)
-{
- struct node *dt = dti->dt;
- struct node *c;
- struct property *prop;
- struct marker *m;
- struct node *refnode;
-
- for_each_property(node, prop) {
- m = prop->val.markers;
- for_each_marker_of_type(m, REF_PHANDLE) {
- refnode = get_node_by_ref(dt, m->ref);
- if (!refnode)
- add_fixup_entry(dti, fn, node, prop, m);
- }
- }
-
- for_each_child(node, c)
- generate_fixups_tree_internal(dti, fn, c);
-}
-
-static bool any_local_fixup_tree(struct dt_info *dti, struct node *node)
-{
- struct node *c;
- struct property *prop;
- struct marker *m;
-
- for_each_property(node, prop) {
- m = prop->val.markers;
- for_each_marker_of_type(m, REF_PHANDLE) {
- if (get_node_by_ref(dti->dt, m->ref))
- return true;
- }
- }
-
- for_each_child(node, c) {
- if (any_local_fixup_tree(dti, c))
- return true;
- }
-
- return false;
-}
-
-static void add_local_fixup_entry(struct dt_info *dti,
- struct node *lfn, struct node *node,
- struct property *prop, struct marker *m,
- struct node *refnode)
-{
- struct node *wn, *nwn; /* local fixup node, walk node, new */
- fdt32_t value_32;
- char **compp;
- int i, depth;
-
- /* walk back retreiving depth */
- depth = 0;
- for (wn = node; wn; wn = wn->parent)
- depth++;
-
- /* allocate name array */
- compp = xmalloc(sizeof(*compp) * depth);
-
- /* store names in the array */
- for (wn = node, i = depth - 1; wn; wn = wn->parent, i--)
- compp[i] = wn->name;
-
- /* walk the path components creating nodes if they don't exist */
- for (wn = lfn, i = 1; i < depth; i++, wn = nwn) {
- /* if no node exists, create it */
- nwn = get_subnode(wn, compp[i]);
- if (!nwn)
- nwn = build_and_name_child_node(wn, compp[i]);
- }
-
- free(compp);
-
- value_32 = cpu_to_fdt32(m->offset);
- append_to_property(wn, prop->name, &value_32, sizeof(value_32));
-}
-
-static void generate_local_fixups_tree_internal(struct dt_info *dti,
- struct node *lfn,
- struct node *node)
-{
- struct node *dt = dti->dt;
- struct node *c;
- struct property *prop;
- struct marker *m;
- struct node *refnode;
-
- for_each_property(node, prop) {
- m = prop->val.markers;
- for_each_marker_of_type(m, REF_PHANDLE) {
- refnode = get_node_by_ref(dt, m->ref);
- if (refnode)
- add_local_fixup_entry(dti, lfn, node, prop, m, refnode);
- }
- }
-
- for_each_child(node, c)
- generate_local_fixups_tree_internal(dti, lfn, c);
-}
-
-void generate_label_tree(struct dt_info *dti, char *name, bool allocph)
-{
- if (!any_label_tree(dti, dti->dt))
- return;
- generate_label_tree_internal(dti, build_root_node(dti->dt, name),
- dti->dt, allocph);
-}
-
-void generate_fixups_tree(struct dt_info *dti, char *name)
-{
- if (!any_fixup_tree(dti, dti->dt))
- return;
- generate_fixups_tree_internal(dti, build_root_node(dti->dt, name),
- dti->dt);
-}
-
-void generate_local_fixups_tree(struct dt_info *dti, char *name)
-{
- if (!any_local_fixup_tree(dti, dti->dt))
- return;
- generate_local_fixups_tree_internal(dti, build_root_node(dti->dt, name),
- dti->dt);
-}
diff --git a/pylibfdt/Makefile.pylibfdt b/pylibfdt/Makefile.pylibfdt
deleted file mode 100644
index 9507d3d44694..000000000000
--- a/pylibfdt/Makefile.pylibfdt
+++ /dev/null
@@ -1,24 +0,0 @@
-# Makefile.pylibfdt
-#
-
-PYLIBFDT_srcs = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_SRCS)) \
- $(PYLIBFDT_srcdir)/libfdt.i
-PYMODULE = $(PYLIBFDT_objdir)/_libfdt.so
-
-define run_setup
- SOURCES="$(1)" CPPFLAGS="$(CPPFLAGS)" OBJDIR="$(PYLIBFDT_objdir)"
- VERSION="$(dtc_version)"
- $(PYLIBFDT_objdir)/setup.py --quiet $(2)
-endef
-
-$(PYMODULE): $(PYLIBFDT_srcs)
- @$(VECHO) PYMOD $@
- $(call run_setup, $^, build_ext --inplace)
- mv _libfdt.so $@
-
-install_pylibfdt: $(PYMODULE)
- $(VECHO) INSTALL-PYLIB; \
- $(call run_setup, $(PYLIBFDT_srcs), \
- install $(if $(SETUP_PREFIX),--prefix=$(SETUP_PREFIX)))
-
-PYLIBFDT_cleanfiles = libfdt_wrap.c libfdt.py libfdt.pyc _libfdt.so
diff --git a/pylibfdt/libfdt.i b/pylibfdt/libfdt.i
deleted file mode 100644
index 415820d7ae88..000000000000
--- a/pylibfdt/libfdt.i
+++ /dev/null
@@ -1,493 +0,0 @@
-/*
- * pylibfdt - Flat Device Tree manipulation in Python
- * Copyright (C) 2017 Google, Inc.
- * Written by Simon Glass <sjg@chromium.org>
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- * a) This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- *
- * Alternatively,
- *
- * b) Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * 1. Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-%module libfdt
-
-%include <stdint.i>
-
-%{
-#define SWIG_FILE_WITH_INIT
-#include "libfdt.h"
-%}
-
-%pythoncode %{
-
-import struct
-
-# Error codes, corresponding to FDT_ERR_... in libfdt.h
-(NOTFOUND,
- EXISTS,
- NOSPACE,
- BADOFFSET,
- BADPATH,
- BADPHANDLE,
- BADSTATE,
- TRUNCATED,
- BADMAGIC,
- BADVERSION,
- BADSTRUCTURE,
- BADLAYOUT,
- INTERNAL,
- BADNCELLS,
- BADVALUE,
- BADOVERLAY,
- NOPHANDLES) = QUIET_ALL = range(1, 18)
-# QUIET_ALL can be passed as the 'quiet' parameter to avoid exceptions
-# altogether. All # functions passed this value will return an error instead
-# of raising an exception.
-
-# Pass this as the 'quiet' parameter to return -ENOTFOUND on NOTFOUND errors,
-# instead of raising an exception.
-QUIET_NOTFOUND = (NOTFOUND,)
-
-
-class FdtException(Exception):
- """An exception caused by an error such as one of the codes above"""
- def __init__(self, err):
- self.err = err
-
- def __str__(self):
- return 'pylibfdt error %d: %s' % (self.err, fdt_strerror(self.err))
-
-def strerror(fdt_err):
- """Get the string for an error number
-
- Args:
- fdt_err: Error number (-ve)
-
- Returns:
- String containing the associated error
- """
- return fdt_strerror(fdt_err)
-
-def check_err(val, quiet=()):
- """Raise an error if the return value is -ve
-
- This is used to check for errors returned by libfdt C functions.
-
- Args:
- val: Return value from a libfdt function
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- val if val >= 0
-
- Raises
- FdtException if val < 0
- """
- if val < 0:
- if -val not in quiet:
- raise FdtException(val)
- return val
-
-def check_err_null(val, quiet=()):
- """Raise an error if the return value is NULL
-
- This is used to check for a NULL return value from certain libfdt C
- functions
-
- Args:
- val: Return value from a libfdt function
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- val if val is a list, None if not
-
- Raises
- FdtException if val indicates an error was reported and the error
- is not in @quiet.
- """
- # Normally a list is returned which contains the data and its length.
- # If we get just an integer error code, it means the function failed.
- if not isinstance(val, list):
- if -val not in quiet:
- raise FdtException(val)
- return val
-
-class Fdt:
- """Device tree class, supporting all operations
-
- The Fdt object is created is created from a device tree binary file,
- e.g. with something like:
-
- fdt = Fdt(open("filename.dtb").read())
-
- Operations can then be performed using the methods in this class. Each
- method xxx(args...) corresponds to a libfdt function fdt_xxx(fdt, args...).
-
- All methods raise an FdtException if an error occurs. To avoid this
- behaviour a 'quiet' parameter is provided for some functions. This
- defaults to empty, but you can pass a list of errors that you expect.
- If one of these errors occurs, the function will return an error number
- (e.g. -NOTFOUND).
- """
- def __init__(self, data):
- self._fdt = bytearray(data)
- check_err(fdt_check_header(self._fdt));
-
- def subnode_offset(self, parentoffset, name, quiet=()):
- """Get the offset of a named subnode
-
- Args:
- parentoffset: Offset of the parent node to check
- name: Name of the required subnode, e.g. 'subnode@1'
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- The node offset of the found node, if any
-
- Raises
- FdtException if there is no node with that name, or other error
- """
- return check_err(fdt_subnode_offset(self._fdt, parentoffset, name),
- quiet)
-
- def path_offset(self, path, quiet=()):
- """Get the offset for a given path
-
- Args:
- path: Path to the required node, e.g. '/node@3/subnode@1'
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- Node offset
-
- Raises
- FdtException if the path is not valid or not found
- """
- return check_err(fdt_path_offset(self._fdt, path), quiet)
-
- def first_property_offset(self, nodeoffset, quiet=()):
- """Get the offset of the first property in a node offset
-
- Args:
- nodeoffset: Offset to the node to check
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- Offset of the first property
-
- Raises
- FdtException if the associated node has no properties, or some
- other error occurred
- """
- return check_err(fdt_first_property_offset(self._fdt, nodeoffset),
- quiet)
-
- def next_property_offset(self, prop_offset, quiet=()):
- """Get the next property in a node
-
- Args:
- prop_offset: Offset of the previous property
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- Offset of the next property
-
- Raises:
- FdtException if the associated node has no more properties, or
- some other error occurred
- """
- return check_err(fdt_next_property_offset(self._fdt, prop_offset),
- quiet)
-
- def get_name(self, nodeoffset):
- """Get the name of a node
-
- Args:
- nodeoffset: Offset of node to check
-
- Returns:
- Node name
-
- Raises:
- FdtException on error (e.g. nodeoffset is invalid)
- """
- return check_err_null(fdt_get_name(self._fdt, nodeoffset))[0]
-
- def get_property_by_offset(self, prop_offset, quiet=()):
- """Obtains a property that can be examined
-
- Args:
- prop_offset: Offset of property (e.g. from first_property_offset())
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- Property object, or None if not found
-
- Raises:
- FdtException on error (e.g. invalid prop_offset or device
- tree format)
- """
- pdata = check_err_null(
- fdt_get_property_by_offset(self._fdt, prop_offset), quiet)
- if isinstance(pdata, (int)):
- return pdata
- return Property(pdata[0], pdata[1])
-
- def first_subnode(self, nodeoffset, quiet=()):
- """Find the first subnode of a parent node
-
- Args:
- nodeoffset: Node offset of parent node
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- The offset of the first subnode, if any
-
- Raises:
- FdtException if no subnode found or other error occurs
- """
- return check_err(fdt_first_subnode(self._fdt, nodeoffset), quiet)
-
- def next_subnode(self, nodeoffset, quiet=()):
- """Find the next subnode
-
- Args:
- nodeoffset: Node offset of previous subnode
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- The offset of the next subnode, if any
-
- Raises:
- FdtException if no more subnode found or other error occurs
- """
- return check_err(fdt_next_subnode(self._fdt, nodeoffset), quiet)
-
- def totalsize(self):
- """Return the total size of the device tree
-
- Returns:
- Total tree size in bytes
- """
- return check_err(fdt_totalsize(self._fdt))
-
- def off_dt_struct(self):
- """Return the start of the device tree struct area
-
- Returns:
- Start offset of struct area
- """
- return check_err(fdt_off_dt_struct(self._fdt))
-
- def pack(self, quiet=()):
- """Pack the device tree to remove unused space
-
- This adjusts the tree in place.
-
- Args:
- quiet: Errors to ignore (empty to raise on all errors)
-
- Raises:
- FdtException if any error occurs
- """
- return check_err(fdt_pack(self._fdt), quiet)
-
- def delprop(self, nodeoffset, prop_name):
- """Delete a property from a node
-
- Args:
- nodeoffset: Node offset containing property to delete
- prop_name: Name of property to delete
-
- Raises:
- FdtError if the property does not exist, or another error occurs
- """
- return check_err(fdt_delprop(self._fdt, nodeoffset, prop_name))
-
- def getprop(self, nodeoffset, prop_name, quiet=()):
- """Get a property from a node
-
- Args:
- nodeoffset: Node offset containing property to get
- prop_name: Name of property to get
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- Value of property as a bytearray, or -ve error number
-
- Raises:
- FdtError if any error occurs (e.g. the property is not found)
- """
- pdata = check_err_null(fdt_getprop(self._fdt, nodeoffset, prop_name),
- quiet)
- if isinstance(pdata, (int)):
- return pdata
- return bytearray(pdata[0])
-
- def get_phandle(self, nodeoffset):
- """Get the phandle of a node
-
- Args:
- nodeoffset: Node offset to check
-
- Returns:
- phandle of node, or 0 if the node has no phandle or another error
- occurs
- """
- return fdt_get_phandle(self._fdt, nodeoffset)
-
- def parent_offset(self, nodeoffset, quiet=()):
- """Get the offset of a node's parent
-
- Args:
- nodeoffset: Node offset to check
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- The offset of the parent node, if any
-
- Raises:
- FdtException if no parent found or other error occurs
- """
- return check_err(fdt_parent_offset(self._fdt, nodeoffset), quiet)
-
- def node_offset_by_phandle(self, phandle, quiet=()):
- """Get the offset of a node with the given phandle
-
- Args:
- phandle: Phandle to search for
- quiet: Errors to ignore (empty to raise on all errors)
-
- Returns:
- The offset of node with that phandle, if any
-
- Raises:
- FdtException if no node found or other error occurs
- """
- return check_err(fdt_node_offset_by_phandle(self._fdt, phandle), quiet)
-
-class Property:
- """Holds a device tree property name and value.
-
- This holds a copy of a property taken from the device tree. It does not
- reference the device tree, so if anything changes in the device tree,
- a Property object will remain valid.
-
- Properties:
- name: Property name
- value: Proper value as a bytearray
- """
- def __init__(self, name, value):
- self.name = name
- self.value = value
-%}
-
-%rename(fdt_property) fdt_property_func;
-
-typedef int fdt32_t;
-
-%include "libfdt/fdt.h"
-
-%include "typemaps.i"
-
-/* Most functions don't change the device tree, so use a const void * */
-%typemap(in) (const void *)(const void *fdt) {
- if (!PyByteArray_Check($input)) {
- SWIG_exception_fail(SWIG_TypeError, "in method '" "$symname"
- "', argument " "$argnum"" of type '" "$type""'");
- }
- $1 = (void *)PyByteArray_AsString($input);
- fdt = $1;
- fdt = fdt; /* avoid unused variable warning */
-}
-
-/* Some functions do change the device tree, so use void * */
-%typemap(in) (void *)(const void *fdt) {
- if (!PyByteArray_Check($input)) {
- SWIG_exception_fail(SWIG_TypeError, "in method '" "$symname"
- "', argument " "$argnum"" of type '" "$type""'");
- }
- $1 = PyByteArray_AsString($input);
- fdt = $1;
- fdt = fdt; /* avoid unused variable warning */
-}
-
-%typemap(out) (struct fdt_property *) {
- PyObject *buff;
-
- if ($1) {
- resultobj = PyString_FromString(
- fdt_string(fdt1, fdt32_to_cpu($1->nameoff)));
- buff = PyByteArray_FromStringAndSize(
- (const char *)($1 + 1), fdt32_to_cpu($1->len));
- resultobj = SWIG_Python_AppendOutput(resultobj, buff);
- }
-}
-
-%apply int *OUTPUT { int *lenp };
-
-/* typemap used for fdt_getprop() */
-%typemap(out) (const void *) {
- if (!$1)
- $result = Py_None;
- else
- $result = Py_BuildValue("s#", $1, *arg4);
-}
-
-/* We have both struct fdt_property and a function fdt_property() */
-%warnfilter(302) fdt_property;
-
-/* These are macros in the header so have to be redefined here */
-int fdt_magic(const void *fdt);
-int fdt_totalsize(const void *fdt);
-int fdt_off_dt_struct(const void *fdt);
-int fdt_off_dt_strings(const void *fdt);
-int fdt_off_mem_rsvmap(const void *fdt);
-int fdt_version(const void *fdt);
-int fdt_last_comp_version(const void *fdt);
-int fdt_boot_cpuid_phys(const void *fdt);
-int fdt_size_dt_strings(const void *fdt);
-int fdt_size_dt_struct(const void *fdt);
-
-%include <../libfdt/libfdt.h>
diff --git a/pylibfdt/setup.py b/pylibfdt/setup.py
deleted file mode 100755
index 1a1e8327122e..000000000000
--- a/pylibfdt/setup.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/env python2
-
-"""
-setup.py file for SWIG libfdt
-Copyright (C) 2017 Google, Inc.
-Written by Simon Glass <sjg@chromium.org>
-
-Files to be built into the extension are provided in SOURCES
-C flags to use are provided in CPPFLAGS
-Object file directory is provided in OBJDIR
-Version is provided in VERSION
-
-If these variables are not given they are parsed from the Makefiles. This
-allows this script to be run stand-alone, e.g.:
-
- ./pylibfdt/setup.py install [--prefix=...]
-"""
-
-from distutils.core import setup, Extension
-import os
-import re
-import sys
-
-# Decodes a Makefile assignment line into key and value (and plus for +=)
-RE_KEY_VALUE = re.compile('(?P<key>\w+) *(?P<plus>[+])?= *(?P<value>.*)$')
-
-
-def ParseMakefile(fname):
- """Parse a Makefile to obtain its variables.
-
- This collects variable assigments of the form:
-
- VAR = value
- VAR += more
-
- It does not pick out := assignments, as these are not needed here. It does
- handle line continuation.
-
- Returns a dict:
- key: Variable name (e.g. 'VAR')
- value: Variable value (e.g. 'value more')
- """
- makevars = {}
- with open(fname) as fd:
- prev_text = '' # Continuation text from previous line(s)
- for line in fd.read().splitlines():
- if line and line[-1] == '\\': # Deal with line continuation
- prev_text += line[:-1]
- continue
- elif prev_text:
- line = prev_text + line
- prev_text = '' # Continuation is now used up
- m = RE_KEY_VALUE.match(line)
- if m:
- value = m.group('value') or ''
- key = m.group('key')
-
- # Appending to a variable inserts a space beforehand
- if 'plus' in m.groupdict() and key in makevars:
- makevars[key] += ' ' + value
- else:
- makevars[key] = value
- return makevars
-
-def GetEnvFromMakefiles():
- """Scan the Makefiles to obtain the settings we need.
-
- This assumes that this script is being run from the top-level directory,
- not the pylibfdt directory.
-
- Returns:
- Tuple with:
- List of swig options
- Version string
- List of files to build
- List of extra C preprocessor flags needed
- Object directory to use (always '')
- """
- basedir = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
- swig_opts = ['-I%s' % basedir]
- makevars = ParseMakefile(os.path.join(basedir, 'Makefile'))
- version = '%s.%s.%s' % (makevars['VERSION'], makevars['PATCHLEVEL'],
- makevars['SUBLEVEL'])
- makevars = ParseMakefile(os.path.join(basedir, 'libfdt', 'Makefile.libfdt'))
- files = makevars['LIBFDT_SRCS'].split()
- files = [os.path.join(basedir, 'libfdt', fname) for fname in files]
- files.append('pylibfdt/libfdt.i')
- cflags = ['-I%s' % basedir, '-I%s/libfdt' % basedir]
- objdir = ''
- return swig_opts, version, files, cflags, objdir
-
-
-progname = sys.argv[0]
-files = os.environ.get('SOURCES', '').split()
-cflags = os.environ.get('CPPFLAGS', '').split()
-objdir = os.environ.get('OBJDIR')
-version = os.environ.get('VERSION')
-swig_opts = []
-
-# If we were called directly rather than through our Makefile (which is often
-# the case with Python module installation), read the settings from the
-# Makefile.
-if not all((version, files, cflags, objdir)):
- swig_opts, version, files, cflags, objdir = GetEnvFromMakefiles()
-
-libfdt_module = Extension(
- '_libfdt',
- sources = files,
- extra_compile_args = cflags,
- swig_opts = swig_opts,
-)
-
-setup(
- name='libfdt',
- version= version,
- author='Simon Glass <sjg@chromium.org>',
- description='Python binding for libfdt',
- ext_modules=[libfdt_module],
- package_dir={'': objdir},
- py_modules=['pylibfdt/libfdt'],
-)
diff --git a/scripts/kup-dtc b/scripts/kup-dtc
deleted file mode 100755
index e18abbb8c966..000000000000
--- a/scripts/kup-dtc
+++ /dev/null
@@ -1,31 +0,0 @@
-#! /bin/sh
-
-REMOTE_GIT=/pub/scm/utils/dtc/dtc.git
-REMOTE_PATH=/pub/software/utils/dtc
-
-set -e
-
-kup_one () {
- VERSION="$1"
-
- TAG="v$VERSION"
-
- PREFIX="dtc-$VERSION/"
- TAR="dtc-$VERSION.tar"
- SIG="$TAR.sign"
-
- git archive --format=tar --prefix="$PREFIX" -o "$TAR" "$TAG"
- gpg --detach-sign --armor -o "$SIG" "$TAR"
-
- ls -l "$TAR"*
-
- # Verify the signature as a sanity check
- gpg --verify "$SIG" "$TAR"
-
- kup put --tar --prefix="$PREFIX" "$REMOTE_GIT" "$TAG" "$SIG" "$REMOTE_PATH/$TAR.gz"
-}
-
-for version; do
- kup_one $version
-done
-
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
deleted file mode 100755
index 82e4993f0a73..000000000000
--- a/scripts/setlocalversion
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-# Print additional version information for non-release trees.
-
-usage() {
- echo "Usage: $0 [srctree]" >&2
- exit 1
-}
-
-cd "${1:-.}" || usage
-
-# Check for git and a git repo.
-if head=`git rev-parse --verify HEAD 2>/dev/null`; then
- # Do we have an untagged version?
- if git name-rev --tags HEAD | grep -E '^HEAD[[:space:]]+(.*~[0-9]*|undefined)$' > /dev/null; then
- printf '%s%s' -g `echo "$head" | cut -c1-8`
- fi
-
- # Are there uncommitted changes?
- if git diff-index HEAD | read dummy; then
- printf '%s' -dirty
- fi
-fi
diff --git a/srcpos.c b/srcpos.c
deleted file mode 100644
index 9d38459902f3..000000000000
--- a/srcpos.c
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#define _GNU_SOURCE
-
-#include <stdio.h>
-
-#include "dtc.h"
-#include "srcpos.h"
-
-/* A node in our list of directories to search for source/include files */
-struct search_path {
- struct search_path *next; /* next node in list, NULL for end */
- const char *dirname; /* name of directory to search */
-};
-
-/* This is the list of directories that we search for source files */
-static struct search_path *search_path_head, **search_path_tail;
-
-
-static char *get_dirname(const char *path)
-{
- const char *slash = strrchr(path, '/');
-
- if (slash) {
- int len = slash - path;
- char *dir = xmalloc(len + 1);
-
- memcpy(dir, path, len);
- dir[len] = '\0';
- return dir;
- }
- return NULL;
-}
-
-FILE *depfile; /* = NULL */
-struct srcfile_state *current_srcfile; /* = NULL */
-
-/* Detect infinite include recursion. */
-#define MAX_SRCFILE_DEPTH (100)
-static int srcfile_depth; /* = 0 */
-
-
-/**
- * Try to open a file in a given directory.
- *
- * If the filename is an absolute path, then dirname is ignored. If it is a
- * relative path, then we look in that directory for the file.
- *
- * @param dirname Directory to look in, or NULL for none
- * @param fname Filename to look for
- * @param fp Set to NULL if file did not open
- * @return allocated filename on success (caller must free), NULL on failure
- */
-static char *try_open(const char *dirname, const char *fname, FILE **fp)
-{
- char *fullname;
-
- if (!dirname || fname[0] == '/')
- fullname = xstrdup(fname);
- else
- fullname = join_path(dirname, fname);
-
- *fp = fopen(fullname, "rb");
- if (!*fp) {
- free(fullname);
- fullname = NULL;
- }
-
- return fullname;
-}
-
-/**
- * Open a file for read access
- *
- * If it is a relative filename, we search the full search path for it.
- *
- * @param fname Filename to open
- * @param fp Returns pointer to opened FILE, or NULL on failure
- * @return pointer to allocated filename, which caller must free
- */
-static char *fopen_any_on_path(const char *fname, FILE **fp)
-{
- const char *cur_dir = NULL;
- struct search_path *node;
- char *fullname;
-
- /* Try current directory first */
- assert(fp);
- if (current_srcfile)
- cur_dir = current_srcfile->dir;
- fullname = try_open(cur_dir, fname, fp);
-
- /* Failing that, try each search path in turn */
- for (node = search_path_head; !*fp && node; node = node->next)
- fullname = try_open(node->dirname, fname, fp);
-
- return fullname;
-}
-
-FILE *srcfile_relative_open(const char *fname, char **fullnamep)
-{
- FILE *f;
- char *fullname;
-
- if (streq(fname, "-")) {
- f = stdin;
- fullname = xstrdup("<stdin>");
- } else {
- fullname = fopen_any_on_path(fname, &f);
- if (!f)
- die("Couldn't open \"%s\": %s\n", fname,
- strerror(errno));
- }
-
- if (depfile)
- fprintf(depfile, " %s", fullname);
-
- if (fullnamep)
- *fullnamep = fullname;
- else
- free(fullname);
-
- return f;
-}
-
-void srcfile_push(const char *fname)
-{
- struct srcfile_state *srcfile;
-
- if (srcfile_depth++ >= MAX_SRCFILE_DEPTH)
- die("Includes nested too deeply");
-
- srcfile = xmalloc(sizeof(*srcfile));
-
- srcfile->f = srcfile_relative_open(fname, &srcfile->name);
- srcfile->dir = get_dirname(srcfile->name);
- srcfile->prev = current_srcfile;
-
- srcfile->lineno = 1;
- srcfile->colno = 1;
-
- current_srcfile = srcfile;
-}
-
-bool srcfile_pop(void)
-{
- struct srcfile_state *srcfile = current_srcfile;
-
- assert(srcfile);
-
- current_srcfile = srcfile->prev;
-
- if (fclose(srcfile->f))
- die("Error closing \"%s\": %s\n", srcfile->name,
- strerror(errno));
-
- /* FIXME: We allow the srcfile_state structure to leak,
- * because it could still be referenced from a location
- * variable being carried through the parser somewhere. To
- * fix this we could either allocate all the files from a
- * table, or use a pool allocator. */
-
- return current_srcfile ? true : false;
-}
-
-void srcfile_add_search_path(const char *dirname)
-{
- struct search_path *node;
-
- /* Create the node */
- node = xmalloc(sizeof(*node));
- node->next = NULL;
- node->dirname = xstrdup(dirname);
-
- /* Add to the end of our list */
- if (search_path_tail)
- *search_path_tail = node;
- else
- search_path_head = node;
- search_path_tail = &node->next;
-}
-
-/*
- * The empty source position.
- */
-
-struct srcpos srcpos_empty = {
- .first_line = 0,
- .first_column = 0,
- .last_line = 0,
- .last_column = 0,
- .file = NULL,
-};
-
-#define TAB_SIZE 8
-
-void srcpos_update(struct srcpos *pos, const char *text, int len)
-{
- int i;
-
- pos->file = current_srcfile;
-
- pos->first_line = current_srcfile->lineno;
- pos->first_column = current_srcfile->colno;
-
- for (i = 0; i < len; i++)
- if (text[i] == '\n') {
- current_srcfile->lineno++;
- current_srcfile->colno = 1;
- } else if (text[i] == '\t') {
- current_srcfile->colno =
- ALIGN(current_srcfile->colno, TAB_SIZE);
- } else {
- current_srcfile->colno++;
- }
-
- pos->last_line = current_srcfile->lineno;
- pos->last_column = current_srcfile->colno;
-}
-
-struct srcpos *
-srcpos_copy(struct srcpos *pos)
-{
- struct srcpos *pos_new;
-
- pos_new = xmalloc(sizeof(struct srcpos));
- memcpy(pos_new, pos, sizeof(struct srcpos));
-
- return pos_new;
-}
-
-char *
-srcpos_string(struct srcpos *pos)
-{
- const char *fname = "<no-file>";
- char *pos_str;
-
- if (pos->file && pos->file->name)
- fname = pos->file->name;
-
-
- if (pos->first_line != pos->last_line)
- xasprintf(&pos_str, "%s:%d.%d-%d.%d", fname,
- pos->first_line, pos->first_column,
- pos->last_line, pos->last_column);
- else if (pos->first_column != pos->last_column)
- xasprintf(&pos_str, "%s:%d.%d-%d", fname,
- pos->first_line, pos->first_column,
- pos->last_column);
- else
- xasprintf(&pos_str, "%s:%d.%d", fname,
- pos->first_line, pos->first_column);
-
- return pos_str;
-}
-
-void srcpos_verror(struct srcpos *pos, const char *prefix,
- const char *fmt, va_list va)
-{
- char *srcstr;
-
- srcstr = srcpos_string(pos);
-
- fprintf(stderr, "%s: %s ", prefix, srcstr);
- vfprintf(stderr, fmt, va);
- fprintf(stderr, "\n");
-
- free(srcstr);
-}
-
-void srcpos_error(struct srcpos *pos, const char *prefix,
- const char *fmt, ...)
-{
- va_list va;
-
- va_start(va, fmt);
- srcpos_verror(pos, prefix, fmt, va);
- va_end(va);
-}
-
-void srcpos_set_line(char *f, int l)
-{
- current_srcfile->name = f;
- current_srcfile->lineno = l;
-}
diff --git a/srcpos.h b/srcpos.h
deleted file mode 100644
index 9ded12a3830a..000000000000
--- a/srcpos.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#ifndef SRCPOS_H
-#define SRCPOS_H
-
-#include <stdio.h>
-#include <stdbool.h>
-#include "util.h"
-
-struct srcfile_state {
- FILE *f;
- char *name;
- char *dir;
- int lineno, colno;
- struct srcfile_state *prev;
-};
-
-extern FILE *depfile; /* = NULL */
-extern struct srcfile_state *current_srcfile; /* = NULL */
-
-/**
- * Open a source file.
- *
- * If the source file is a relative pathname, then it is searched for in the
- * current directory (the directory of the last source file read) and after
- * that in the search path.
- *
- * We work through the search path in order from the first path specified to
- * the last.
- *
- * If the file is not found, then this function does not return, but calls
- * die().
- *
- * @param fname Filename to search
- * @param fullnamep If non-NULL, it is set to the allocated filename of the
- * file that was opened. The caller is then responsible
- * for freeing the pointer.
- * @return pointer to opened FILE
- */
-FILE *srcfile_relative_open(const char *fname, char **fullnamep);
-
-void srcfile_push(const char *fname);
-bool srcfile_pop(void);
-
-/**
- * Add a new directory to the search path for input files
- *
- * The new path is added at the end of the list.
- *
- * @param dirname Directory to add
- */
-void srcfile_add_search_path(const char *dirname);
-
-struct srcpos {
- int first_line;
- int first_column;
- int last_line;
- int last_column;
- struct srcfile_state *file;
-};
-
-#define YYLTYPE struct srcpos
-
-#define YYLLOC_DEFAULT(Current, Rhs, N) \
- do { \
- if (N) { \
- (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \
- (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \
- (Current).last_line = YYRHSLOC(Rhs, N).last_line; \
- (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
- (Current).file = YYRHSLOC(Rhs, N).file; \
- } else { \
- (Current).first_line = (Current).last_line = \
- YYRHSLOC(Rhs, 0).last_line; \
- (Current).first_column = (Current).last_column = \
- YYRHSLOC(Rhs, 0).last_column; \
- (Current).file = YYRHSLOC (Rhs, 0).file; \
- } \
- } while (0)
-
-
-/*
- * Fictional source position used for IR nodes that are
- * created without otherwise knowing a true source position.
- * For example,constant definitions from the command line.
- */
-extern struct srcpos srcpos_empty;
-
-extern void srcpos_update(struct srcpos *pos, const char *text, int len);
-extern struct srcpos *srcpos_copy(struct srcpos *pos);
-extern char *srcpos_string(struct srcpos *pos);
-
-extern void PRINTF(3, 0) srcpos_verror(struct srcpos *pos, const char *prefix,
- const char *fmt, va_list va);
-extern void PRINTF(3, 4) srcpos_error(struct srcpos *pos, const char *prefix,
- const char *fmt, ...);
-
-extern void srcpos_set_line(char *f, int l);
-
-#endif /* SRCPOS_H */
diff --git a/tests/Makefile.tests b/tests/Makefile.tests
deleted file mode 100644
index 22581359623c..000000000000
--- a/tests/Makefile.tests
+++ /dev/null
@@ -1,87 +0,0 @@
-LIB_TESTS_L = get_mem_rsv \
- root_node find_property subnode_offset path_offset \
- get_name getprop get_phandle \
- get_path supernode_atdepth_offset parent_offset \
- node_offset_by_prop_value node_offset_by_phandle \
- node_check_compatible node_offset_by_compatible \
- get_alias \
- char_literal \
- sized_cells \
- notfound \
- addr_size_cells \
- stringlist \
- setprop_inplace nop_property nop_node \
- sw_tree1 \
- move_and_save mangle-layout nopulate \
- open_pack rw_tree1 set_name setprop del_property del_node \
- appendprop1 appendprop2 propname_escapes \
- string_escapes references path-references phandle_format \
- boot-cpuid incbin \
- extra-terminating-null \
- dtbs_equal_ordered \
- dtb_reverse dtbs_equal_unordered \
- add_subnode_with_nops path_offset_aliases \
- utilfdt_test \
- integer-expressions \
- property_iterate \
- subnode_iterate \
- overlay overlay_bad_fixup \
- check_path
-LIB_TESTS = $(LIB_TESTS_L:%=$(TESTS_PREFIX)%)
-
-LIBTREE_TESTS_L = truncated_property
-LIBTREE_TESTS = $(LIBTREE_TESTS_L:%=$(TESTS_PREFIX)%)
-
-DL_LIB_TESTS_L = asm_tree_dump value-labels
-DL_LIB_TESTS = $(DL_LIB_TESTS_L:%=$(TESTS_PREFIX)%)
-
-TESTS = $(LIB_TESTS) $(LIBTREE_TESTS) $(DL_LIB_TESTS)
-
-TESTS_TREES_L = test_tree1.dtb
-TESTS_TREES = $(TESTS_TREES_L:%=$(TESTS_PREFIX)%)
-
-TESTS_TARGETS = $(TESTS) $(TESTS_TREES)
-
-TESTS_DEPFILES = $(TESTS:%=%.d) \
- $(addprefix $(TESTS_PREFIX),testutils.d trees.d dumptrees.d)
-
-TESTS_CLEANFILES_L = *.output vglog.* vgcore.* *.dtb *.test.dts *.dtsv1 tmp.*
-TESTS_CLEANFILES_L += dumptrees
-TESTS_CLEANFILES = $(TESTS) $(TESTS_CLEANFILES_L:%=$(TESTS_PREFIX)%)
-
-.PHONY: tests
-tests: $(TESTS) $(TESTS_TREES)
-
-$(LIB_TESTS): %: $(TESTS_PREFIX)testutils.o util.o $(LIBFDT_archive)
-
-$(DL_LIB_TESTS): %: %.o $(TESTS_PREFIX)testutils.o util.o $(LIBFDT_archive)
- @$(VECHO) LD [libdl] $@
- $(LINK.c) -o $@ $^ -ldl
-
-$(LIBTREE_TESTS): %: $(TESTS_PREFIX)testutils.o $(TESTS_PREFIX)trees.o \
- util.o $(LIBFDT_archive)
-
-$(TESTS_PREFIX)dumptrees: $(TESTS_PREFIX)trees.o
-
-$(TESTS_TREES): $(TESTS_PREFIX)dumptrees
- @$(VECHO) DUMPTREES
- cd $(TESTS_PREFIX); ./dumptrees >/dev/null
-
-tests_clean:
- @$(VECHO) CLEAN "(tests)"
- rm -f $(STD_CLEANFILES:%=$(TESTS_PREFIX)%)
- rm -f $(TESTS_CLEANFILES)
-
-check: tests ${TESTS_BIN} $(TESTS_PYLIBFDT)
- cd $(TESTS_PREFIX); ./run_tests.sh
-
-checkm: tests ${TESTS_BIN} $(TESTS_PYLIBFDT)
- cd $(TESTS_PREFIX); ./run_tests.sh -m 2>&1 | tee vglog.$$$$
-
-checkv: tests ${TESTS_BIN} $(TESTS_PYLIBFDT)
- cd $(TESTS_PREFIX); ./run_tests.sh -v
-
-ifneq ($(DEPTARGETS),)
--include $(TESTS_DEPFILES)
-endif
-
diff --git a/tests/add_subnode_with_nops.c b/tests/add_subnode_with_nops.c
deleted file mode 100644
index 95ddf6a5928c..000000000000
--- a/tests/add_subnode_with_nops.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_nop_node()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-#define SPACE 65536
-
-#define CHECK(code) \
- { \
- err = (code); \
- if (err) \
- FAIL(#code ": %s", fdt_strerror(err)); \
- }
-
-#define OFF_CHECK(off, code) \
- { \
- (off) = (code); \
- if (off < 0) \
- FAIL(#code ": %s", fdt_strerror(off)); \
- }
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int err;
- int offset;
-
- test_init(argc, argv);
-
- fdt = xmalloc(SPACE);
-
- CHECK(fdt_create(fdt, SPACE));
-
- CHECK(fdt_finish_reservemap(fdt));
- CHECK(fdt_begin_node(fdt, ""));
- CHECK(fdt_property_cell(fdt, "prop1", TEST_VALUE_1));
- CHECK(fdt_property_cell(fdt, "prop2", TEST_VALUE_2));
- CHECK(fdt_end_node(fdt));
- CHECK(fdt_finish(fdt));
-
- verbose_printf("Built empty tree, totalsize = %d\n",
- fdt_totalsize(fdt));
-
- CHECK(fdt_open_into(fdt, fdt, SPACE));
-
- check_getprop_cell(fdt, 0, "prop1", TEST_VALUE_1);
- check_getprop_cell(fdt, 0, "prop2", TEST_VALUE_2);
-
- CHECK(fdt_nop_property(fdt, 0, "prop1"));
-
- check_getprop_cell(fdt, 0, "prop2", TEST_VALUE_2);
-
- OFF_CHECK(offset, fdt_add_subnode(fdt, 0, "subnode"));
-
- check_getprop_cell(fdt, 0, "prop2", TEST_VALUE_2);
-
- PASS();
-}
diff --git a/tests/addr_size_cells.c b/tests/addr_size_cells.c
deleted file mode 100644
index 6090d93b3345..000000000000
--- a/tests/addr_size_cells.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for #address-cells and #size-cells handling
- * Copyright (C) 2014 David Gibson, <david@gibson.dropbear.id.au>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_node(const void *fdt, const char *path, int ac, int sc)
-{
- int offset;
- int xac, xsc;
-
- offset = fdt_path_offset(fdt, path);
- if (offset < 0)
- FAIL("Couldn't find path %s", path);
-
- xac = fdt_address_cells(fdt, offset);
- xsc = fdt_size_cells(fdt, offset);
-
- if (xac != ac)
- FAIL("Address cells for %s is %d instead of %d\n",
- path, xac, ac);
- if (xsc != sc)
- FAIL("Size cells for %s is %d instead of %d\n",
- path, xsc, sc);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- if (argc != 2)
- CONFIG("Usage: %s <dtb file>\n", argv[0]);
-
- test_init(argc, argv);
- fdt = load_blob(argv[1]);
-
- check_node(fdt, "/", 2, 2);
- check_node(fdt, "/identity-bus@0", 2, 2);
- check_node(fdt, "/simple-bus@1000000", 2, 1);
- PASS();
-}
diff --git a/tests/addresses.dts b/tests/addresses.dts
deleted file mode 100644
index a2faaf59fd7a..000000000000
--- a/tests/addresses.dts
+++ /dev/null
@@ -1,15 +0,0 @@
-/dts-v1/;
-
-/ {
- compatible = "test_addresses";
- #address-cells = <2>;
- #size-cells = <2>;
-
- identity-bus@0 {
- };
-
- simple-bus@1000000 {
- #address-cells = <2>;
- #size-cells = <1>;
- };
-};
diff --git a/tests/aliases.dts b/tests/aliases.dts
deleted file mode 100644
index 853479aee766..000000000000
--- a/tests/aliases.dts
+++ /dev/null
@@ -1,25 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <1>;
- #size-cells = <0>;
-
- aliases {
- s1 = &sub1;
- ss1 = &subsub1;
- sss1 = &subsubsub1;
- };
-
- sub1: subnode@1 {
- compatible = "subnode1";
- reg = <1>;
-
- subsub1: subsubnode {
- compatible = "subsubnode1", "subsubnode";
-
- subsubsub1: subsubsubnode {
- compatible = "subsubsubnode1", "subsubsubnode";
- };
- };
- };
-};
diff --git a/tests/appendprop.dts b/tests/appendprop.dts
deleted file mode 100644
index f4bc730e5659..000000000000
--- a/tests/appendprop.dts
+++ /dev/null
@@ -1,8 +0,0 @@
-/dts-v1/;
-
-/ {
- prop-str = "hello world", "nastystring: \a\b\t\n\v\f\r\\\"";
- prop-int64 = /bits/ 64 <0xdeadbeef01abcdef 0xdeadbeef01abcdef>;
- prop-int = <0xdeadbeef 123456789>;
- prop-bytes = [00010203040001020304];
-};
diff --git a/tests/appendprop1.c b/tests/appendprop1.c
deleted file mode 100644
index 9d6b3add9d43..000000000000
--- a/tests/appendprop1.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_appendprop()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-#define SPACE 65536
-
-#define CHECK(code) \
- { \
- err = (code); \
- if (err) \
- FAIL(#code ": %s", fdt_strerror(err)); \
- }
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int err;
- uint8_t bytes[] = {0x00, 0x01, 0x02, 0x03, 0x04};
-
- test_init(argc, argv);
-
- /* Create an empty tree first */
- fdt = xmalloc(SPACE);
- CHECK(fdt_create(fdt, SPACE));
- CHECK(fdt_finish_reservemap(fdt));
- CHECK(fdt_begin_node(fdt, ""));
- CHECK(fdt_end_node(fdt));
- CHECK(fdt_finish(fdt));
-
- /* Now use appendprop to add properties */
- CHECK(fdt_open_into(fdt, fdt, SPACE));
-
- CHECK(fdt_appendprop(fdt, 0, "prop-bytes", bytes, sizeof(bytes)));
- CHECK(fdt_appendprop_cell(fdt, 0, "prop-int", TEST_VALUE_1));
- CHECK(fdt_appendprop_u64(fdt, 0, "prop-int64", TEST_VALUE64_1));
- CHECK(fdt_appendprop_string(fdt, 0, "prop-str", TEST_STRING_1));
-
- CHECK(fdt_pack(fdt));
-
- save_blob("appendprop1.test.dtb", fdt);
-
- PASS();
-}
diff --git a/tests/appendprop2.c b/tests/appendprop2.c
deleted file mode 100644
index ca1446c513b4..000000000000
--- a/tests/appendprop2.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_appendprop()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-#define SPACE 65536
-
-#define CHECK(code) \
- { \
- err = (code); \
- if (err) \
- FAIL(#code ": %s", fdt_strerror(err)); \
- }
-
-int main(int argc, char *argv[])
-{
- void *fdt, *buf;
- int err;
- uint8_t bytes[] = {0x00, 0x01, 0x02, 0x03, 0x04};
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- buf = xmalloc(SPACE);
- CHECK(fdt_open_into(fdt, buf, SPACE));
- fdt = buf;
-
- CHECK(fdt_appendprop(fdt, 0, "prop-bytes", bytes, sizeof(bytes)));
- CHECK(fdt_appendprop_cell(fdt, 0, "prop-int", TEST_VALUE_2));
- CHECK(fdt_appendprop_u64(fdt, 0, "prop-int64", TEST_VALUE64_1));
- CHECK(fdt_appendprop_string(fdt, 0, "prop-str", TEST_STRING_2));
-
- CHECK(fdt_pack(fdt));
-
- save_blob("appendprop2.test.dtb", fdt);
-
- PASS();
-}
diff --git a/tests/asm_tree_dump.c b/tests/asm_tree_dump.c
deleted file mode 100644
index bd12edaa880d..000000000000
--- a/tests/asm_tree_dump.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Tests if an asm tree built into a shared object matches a given dtb
- * Copyright (C) 2008 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <errno.h>
-
-#include <dlfcn.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *sohandle;
- void *fdt;
- int err;
-
- test_init(argc, argv);
- if (argc != 3)
- CONFIG("Usage: %s <so file> <dtb file>", argv[0]);
-
- sohandle = dlopen(argv[1], RTLD_NOW);
- if (!sohandle)
- FAIL("Couldn't dlopen() %s", argv[1]);
-
- fdt = dlsym(sohandle, "dt_blob_start");
- if (!fdt)
- FAIL("Couldn't locate \"dt_blob_start\" symbol in %s",
- argv[1]);
-
- err = fdt_check_header(fdt);
- if (err != 0)
- FAIL("%s contains invalid tree: %s", argv[1],
- fdt_strerror(err));
-
- save_blob(argv[2], fdt);
-
- PASS();
-}
diff --git a/tests/bad-chosen.dts b/tests/bad-chosen.dts
deleted file mode 100644
index d6f53c68ddd9..000000000000
--- a/tests/bad-chosen.dts
+++ /dev/null
@@ -1,10 +0,0 @@
-/dts-v1/;
-
-/ {
- node2 {
- chosen {
- bootargs = <0xdeadbeef>;
- stdout-path = <1>;
- };
- };
-};
diff --git a/tests/bad-empty-ranges.dts b/tests/bad-empty-ranges.dts
deleted file mode 100644
index 2be7bc858dae..000000000000
--- a/tests/bad-empty-ranges.dts
+++ /dev/null
@@ -1,11 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <2>;
- #size-cells = <2>;
- node {
- #address-cells = <1>;
- #size-cells = <1>;
- ranges;
- };
-};
diff --git a/tests/bad-gpio.dts b/tests/bad-gpio.dts
deleted file mode 100644
index 6b77be447b82..000000000000
--- a/tests/bad-gpio.dts
+++ /dev/null
@@ -1,13 +0,0 @@
-/dts-v1/;
-
-/ {
- gpio: gpio-controller {
- #gpio-cells = <3>;
- };
-
- node {
- nr-gpios = <1>;
- foo-gpios = <&gpio>;
- bar-gpio = <&gpio 1 2 3>;
- };
-};
diff --git a/tests/bad-interrupt-cells.dts b/tests/bad-interrupt-cells.dts
deleted file mode 100644
index 39fc78fdc11d..000000000000
--- a/tests/bad-interrupt-cells.dts
+++ /dev/null
@@ -1,12 +0,0 @@
-/dts-v1/;
-
-/ {
- interrupt-parent = <&intc>;
- intc: interrupt-controller {
- #interrupt-cells = <3>;
- };
-
- node {
- interrupts = <1>;
- };
-};
diff --git a/tests/bad-name-property.dts b/tests/bad-name-property.dts
deleted file mode 100644
index 4fde4bef118c..000000000000
--- a/tests/bad-name-property.dts
+++ /dev/null
@@ -1,7 +0,0 @@
-/dts-v1/;
-
-/ {
- node@0 {
- name = "badthing";
- };
-};
diff --git a/tests/bad-ncells.dts b/tests/bad-ncells.dts
deleted file mode 100644
index 636198cbfcca..000000000000
--- a/tests/bad-ncells.dts
+++ /dev/null
@@ -1,7 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = "badthing";
- #size-cells = "badthing";
- #interrupt-cells = "badthing";
-};
diff --git a/tests/bad-octal-literal.dts b/tests/bad-octal-literal.dts
deleted file mode 100644
index 26558a2740f4..000000000000
--- a/tests/bad-octal-literal.dts
+++ /dev/null
@@ -1,5 +0,0 @@
-/dts-v1/;
-
-/ {
- x = <09>;
-};
diff --git a/tests/bad-phandle-cells.dts b/tests/bad-phandle-cells.dts
deleted file mode 100644
index 7f7c6a25fd25..000000000000
--- a/tests/bad-phandle-cells.dts
+++ /dev/null
@@ -1,11 +0,0 @@
-/dts-v1/;
-
-/ {
- intc: interrupt-controller {
- #interrupt-cells = <3>;
- };
-
- node {
- interrupts-extended = <&intc>;
- };
-};
diff --git a/tests/bad-reg-ranges.dts b/tests/bad-reg-ranges.dts
deleted file mode 100644
index 77419f5bf76b..000000000000
--- a/tests/bad-reg-ranges.dts
+++ /dev/null
@@ -1,12 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <2>;
- #size-cells = <2>;
- node {
- reg = <0 0>;
- #address-cells = <1>;
- #size-cells = <1>;
- ranges = <0 0 0>;
- };
-};
diff --git a/tests/bad-size-cells.dts b/tests/bad-size-cells.dts
deleted file mode 100644
index 515c0cc7ba45..000000000000
--- a/tests/bad-size-cells.dts
+++ /dev/null
@@ -1,12 +0,0 @@
-/dts-v1/;
-
-/ {
- mangled {
- #address-cells = <0x0>;
- #size-cells = <0x0>;
-
- valid {
- reg = <0x0 0x4000000>;
- };
- };
-};
diff --git a/tests/bad-string-props.dts b/tests/bad-string-props.dts
deleted file mode 100644
index 6694704a5fc2..000000000000
--- a/tests/bad-string-props.dts
+++ /dev/null
@@ -1,14 +0,0 @@
-/dts-v1/;
-
-/ {
- device_type = <0xdeadbeef>;
- model = <0xdeadbeef>;
- status = <0xdeadbeef>;
- label = <0xdeadbeef>;
-
- foobar-names = "foo", <1>;
-
- node {
- compatible = "good", <0xdeadbeef>;
- };
-};
diff --git a/tests/base01.asm b/tests/base01.asm
deleted file mode 100644
index 266e446517e9..000000000000
--- a/tests/base01.asm
+++ /dev/null
@@ -1,175 +0,0 @@
-/* autogenerated by dtc, do not edit */
-
-#define OF_DT_HEADER 0xd00dfeed
-#define OF_DT_BEGIN_NODE 0x1
-#define OF_DT_END_NODE 0x2
-#define OF_DT_PROP 0x3
-#define OF_DT_END 0x9
-
- .globl dt_blob_start
-dt_blob_start:
-_dt_blob_start:
- .globl dt_header
-dt_header:
-_dt_header:
- .long OF_DT_HEADER /* magic */
- .long _dt_blob_end - _dt_blob_start /* totalsize */
- .long _dt_struct_start - _dt_blob_start /* off_dt_struct */
- .long _dt_strings_start - _dt_blob_start /* off_dt_strings */
- .long _dt_reserve_map - _dt_blob_start /* off_dt_strings */
- .long 16 /* version */
- .long 16 /* last_comp_version */
- .long 0 /*boot_cpuid_phys*/
- .long _dt_strings_end - _dt_strings_start /* size_dt_strings */
- .balign 8
- .globl dt_reserve_map
-dt_reserve_map:
-_dt_reserve_map:
-/* Memory reserve map from source file */
- .long 0, 0
- .long 0, 0
- .globl dt_struct_start
-dt_struct_start:
-_dt_struct_start:
- .long OF_DT_BEGIN_NODE
- .string ""
- .balign 4
- .long OF_DT_PROP
- .long 0xa
- .long 0x0
- .long 0x536f6d65
- .long 0x4d6f6465
- .short 0x6c00
- .balign 4
- .long OF_DT_PROP
- .long 0x8
- .long 0x6
- .long 0x4e6f7468
- .long 0x696e6700
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x11
- .long 0x2
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x20
- .long 0x2
- .balign 4
- .long OF_DT_BEGIN_NODE
- .string "memory@0"
- .balign 4
- .long OF_DT_PROP
- .long 0x7
- .long 0x2c
- .long 0x6d656d6f
- .short 0x7279
- .byte 0x0
- .balign 4
- .long OF_DT_PROP
- .long 0x10
- .long 0x38
- .long 0x0
- .long 0x0
- .long 0x0
- .long 0x20000000
- .balign 4
- .long OF_DT_END_NODE
- .long OF_DT_BEGIN_NODE
- .string "cpus"
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x11
- .long 0x1
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x20
- .long 0x0
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x3c
- .long 0xa
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x40
- .long 0x17
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x44
- .long 0x5
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x49
- .long 0xf
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x4d
- .long 0xd00d
- .balign 4
- .long OF_DT_PROP
- .long 0x10
- .long 0x53
- .long 0x4d2
- .long 0x162e
- .long 0x2334
- .long 0xd80
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x59
- .long 0x0
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x61
- .long 0xffffffff
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x69
- .long 0x0
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x71
- .long 0xffffffff
- .balign 4
- .long OF_DT_END_NODE
- .long OF_DT_END_NODE
- .long OF_DT_END
- .globl dt_struct_end
-dt_struct_end:
-_dt_struct_end:
- .globl dt_strings_start
-dt_strings_start:
-_dt_strings_start:
- .string "model"
- .string "compatible"
- .string "#address-cells"
- .string "#size-cells"
- .string "device_type"
- .string "reg"
- .string "d10"
- .string "d23"
- .string "b101"
- .string "o17"
- .string "hd00d"
- .string "stuff"
- .string "bad-d-1"
- .string "bad-d-2"
- .string "bad-o-1"
- .string "bad-o-2"
- .globl dt_strings_end
-dt_strings_end:
-_dt_strings_end:
- .globl dt_blob_end
-dt_blob_end:
-_dt_blob_end:
diff --git a/tests/base01.cmd b/tests/base01.cmd
deleted file mode 100644
index e1fce6c88843..000000000000
--- a/tests/base01.cmd
+++ /dev/null
@@ -1 +0,0 @@
-dtc -f -b 0 -V 16 -I dts -O asm
diff --git a/tests/base01.dts b/tests/base01.dts
deleted file mode 100644
index 97a5dd50b290..000000000000
--- a/tests/base01.dts
+++ /dev/null
@@ -1,33 +0,0 @@
-/dts-v1/;
-
-/ {
- model = "SomeModel";
- compatible = "Nothing";
- #address-cells = <2>;
- #size-cells = <2>;
-
- memory@0 {
- device_type = "memory";
- reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
- };
-
- cpus {
- #address-cells = <1>;
- #size-cells = <0>;
- d10 = < 10>; // hex: 0xa
- d23 = < 23>; // hex: 0x17
- b101 = < 0x5>; // hex: 0x5
- o17 = < 017>; // hex: 0xf
- hd00d = < 0xd00d>; // hex: 0xd00d
-
- // hex: 0x4d2 0x163e 0x2334 0xd80
- stuff = < 1234 5678 9012 3456>;
-
-
- bad-d-1 = < 0>; // Hrm. 0
- bad-d-2 = < 123456789012345>;
- bad-o-1 = < 00>;
- bad-o-2 = < 0123456123456>;
- };
-
-};
diff --git a/tests/base01.stderr b/tests/base01.stderr
deleted file mode 100644
index 0510b0fb4dbc..000000000000
--- a/tests/base01.stderr
+++ /dev/null
@@ -1,6 +0,0 @@
-DTC: dts->asm on file "tests/base01.dts"
-Line 26: Invalid cell value '123456789012345'; -1 assumed
-Line 27: Invalid cell value '891'; 0 assumed
-Line 28: Invalid cell value '123456123456'; -1 assumed
-ERROR: Missing /chosen node
-Input tree has errors
diff --git a/tests/boot-cpuid.c b/tests/boot-cpuid.c
deleted file mode 100644
index ca39f4b69294..000000000000
--- a/tests/boot-cpuid.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2008 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- uint32_t cpuid;
-
- test_init(argc, argv);
-
- if (argc != 3)
- CONFIG("Usage: %s <dtb file> <cpuid>", argv[0]);
-
- fdt = load_blob(argv[1]);
- cpuid = strtoul(argv[2], NULL, 0);
-
- if (fdt_boot_cpuid_phys(fdt) != cpuid)
- FAIL("Incorrect boot_cpuid_phys (0x%x instead of 0x%x)",
- fdt_boot_cpuid_phys(fdt), cpuid);
-
- PASS();
-}
diff --git a/tests/boot-cpuid.dts b/tests/boot-cpuid.dts
deleted file mode 100644
index 7021a241f939..000000000000
--- a/tests/boot-cpuid.dts
+++ /dev/null
@@ -1,16 +0,0 @@
-/dts-v1/;
-
-/ {
- cpus {
- cpu@10 {
- device_type = "cpu";
- compatible = "fake-cpu";
- reg = <0x10>;
- };
- cpu@11 {
- device_type = "cpu";
- compatible = "fake-cpu";
- reg = <0x11>;
- };
- };
-};
diff --git a/tests/char_literal.c b/tests/char_literal.c
deleted file mode 100644
index da1f964d85fa..000000000000
--- a/tests/char_literal.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for character literals in dtc
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- * Copyright (C) 2011 The Chromium Authors. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- fdt32_t expected_cells[5];
-
- expected_cells[0] = cpu_to_fdt32((unsigned char)TEST_CHAR1);
- expected_cells[1] = cpu_to_fdt32((unsigned char)TEST_CHAR2);
- expected_cells[2] = cpu_to_fdt32((unsigned char)TEST_CHAR3);
- expected_cells[3] = cpu_to_fdt32((unsigned char)TEST_CHAR4);
- expected_cells[4] = cpu_to_fdt32((unsigned char)TEST_CHAR5);
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_getprop(fdt, 0, "char-literal-cells",
- sizeof(expected_cells), expected_cells);
-
- PASS();
-}
diff --git a/tests/char_literal.dts b/tests/char_literal.dts
deleted file mode 100644
index 22e17edaf7b1..000000000000
--- a/tests/char_literal.dts
+++ /dev/null
@@ -1,5 +0,0 @@
-/dts-v1/;
-
-/ {
- char-literal-cells = <'\r' 'b' '\0' '\'' '\xff'>;
-};
diff --git a/tests/check_path.c b/tests/check_path.c
deleted file mode 100644
index f12f9503b22d..000000000000
--- a/tests/check_path.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for node existence
- * Copyright (C) 2016 Konsulko Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-
-#define CHECK(code) \
- { \
- int err = (code); \
- if (err) \
- FAIL(#code ": %s", fdt_strerror(err)); \
- }
-
-/* 4k ought to be enough for anybody */
-#define FDT_COPY_SIZE (4 * 1024)
-
-static void *open_dt(char *path)
-{
- void *dt, *copy;
-
- dt = load_blob(path);
- copy = xmalloc(FDT_COPY_SIZE);
-
- /*
- * Resize our DTs to 4k so that we have room to operate on
- */
- CHECK(fdt_open_into(dt, copy, FDT_COPY_SIZE));
-
- return copy;
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt_base;
- int fail_config, exists, check_exists;
-
- test_init(argc, argv);
- fail_config = 0;
-
- if (argc != 4)
- fail_config = 1;
-
- if (!fail_config) {
- if (!strcmp(argv[2], "exists"))
- check_exists = 1;
- else if (!strcmp(argv[2], "not-exists"))
- check_exists = 0;
- else
- fail_config = 1;
- }
-
- if (fail_config)
- CONFIG("Usage: %s <base dtb> <[exists|not-exists]> <node-path>", argv[0]);
-
- fdt_base = open_dt(argv[1]);
-
- exists = fdt_path_offset(fdt_base, argv[3]) >= 0;
-
- if (exists == check_exists)
- PASS();
- else
- FAIL();
-}
diff --git a/tests/comments-cmp.dts b/tests/comments-cmp.dts
deleted file mode 100644
index 4ee9f52dc0a5..000000000000
--- a/tests/comments-cmp.dts
+++ /dev/null
@@ -1,16 +0,0 @@
-/dts-v1/;
-
-/ {
- prop1;
- prop2;
- prop3;
- prop4;
- prop5;
- prop6;
- prop7;
- prop8;
- prop9;
- prop10;
- child {
- };
-};
diff --git a/tests/comments.dts b/tests/comments.dts
deleted file mode 100644
index 0b04b6b88b9f..000000000000
--- a/tests/comments.dts
+++ /dev/null
@@ -1,39 +0,0 @@
-/* regexps for lexing comments are.. tricky. Check if we've actually
- * got it right */
-/dts-v1/;
-
-/ {
- // line comment
- prop1;
- /* comment */
- prop2;
- /* multiline
-
- notaprop1;
-
- comment */
- prop3;
- /**/
- prop4;
- /***/
- prop5;
- /****/
- prop6;
- /* another
- * multiline
- * comment */
- prop7;
- /* yet
- * another
- * multline
- * comment
- */
- prop8;
- /** try this */
- prop9;
- /* and this **/
- prop10;
- child /* finally */ {
- };
-};
-/* final comment */
diff --git a/tests/data.S b/tests/data.S
deleted file mode 100644
index 86ad539f2a59..000000000000
--- a/tests/data.S
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Used in combination with dtc -Oasm output to embed
- * a device tree in the data section of a .o */
- .data
diff --git a/tests/default-addr-size.dts b/tests/default-addr-size.dts
deleted file mode 100644
index e964a553fa2d..000000000000
--- a/tests/default-addr-size.dts
+++ /dev/null
@@ -1,7 +0,0 @@
-/dts-v1/;
-
-/ {
- node {
- reg = <0 0 0>;
- };
-};
diff --git a/tests/del_node.c b/tests/del_node.c
deleted file mode 100644
index 45cb06016dc5..000000000000
--- a/tests/del_node.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_nop_node()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int subnode1_offset, subnode2_offset, subsubnode2_offset;
- int err;
- int oldsize, delsize, newsize;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- fdt = open_blob_rw(fdt);
-
- oldsize = fdt_totalsize(fdt);
-
- subnode1_offset = fdt_path_offset(fdt, "/subnode@1");
- if (subnode1_offset < 0)
- FAIL("Couldn't find \"/subnode@1\": %s",
- fdt_strerror(subnode1_offset));
- check_getprop_cell(fdt, subnode1_offset, "prop-int", TEST_VALUE_1);
-
- subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
- if (subnode2_offset < 0)
- FAIL("Couldn't find \"/subnode@2\": %s",
- fdt_strerror(subnode2_offset));
- check_getprop_cell(fdt, subnode2_offset, "prop-int", TEST_VALUE_2);
-
- subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode");
- if (subsubnode2_offset < 0)
- FAIL("Couldn't find \"/subnode@2/subsubnode\": %s",
- fdt_strerror(subsubnode2_offset));
- check_getprop_cell(fdt, subsubnode2_offset, "prop-int", TEST_VALUE_2);
-
- err = fdt_del_node(fdt, subnode1_offset);
- if (err)
- FAIL("fdt_del_node(subnode1): %s", fdt_strerror(err));
-
- subnode1_offset = fdt_path_offset(fdt, "/subnode@1");
- if (subnode1_offset != -FDT_ERR_NOTFOUND)
- FAIL("fdt_path_offset(subnode1) returned \"%s\" instead of \"%s\"",
- fdt_strerror(subnode1_offset),
- fdt_strerror(-FDT_ERR_NOTFOUND));
-
- subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
- if (subnode2_offset < 0)
- FAIL("Couldn't find \"/subnode2\": %s",
- fdt_strerror(subnode2_offset));
- check_getprop_cell(fdt, subnode2_offset, "prop-int", TEST_VALUE_2);
-
- subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode");
- if (subsubnode2_offset < 0)
- FAIL("Couldn't find \"/subnode@2/subsubnode\": %s",
- fdt_strerror(subsubnode2_offset));
- check_getprop_cell(fdt, subsubnode2_offset, "prop-int", TEST_VALUE_2);
-
- err = fdt_del_node(fdt, subnode2_offset);
- if (err)
- FAIL("fdt_del_node(subnode2): %s", fdt_strerror(err));
-
- subnode1_offset = fdt_path_offset(fdt, "/subnode@1");
- if (subnode1_offset != -FDT_ERR_NOTFOUND)
- FAIL("fdt_path_offset(subnode1) returned \"%s\" instead of \"%s\"",
- fdt_strerror(subnode1_offset),
- fdt_strerror(-FDT_ERR_NOTFOUND));
-
- subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
- if (subnode2_offset != -FDT_ERR_NOTFOUND)
- FAIL("fdt_path_offset(subnode2) returned \"%s\" instead of \"%s\"",
- fdt_strerror(subnode2_offset),
- fdt_strerror(-FDT_ERR_NOTFOUND));
-
- subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode");
- if (subsubnode2_offset != -FDT_ERR_NOTFOUND)
- FAIL("fdt_path_offset(subsubnode2) returned \"%s\" instead of \"%s\"",
- fdt_strerror(subsubnode2_offset),
- fdt_strerror(-FDT_ERR_NOTFOUND));
-
- delsize = fdt_totalsize(fdt);
-
- err = fdt_pack(fdt);
- if (err)
- FAIL("fdt_pack(): %s", fdt_strerror(err));
-
- newsize = fdt_totalsize(fdt);
-
- verbose_printf("oldsize = %d, delsize = %d, newsize = %d\n",
- oldsize, delsize, newsize);
-
- if (newsize >= oldsize)
- FAIL("Tree failed to shrink after deletions");
-
- PASS();
-}
diff --git a/tests/del_property.c b/tests/del_property.c
deleted file mode 100644
index 42fd7cb1c15e..000000000000
--- a/tests/del_property.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_delprop()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- const uint32_t *intp;
- const char *strp;
- int err, lenerr;
- int oldsize, delsize, newsize;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- fdt = open_blob_rw(fdt);
-
- oldsize = fdt_totalsize(fdt);
-
- intp = check_getprop_cell(fdt, 0, "prop-int", TEST_VALUE_1);
- verbose_printf("int value was 0x%08x\n", *intp);
-
- err = fdt_delprop(fdt, 0, "prop-int");
- if (err)
- FAIL("Failed to delete \"prop-int\": %s", fdt_strerror(err));
-
- intp = fdt_getprop(fdt, 0, "prop-int", &lenerr);
- if (intp)
- FAIL("prop-int still present after deletion");
- if (lenerr != -FDT_ERR_NOTFOUND)
- FAIL("Unexpected error on second getprop: %s",
- fdt_strerror(lenerr));
-
- strp = check_getprop(fdt, 0, "prop-str", strlen(TEST_STRING_1)+1,
- TEST_STRING_1);
- verbose_printf("string value was \"%s\"\n", strp);
- err = fdt_delprop(fdt, 0, "prop-str");
- if (err)
- FAIL("Failed to delete \"prop-str\": %s", fdt_strerror(err));
-
- strp = fdt_getprop(fdt, 0, "prop-str", &lenerr);
- if (strp)
- FAIL("prop-str still present after deletion");
- if (lenerr != -FDT_ERR_NOTFOUND)
- FAIL("Unexpected error on second getprop: %s",
- fdt_strerror(lenerr));
-
- delsize = fdt_totalsize(fdt);
-
- err = fdt_pack(fdt);
- if (err)
- FAIL("fdt_pack(): %s\n", fdt_strerror(err));
-
- newsize = fdt_totalsize(fdt);
-
- verbose_printf("oldsize = %d, delsize = %d, newsize = %d\n",
- oldsize, delsize, newsize);
-
- if (newsize >= oldsize)
- FAIL("Tree failed to shrink after deletions");
-
- PASS();
-}
diff --git a/tests/delete_reinstate_multilabel.dts b/tests/delete_reinstate_multilabel.dts
deleted file mode 100644
index 281a6b28962e..000000000000
--- a/tests/delete_reinstate_multilabel.dts
+++ /dev/null
@@ -1,37 +0,0 @@
-/dts-v1/;
-
-/* Create some nodes and properties with multiple labels */
-
-/ {
- label1: label2: prop = "value";
-
- label3: label4: node {
- label5: label6: prop = "value";
- };
-};
-
-/* Delete them, and everything that's part of them, i.e. the labels */
-
-/ {
- /delete-property/ prop;
- /delete-node/ node;
-};
-
-/*
- * Re-instate them. None of the old labels should come back
- *
- * Note: Do not add any new/extra labels here. As of the time of writing,
- * when dtc adds labels to an object, they are added to the head of the list
- * of labels, and this test is specifically about ensuring the correct
- * handling of lists of labels where the first label in the list is marked as
- * deleted. Failure to observe this note may result in the test passing when
- * it should not.
- */
-
-/ {
- prop = "value";
-
- node {
- prop = "value";
- };
-};
diff --git a/tests/delete_reinstate_multilabel_ref.dts b/tests/delete_reinstate_multilabel_ref.dts
deleted file mode 100644
index 28fa1174fe2c..000000000000
--- a/tests/delete_reinstate_multilabel_ref.dts
+++ /dev/null
@@ -1,9 +0,0 @@
-/dts-v1/;
-
-/ {
- prop = "value";
-
- node {
- prop = "value";
- };
-};
diff --git a/tests/dependencies.cmp b/tests/dependencies.cmp
deleted file mode 100644
index bcd94320b0cb..000000000000
--- a/tests/dependencies.cmp
+++ /dev/null
@@ -1 +0,0 @@
-dependencies.test.dtb: dependencies.dts deps_inc1.dtsi deps_inc2.dtsi
diff --git a/tests/dependencies.dts b/tests/dependencies.dts
deleted file mode 100644
index 2cfe31bd09b9..000000000000
--- a/tests/dependencies.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/include/ "deps_inc1.dtsi"
-
-/ {
-};
diff --git a/tests/deps_inc1.dtsi b/tests/deps_inc1.dtsi
deleted file mode 100644
index 5c607dcf0337..000000000000
--- a/tests/deps_inc1.dtsi
+++ /dev/null
@@ -1 +0,0 @@
-/include/ "deps_inc2.dtsi"
diff --git a/tests/deps_inc2.dtsi b/tests/deps_inc2.dtsi
deleted file mode 100644
index 710cecca972d..000000000000
--- a/tests/deps_inc2.dtsi
+++ /dev/null
@@ -1 +0,0 @@
-/* Empty */
diff --git a/tests/division-by-zero.dts b/tests/division-by-zero.dts
deleted file mode 100644
index 2984b29ff62b..000000000000
--- a/tests/division-by-zero.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/ {
- prop-div = < (1/0) >;
- prop-mod = < (1%0) >;
-};
diff --git a/tests/dtb_reverse.c b/tests/dtb_reverse.c
deleted file mode 100644
index 527fd71336d7..000000000000
--- a/tests/dtb_reverse.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Tests if two given dtbs are structurally equal (including order)
- * Copyright (C) 2010 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <limits.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-#define CHECK(code) \
- { \
- err = (code); \
- if (err) \
- FAIL(#code ": %s", fdt_strerror(err)); \
- }
-
-static void reverse_reservemap(void *in, void *out, int n)
-{
- int err;
- uint64_t addr, size;
-
- verbose_printf("reverse_reservemap(): %d/%d\n",
- n, fdt_num_mem_rsv(in));
-
- if (n < (fdt_num_mem_rsv(in)-1))
- reverse_reservemap(in, out, n+1);
-
- CHECK(fdt_get_mem_rsv(in, n, &addr, &size));
- CHECK(fdt_add_reservemap_entry(out, addr, size));
- verbose_printf("Added entry 0x%llx 0x%llx\n",
- (unsigned long long)addr, (unsigned long long)size);
-}
-
-static void reverse_properties(void *in, void *out, int offset)
-{
- int err;
- int len;
- const char *name;
- const void *data;
-
- data = fdt_getprop_by_offset(in, offset, &name, &len);
- if (!data)
- FAIL("fdt_getprop_by_offset(): %s\n", fdt_strerror(len));
-
- verbose_printf("reverse_properties(): offset=%d name=%s\n",
- offset, name);
-
- offset = fdt_next_property_offset(in, offset);
- if (offset >= 0)
- reverse_properties(in, out, offset);
- else if (offset != -FDT_ERR_NOTFOUND)
- FAIL("fdt_next_property_offset(): %s\n", fdt_strerror(offset));
-
- CHECK(fdt_property(out, name, data, len));
- verbose_printf(" -> output property %s\n", name);
-}
-
-static void reverse_node(void *in, void *out, int nodeoffset);
-
-static void reverse_children(void *in, void *out, int offset)
-{
- int err;
- int nextoffset = offset;
- int depth = 1;
-
- do {
- char path[PATH_MAX];
-
- CHECK(fdt_get_path(in, nextoffset, path, sizeof(path)));
- verbose_printf("reverse_children() offset=%d nextoffset=%d [%s]"
- " depth=%d\n", offset, nextoffset, path, depth);
-
- nextoffset = fdt_next_node(in, nextoffset, &depth);
- } while ((depth >= 0) && (depth != 1));
-
- if (depth == 1)
- reverse_children(in, out, nextoffset);
-
- reverse_node(in, out, offset);
-}
-
-static void reverse_node(void *in, void *out, int nodeoffset)
-{
- const char *name = fdt_get_name(in, nodeoffset, NULL);
- char path[PATH_MAX];
- int err;
- int offset;
- int depth = 0;
-
- CHECK(fdt_get_path(in, nodeoffset, path, sizeof(path)));
- verbose_printf("reverse_node(): nodeoffset=%d [%s]\n",
- nodeoffset, path);
-
- CHECK(fdt_begin_node(out, name));
-
- offset = fdt_first_property_offset(in, nodeoffset);
- if (offset >= 0)
- reverse_properties(in, out, offset);
- else if (offset != -FDT_ERR_NOTFOUND)
- FAIL("fdt_first_property(): %s\n", fdt_strerror(offset));
-
- offset = fdt_next_node(in, nodeoffset, &depth);
-
- if (depth == 1)
- reverse_children(in, out, offset);
-
- CHECK(fdt_end_node(out));
-}
-
-int main(int argc, char *argv[])
-{
- void *in, *out;
- char outname[PATH_MAX];
- int bufsize;
- int err;
-
- test_init(argc, argv);
- if (argc != 2)
- CONFIG("Usage: %s <dtb file>", argv[0]);
-
- in = load_blob(argv[1]);
- sprintf(outname, "%s.reversed.test.dtb", argv[1]);
-
- bufsize = fdt_totalsize(in);
- out = xmalloc(bufsize);
-
- CHECK(fdt_create(out, bufsize));
-
- fdt_set_boot_cpuid_phys(out, fdt_boot_cpuid_phys(in));
-
- reverse_reservemap(in, out, 0);
- CHECK(fdt_finish_reservemap(out));
-
- reverse_node(in, out, 0);
-
- CHECK(fdt_finish(out));
-
- save_blob(outname, out);
-
- PASS();
-}
diff --git a/tests/dtbs_equal_ordered.c b/tests/dtbs_equal_ordered.c
deleted file mode 100644
index 98bf0e712805..000000000000
--- a/tests/dtbs_equal_ordered.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Tests if two given dtbs are structurally equal (including order)
- * Copyright (C) 2007 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static int notequal; /* = 0 */
-
-#define MISMATCH(fmt, ...) \
- do { \
- if (notequal) \
- PASS(); \
- else \
- FAIL(fmt, ##__VA_ARGS__); \
- } while (0)
-
-#define MATCH() \
- do { \
- if (!notequal) \
- PASS(); \
- else \
- FAIL("Trees match which shouldn't"); \
- } while (0)
-
-#define CHECK(code) \
- { \
- err = (code); \
- if (err) \
- FAIL(#code ": %s", fdt_strerror(err)); \
- }
-
-static void compare_mem_rsv(const void *fdt1, const void *fdt2)
-{
- int i;
- uint64_t addr1, size1, addr2, size2;
- int err;
-
- if (fdt_num_mem_rsv(fdt1) != fdt_num_mem_rsv(fdt2))
- MISMATCH("Trees have different number of reserve entries");
- for (i = 0; i < fdt_num_mem_rsv(fdt1); i++) {
- CHECK(fdt_get_mem_rsv(fdt1, i, &addr1, &size1));
- CHECK(fdt_get_mem_rsv(fdt2, i, &addr2, &size2));
-
- if ((addr1 != addr2) || (size1 != size2))
- MISMATCH("Mismatch in reserve entry %d: "
- "(0x%llx, 0x%llx) != (0x%llx, 0x%llx)", i,
- (unsigned long long)addr1,
- (unsigned long long)size1,
- (unsigned long long)addr2,
- (unsigned long long)size2);
- }
-}
-
-static void compare_structure(const void *fdt1, const void *fdt2)
-{
- int nextoffset1 = 0, nextoffset2 = 0;
- int offset1, offset2;
- uint32_t tag1, tag2;
- const char *name1, *name2;
- int err;
- const struct fdt_property *prop1, *prop2;
- int len1, len2;
-
- while (1) {
- do {
- offset1 = nextoffset1;
- tag1 = fdt_next_tag(fdt1, offset1, &nextoffset1);
- } while (tag1 == FDT_NOP);
- do {
- offset2 = nextoffset2;
- tag2 = fdt_next_tag(fdt2, offset2, &nextoffset2);
- } while (tag2 == FDT_NOP);
-
- if (tag1 != tag2)
- MISMATCH("Tag mismatch (%d != %d) at (%d, %d)",
- tag1, tag2, offset1, offset2);
-
- switch (tag1) {
- case FDT_BEGIN_NODE:
- name1 = fdt_get_name(fdt1, offset1, &err);
- if (!name1)
- FAIL("fdt_get_name(fdt1, %d, ..): %s",
- offset1, fdt_strerror(err));
- name2 = fdt_get_name(fdt2, offset2, NULL);
- if (!name2)
- FAIL("fdt_get_name(fdt2, %d, ..): %s",
- offset2, fdt_strerror(err));
-
- if (!streq(name1, name2))
- MISMATCH("Name mismatch (\"%s\" != \"%s\") at (%d, %d)",
- name1, name2, offset1, offset2);
- break;
-
- case FDT_PROP:
- prop1 = fdt_offset_ptr(fdt1, offset1, sizeof(*prop1));
- if (!prop1)
- FAIL("Could get fdt1 property at %d", offset1);
- prop2 = fdt_offset_ptr(fdt2, offset2, sizeof(*prop2));
- if (!prop2)
- FAIL("Could get fdt2 property at %d", offset2);
-
- name1 = fdt_string(fdt1, fdt32_to_cpu(prop1->nameoff));
- name2 = fdt_string(fdt2, fdt32_to_cpu(prop2->nameoff));
- if (!streq(name1, name2))
- MISMATCH("Property name mismatch \"%s\" != \"%s\" "
- "at (%d, %d)", name1, name2, offset1, offset2);
- len1 = fdt32_to_cpu(prop1->len);
- len2 = fdt32_to_cpu(prop2->len);
- if (len1 != len2)
- MISMATCH("Property length mismatch %u != %u "
- "at (%d, %d)", len1, len2, offset1, offset2);
-
- if (memcmp(prop1->data, prop2->data, len1) != 0)
- MISMATCH("Property value mismatch at (%d, %d)",
- offset1, offset2);
- break;
-
- case FDT_END:
- return;
- }
- }
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt1, *fdt2;
- uint32_t cpuid1, cpuid2;
-
- test_init(argc, argv);
- if ((argc != 3)
- && ((argc != 4) || !streq(argv[1], "-n")))
- CONFIG("Usage: %s [-n] <dtb file> <dtb file>", argv[0]);
- if (argc == 4)
- notequal = 1;
-
- fdt1 = load_blob(argv[argc-2]);
- fdt2 = load_blob(argv[argc-1]);
-
- compare_mem_rsv(fdt1, fdt2);
- compare_structure(fdt1, fdt2);
-
- cpuid1 = fdt_boot_cpuid_phys(fdt1);
- cpuid2 = fdt_boot_cpuid_phys(fdt2);
- if (cpuid1 != cpuid2)
- MISMATCH("boot_cpuid_phys mismatch 0x%x != 0x%x",
- cpuid1, cpuid2);
-
- MATCH();
-}
diff --git a/tests/dtbs_equal_unordered.c b/tests/dtbs_equal_unordered.c
deleted file mode 100644
index baf2ae7826a1..000000000000
--- a/tests/dtbs_equal_unordered.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Tests if two given dtbs are structurally equal (including order)
- * Copyright (C) 2007 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <limits.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static int notequal; /* = 0 */
-
-#define MISMATCH(fmt, ...) \
- do { \
- if (notequal) \
- PASS(); \
- else \
- FAIL(fmt, ##__VA_ARGS__); \
- } while (0)
-
-#define MATCH() \
- do { \
- if (!notequal) \
- PASS(); \
- else \
- FAIL("Trees match which shouldn't"); \
- } while (0)
-
-#define CHECK(code) \
- { \
- err = (code); \
- if (err) \
- FAIL(#code ": %s", fdt_strerror(err)); \
- }
-
-static int mem_rsv_cmp(const void *p1, const void *p2)
-{
- const struct fdt_reserve_entry *re1 = p1;
- const struct fdt_reserve_entry *re2 = p2;
-
- if (fdt64_to_cpu(re1->address) < fdt64_to_cpu(re2->address))
- return -1;
- else if (fdt64_to_cpu(re1->address) > fdt64_to_cpu(re2->address))
- return 1;
-
- if (fdt64_to_cpu(re1->size) < fdt64_to_cpu(re2->size))
- return -1;
- else if (fdt64_to_cpu(re1->size) > fdt64_to_cpu(re2->size))
- return 1;
-
- return 0;
-}
-
-static void compare_mem_rsv(void *fdt1, void *fdt2)
-{
- int i;
- uint64_t addr1, size1, addr2, size2;
- int err;
-
- if (fdt_num_mem_rsv(fdt1) != fdt_num_mem_rsv(fdt2))
- MISMATCH("Trees have different number of reserve entries");
-
- qsort((char *)fdt1 + fdt_off_mem_rsvmap(fdt1), fdt_num_mem_rsv(fdt1),
- sizeof(struct fdt_reserve_entry), mem_rsv_cmp);
- qsort((char *)fdt2 + fdt_off_mem_rsvmap(fdt2), fdt_num_mem_rsv(fdt2),
- sizeof(struct fdt_reserve_entry), mem_rsv_cmp);
-
- for (i = 0; i < fdt_num_mem_rsv(fdt1); i++) {
- CHECK(fdt_get_mem_rsv(fdt1, i, &addr1, &size1));
- CHECK(fdt_get_mem_rsv(fdt2, i, &addr2, &size2));
-
- if ((addr1 != addr2) || (size1 != size2))
- MISMATCH("Mismatch in reserve entry %d: "
- "(0x%llx, 0x%llx) != (0x%llx, 0x%llx)", i,
- (unsigned long long)addr1,
- (unsigned long long)size1,
- (unsigned long long)addr2,
- (unsigned long long)size2);
- }
-}
-
-static void compare_properties(const void *fdt1, int offset1,
- const void *fdt2, int offset2)
-{
- int offset = offset1;
-
- /* Check the properties */
- for (offset = fdt_first_property_offset(fdt1, offset1);
- offset >= 0;
- offset = fdt_next_property_offset(fdt1, offset)) {
- const char *name;
- int len1, len2;
- const void *data1, *data2;
- int i;
-
- data1 = fdt_getprop_by_offset(fdt1, offset, &name, &len1);
- if (!data1)
- FAIL("fdt_getprop_by_offset(): %s\n",
- fdt_strerror(len1));
-
- verbose_printf("Property '%s'\n", name);
-
- data2 = fdt_getprop(fdt2, offset2, name, &len2);
- if (!data2) {
- if (len2 == -FDT_ERR_NOTFOUND)
- MISMATCH("Property '%s' missing\n", name);
- else
- FAIL("fdt_get_property(): %s\n",
- fdt_strerror(len2));
- }
-
- verbose_printf("len1=%d data1=", len1);
- for (i = 0; i < len1; i++)
- verbose_printf(" %02x", ((const char *)data1)[i]);
- verbose_printf("\nlen2=%d data2=", len2);
- for (i = 0; i < len1; i++)
- verbose_printf(" %02x", ((const char *)data2)[i]);
- verbose_printf("\n");
-
- if (len1 != len2)
- MISMATCH("Property '%s' mismatched length %d vs. %d\n",
- name, len1, len2);
- else if (memcmp(data1, data2, len1) != 0)
- MISMATCH("Property '%s' mismatched value\n", name);
- }
-}
-
-static void compare_node(const void *fdt1, int offset1,
- const void *fdt2, int offset2);
-
-static void compare_subnodes(const void *fdt1, int offset1,
- const void *fdt2, int offset2,
- int recurse)
-{
- int coffset1, coffset2, depth;
-
- for (depth = 0, coffset1 = offset1;
- (coffset1 >= 0) && (depth >= 0);
- coffset1 = fdt_next_node(fdt1, coffset1, &depth))
- if (depth == 1) {
- const char *name = fdt_get_name(fdt1, coffset1, NULL);
-
- verbose_printf("Subnode %s\n", name);
- coffset2 = fdt_subnode_offset(fdt2, offset2, name);
- if (coffset2 == -FDT_ERR_NOTFOUND)
- MISMATCH("Subnode %s missing\n", name);
- else if (coffset2 < 0)
- FAIL("fdt_subnode_offset(): %s\n",
- fdt_strerror(coffset2));
-
- if (recurse)
- compare_node(fdt1, coffset1, fdt2, coffset2);
- }
-}
-
-static void compare_node(const void *fdt1, int offset1,
- const void *fdt2, int offset2)
-{
- int err;
- char path1[PATH_MAX], path2[PATH_MAX];
-
- CHECK(fdt_get_path(fdt1, offset1, path1, sizeof(path1)));
- CHECK(fdt_get_path(fdt2, offset2, path2, sizeof(path2)));
-
- if (!streq(path1, path2))
- TEST_BUG("Path mismatch %s vs. %s\n", path1, path2);
-
- verbose_printf("Checking %s\n", path1);
-
- compare_properties(fdt1, offset1, fdt2, offset2);
- compare_properties(fdt2, offset2, fdt1, offset1);
-
- compare_subnodes(fdt1, offset1, fdt2, offset2, 1);
- compare_subnodes(fdt2, offset2, fdt1, offset1, 0);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt1, *fdt2;
- uint32_t cpuid1, cpuid2;
-
- test_init(argc, argv);
- if ((argc != 3)
- && ((argc != 4) || !streq(argv[1], "-n")))
- CONFIG("Usage: %s [-n] <dtb file> <dtb file>", argv[0]);
- if (argc == 4)
- notequal = 1;
-
- fdt1 = load_blob(argv[argc-2]);
- fdt2 = load_blob(argv[argc-1]);
-
- compare_mem_rsv(fdt1, fdt2);
- compare_node(fdt1, 0, fdt2, 0);
-
- cpuid1 = fdt_boot_cpuid_phys(fdt1);
- cpuid2 = fdt_boot_cpuid_phys(fdt2);
- if (cpuid1 != cpuid2)
- MISMATCH("boot_cpuid_phys mismatch 0x%x != 0x%x",
- cpuid1, cpuid2);
-
- MATCH();
-}
diff --git a/tests/dtc-checkfails.sh b/tests/dtc-checkfails.sh
deleted file mode 100755
index 76ded15c2d58..000000000000
--- a/tests/dtc-checkfails.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#! /bin/sh
-
-. ./tests.sh
-
-for x; do
- shift
- if [ "$x" = "-n" ]; then
- for x; do
- shift
- if [ "$x" = "--" ]; then
- break;
- fi
- NOCHECKS="$NOCHECKS $x"
- done
- break;
- fi
- if [ "$x" = "--" ]; then
- break;
- fi
- YESCHECKS="$YESCHECKS $x"
-done
-
-LOG=tmp.log.$$
-rm -f $LOG
-trap "rm -f $LOG" 0
-
-verbose_run_log "$LOG" $VALGRIND "$DTC" -o /dev/null "$@"
-ret="$?"
-
-FAIL_IF_SIGNAL $ret
-
-for c in $YESCHECKS; do
- if ! grep -E "^(ERROR)|(Warning) \($c\):" $LOG > /dev/null; then
- FAIL "Failed to trigger check \"$c\""
- fi
-done
-
-for c in $NOCHECKS; do
- if grep -E "^(ERROR)|(Warning) \($c\):" $LOG > /dev/null; then
- FAIL "Incorrectly triggered check \"$c\""
- fi
-done
-
-PASS
diff --git a/tests/dtc-fails.sh b/tests/dtc-fails.sh
deleted file mode 100755
index 4ddcb2732437..000000000000
--- a/tests/dtc-fails.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /bin/sh
-
-. ./tests.sh
-
-if [ "$1" = "-n" ]; then
- NEG="$1"
- shift
-fi
-
-OUTPUT="$1"
-shift
-
-verbose_run $VALGRIND "$DTC" -o "$OUTPUT" "$@"
-ret="$?"
-
-FAIL_IF_SIGNAL $ret
-
-if [ -n "$NEG" ]; then
- if [ ! -e "$OUTPUT" ]; then
- FAIL "Produced no output"
- fi
-else
- if [ -e "$OUTPUT" ]; then
- FAIL "Incorrectly produced output"
- fi
-fi
-
-rm -f "$OUTPUT"
-
-PASS
diff --git a/tests/dtc-fatal.sh b/tests/dtc-fatal.sh
deleted file mode 100755
index 6781ced9a670..000000000000
--- a/tests/dtc-fatal.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#! /bin/sh
-
-. ./tests.sh
-
-verbose_run $VALGRIND "$DTC" -o/dev/null "$@"
-ret="$?"
-
-if [ "$ret" -gt 127 ]; then
- FAIL "dtc killed by signal (ret=$ret)"
-elif [ "$ret" != "1" ]; then
- FAIL "dtc returned incorrect status $ret instead of 1"
-fi
-
-PASS
diff --git a/tests/dumptrees.c b/tests/dumptrees.c
deleted file mode 100644
index 87d1c3d8440a..000000000000
--- a/tests/dumptrees.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * dumptrees - utility for libfdt testing
- *
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2006.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "testdata.h"
-
-static struct {
- void *blob;
- const char *filename;
-} trees[] = {
-#define TREE(name) { &name, #name ".dtb" }
- TREE(test_tree1),
- TREE(bad_node_char), TREE(bad_node_format), TREE(bad_prop_char),
- TREE(ovf_size_strings),
-};
-
-#define NUM_TREES (sizeof(trees) / sizeof(trees[0]))
-
-int main(int argc, char *argv[])
-{
- int i;
-
- for (i = 0; i < NUM_TREES; i++) {
- void *blob = trees[i].blob;
- const char *filename = trees[i].filename;
- int size;
- int fd;
- int ret;
-
- size = fdt_totalsize(blob);
-
- printf("Tree \"%s\", %d bytes\n", filename, size);
-
- fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666);
- if (fd < 0)
- perror("open()");
-
- ret = write(fd, blob, size);
- if (ret != size)
- perror("write()");
-
- close(fd);
- }
- exit(0);
-}
diff --git a/tests/dup-nodename.dts b/tests/dup-nodename.dts
deleted file mode 100644
index 2a3aa7596b9c..000000000000
--- a/tests/dup-nodename.dts
+++ /dev/null
@@ -1,8 +0,0 @@
-/dts-v1/;
-
-/ {
- node {
- };
- node {
- };
-};
diff --git a/tests/dup-phandle.dts b/tests/dup-phandle.dts
deleted file mode 100644
index c266c6127bcc..000000000000
--- a/tests/dup-phandle.dts
+++ /dev/null
@@ -1,10 +0,0 @@
-/dts-v1/;
-
-/ {
- node1 {
- linux,phandle = <1>;
- };
- node2 {
- linux,phandle = <1>;
- };
-};
diff --git a/tests/dup-propname.dts b/tests/dup-propname.dts
deleted file mode 100644
index 8145f6e9d81d..000000000000
--- a/tests/dup-propname.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/ {
- prop;
- prop;
-};
diff --git a/tests/embedded_nul.dts b/tests/embedded_nul.dts
deleted file mode 100644
index 7b4993cc5452..000000000000
--- a/tests/embedded_nul.dts
+++ /dev/null
Binary files differ
diff --git a/tests/embedded_nul_equiv.dts b/tests/embedded_nul_equiv.dts
deleted file mode 100644
index e978204f063d..000000000000
--- a/tests/embedded_nul_equiv.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/ {
- reserved-names = "aaaaaaaaaaaaaaaaaa\0bbbbbb\0ccccccccccccc";
- reserved-ranges = < 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 >;
-};
diff --git a/tests/empty.dts b/tests/empty.dts
deleted file mode 100644
index e160dad6a643..000000000000
--- a/tests/empty.dts
+++ /dev/null
@@ -1,4 +0,0 @@
-/dts-v1/;
-
-/ {
-};
diff --git a/tests/escapes.dts b/tests/escapes.dts
deleted file mode 100644
index e05ab46bcc91..000000000000
--- a/tests/escapes.dts
+++ /dev/null
@@ -1,7 +0,0 @@
-/dts-v1/;
-
-/ {
- compatible = "test_string_escapes";
- escape-str = "nastystring: \a\b\t\n\v\f\r\\\"";
- escape-str-2 = "\xde\xad\xbe\xef";
-};
diff --git a/tests/extra-terminating-null.c b/tests/extra-terminating-null.c
deleted file mode 100644
index dc1fe89ab053..000000000000
--- a/tests/extra-terminating-null.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for properties with more than one terminating null
- * Copyright (C) 2009 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_extranull(void *fdt, const char *prop, const char *str, int numnulls)
-{
- int len = strlen(str);
- char checkbuf[len+numnulls];
-
- memset(checkbuf, 0, sizeof(checkbuf));
- memcpy(checkbuf, TEST_STRING_1, len);
-
- check_getprop(fdt, 0, prop, len+numnulls, checkbuf);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
-
- fdt = load_blob_arg(argc, argv);
-
- check_extranull(fdt, "extranull0", TEST_STRING_1, 1);
- check_extranull(fdt, "extranull1,1", TEST_STRING_1, 2);
- check_extranull(fdt, "extranull1,2", TEST_STRING_1, 2);
- check_extranull(fdt, "extranull2,1", TEST_STRING_1, 3);
- check_extranull(fdt, "extranull2,2", TEST_STRING_1, 3);
- check_extranull(fdt, "extranull2,3", TEST_STRING_1, 3);
- check_extranull(fdt, "extranull2,4", TEST_STRING_1, 3);
-
- PASS();
-}
diff --git a/tests/extra-terminating-null.dts b/tests/extra-terminating-null.dts
deleted file mode 100644
index b6cc19c1827d..000000000000
--- a/tests/extra-terminating-null.dts
+++ /dev/null
@@ -1,11 +0,0 @@
-/dts-v1/;
-
-/ {
- extranull0 = "hello world";
- extranull1,1 = "hello world\0";
- extranull1,2 = "hello world", "";
- extranull2,1 = "hello world\0\0";
- extranull2,2 = "hello world", "", "";
- extranull2,3 = "hello world\0", "";
- extranull2,4 = "hello world", "\0";
-};
diff --git a/tests/fdtdump-runtest.sh b/tests/fdtdump-runtest.sh
deleted file mode 100755
index 77593cf6cd1e..000000000000
--- a/tests/fdtdump-runtest.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /bin/sh
-
-# Arguments:
-# $1 - source file to compile and compare with fdtdump output of the
-# compiled file.
-
-. ./tests.sh
-
-dts="$1"
-dtb="${dts}.dtb"
-out="${dts}.out"
-LOG=tmp.log.$$
-
-files="$dtb $out $LOG"
-
-rm -f $files
-trap "rm -f $files" 0
-
-verbose_run_log_check "$LOG" $VALGRIND $DTC -O dtb $dts -o $dtb
-$FDTDUMP ${dtb} | grep -v "//" >${out}
-
-if diff -w $dts $out >/dev/null; then
- PASS
-else
- if [ -z "$QUIET_TEST" ]; then
- echo "DIFF :-:"
- diff -u -w $dts $out
- fi
- FAIL "Results differ from expected"
-fi
diff --git a/tests/fdtdump.dts b/tests/fdtdump.dts
deleted file mode 100644
index b83b7dffab97..000000000000
--- a/tests/fdtdump.dts
+++ /dev/null
@@ -1,38 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0 0xe;
-/ {
- model = "MyBoardName";
- compatible = "MyBoardName", "MyBoardFamilyName";
- #address-cells = <0x00000002>;
- #size-cells = <0x00000002>;
- cpus {
- linux,phandle = <0x00000001>;
- #address-cells = <0x00000001>;
- #size-cells = <0x00000000>;
- PowerPC,970@0 {
- device_type = "cpu";
- reg = <0x00000000>;
- linux,boot-cpu;
- };
- PowerPC,970@1 {
- device_type = "cpu";
- reg = <0x00000001>;
- };
- };
- randomnode {
- string = "foo", "stuff";
- bytes = [61 62 63 64 65];
- nbytes = [80 ff];
- child {
- };
- };
- memory@0 {
- device_type = "memory";
- reg = <0x00000000 0x00000123 0x00000456 0x87654321>;
- };
- chosen {
- bootargs = "root=/dev/sda2";
- linux,platform = <0x00000600>;
- };
-};
diff --git a/tests/fdtget-runtest.sh b/tests/fdtget-runtest.sh
deleted file mode 100755
index 8d8b0587602e..000000000000
--- a/tests/fdtget-runtest.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#! /bin/sh
-
-. ./tests.sh
-
-LOG=tmp.log.$$
-EXPECT=tmp.expect.$$
-rm -f $LOG $EXPECT
-trap "rm -f $LOG $EXPECT" 0
-
-expect="$1"
-printf '%b\n' "$expect" > $EXPECT
-shift
-
-verbose_run_log_check "$LOG" $VALGRIND $DTGET "$@"
-
-if cmp $EXPECT $LOG>/dev/null; then
- PASS
-else
- if [ -z "$QUIET_TEST" ]; then
- echo "EXPECTED :-:"
- cat $EXPECT
- fi
- FAIL "Results differ from expected"
-fi
diff --git a/tests/fdtoverlay-runtest.sh b/tests/fdtoverlay-runtest.sh
deleted file mode 100755
index 06c1169baad3..000000000000
--- a/tests/fdtoverlay-runtest.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /bin/sh
-
-# Run script for fdtoverlay tests
-# We run fdtoverlay to generate a target device tree, thn fdtget to check it
-
-# Usage
-# fdtoverlay-runtest.sh name expected_output dtb_file node property flags value
-
-. ./tests.sh
-
-LOG=tmp.log.$$
-EXPECT=tmp.expect.$$
-rm -f $LOG $EXPECT
-trap "rm -f $LOG $EXPECT" 0
-
-expect="$1"
-echo $expect >$EXPECT
-node="$2"
-property="$3"
-flags="$4"
-basedtb="$5"
-targetdtb="$6"
-shift 6
-overlays="$@"
-
-# First run fdtoverlay
-verbose_run_check $VALGRIND "$FDTOVERLAY" -i "$basedtb" -o "$targetdtb" $overlays
-
-# Now fdtget to read the value
-verbose_run_log_check "$LOG" $VALGRIND "$DTGET" "$targetdtb" "$node" "$property" $flags
-
-if cmp $EXPECT $LOG >/dev/null; then
- PASS
-else
- if [ -z "$QUIET_TEST" ]; then
- echo "EXPECTED :-:"
- cat $EXPECT
- fi
- FAIL "Results differ from expected"
-fi
diff --git a/tests/fdtput-runtest.sh b/tests/fdtput-runtest.sh
deleted file mode 100755
index 527a9688ea5b..000000000000
--- a/tests/fdtput-runtest.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#! /bin/sh
-
-# Run script for fdtput tests
-# We run fdtput to update the device tree, thn fdtget to check it
-
-# Usage
-# fdtput-runtest.sh name expected_output dtb_file node property flags value
-
-. ./tests.sh
-
-LOG=tmp.log.$$
-EXPECT=tmp.expect.$$
-rm -f $LOG $EXPECT
-trap "rm -f $LOG $EXPECT" 0
-
-expect="$1"
-echo $expect >$EXPECT
-dtb="$2"
-node="$3"
-property="$4"
-flags="$5"
-shift 5
-value="$@"
-
-# First run fdtput
-verbose_run_check $VALGRIND "$DTPUT" "$dtb" "$node" "$property" $value $flags
-
-# Now fdtget to read the value
-verbose_run_log_check "$LOG" $VALGRIND "$DTGET" "$dtb" "$node" "$property" $flags
-
-if cmp $EXPECT $LOG >/dev/null; then
- PASS
-else
- if [ -z "$QUIET_TEST" ]; then
- echo "EXPECTED :-:"
- cat $EXPECT
- fi
- FAIL "Results differ from expected"
-fi
diff --git a/tests/find_property.c b/tests/find_property.c
deleted file mode 100644
index 4dc3030e37e3..000000000000
--- a/tests/find_property.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_property_offset()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_property_cell(fdt, 0, "prop-int", TEST_VALUE_1);
- check_property(fdt, 0, "prop-str", strlen(TEST_STRING_1)+1, TEST_STRING_1);
-
- PASS();
-}
diff --git a/tests/get_alias.c b/tests/get_alias.c
deleted file mode 100644
index 506079575153..000000000000
--- a/tests/get_alias.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_get_alias()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_alias(void *fdt, const char *path, const char *alias)
-{
- const char *aliaspath;
-
- aliaspath = fdt_get_alias(fdt, alias);
-
- if (path && !aliaspath)
- FAIL("fdt_get_alias(%s) failed\n", alias);
-
- if (strcmp(aliaspath, path) != 0)
- FAIL("fdt_get_alias(%s) returned %s instead of %s\n",
- alias, aliaspath, path);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_alias(fdt, "/subnode@1", "s1");
- check_alias(fdt, "/subnode@1/subsubnode", "ss1");
- check_alias(fdt, "/subnode@1/subsubnode/subsubsubnode", "sss1");
-
- PASS();
-}
diff --git a/tests/get_mem_rsv.c b/tests/get_mem_rsv.c
deleted file mode 100644
index 181263935899..000000000000
--- a/tests/get_mem_rsv.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_get_mem_rsv() and fdt_num_mem_rsv()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int rc;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- rc = fdt_num_mem_rsv(fdt);
- if (rc < 0)
- FAIL("fdt_num_mem_rsv(): %s", fdt_strerror(rc));
- if (rc != 2)
- FAIL("fdt_num_mem_rsv() returned %d instead of 2", rc);
-
- check_mem_rsv(fdt, 0, TEST_ADDR_1, TEST_SIZE_1);
- check_mem_rsv(fdt, 1, TEST_ADDR_2, TEST_SIZE_2);
- PASS();
-}
diff --git a/tests/get_name.c b/tests/get_name.c
deleted file mode 100644
index c6ca9f9bbf8c..000000000000
--- a/tests/get_name.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_get_name()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_name(void *fdt, const char *path)
-{
- int offset;
- const char *getname, *getname2, *checkname;
- int len;
-
- checkname = strrchr(path, '/');
- if (!checkname)
- TEST_BUG();
- checkname += 1;
-
- offset = fdt_path_offset(fdt, path);
- if (offset < 0)
- FAIL("Couldn't find %s", path);
-
- getname = fdt_get_name(fdt, offset, &len);
- verbose_printf("fdt_get_name(%d) returns \"%s\" (len=%d)\n",
- offset, getname, len);
- if (!getname)
- FAIL("fdt_get_name(%d): %s", offset, fdt_strerror(len));
-
- if (strcmp(getname, checkname) != 0)
- FAIL("fdt_get_name(%s) returned \"%s\" instead of \"%s\"",
- path, getname, checkname);
-
- if (len != strlen(getname))
- FAIL("fdt_get_name(%s) returned length %d instead of %zd",
- path, len, strlen(getname));
-
- /* Now check that it doesn't break if we omit len */
- getname2 = fdt_get_name(fdt, offset, NULL);
- if (!getname2)
- FAIL("fdt_get_name(%d, NULL) failed", offset);
- if (strcmp(getname2, getname) != 0)
- FAIL("fdt_get_name(%d, NULL) returned \"%s\" instead of \"%s\"",
- offset, getname2, getname);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_name(fdt, "/");
- check_name(fdt, "/subnode@1");
- check_name(fdt, "/subnode@2");
- check_name(fdt, "/subnode@1/subsubnode");
- check_name(fdt, "/subnode@2/subsubnode@0");
-
- PASS();
-}
diff --git a/tests/get_path.c b/tests/get_path.c
deleted file mode 100644
index 735297659379..000000000000
--- a/tests/get_path.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_get_path()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-#define POISON ('\xff')
-
-static void check_path_buf(void *fdt, const char *path, int pathlen, int buflen)
-{
- int offset;
- char buf[buflen+1];
- int len;
-
- offset = fdt_path_offset(fdt, path);
- if (offset < 0)
- FAIL("Couldn't find path \"%s\": %s", path, fdt_strerror(offset));
-
- memset(buf, POISON, sizeof(buf)); /* poison the buffer */
-
- len = fdt_get_path(fdt, offset, buf, buflen);
- verbose_printf("get_path() %s -> %d -> %s\n", path, offset, buf);
-
- if (buflen <= pathlen) {
- if (len != -FDT_ERR_NOSPACE)
- FAIL("fdt_get_path([%d bytes]) returns %d with "
- "insufficient buffer space", buflen, len);
- } else {
- if (len < 0)
- FAIL("fdt_get_path([%d bytes]): %s", buflen,
- fdt_strerror(len));
- if (len != 0)
- FAIL("fdt_get_path([%d bytes]) returns %d "
- "instead of 0", buflen, len);
- if (strcmp(buf, path) != 0)
- FAIL("fdt_get_path([%d bytes]) returns \"%s\" "
- "instead of \"%s\"", buflen, buf, path);
- }
-
- if (buf[buflen] != POISON)
- FAIL("fdt_get_path([%d bytes]) overran buffer", buflen);
-}
-
-static void check_path(void *fdt, const char *path)
-{
- int pathlen = strlen(path);
-
- check_path_buf(fdt, path, pathlen, 1024);
- check_path_buf(fdt, path, pathlen, pathlen+1);
- check_path_buf(fdt, path, pathlen, pathlen);
- check_path_buf(fdt, path, pathlen, 0);
- check_path_buf(fdt, path, pathlen, 2);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_path(fdt, "/");
- check_path(fdt, "/subnode@1");
- check_path(fdt, "/subnode@2");
- check_path(fdt, "/subnode@1/subsubnode");
- check_path(fdt, "/subnode@2/subsubnode@0");
-
- PASS();
-}
diff --git a/tests/get_phandle.c b/tests/get_phandle.c
deleted file mode 100644
index 22bd7b81b3f0..000000000000
--- a/tests/get_phandle.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_get_phandle()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_phandle(void *fdt, const char *path, uint32_t checkhandle)
-{
- int offset;
- uint32_t phandle;
-
- offset = fdt_path_offset(fdt, path);
- if (offset < 0)
- FAIL("Couldn't find %s", path);
-
- phandle = fdt_get_phandle(fdt, offset);
- if (phandle != checkhandle)
- FAIL("fdt_get_phandle(%s) returned 0x%x instead of 0x%x\n",
- path, phandle, checkhandle);
-}
-
-int main(int argc, char *argv[])
-{
- uint32_t max;
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_phandle(fdt, "/", 0);
- check_phandle(fdt, "/subnode@2", PHANDLE_1);
- check_phandle(fdt, "/subnode@2/subsubnode@0", PHANDLE_2);
-
- max = fdt_get_max_phandle(fdt);
- if (max != PHANDLE_2)
- FAIL("fdt_get_max_phandle returned 0x%x instead of 0x%x\n",
- max, PHANDLE_2);
-
- PASS();
-}
diff --git a/tests/getprop.c b/tests/getprop.c
deleted file mode 100644
index 6255badb3fac..000000000000
--- a/tests/getprop.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_getprop()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_getprop_cell(fdt, 0, "prop-int", TEST_VALUE_1);
- check_getprop(fdt, 0, "prop-str", strlen(TEST_STRING_1)+1, TEST_STRING_1);
-
- PASS();
-}
diff --git a/tests/incbin.bin b/tests/incbin.bin
deleted file mode 100644
index e6e3e48d40bb..000000000000
--- a/tests/incbin.bin
+++ /dev/null
@@ -1 +0,0 @@
-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \ No newline at end of file
diff --git a/tests/incbin.c b/tests/incbin.c
deleted file mode 100644
index 4100ba029971..000000000000
--- a/tests/incbin.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for string escapes in dtc
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <errno.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-#define CHUNKSIZE 1024
-
-static char *load_file(const char *name, int *len)
-{
- FILE *f;
- char *buf = NULL;
- int bufsize = 0, n;
-
- *len = 0;
-
- f = fopen(name, "r");
- if (!f)
- FAIL("Couldn't open \"%s\": %s", name, strerror(errno));
-
- while (!feof(f)) {
- if (bufsize < (*len + CHUNKSIZE)) {
- buf = xrealloc(buf, *len + CHUNKSIZE);
- bufsize = *len + CHUNKSIZE;
- }
-
- n = fread(buf + *len, 1, CHUNKSIZE, f);
- if (ferror(f))
- FAIL("Error reading \"%s\": %s", name, strerror(errno));
- *len += n;
- }
-
- return buf;
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- char *incbin;
- int len;
-
- test_init(argc, argv);
-
- incbin = load_file("incbin.bin", &len);
- fdt = load_blob_arg(argc, argv);
-
- check_getprop(fdt, 0, "incbin", len, incbin);
- check_getprop(fdt, 0, "incbin-partial", 17, incbin + 13);
-
- PASS();
-}
diff --git a/tests/incbin.dts b/tests/incbin.dts
deleted file mode 100644
index 7c30e0ec47ed..000000000000
--- a/tests/incbin.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/ {
- incbin = /incbin/("incbin.bin");
- incbin-partial = /incbin/("incbin.bin", 13, 17);
-};
diff --git a/tests/include0.dts b/tests/include0.dts
deleted file mode 100644
index 355ed6a924d5..000000000000
--- a/tests/include0.dts
+++ /dev/null
@@ -1 +0,0 @@
-/include/ "include1.dts"
diff --git a/tests/include1.dts b/tests/include1.dts
deleted file mode 100644
index 0b4b773e654d..000000000000
--- a/tests/include1.dts
+++ /dev/null
@@ -1,32 +0,0 @@
-/dts-v1/;
-
-/include/ "include2.dts"
-/memreserve/ /include/ "include3.dts";
-
-/ {
- /include/ "include4.dts"
- /include/ "include5.dts" = <0xdeadbeef>;
- prop-int64 /include/ "include5a.dts";
- prop-str = /include/ "include6.dts";
- #address-cells = <1>;
- #size-cells = <0>;
-
- /include/ "include7.dts"
-
- subnode@2 {
- reg = <2>;
- linux,phandle = <0x2000>;
- prop-int = <123456789>;
- #address-cells = <1>;
- #size-cells = <0>;
-
- /include/ "include8.dts"
- phandle = <0x2001>;
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
- };
-
- ss2 {
- };
- };
-};
diff --git a/tests/include2.dts b/tests/include2.dts
deleted file mode 100644
index 7e189dd778f1..000000000000
--- a/tests/include2.dts
+++ /dev/null
@@ -1 +0,0 @@
-/memreserve/ 0xdeadbeef00000000 0x100000;
diff --git a/tests/include3.dts b/tests/include3.dts
deleted file mode 100644
index ee9d277aac5e..000000000000
--- a/tests/include3.dts
+++ /dev/null
@@ -1 +0,0 @@
-123456789 010000
diff --git a/tests/include4.dts b/tests/include4.dts
deleted file mode 100644
index b2ddbe5a072e..000000000000
--- a/tests/include4.dts
+++ /dev/null
@@ -1 +0,0 @@
- compatible = "test_tree1";
diff --git a/tests/include5.dts b/tests/include5.dts
deleted file mode 100644
index 9a35dc54eaa3..000000000000
--- a/tests/include5.dts
+++ /dev/null
@@ -1 +0,0 @@
-prop-int
diff --git a/tests/include5a.dts b/tests/include5a.dts
deleted file mode 100644
index 39ddba4fbba1..000000000000
--- a/tests/include5a.dts
+++ /dev/null
@@ -1 +0,0 @@
-= /bits/ 64 <0xdeadbeef01abcdef> \ No newline at end of file
diff --git a/tests/include6.dts b/tests/include6.dts
deleted file mode 100644
index cd4bc1ab64cc..000000000000
--- a/tests/include6.dts
+++ /dev/null
@@ -1 +0,0 @@
-"hello world"
diff --git a/tests/include7.dts b/tests/include7.dts
deleted file mode 100644
index ab2c948f0f69..000000000000
--- a/tests/include7.dts
+++ /dev/null
@@ -1,14 +0,0 @@
- subnode@1 {
- compatible = "subnode1";
- reg = <1>;
- prop-int = [deadbeef];
-
- subsubnode {
- compatible = "subsubnode1", "subsubnode";
- placeholder = "this is a placeholder string", "string2";
- prop-int = <0xdeadbeef>;
- };
-
- ss1 {
- };
- };
diff --git a/tests/include8.dts b/tests/include8.dts
deleted file mode 100644
index 7532ef51d7ee..000000000000
--- a/tests/include8.dts
+++ /dev/null
@@ -1,2 +0,0 @@
-subsubnode@0 {
- reg = <0>;
diff --git a/tests/integer-expressions.c b/tests/integer-expressions.c
deleted file mode 100644
index ed1f967bba25..000000000000
--- a/tests/integer-expressions.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Testcase for dtc expression support
- *
- * Copyright (C) 2008 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <errno.h>
-
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static struct test_expr {
- const char *expr;
- uint32_t result;
-} expr_table[] = {
-#define TE(expr) { #expr, (expr) }
- TE(0xdeadbeef),
- TE(-0x21524111),
- TE(1+1),
- TE(2*3),
- TE(4/2),
- TE(10/3),
- TE(19%4),
- TE(1 << 13),
- TE(0x1000 >> 4),
- TE(3*2+1), TE(3*(2+1)),
- TE(1+2*3), TE((1+2)*3),
- TE(1 < 2), TE(2 < 1), TE(1 < 1),
- TE(1 <= 2), TE(2 <= 1), TE(1 <= 1),
- TE(1 > 2), TE(2 > 1), TE(1 > 1),
- TE(1 >= 2), TE(2 >= 1), TE(1 >= 1),
- TE(1 == 1), TE(1 == 2),
- TE(1 != 1), TE(1 != 2),
- TE(0xabcdabcd & 0xffff0000),
- TE(0xdead4110 ^ 0xf0f0f0f0),
- TE(0xabcd0000 | 0x0000abcd),
- TE(~0x21524110),
- TE(~~0xdeadbeef),
- TE(0 && 0), TE(17 && 0), TE(0 && 17), TE(17 && 17),
- TE(0 || 0), TE(17 || 0), TE(0 || 17), TE(17 || 17),
- TE(!0), TE(!1), TE(!17), TE(!!0), TE(!!17),
- TE(0 ? 17 : 39), TE(1 ? 17 : 39), TE(17 ? 0xdeadbeef : 0xabcd1234),
- TE(11 * 257 * 1321517ULL),
- TE(123456790 - 4/2 + 17%4),
-};
-
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- const fdt32_t *res;
- int reslen;
- int i;
-
- test_init(argc, argv);
-
- if ((argc == 3) && (strcmp(argv[1], "-g") == 0)) {
- FILE *f = fopen(argv[2], "w");
-
- if (!f)
- FAIL("Couldn't open \"%s\" for output: %s\n",
- argv[2], strerror(errno));
-
- fprintf(f, "/dts-v1/;\n");
- fprintf(f, "/ {\n");
- fprintf(f, "\texpressions = <\n");
- for (i = 0; i < ARRAY_SIZE(expr_table); i++)
- fprintf(f, "\t\t(%s)\n", expr_table[i].expr);
- fprintf(f, "\t>;\n");
- fprintf(f, "};\n");
- fclose(f);
- } else {
- fdt = load_blob_arg(argc, argv);
-
- res = fdt_getprop(fdt, 0, "expressions", &reslen);
-
- if (!res)
- FAIL("Error retreiving expression results: %s\n",
- fdt_strerror(reslen));
-
- if (reslen != (ARRAY_SIZE(expr_table) * sizeof(uint32_t)))
- FAIL("Unexpected length of results %d instead of %zd\n",
- reslen, ARRAY_SIZE(expr_table) * sizeof(uint32_t));
-
- for (i = 0; i < ARRAY_SIZE(expr_table); i++)
- if (fdt32_to_cpu(res[i]) != expr_table[i].result)
- FAIL("Incorrect result for expression \"%s\","
- " 0x%x instead of 0x%x\n",
- expr_table[i].expr, fdt32_to_cpu(res[i]),
- expr_table[i].result);
- }
-
- PASS();
-}
diff --git a/tests/label01.dts b/tests/label01.dts
deleted file mode 100644
index a8958034f75e..000000000000
--- a/tests/label01.dts
+++ /dev/null
@@ -1,63 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0x1000000000000000 0x0000000002000000;
-memrsv2: /memreserve/ 0x2000000000000000 0x0100000000000000;
-/memreserve/ 0x0000000000000000 0x0000000000000014;
-
-/ {
- model = "MyBoardName";
- compatible = "MyBoardName", "MyBoardFamilyName";
- #address-cells = <2>;
- #size-cells = <2>;
-
- cpus {
- linux,phandle = <0x1>;
- #address-cells = <1>;
- #size-cells = <0>;
- PowerPC,970@0 {
- name = "PowerPC,970";
- device_type = "cpu";
- reg = <0x00000000>;
- clock-frequency = <1600000000>;
- timebase-frequency = <33333333>;
- linux,boot-cpu;
- i-cache-size = <65536>;
- d-cache-size = <32768>;
- };
-
- PowerPC,970@1 {
- name = "PowerPC,970";
- device_type = "cpu";
- reg = <0x00000001>;
- clock-frequency = <1600000000>;
- timebase-frequency = <33333333>;
- i-cache-size = <65536>;
- d-cache-size = <32768>;
- };
-
- };
-
- node: randomnode {
- prop: string = str: "foo", str_mid: "stuffstuff\t\t\t\n\n\n" str_end: ;
- blob = [byte: 0a 0b 0c 0d byte_mid: de ea ad be ef byte_end: ];
- ref = < cell: &{/memory@0} 0x0 cell_mid: 0xffffffff cell_end: >;
- mixed = "abc", pre: [1234] post: , gap: < aligned: 0xa 0xb 0xc>;
- tricky1 = [61 lt1: 62 63 00];
- subnode: child {
- };
- /* subnode_end: is auto-generated by node emit */
- };
- /* node_end: is auto-generated by node emit */
-
- memory@0 {
- device_type = "memory";
- memreg: reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
- };
-
- chosen {
- bootargs = "root=/dev/sda2";
- linux,platform = <0x600>;
- };
-
-};
-
diff --git a/tests/label_repeated.dts b/tests/label_repeated.dts
deleted file mode 100644
index 34225d331028..000000000000
--- a/tests/label_repeated.dts
+++ /dev/null
@@ -1,15 +0,0 @@
-/dts-v1/;
-
-/ {
- l0: prop = "foo";
-
- l1: node {
- };
-};
-
-/ {
- l0: prop = "foo";
-
- l1: node {
- };
-};
diff --git a/tests/line_directives.dts b/tests/line_directives.dts
deleted file mode 100644
index 67b5e084f15c..000000000000
--- a/tests/line_directives.dts
+++ /dev/null
@@ -1,26 +0,0 @@
-/dts-v1/;
-
-/* common format */
-#line 3 "foo.dts"
-/* newer gcc format */
-# 9 "baz.dts" 1
-/* flags are optional */
-# 6 "bar.dts"
-
-/ {
-/*
- * Make sure optional flags don't consume integer data on next line. The issue
- * was that the {WS} in the trailing ({WS}+[0-9]+)? could cross the * line-
- * break, and consume the leading "0" of the hex constant, leaving "x12345678"
- * to be parsed as a number, which is invalid syntax.
- */
- prop1 = <
-# 10 "qux.dts"
- 0x12345678
- >;
-/*
- * Check processing of escapes in filenames
- */
-# 100 "\".dts"
-# 200 "\\.dts"
-};
diff --git a/tests/lorem.txt b/tests/lorem.txt
deleted file mode 100644
index acff698376bc..000000000000
--- a/tests/lorem.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris eros
-arcu, egestas non pellentesque non, euismod eu nibh. Proin arcu metus,
-dapibus vitae sodales rhoncus, suscipit vel nulla. Etiam lorem est,
-aliquam ut fringilla sit amet, condimentum et quam. Duis eu arcu odio,
-at pulvinar nisi. Morbi condimentum eros ut turpis rhoncus
-pharetra. Pellentesque habitant morbi tristique senectus et netus et
-malesuada fames ac turpis egestas. Nam et nulla enim. Etiam fringilla
-eleifend neque, at posuere ante lacinia a. Duis orci tortor, dictum ac
-gravida ac, euismod eu leo. Sed eget dolor tortor. Pellentesque
-venenatis, lectus eu vulputate porta, libero ipsum convallis mi, sit
-amet vehicula arcu elit sit amet odio.
-
-Fusce iaculis massa metus, id sagittis diam. Praesent molestie ante
-vel odio tincidunt auctor. Cum sociis natoque penatibus et magnis dis
-parturient montes, nascetur ridiculus mus. Duis rutrum vehicula nisl
-eget condimentum. In in justo nisl. Nullam id arcu at nisl eleifend
-pretium. Nulla interdum ligula id elit mollis dictum a sit amet
-quam. Nullam iaculis laoreet ipsum at tempus. Vestibulum in cursus
-dui. Curabitur porta lectus eget urna bibendum congue eget elementum
-nisi. Proin sit amet lectus ut neque iaculis consectetur eu sit amet
-nibh. Maecenas rhoncus dolor ac nunc gravida blandit. Fusce sem felis,
-aliquam a porttitor a, porta quis odio.
-
-Nunc purus lorem, sollicitudin non ultricies id, porta vitae
-enim. Nulla tristique gravida leo ut suscipit. Phasellus vitae turpis
-libero. Proin ac purus dolor, in suscipit magna. Sed et enim
-arcu. Morbi semper aliquet suscipit. Aenean laoreet condimentum massa,
-eu pharetra magna fermentum ut. Morbi euismod convallis tortor, eget
-fringilla lacus sagittis non. Nullam bibendum posuere feugiat.
-
-In at pulvinar massa. Mauris nunc lectus, mollis et malesuada
-pharetra, cursus sed lacus. Integer dolor urna, interdum a mollis at,
-vestibulum non nisl. Sed in urna tortor. Mauris arcu felis, volutpat
-quis euismod vel, congue sit amet ipsum. Morbi in aliquet purus. Duis
-cras amet.
diff --git a/tests/mangle-layout.c b/tests/mangle-layout.c
deleted file mode 100644
index a76e51e31b55..000000000000
--- a/tests/mangle-layout.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase/tool for rearranging blocks of a dtb
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-struct bufstate {
- char *buf;
- int size;
-};
-
-static void expand_buf(struct bufstate *buf, int newsize)
-{
- buf->buf = realloc(buf->buf, newsize);
- if (!buf->buf)
- CONFIG("Allocation failure");
- buf->size = newsize;
-}
-
-static void new_header(struct bufstate *buf, int version, const void *fdt)
-{
- int hdrsize;
-
- if (version == 16)
- hdrsize = FDT_V16_SIZE;
- else if (version == 17)
- hdrsize = FDT_V17_SIZE;
- else
- CONFIG("Bad version %d", version);
-
- expand_buf(buf, hdrsize);
- memset(buf->buf, 0, hdrsize);
-
- fdt_set_magic(buf->buf, FDT_MAGIC);
- fdt_set_version(buf->buf, version);
- fdt_set_last_comp_version(buf->buf, 16);
- fdt_set_boot_cpuid_phys(buf->buf, fdt_boot_cpuid_phys(fdt));
-}
-
-static void add_block(struct bufstate *buf, int version, char block, const void *fdt)
-{
- int align, size, oldsize;
- const void *src;
- int offset;
-
- switch (block) {
- case 'm':
- /* Memory reserve map */
- align = 8;
- src = (const char *)fdt + fdt_off_mem_rsvmap(fdt);
- size = (fdt_num_mem_rsv(fdt) + 1)
- * sizeof(struct fdt_reserve_entry);
- break;
-
- case 't':
- /* Structure block */
- align = 4;
- src = (const char *)fdt + fdt_off_dt_struct(fdt);
- size = fdt_size_dt_struct(fdt);
- break;
-
- case 's':
- /* Strings block */
- align = 1;
- src = (const char *)fdt + fdt_off_dt_strings(fdt);
- size = fdt_size_dt_strings(fdt);
- break;
- default:
- CONFIG("Bad block '%c'", block);
- }
-
- oldsize = buf->size;
- offset = ALIGN(oldsize, align);
- expand_buf(buf, offset+size);
- memset(buf->buf + oldsize, 0, offset - oldsize);
-
- memcpy(buf->buf + offset, src, size);
-
- switch (block) {
- case 'm':
- fdt_set_off_mem_rsvmap(buf->buf, offset);
- break;
-
- case 't':
- fdt_set_off_dt_struct(buf->buf, offset);
- if (version >= 17)
- fdt_set_size_dt_struct(buf->buf, size);
- break;
-
- case 's':
- fdt_set_off_dt_strings(buf->buf, offset);
- fdt_set_size_dt_strings(buf->buf, size);
- break;
- }
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int version;
- const char *blockorder;
- struct bufstate buf = {NULL, 0};
- int err;
- const char *inname;
- char outname[PATH_MAX];
-
- test_init(argc, argv);
- if (argc != 4)
- CONFIG("Usage: %s <dtb file> <version> <block order>", argv[0]);
-
- inname = argv[1];
- fdt = load_blob(argv[1]);
- version = atoi(argv[2]);
- blockorder = argv[3];
- sprintf(outname, "v%d.%s.%s", version, blockorder, inname);
-
- if ((version != 16) && (version != 17))
- CONFIG("Version must be 16 or 17");
-
- if (fdt_version(fdt) < 17)
- CONFIG("Input tree must be v17");
-
- new_header(&buf, version, fdt);
-
- while (*blockorder) {
- add_block(&buf, version, *blockorder, fdt);
- blockorder++;
- }
-
- fdt_set_totalsize(buf.buf, buf.size);
-
- err = fdt_check_header(buf.buf);
- if (err)
- FAIL("Output tree fails check: %s", fdt_strerror(err));
-
- save_blob(outname, buf.buf);
-
- PASS();
-}
diff --git a/tests/mangle-layout.supp b/tests/mangle-layout.supp
deleted file mode 100644
index 289042042edc..000000000000
--- a/tests/mangle-layout.supp
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- uninitialized alignment gaps can be dumped to output
- Memcheck:Param
- write(buf)
- obj:/lib/ld-*.so
- fun:main
-}
diff --git a/tests/minusone-phandle.dts b/tests/minusone-phandle.dts
deleted file mode 100644
index 21d99867a239..000000000000
--- a/tests/minusone-phandle.dts
+++ /dev/null
@@ -1,7 +0,0 @@
-/dts-v1/;
-
-/ {
- node {
- linux,phandle = <0xffffffff>;
- };
-};
diff --git a/tests/move_and_save.c b/tests/move_and_save.c
deleted file mode 100644
index 393b60ac1936..000000000000
--- a/tests/move_and_save.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Basic testcase for read-only access
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt, *fdt1, *fdt2, *fdt3;
- char *buf;
- int shuntsize;
- int bufsize;
- int err;
- const char *inname;
- char outname[PATH_MAX];
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
- inname = argv[1];
-
- shuntsize = ALIGN(fdt_totalsize(fdt) / 2, sizeof(uint64_t));
- bufsize = fdt_totalsize(fdt) + shuntsize;
- buf = xmalloc(bufsize);
-
- fdt1 = buf;
- err = fdt_move(fdt, fdt1, bufsize);
- if (err)
- FAIL("Failed to move tree into new buffer: %s",
- fdt_strerror(err));
- sprintf(outname, "moved.%s", inname);
- save_blob(outname, fdt1);
-
- fdt2 = buf + shuntsize;
- err = fdt_move(fdt1, fdt2, bufsize-shuntsize);
- if (err)
- FAIL("Failed to shunt tree %d bytes: %s",
- shuntsize, fdt_strerror(err));
- sprintf(outname, "shunted.%s", inname);
- save_blob(outname, fdt2);
-
- fdt3 = buf;
- err = fdt_move(fdt2, fdt3, bufsize);
- if (err)
- FAIL("Failed to deshunt tree %d bytes: %s",
- shuntsize, fdt_strerror(err));
- sprintf(outname, "deshunted.%s", inname);
- save_blob(outname, fdt3);
-
- PASS();
-}
diff --git a/tests/multilabel.dts b/tests/multilabel.dts
deleted file mode 100644
index 77da06cc4174..000000000000
--- a/tests/multilabel.dts
+++ /dev/null
@@ -1,44 +0,0 @@
-/dts-v1/;
-
-m1: mq: /memreserve/ 0 0x1000;
-
-/ {
- p0: pw: prop = "foo";
-
- rref = <&{/}>;
-
- /* Explicit phandles */
- n1: nx: node1 {
- linux,phandle = <0x2000>;
- ref = <&{/node2}>; /* reference precedes target */
- p1: px: lref = <&ny>;
- };
- ny: n2: node2 {
- p2: py: phandle = <0x1>;
- ref = <&{/node1}>; /* reference after target */
- lref = <&nx>;
- };
-
- /* Implicit phandles */
- n3: node3 {
- p3: ref = <&{/node4}>;
- lref = <&n4>;
- };
- n4: node4 {
- p4: prop;
- };
-
- /* Explicit phandle with implicit value */
- /* This self-reference is the standard way to tag a node as requiring
- * a phandle (perhaps for reference by nodes that will be dynamically
- * added) without explicitly allocating it a phandle.
- * The self-reference requires some special internal handling, though
- * so check it actually works */
- n5: nz: node5 {
- linux,phandle = <&n5>;
- phandle = <&nz>;
- n1 = &n1;
- n2 = &n2;
- n3 = &n3;
- };
-};
diff --git a/tests/multilabel_merge.dts b/tests/multilabel_merge.dts
deleted file mode 100644
index 3e8029897405..000000000000
--- a/tests/multilabel_merge.dts
+++ /dev/null
@@ -1,70 +0,0 @@
-/dts-v1/;
-
-m1: mq: /memreserve/ 0 0x1000;
-
-/ {
- p0: pw: prop = "foo";
-
- /* Explicit phandles */
- n1: node1 {
- linux,phandle = <0x2000>;
- ref = <&{/node2}>; /* reference precedes target */
- p1: lref;
- };
- node2 {
- phandle = <0x1>;
- ref = <&{/node1}>; /* reference after target */
- lref = <&nx>;
- };
-
- /* Implicit phandles */
- n3: node3 {
- p3: ref = <&{/node4}>;
- lref = <&n4>;
- };
- n4: node4 {
- p4: prop = "foo";
- };
-
- /* Explicit phandle with implicit value */
- /* This self-reference is the standard way to tag a node as requiring
- * a phandle (perhaps for reference by nodes that will be dynamically
- * added) without explicitly allocating it a phandle.
- * The self-reference requires some special internal handling, though
- * so check it actually works */
- n5: nz: node5 {
- linux,phandle = <&n5>;
- phandle = <&nz>;
- n1 = &n1;
- n2 = &n2;
- n3 = &n3;
- };
-};
-
-/ {
- /* Append labels (also changes property content) */
- nx: node1 {
- px: lref = <&ny>;
- };
-
- /* Add multiple labels */
- ny: n2: node2 {
- /* Add a label to a property */
- p2: py: phandle = <0x1>;
- };
-
- /* Reassigning the same label should be a no-op */
- n3: node3 {
- p3: ref = <&{/node4}>;
- };
-
- /* Redefining a node/property should not remove labels */
- node4 {
- prop;
- };
-
-};
-
-/ {
- rref = <&{/}>;
-};
diff --git a/tests/node_check_compatible.c b/tests/node_check_compatible.c
deleted file mode 100644
index 486f9c69e2b8..000000000000
--- a/tests/node_check_compatible.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_node_check_compatible()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_compatible(const void *fdt, const char *path,
- const char *compat)
-{
- int offset, err;
-
- offset = fdt_path_offset(fdt, path);
- if (offset < 0)
- FAIL("fdt_path_offset(%s): %s", path, fdt_strerror(offset));
-
- err = fdt_node_check_compatible(fdt, offset, compat);
- if (err < 0)
- FAIL("fdt_node_check_compatible(%s): %s", path,
- fdt_strerror(err));
- if (err != 0)
- FAIL("%s is not compatible with \"%s\"", path, compat);
-}
-
-static void check_not_compatible(const void *fdt, const char *path,
- const char *compat)
-{
- int offset, err;
-
- offset = fdt_path_offset(fdt, path);
- if (offset < 0)
- FAIL("fdt_path_offset(%s): %s", path, fdt_strerror(offset));
-
- err = fdt_node_check_compatible(fdt, offset, compat);
- if (err < 0)
- FAIL("fdt_node_check_compatible(%s): %s", path,
- fdt_strerror(err));
- if (err == 0)
- FAIL("%s is incorrectly compatible with \"%s\"", path, compat);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_compatible(fdt, "/", "test_tree1");
- check_compatible(fdt, "/subnode@1/subsubnode", "subsubnode1");
- check_compatible(fdt, "/subnode@1/subsubnode", "subsubnode");
- check_not_compatible(fdt, "/subnode@1/subsubnode", "subsubnode2");
- check_compatible(fdt, "/subnode@2/subsubnode", "subsubnode2");
- check_compatible(fdt, "/subnode@2/subsubnode", "subsubnode");
- check_not_compatible(fdt, "/subnode@2/subsubnode", "subsubnode1");
-
- PASS();
-}
diff --git a/tests/node_offset_by_compatible.c b/tests/node_offset_by_compatible.c
deleted file mode 100644
index f62b591ce249..000000000000
--- a/tests/node_offset_by_compatible.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_node_offset_by_compatible()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <stdarg.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_search(void *fdt, const char *compat, ...)
-{
- va_list ap;
- int offset = -1, target;
-
- va_start(ap, compat);
- do {
- target = va_arg(ap, int);
- verbose_printf("Searching (target = %d): %d ->",
- target, offset);
- offset = fdt_node_offset_by_compatible(fdt, offset, compat);
- verbose_printf("%d\n", offset);
-
- if (offset != target)
- FAIL("fdt_node_offset_by_compatible(%s) returns %d "
- "instead of %d", compat, offset, target);
- } while (target >= 0);
-
- va_end(ap);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int subnode1_offset, subnode2_offset;
- int subsubnode1_offset, subsubnode2_offset;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- subnode1_offset = fdt_path_offset(fdt, "/subnode@1");
- subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
- subsubnode1_offset = fdt_path_offset(fdt, "/subnode@1/subsubnode");
- subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode@0");
-
- if ((subnode1_offset < 0) || (subnode2_offset < 0)
- || (subsubnode1_offset < 0) || (subsubnode2_offset < 0))
- FAIL("Can't find required nodes");
-
- check_search(fdt, "test_tree1", 0, -FDT_ERR_NOTFOUND);
- check_search(fdt, "subnode1", subnode1_offset, -FDT_ERR_NOTFOUND);
- check_search(fdt, "subsubnode1", subsubnode1_offset, -FDT_ERR_NOTFOUND);
- check_search(fdt, "subsubnode2", subsubnode2_offset, -FDT_ERR_NOTFOUND);
- /* Eek.. HACK to make this work whatever the order in the
- * example tree */
- if (subsubnode1_offset < subsubnode2_offset)
- check_search(fdt, "subsubnode", subsubnode1_offset,
- subsubnode2_offset, -FDT_ERR_NOTFOUND);
- else
- check_search(fdt, "subsubnode", subsubnode2_offset,
- subsubnode1_offset, -FDT_ERR_NOTFOUND);
- check_search(fdt, "nothing-like-this", -FDT_ERR_NOTFOUND);
-
- PASS();
-}
diff --git a/tests/node_offset_by_phandle.c b/tests/node_offset_by_phandle.c
deleted file mode 100644
index becff0fd5a1a..000000000000
--- a/tests/node_offset_by_phandle.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_node_offset_by_phandle()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <stdarg.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_search(void *fdt, uint32_t phandle, int target)
-{
- int offset;
-
- offset = fdt_node_offset_by_phandle(fdt, phandle);
-
- if (offset != target)
- FAIL("fdt_node_offset_by_phandle(0x%x) returns %d "
- "instead of %d", phandle, offset, target);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int subnode2_offset, subsubnode2_offset;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
- subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode@0");
-
- if ((subnode2_offset < 0) || (subsubnode2_offset < 0))
- FAIL("Can't find required nodes");
-
- check_search(fdt, PHANDLE_1, subnode2_offset);
- check_search(fdt, PHANDLE_2, subsubnode2_offset);
- check_search(fdt, ~PHANDLE_1, -FDT_ERR_NOTFOUND);
- check_search(fdt, 0, -FDT_ERR_BADPHANDLE);
- check_search(fdt, -1, -FDT_ERR_BADPHANDLE);
-
- PASS();
-}
diff --git a/tests/node_offset_by_prop_value.c b/tests/node_offset_by_prop_value.c
deleted file mode 100644
index 286f1e7aa15c..000000000000
--- a/tests/node_offset_by_prop_value.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_path_offset()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <stdarg.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void vcheck_search(void *fdt, const char *propname, const void *propval,
- int proplen, va_list ap)
-{
- int offset = -1, target;
-
- do {
- target = va_arg(ap, int);
- verbose_printf("Searching (target = %d): %d ->",
- target, offset);
- offset = fdt_node_offset_by_prop_value(fdt, offset, propname,
- propval, proplen);
- verbose_printf("%d\n", offset);
-
- if (offset != target)
- FAIL("fdt_node_offset_by_prop_value() returns %d "
- "instead of %d", offset, target);
- } while (target >= 0);
-}
-
-static void check_search(void *fdt, const char *propname, const void *propval,
- int proplen, ...)
-{
- va_list ap;
-
- va_start(ap, proplen);
- vcheck_search(fdt, propname, propval, proplen, ap);
- va_end(ap);
-}
-
-static void check_search_str(void *fdt, const char *propname,
- const char *propval, ...)
-{
- va_list ap;
-
- va_start(ap, propval);
- vcheck_search(fdt, propname, propval, strlen(propval)+1, ap);
- va_end(ap);
-}
-
-#define check_search_cell(fdt, propname, propval, ...) \
- { \
- fdt32_t val = cpu_to_fdt32(propval); \
- check_search((fdt), (propname), &val, sizeof(val), \
- ##__VA_ARGS__); \
- }
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int subnode1_offset, subnode2_offset;
- int subsubnode1_offset, subsubnode2_offset;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- subnode1_offset = fdt_path_offset(fdt, "/subnode@1");
- subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
- subsubnode1_offset = fdt_path_offset(fdt, "/subnode@1/subsubnode");
- subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode@0");
-
- if ((subnode1_offset < 0) || (subnode2_offset < 0)
- || (subsubnode1_offset < 0) || (subsubnode2_offset < 0))
- FAIL("Can't find required nodes");
-
- check_search_cell(fdt, "prop-int", TEST_VALUE_1, 0, subnode1_offset,
- subsubnode1_offset, -FDT_ERR_NOTFOUND);
-
- check_search_cell(fdt, "prop-int", TEST_VALUE_2, subnode2_offset,
- subsubnode2_offset, -FDT_ERR_NOTFOUND);
-
- check_search_str(fdt, "prop-str", TEST_STRING_1, 0, -FDT_ERR_NOTFOUND);
-
- check_search_str(fdt, "prop-str", "no such string", -FDT_ERR_NOTFOUND);
-
- check_search_cell(fdt, "prop-int", TEST_VALUE_1+1, -FDT_ERR_NOTFOUND);
-
- check_search(fdt, "no-such-prop", NULL, 0, -FDT_ERR_NOTFOUND);
-
- PASS();
-}
diff --git a/tests/nonexist-label-ref.dts b/tests/nonexist-label-ref.dts
deleted file mode 100644
index 25927a109ac3..000000000000
--- a/tests/nonexist-label-ref.dts
+++ /dev/null
@@ -1,8 +0,0 @@
-/dts-v1/;
-
-/ {
- ref = <&label>;
- badref = <&nosuchlabel>;
- label: node {
- };
-};
diff --git a/tests/nonexist-node-ref.dts b/tests/nonexist-node-ref.dts
deleted file mode 100644
index efd41404bfce..000000000000
--- a/tests/nonexist-node-ref.dts
+++ /dev/null
@@ -1,8 +0,0 @@
-/dts-v1/;
-
-/ {
- ref = < &{/node} >;
- badref = < &{/nosuchnode} >;
- label: node {
- };
-};
diff --git a/tests/nonexist-node-ref2.dts b/tests/nonexist-node-ref2.dts
deleted file mode 100644
index 44b4ebeba768..000000000000
--- a/tests/nonexist-node-ref2.dts
+++ /dev/null
@@ -1,10 +0,0 @@
-/dts-v1/;
-
-/ {
- label: node {
- };
-};
-
-/* Try to redefine a node using a non-existent label */
-&nosuchnode {
-};
diff --git a/tests/nop_node.c b/tests/nop_node.c
deleted file mode 100644
index c316444f6dce..000000000000
--- a/tests/nop_node.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_nop_node()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int subnode1_offset, subnode2_offset, subsubnode2_offset;
- int err;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- subnode1_offset = fdt_path_offset(fdt, "/subnode@1");
- if (subnode1_offset < 0)
- FAIL("Couldn't find \"/subnode1\": %s",
- fdt_strerror(subnode1_offset));
- check_getprop_cell(fdt, subnode1_offset, "prop-int", TEST_VALUE_1);
-
- subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
- if (subnode2_offset < 0)
- FAIL("Couldn't find \"/subnode2\": %s",
- fdt_strerror(subnode2_offset));
- check_getprop_cell(fdt, subnode2_offset, "prop-int", TEST_VALUE_2);
-
- subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode");
- if (subsubnode2_offset < 0)
- FAIL("Couldn't find \"/subnode@2/subsubnode\": %s",
- fdt_strerror(subsubnode2_offset));
- check_getprop_cell(fdt, subsubnode2_offset, "prop-int", TEST_VALUE_2);
-
- err = fdt_nop_node(fdt, subnode1_offset);
- if (err)
- FAIL("fdt_nop_node(subnode1): %s", fdt_strerror(err));
-
- subnode1_offset = fdt_path_offset(fdt, "/subnode@1");
- if (subnode1_offset != -FDT_ERR_NOTFOUND)
- FAIL("fdt_path_offset(subnode1) returned \"%s\" instead of \"%s\"",
- fdt_strerror(subnode1_offset),
- fdt_strerror(-FDT_ERR_NOTFOUND));
-
- subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
- if (subnode2_offset < 0)
- FAIL("Couldn't find \"/subnode2\": %s",
- fdt_strerror(subnode2_offset));
- check_getprop_cell(fdt, subnode2_offset, "prop-int", TEST_VALUE_2);
-
- subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode");
- if (subsubnode2_offset < 0)
- FAIL("Couldn't find \"/subnode@2/subsubnode\": %s",
- fdt_strerror(subsubnode2_offset));
- check_getprop_cell(fdt, subsubnode2_offset, "prop-int", TEST_VALUE_2);
-
- err = fdt_nop_node(fdt, subnode2_offset);
- if (err)
- FAIL("fdt_nop_node(subnode2): %s", fdt_strerror(err));
-
- subnode1_offset = fdt_path_offset(fdt, "/subnode@1");
- if (subnode1_offset != -FDT_ERR_NOTFOUND)
- FAIL("fdt_path_offset(subnode1) returned \"%s\" instead of \"%s\"",
- fdt_strerror(subnode1_offset),
- fdt_strerror(-FDT_ERR_NOTFOUND));
-
- subnode2_offset = fdt_path_offset(fdt, "/subnode@2");
- if (subnode2_offset != -FDT_ERR_NOTFOUND)
- FAIL("fdt_path_offset(subnode2) returned \"%s\" instead of \"%s\"",
- fdt_strerror(subnode2_offset),
- fdt_strerror(-FDT_ERR_NOTFOUND));
-
- subsubnode2_offset = fdt_path_offset(fdt, "/subnode@2/subsubnode");
- if (subsubnode2_offset != -FDT_ERR_NOTFOUND)
- FAIL("fdt_path_offset(subsubnode2) returned \"%s\" instead of \"%s\"",
- fdt_strerror(subsubnode2_offset),
- fdt_strerror(-FDT_ERR_NOTFOUND));
-
- PASS();
-}
diff --git a/tests/nop_property.c b/tests/nop_property.c
deleted file mode 100644
index 644b0a665e6d..000000000000
--- a/tests/nop_property.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_nop_property()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- const uint32_t *intp;
- const char *strp;
- int err;
- int lenerr;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- intp = check_getprop_cell(fdt, 0, "prop-int", TEST_VALUE_1);
- verbose_printf("int value was 0x%08x\n", *intp);
-
- err = fdt_nop_property(fdt, 0, "prop-int");
- if (err)
- FAIL("Failed to nop \"prop-int\": %s", fdt_strerror(err));
-
- intp = fdt_getprop(fdt, 0, "prop-int", &lenerr);
- if (intp)
- FAIL("prop-int still present after nopping");
- if (lenerr != -FDT_ERR_NOTFOUND)
- FAIL("Unexpected error on second getprop: %s", fdt_strerror(err));
-
- strp = check_getprop(fdt, 0, "prop-str", strlen(TEST_STRING_1)+1,
- TEST_STRING_1);
- verbose_printf("string value was \"%s\"\n", strp);
- err = fdt_nop_property(fdt, 0, "prop-str");
- if (err)
- FAIL("Failed to nop \"prop-str\": %s", fdt_strerror(err));
-
- strp = fdt_getprop(fdt, 0, "prop-str", &lenerr);
- if (strp)
- FAIL("prop-str still present after nopping");
- if (lenerr != -FDT_ERR_NOTFOUND)
- FAIL("Unexpected error on second getprop: %s", fdt_strerror(err));
-
- PASS();
-}
diff --git a/tests/nopulate.c b/tests/nopulate.c
deleted file mode 100644
index 94ce8adbb98a..000000000000
--- a/tests/nopulate.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase/tool for rearranging blocks of a dtb
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static int nopulate_struct(char *buf, const char *fdt)
-{
- int offset, nextoffset = 0;
- uint32_t tag;
- char *p;
-
- p = buf;
-
- do {
- offset = nextoffset;
- tag = fdt_next_tag(fdt, offset, &nextoffset);
-
- memcpy(p, (const char *)fdt + fdt_off_dt_struct(fdt) + offset,
- nextoffset - offset);
- p += nextoffset - offset;
-
- *((fdt32_t *)p) = cpu_to_fdt32(FDT_NOP);
- p += FDT_TAGSIZE;
-
- } while (tag != FDT_END);
-
- return p - buf;
-}
-
-int main(int argc, char *argv[])
-{
- char *fdt, *fdt2, *buf;
- int newsize, struct_start, struct_end_old, struct_end_new, delta;
- const char *inname;
- char outname[PATH_MAX];
-
- test_init(argc, argv);
- if (argc != 2)
- CONFIG("Usage: %s <dtb file>", argv[0]);
-
- inname = argv[1];
- fdt = load_blob(argv[1]);
- sprintf(outname, "noppy.%s", inname);
-
- if (fdt_version(fdt) < 17)
- FAIL("Can't deal with version <17");
-
- buf = xmalloc(2 * fdt_size_dt_struct(fdt));
-
- newsize = nopulate_struct(buf, fdt);
-
- verbose_printf("Nopulated structure block has new size %d\n", newsize);
-
- /* Replace old strcutre block with the new */
-
- fdt2 = xmalloc(fdt_totalsize(fdt) + newsize);
-
- struct_start = fdt_off_dt_struct(fdt);
- delta = newsize - fdt_size_dt_struct(fdt);
- struct_end_old = struct_start + fdt_size_dt_struct(fdt);
- struct_end_new = struct_start + newsize;
-
- memcpy(fdt2, fdt, struct_start);
- memcpy(fdt2 + struct_start, buf, newsize);
- memcpy(fdt2 + struct_end_new, fdt + struct_end_old,
- fdt_totalsize(fdt) - struct_end_old);
-
- fdt_set_totalsize(fdt2, fdt_totalsize(fdt) + delta);
- fdt_set_size_dt_struct(fdt2, newsize);
-
- if (fdt_off_mem_rsvmap(fdt) > struct_start)
- fdt_set_off_mem_rsvmap(fdt2, fdt_off_mem_rsvmap(fdt) + delta);
- if (fdt_off_dt_strings(fdt) > struct_start)
- fdt_set_off_dt_strings(fdt2, fdt_off_dt_strings(fdt) + delta);
-
- save_blob(outname, fdt2);
-
- PASS();
-}
diff --git a/tests/notfound.c b/tests/notfound.c
deleted file mode 100644
index dc623d624672..000000000000
--- a/tests/notfound.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for behaviour on searching for a non-existent node
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_error(const char *s, int err)
-{
- if (err != -FDT_ERR_NOTFOUND)
- FAIL("%s return error %s instead of -FDT_ERR_NOTFOUND", s,
- fdt_strerror(err));
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int offset;
- int subnode1_offset;
- int lenerr;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- fdt_get_property(fdt, 0, "nonexistant-property", &lenerr);
- check_error("fdt_get_property(\"nonexistant-property\")", lenerr);
-
- fdt_getprop(fdt, 0, "nonexistant-property", &lenerr);
- check_error("fdt_getprop(\"nonexistant-property\"", lenerr);
-
- subnode1_offset = fdt_subnode_offset(fdt, 0, "subnode@1");
- if (subnode1_offset < 0)
- FAIL("Couldn't find subnode1: %s", fdt_strerror(subnode1_offset));
-
- fdt_getprop(fdt, subnode1_offset, "prop-str", &lenerr);
- check_error("fdt_getprop(\"prop-str\")", lenerr);
-
- offset = fdt_subnode_offset(fdt, 0, "nonexistant-subnode");
- check_error("fdt_subnode_offset(\"nonexistant-subnode\")", offset);
-
- offset = fdt_subnode_offset(fdt, 0, "subsubnode");
- check_error("fdt_subnode_offset(\"subsubnode\")", offset);
-
- offset = fdt_path_offset(fdt, "/nonexistant-subnode");
- check_error("fdt_path_offset(\"/nonexistant-subnode\")", offset);
-
- PASS();
-}
diff --git a/tests/nul-in-escape.dts b/tests/nul-in-escape.dts
deleted file mode 100644
index 9bed351cf021..000000000000
--- a/tests/nul-in-escape.dts
+++ /dev/null
Binary files differ
diff --git a/tests/nul-in-line-info1.dts b/tests/nul-in-line-info1.dts
deleted file mode 100644
index ceb7261b7ef6..000000000000
--- a/tests/nul-in-line-info1.dts
+++ /dev/null
Binary files differ
diff --git a/tests/nul-in-line-info2.dts b/tests/nul-in-line-info2.dts
deleted file mode 100644
index 1157d2324f37..000000000000
--- a/tests/nul-in-line-info2.dts
+++ /dev/null
@@ -1 +0,0 @@
-# 0 "\0"
diff --git a/tests/obsolete-chosen-interrupt-controller.dts b/tests/obsolete-chosen-interrupt-controller.dts
deleted file mode 100644
index 36dd6e81d143..000000000000
--- a/tests/obsolete-chosen-interrupt-controller.dts
+++ /dev/null
@@ -1,13 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <1>;
- #size-cells = <1>;
- PIC: pic@0 {
- reg = <0x0 0x10>;
- interrupt-controller;
- };
- chosen {
- interrupt-controller = <&PIC>;
- };
-};
diff --git a/tests/open_pack.c b/tests/open_pack.c
deleted file mode 100644
index 407ef6c542a0..000000000000
--- a/tests/open_pack.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Basic testcase for read-only access
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt, *fdt1;
- void *buf;
- int oldsize, bufsize, packsize;
- int err;
- const char *inname;
- char outname[PATH_MAX];
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
- inname = argv[1];
-
- oldsize = fdt_totalsize(fdt);
-
- bufsize = oldsize * 2;
-
- buf = xmalloc(bufsize);
- /* don't leak uninitialized memory into our output */
- memset(buf, 0, bufsize);
-
- fdt1 = buf;
- err = fdt_open_into(fdt, fdt1, bufsize);
- if (err)
- FAIL("fdt_open_into(): %s", fdt_strerror(err));
- sprintf(outname, "opened.%s", inname);
- save_blob(outname, fdt1);
-
- err = fdt_pack(fdt1);
- if (err)
- FAIL("fdt_pack(): %s", fdt_strerror(err));
- sprintf(outname, "repacked.%s", inname);
- save_blob(outname, fdt1);
-
- packsize = fdt_totalsize(fdt1);
-
- verbose_printf("oldsize = %d, bufsize = %d, packsize = %d\n",
- oldsize, bufsize, packsize);
- PASS();
-}
diff --git a/tests/open_pack.supp b/tests/open_pack.supp
deleted file mode 100644
index c954fe789f1f..000000000000
--- a/tests/open_pack.supp
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- opened blob dumps uninitialized data
- Memcheck:Param
- write(buf)
- obj:/lib/ld-*.so
- fun:main
-}
diff --git a/tests/overlay.c b/tests/overlay.c
deleted file mode 100644
index 3093eec67a91..000000000000
--- a/tests/overlay.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for DT overlays()
- * Copyright (C) 2016 Free Electrons
- * Copyright (C) 2016 NextThing Co.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-
-#define CHECK(code) \
- { \
- int err = (code); \
- if (err) \
- FAIL(#code ": %s", fdt_strerror(err)); \
- }
-
-/* 4k ought to be enough for anybody */
-#define FDT_COPY_SIZE (4 * 1024)
-
-static int fdt_getprop_u32_by_poffset(void *fdt, const char *path,
- const char *name, int poffset,
- unsigned long *out)
-{
- const fdt32_t *val;
- int node_off;
- int len;
-
- node_off = fdt_path_offset(fdt, path);
- if (node_off < 0)
- return node_off;
-
- val = fdt_getprop(fdt, node_off, name, &len);
- if (!val || (len < (sizeof(uint32_t) * (poffset + 1))))
- return -FDT_ERR_NOTFOUND;
-
- *out = fdt32_to_cpu(*(val + poffset));
-
- return 0;
-}
-
-static int check_getprop_string_by_name(void *fdt, const char *path,
- const char *name, const char *val)
-{
- int node_off;
-
- node_off = fdt_path_offset(fdt, path);
- if (node_off < 0)
- return node_off;
-
- check_getprop_string(fdt, node_off, name, val);
-
- return 0;
-}
-
-static int check_getprop_u32_by_name(void *fdt, const char *path,
- const char *name, uint32_t val)
-{
- int node_off;
-
- node_off = fdt_path_offset(fdt, path);
- CHECK(node_off < 0);
-
- check_getprop_cell(fdt, node_off, name, val);
-
- return 0;
-}
-
-static int check_getprop_null_by_name(void *fdt, const char *path,
- const char *name)
-{
- int node_off;
-
- node_off = fdt_path_offset(fdt, path);
- CHECK(node_off < 0);
-
- check_property(fdt, node_off, name, 0, NULL);
-
- return 0;
-}
-
-static int fdt_overlay_change_int_property(void *fdt)
-{
- return check_getprop_u32_by_name(fdt, "/test-node", "test-int-property",
- 43);
-}
-
-static int fdt_overlay_change_str_property(void *fdt)
-{
- return check_getprop_string_by_name(fdt, "/test-node",
- "test-str-property", "foobar");
-}
-
-static int fdt_overlay_add_str_property(void *fdt)
-{
- return check_getprop_string_by_name(fdt, "/test-node",
- "test-str-property-2", "foobar2");
-}
-
-static int fdt_overlay_add_node(void *fdt)
-{
- return check_getprop_null_by_name(fdt, "/test-node/new-node",
- "new-property");
-}
-
-static int fdt_overlay_add_subnode_property(void *fdt)
-{
- check_getprop_null_by_name(fdt, "/test-node/sub-test-node",
- "sub-test-property");
- check_getprop_null_by_name(fdt, "/test-node/sub-test-node",
- "new-sub-test-property");
-
- return 0;
-}
-
-static int fdt_overlay_local_phandle(void *fdt)
-{
- uint32_t local_phandle;
- unsigned long val = 0;
- int off;
-
- off = fdt_path_offset(fdt, "/test-node/new-local-node");
- CHECK(off < 0);
-
- local_phandle = fdt_get_phandle(fdt, off);
- CHECK(!local_phandle);
-
- CHECK(fdt_getprop_u32_by_poffset(fdt, "/test-node",
- "test-several-phandle",
- 0, &val));
- CHECK(val != local_phandle);
-
- CHECK(fdt_getprop_u32_by_poffset(fdt, "/test-node",
- "test-several-phandle",
- 1, &val));
- CHECK(val != local_phandle);
-
- return 0;
-}
-
-static int fdt_overlay_local_phandles(void *fdt)
-{
- uint32_t local_phandle, test_phandle;
- unsigned long val = 0;
- int off;
-
- off = fdt_path_offset(fdt, "/test-node/new-local-node");
- CHECK(off < 0);
-
- local_phandle = fdt_get_phandle(fdt, off);
- CHECK(!local_phandle);
-
- off = fdt_path_offset(fdt, "/test-node");
- CHECK(off < 0);
-
- test_phandle = fdt_get_phandle(fdt, off);
- CHECK(!test_phandle);
-
- CHECK(fdt_getprop_u32_by_poffset(fdt, "/test-node",
- "test-phandle", 0, &val));
- CHECK(test_phandle != val);
-
- CHECK(fdt_getprop_u32_by_poffset(fdt, "/test-node",
- "test-phandle", 1, &val));
- CHECK(local_phandle != val);
-
- return 0;
-}
-
-static void *open_dt(char *path)
-{
- void *dt, *copy;
-
- dt = load_blob(path);
- copy = xmalloc(FDT_COPY_SIZE);
-
- /*
- * Resize our DTs to 4k so that we have room to operate on
- */
- CHECK(fdt_open_into(dt, copy, FDT_COPY_SIZE));
-
- return copy;
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt_base, *fdt_overlay;
-
- test_init(argc, argv);
- if (argc != 3)
- CONFIG("Usage: %s <base dtb> <overlay dtb>", argv[0]);
-
- fdt_base = open_dt(argv[1]);
- fdt_overlay = open_dt(argv[2]);
-
- /* Apply the overlay */
- CHECK(fdt_overlay_apply(fdt_base, fdt_overlay));
-
- fdt_overlay_change_int_property(fdt_base);
- fdt_overlay_change_str_property(fdt_base);
- fdt_overlay_add_str_property(fdt_base);
- fdt_overlay_add_node(fdt_base);
- fdt_overlay_add_subnode_property(fdt_base);
-
- /*
- * If the base tree has a __symbols__ node, do the tests that
- * are only successful with a proper phandle support, and thus
- * dtc -@
- */
- if (fdt_path_offset(fdt_base, "/__symbols__") >= 0) {
- fdt_overlay_local_phandle(fdt_base);
- fdt_overlay_local_phandles(fdt_base);
- }
-
- PASS();
-}
diff --git a/tests/overlay_bad_fixup.c b/tests/overlay_bad_fixup.c
deleted file mode 100644
index 5014f5ec0868..000000000000
--- a/tests/overlay_bad_fixup.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for DT overlays()
- * Copyright (C) 2016 Free Electrons
- * Copyright (C) 2016 NextThing Co.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-
-#define CHECK(code, expected) \
- { \
- err = (code); \
- if (err != expected) \
- FAIL(#code ": %s", fdt_strerror(err)); \
- }
-
-/* 4k ought to be enough for anybody */
-#define FDT_COPY_SIZE (4 * 1024)
-
-static void *open_dt(char *path)
-{
- void *dt, *copy;
- int err;
-
- dt = load_blob(path);
- copy = xmalloc(FDT_COPY_SIZE);
-
- /*
- * Resize our DTs to 4k so that we have room to operate on
- */
- CHECK(fdt_open_into(dt, copy, FDT_COPY_SIZE), 0);
-
- return copy;
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt_base, *fdt_overlay;
- int err;
-
- test_init(argc, argv);
- if (argc != 3)
- CONFIG("Usage: %s <base dtb> <overlay dtb>", argv[0]);
-
- fdt_base = open_dt(argv[1]);
- fdt_overlay = open_dt(argv[2]);
-
- /* Apply the overlay */
- CHECK(fdt_overlay_apply(fdt_base, fdt_overlay), -FDT_ERR_BADOVERLAY);
-
- PASS();
-}
diff --git a/tests/overlay_bad_fixup_bad_index.dts b/tests/overlay_bad_fixup_bad_index.dts
deleted file mode 100644
index b5cf13137169..000000000000
--- a/tests/overlay_bad_fixup_bad_index.dts
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2016 NextThing Co
- * Copyright (c) 2016 Free Electrons
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/include/ "overlay_bad_fixup_base.dtsi"
-
-/ {
- __fixups__ {
- test = "/fragment@0:target:ab";
- };
-};
diff --git a/tests/overlay_bad_fixup_base.dtsi b/tests/overlay_bad_fixup_base.dtsi
deleted file mode 100644
index 216bcab52263..000000000000
--- a/tests/overlay_bad_fixup_base.dtsi
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2016 NextThing Co
- * Copyright (c) 2016 Free Electrons
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/dts-v1/;
-
-/ {
- fragment@0 {
- target = <0xffffffff>;
-
- __overlay__ {
- test-property;
- };
- };
-};
diff --git a/tests/overlay_bad_fixup_empty.dts b/tests/overlay_bad_fixup_empty.dts
deleted file mode 100644
index e111db4c8527..000000000000
--- a/tests/overlay_bad_fixup_empty.dts
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2016 NextThing Co
- * Copyright (c) 2016 Free Electrons
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/include/ "overlay_bad_fixup_base.dtsi"
-
-/ {
- __fixups__ {
- test = "";
- };
-};
diff --git a/tests/overlay_bad_fixup_empty_index.dts b/tests/overlay_bad_fixup_empty_index.dts
deleted file mode 100644
index 9e12e2177ad5..000000000000
--- a/tests/overlay_bad_fixup_empty_index.dts
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2016 NextThing Co
- * Copyright (c) 2016 Free Electrons
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/include/ "overlay_bad_fixup_base.dtsi"
-
-/ {
- __fixups__ {
- test = "/fragment@0:target:";
- };
-};
diff --git a/tests/overlay_bad_fixup_index_trailing.dts b/tests/overlay_bad_fixup_index_trailing.dts
deleted file mode 100644
index f586bef4d374..000000000000
--- a/tests/overlay_bad_fixup_index_trailing.dts
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2016 NextThing Co
- * Copyright (c) 2016 Free Electrons
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/include/ "overlay_bad_fixup_base.dtsi"
-
-/ {
- __fixups__ {
- test = "/fragment@0:target:0a";
- };
-};
diff --git a/tests/overlay_bad_fixup_path_empty_prop.dts b/tests/overlay_bad_fixup_path_empty_prop.dts
deleted file mode 100644
index 608b5f9247b5..000000000000
--- a/tests/overlay_bad_fixup_path_empty_prop.dts
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2016 NextThing Co
- * Copyright (c) 2016 Free Electrons
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/include/ "overlay_bad_fixup_base.dtsi"
-
-/ {
- __fixups__ {
- test = "/fragment@0::";
- };
-};
diff --git a/tests/overlay_bad_fixup_path_only.dts b/tests/overlay_bad_fixup_path_only.dts
deleted file mode 100644
index 2485dd965ee5..000000000000
--- a/tests/overlay_bad_fixup_path_only.dts
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2016 NextThing Co
- * Copyright (c) 2016 Free Electrons
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/include/ "overlay_bad_fixup_base.dtsi"
-
-/ {
- __fixups__ {
- test = "/fragment@0";
- };
-};
diff --git a/tests/overlay_bad_fixup_path_only_sep.dts b/tests/overlay_bad_fixup_path_only_sep.dts
deleted file mode 100644
index 3cbf6c40fba5..000000000000
--- a/tests/overlay_bad_fixup_path_only_sep.dts
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2016 NextThing Co
- * Copyright (c) 2016 Free Electrons
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/include/ "overlay_bad_fixup_base.dtsi"
-
-/ {
- __fixups__ {
- test = "/fragment@0:";
- };
-};
diff --git a/tests/overlay_bad_fixup_path_prop.dts b/tests/overlay_bad_fixup_path_prop.dts
deleted file mode 100644
index ca79b52bcb22..000000000000
--- a/tests/overlay_bad_fixup_path_prop.dts
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2016 NextThing Co
- * Copyright (c) 2016 Free Electrons
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/include/ "overlay_bad_fixup_base.dtsi"
-
-/ {
- __fixups__ {
- test = "/fragment@0:target";
- };
-};
diff --git a/tests/overlay_base.dts b/tests/overlay_base.dts
deleted file mode 100644
index 2603adb6821e..000000000000
--- a/tests/overlay_base.dts
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (c) 2016 NextThing Co
- * Copyright (c) 2016 Free Electrons
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/dts-v1/;
-
-/ {
- test: test-node {
- test-int-property = <42>;
- test-str-property = "foo";
-
- subtest: sub-test-node {
- sub-test-property;
- };
- };
-};
-
-
diff --git a/tests/overlay_base_manual_symbols.dts b/tests/overlay_base_manual_symbols.dts
deleted file mode 100644
index 7e4d17dcb06c..000000000000
--- a/tests/overlay_base_manual_symbols.dts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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.dts b/tests/overlay_overlay.dts
deleted file mode 100644
index b6d841b1f011..000000000000
--- a/tests/overlay_overlay.dts
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * 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 */
- fragment@0 {
- target = <&test>;
-
- __overlay__ {
- test-int-property = <43>;
- };
- };
-
- /* Test that we can replace a string by a longer one */
- fragment@1 {
- target = <&test>;
-
- __overlay__ {
- test-str-property = "foobar";
- };
- };
-
- /* Test that we add a new property */
- fragment@2 {
- target = <&test>;
-
- __overlay__ {
- test-str-property-2 = "foobar2";
- };
- };
-
- /* Test that we add a new node (by phandle) */
- fragment@3 {
- target = <&test>;
-
- __overlay__ {
- new-node {
- new-property;
- };
- };
- };
-
- fragment@5 {
- target = <&test>;
-
- __overlay__ {
- local: new-local-node {
- new-property;
- };
- };
- };
-
- fragment@6 {
- target = <&test>;
-
- __overlay__ {
- test-phandle = <&test>, <&local>;
- };
- };
-
- fragment@7 {
- target = <&test>;
-
- __overlay__ {
- test-several-phandle = <&local>, <&local>;
- };
- };
-
- fragment@8 {
- target = <&test>;
-
- __overlay__ {
- sub-test-node {
- new-sub-test-property;
- };
- };
- };
-};
diff --git a/tests/overlay_overlay_manual_fixups.dts b/tests/overlay_overlay_manual_fixups.dts
deleted file mode 100644
index e34c4fc63085..000000000000
--- a/tests/overlay_overlay_manual_fixups.dts
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * 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_no_fixups.dts b/tests/overlay_overlay_no_fixups.dts
deleted file mode 100644
index e8d0f96d889c..000000000000
--- a/tests/overlay_overlay_no_fixups.dts
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2016 NextThing Co
- * Copyright (c) 2016 Free Electrons
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/dts-v1/;
-
-/ {
- fragment@0 {
- target-path = "/test-node";
-
- __overlay__ {
- test-int-property = <43>;
- };
- };
-
- /* Test that we can replace a string by a longer one */
- fragment@1 {
- target-path = "/test-node";
-
- __overlay__ {
- test-str-property = "foobar";
- };
- };
-
- /* Test that we add a new property */
- fragment@2 {
- target-path = "/test-node";
-
- __overlay__ {
- test-str-property-2 = "foobar2";
- };
- };
-
- fragment@3 {
- target-path = "/test-node";
-
- __overlay__ {
- new-node {
- new-property;
- };
- };
- };
-
- fragment@4 {
- target-path = "/";
-
- __overlay__ {
- local: new-local-node {
- new-property;
- };
- };
- };
-
- fragment@5 {
- target-path = "/";
-
- __overlay__ {
- test-several-phandle = <&local>, <&local>;
- };
- };
-
- fragment@6 {
- target-path = "/test-node";
-
- __overlay__ {
- sub-test-node {
- new-sub-test-property;
- };
- };
- };
-
- __local_fixups__ {
- fragment@5 {
- __overlay__ {
- test-several-phandle = <0 4>;
- };
- };
- };
-};
diff --git a/tests/overlay_overlay_simple.dts b/tests/overlay_overlay_simple.dts
deleted file mode 100644
index 8657e1e7a15a..000000000000
--- a/tests/overlay_overlay_simple.dts
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * Copyright (c) 2016 Konsulko Inc.
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-/dts-v1/;
-/plugin/;
-
-&test {
- test-int-property = <43>;
-};
diff --git a/tests/parent_offset.c b/tests/parent_offset.c
deleted file mode 100644
index d4ab3cff3052..000000000000
--- a/tests/parent_offset.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_parent_offset()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static int path_parent_len(const char *path)
-{
- const char *p = strrchr(path, '/');
-
- if (!p)
- TEST_BUG();
- if (p == path)
- return 1;
- else
- return p - path;
-}
-
-static void check_path(struct fdt_header *fdt, const char *path)
-{
- char *parentpath;
- int nodeoffset, parentoffset, parentpathoffset, pathparentlen;
-
- pathparentlen = path_parent_len(path);
- parentpath = alloca(pathparentlen + 1);
- strncpy(parentpath, path, pathparentlen);
- parentpath[pathparentlen] = '\0';
-
- verbose_printf("Path: \"%s\"\tParent: \"%s\"\n", path, parentpath);
-
- nodeoffset = fdt_path_offset(fdt, path);
- if (nodeoffset < 0)
- FAIL("fdt_path_offset(%s): %s", path, fdt_strerror(nodeoffset));
-
- parentpathoffset = fdt_path_offset(fdt, parentpath);
- if (parentpathoffset < 0)
- FAIL("fdt_path_offset(%s): %s", parentpath,
- fdt_strerror(parentpathoffset));
-
- parentoffset = fdt_parent_offset(fdt, nodeoffset);
- if (parentoffset < 0)
- FAIL("fdt_parent_offset(): %s", fdt_strerror(parentoffset));
-
- if (parentoffset != parentpathoffset)
- FAIL("fdt_parent_offset() returns %d instead of %d",
- parentoffset, parentpathoffset);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int err;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_path(fdt, "/subnode@1");
- check_path(fdt, "/subnode@2");
- check_path(fdt, "/subnode@1/subsubnode");
- check_path(fdt, "/subnode@2/subsubnode@0");
- err = fdt_parent_offset(fdt, 0);
- if (err != -FDT_ERR_NOTFOUND)
- FAIL("fdt_parent_offset(/) returns %d instead of "
- "-FDT_ERR_NOTFOUND", err);
-
- PASS();
-}
diff --git a/tests/path-references.c b/tests/path-references.c
deleted file mode 100644
index 5e332e8f32ca..000000000000
--- a/tests/path-references.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for string references in dtc
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_ref(const void *fdt, int node, const char *checkpath)
-{
- const char *p;
- int len;
-
- p = fdt_getprop(fdt, node, "ref", &len);
- if (!p)
- FAIL("fdt_getprop(%d, \"ref\"): %s", node, fdt_strerror(len));
- if (!streq(p, checkpath))
- FAIL("'ref' in node at %d has value \"%s\" instead of \"%s\"",
- node, p, checkpath);
-
- p = fdt_getprop(fdt, node, "lref", &len);
- if (!p)
- FAIL("fdt_getprop(%d, \"lref\"): %s", node, fdt_strerror(len));
- if (!streq(p, checkpath))
- FAIL("'lref' in node at %d has value \"%s\" instead of \"%s\"",
- node, p, checkpath);
-}
-
-static void check_rref(const void *fdt)
-{
- const char *p;
- int len;
-
- /* Check reference to root node */
- p = fdt_getprop(fdt, 0, "rref", &len);
- if (!p)
- FAIL("fdt_getprop(0, \"rref\"): %s", fdt_strerror(len));
- if (!streq(p, "/"))
- FAIL("'rref' in root node has value \"%s\" instead of \"/\"",
- p);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- const char *p;
- int len, multilen;
- int n1, n2, n3, n4;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- n1 = fdt_path_offset(fdt, "/node1");
- if (n1 < 0)
- FAIL("fdt_path_offset(/node1): %s", fdt_strerror(n1));
- n2 = fdt_path_offset(fdt, "/node2");
- if (n2 < 0)
- FAIL("fdt_path_offset(/node2): %s", fdt_strerror(n2));
-
- check_ref(fdt, n1, "/node2");
- check_ref(fdt, n2, "/node1");
-
- /* Check multiple reference */
- multilen = strlen("/node1") + strlen("/node2") + 2;
- p = fdt_getprop(fdt, 0, "multiref", &len);
- if (!p)
- FAIL("fdt_getprop(0, \"multiref\"): %s", fdt_strerror(len));
- if (len != multilen)
- FAIL("multiref has wrong length, %d instead of %d",
- len, multilen);
- if ((!streq(p, "/node1") || !streq(p + strlen("/node1") + 1, "/node2")))
- FAIL("multiref has wrong value");
-
- /* Check reference to nested nodes with common prefix */
- n3 = fdt_path_offset(fdt, "/foo/baz");
- if (n3 < 0)
- FAIL("fdt_path_offset(/foo/baz): %s", fdt_strerror(n3));
- n4 = fdt_path_offset(fdt, "/foobar/baz");
- if (n4 < 0)
- FAIL("fdt_path_offset(/foobar/baz): %s", fdt_strerror(n4));
- check_ref(fdt, n3, "/foobar/baz");
- check_ref(fdt, n4, "/foo/baz");
-
- check_rref(fdt);
-
- PASS();
-}
diff --git a/tests/path-references.dts b/tests/path-references.dts
deleted file mode 100644
index 8c66d8057bbd..000000000000
--- a/tests/path-references.dts
+++ /dev/null
@@ -1,28 +0,0 @@
-/dts-v1/;
-
-/ {
- rref = &{/};
- /* Check multiple references case */
- multiref = &n1 , &n2;
- n1: node1 {
- ref = &{/node2}; /* reference precedes target */
- lref = &n2;
- };
- n2: node2 {
- ref = &{/node1}; /* reference after target */
- lref = &n1;
- };
- /* Check references to nested nodes with common prefix */
- foobar {
- n3: baz {
- ref = &{/foo/baz};
- lref = &n4;
- };
- };
- foo {
- n4: baz {
- ref = &{/foobar/baz};
- lref = &n3;
- };
- };
-};
diff --git a/tests/path_offset.c b/tests/path_offset.c
deleted file mode 100644
index bfebe9fff853..000000000000
--- a/tests/path_offset.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_path_offset()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static int check_subnode(void *fdt, int parent, const char *name)
-{
- int offset;
- const struct fdt_node_header *nh;
- uint32_t tag;
-
- verbose_printf("Checking subnode \"%s\" of %d...", name, parent);
- offset = fdt_subnode_offset(fdt, parent, name);
- verbose_printf("offset %d...", offset);
- if (offset < 0)
- FAIL("fdt_subnode_offset(\"%s\"): %s", name, fdt_strerror(offset));
- nh = fdt_offset_ptr(fdt, offset, sizeof(*nh));
- verbose_printf("pointer %p\n", nh);
- if (! nh)
- FAIL("NULL retrieving subnode \"%s\"", name);
-
- tag = fdt32_to_cpu(nh->tag);
-
- if (tag != FDT_BEGIN_NODE)
- FAIL("Incorrect tag 0x%08x on property \"%s\"", tag, name);
- if (!nodename_eq(nh->name, name))
- FAIL("Subnode name mismatch \"%s\" instead of \"%s\"",
- nh->name, name);
-
- return offset;
-}
-
-static void check_path_offset(void *fdt, char *path, int offset)
-{
- int rc;
-
- verbose_printf("Checking offset of \"%s\" is %d...\n", path, offset);
-
- rc = fdt_path_offset(fdt, path);
- if (rc < 0)
- FAIL("fdt_path_offset(\"%s\") failed: %s",
- path, fdt_strerror(rc));
- if (rc != offset)
- FAIL("fdt_path_offset(\"%s\") returned incorrect offset"
- " %d instead of %d", path, rc, offset);
-}
-
-static void check_path_offset_namelen(void *fdt, char *path, int namelen,
- int offset)
-{
- int rc;
-
- verbose_printf("Checking offset of \"%s\" [first %d characters]"
- " is %d...\n", path, namelen, offset);
-
- rc = fdt_path_offset_namelen(fdt, path, namelen);
- if (rc == offset)
- return;
-
- if (rc < 0)
- FAIL("fdt_path_offset_namelen(\"%s\", %d) failed: %s",
- path, namelen, fdt_strerror(rc));
- else
- FAIL("fdt_path_offset_namelen(\"%s\", %d) returned incorrect"
- " offset %d instead of %d", path, namelen, rc, offset);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int subnode1_offset, subnode2_offset;
- int subsubnode1_offset, subsubnode2_offset, subsubnode2_offset2;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_path_offset(fdt, "/", 0);
-
- subnode1_offset = check_subnode(fdt, 0, "subnode@1");
- subnode2_offset = check_subnode(fdt, 0, "subnode@2");
-
- check_path_offset(fdt, "/subnode@1", subnode1_offset);
- check_path_offset(fdt, "/subnode@2", subnode2_offset);
-
- subsubnode1_offset = check_subnode(fdt, subnode1_offset, "subsubnode");
- subsubnode2_offset = check_subnode(fdt, subnode2_offset, "subsubnode@0");
- subsubnode2_offset2 = check_subnode(fdt, subnode2_offset, "subsubnode");
-
- check_path_offset(fdt, "/subnode@1/subsubnode", subsubnode1_offset);
- check_path_offset(fdt, "/subnode@2/subsubnode@0", subsubnode2_offset);
- check_path_offset(fdt, "/subnode@2/subsubnode", subsubnode2_offset2);
-
- /* Test paths with extraneous separators */
- check_path_offset(fdt, "//", 0);
- check_path_offset(fdt, "///", 0);
- check_path_offset(fdt, "//subnode@1", subnode1_offset);
- check_path_offset(fdt, "/subnode@1/", subnode1_offset);
- check_path_offset(fdt, "//subnode@1///", subnode1_offset);
- check_path_offset(fdt, "/subnode@2////subsubnode", subsubnode2_offset2);
-
- /* Test fdt_path_offset_namelen() */
- check_path_offset_namelen(fdt, "/subnode@1", 1, 0);
- check_path_offset_namelen(fdt, "/subnode@1/subsubnode", 10, subnode1_offset);
- check_path_offset_namelen(fdt, "/subnode@1/subsubnode", 11, subnode1_offset);
- check_path_offset_namelen(fdt, "/subnode@2TRAILINGGARBAGE", 10, subnode2_offset);
- check_path_offset_namelen(fdt, "/subnode@2TRAILINGGARBAGE", 11, -FDT_ERR_NOTFOUND);
- check_path_offset_namelen(fdt, "/subnode@2/subsubnode@0/more", 23, subsubnode2_offset2);
- check_path_offset_namelen(fdt, "/subnode@2/subsubnode@0/more", 22, -FDT_ERR_NOTFOUND);
- check_path_offset_namelen(fdt, "/subnode@2/subsubnode@0/more", 24, subsubnode2_offset2);
- check_path_offset_namelen(fdt, "/subnode@2/subsubnode@0/more", 25, -FDT_ERR_NOTFOUND);
-
- PASS();
-}
diff --git a/tests/path_offset_aliases.c b/tests/path_offset_aliases.c
deleted file mode 100644
index 78d5a46967c8..000000000000
--- a/tests/path_offset_aliases.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_path_offset()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- * Copyright 2008 Kumar Gala, Freescale Semiconductor, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_alias(void *fdt, const char *full_path, const char *alias_path)
-{
- int offset, offset_a;
-
- offset = fdt_path_offset(fdt, full_path);
- offset_a = fdt_path_offset(fdt, alias_path);
-
- if (offset != offset_a)
- FAIL("Mismatch between %s path_offset (%d) and %s path_offset alias (%d)",
- full_path, offset, alias_path, offset_a);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_alias(fdt, "/subnode@1", "s1");
- check_alias(fdt, "/subnode@1/subsubnode", "ss1");
- check_alias(fdt, "/subnode@1/subsubnode", "s1/subsubnode");
- check_alias(fdt, "/subnode@1/subsubnode/subsubsubnode", "sss1");
- check_alias(fdt, "/subnode@1/subsubnode/subsubsubnode", "ss1/subsubsubnode");
- check_alias(fdt, "/subnode@1/subsubnode/subsubsubnode", "s1/subsubnode/subsubsubnode");
-
- PASS();
-}
diff --git a/tests/pci-bridge-bad1.dts b/tests/pci-bridge-bad1.dts
deleted file mode 100644
index 17aac04aec5d..000000000000
--- a/tests/pci-bridge-bad1.dts
+++ /dev/null
@@ -1,16 +0,0 @@
-/dts-v1/;
-
-/ {
- compatible = "example,pci-bridge-ok";
- #address-cells = < 2 >;
- #size-cells = < 2 >;
- abadname@0 {
- device_type = "pci";
- compatible = "example,pci-bridge";
- #address-cells = < 3 >;
- #size-cells = < 2 >;
- reg = <0 0 0 0x1000>;
- bus-range = <0 0xff>;
- ranges = <0 0 0 0 0 0 0x10000>;
- };
-};
diff --git a/tests/pci-bridge-bad2.dts b/tests/pci-bridge-bad2.dts
deleted file mode 100644
index a7e5c054ac41..000000000000
--- a/tests/pci-bridge-bad2.dts
+++ /dev/null
@@ -1,16 +0,0 @@
-/dts-v1/;
-
-/ {
- compatible = "example,pci-bridge-ok";
- #address-cells = < 2 >;
- #size-cells = < 2 >;
- p@0 {
- device_type = "pci";
- compatible = "example,pci-bridge";
- #address-cells = < 3 >;
- #size-cells = < 2 >;
- reg = <0 0 0 0x1000>;
- bus-range = <0 0xff>;
- ranges = <0 0 0 0 0 0 0x10000>;
- };
-};
diff --git a/tests/pci-bridge-ok.dts b/tests/pci-bridge-ok.dts
deleted file mode 100644
index 02e32e01a982..000000000000
--- a/tests/pci-bridge-ok.dts
+++ /dev/null
@@ -1,25 +0,0 @@
-/dts-v1/;
-
-/ {
- compatible = "example,pci-bridge-ok";
- #address-cells = < 2 >;
- #size-cells = < 2 >;
- pci@0 {
- device_type = "pci";
- compatible = "example,pci-bridge";
- #address-cells = < 3 >;
- #size-cells = < 2 >;
- reg = <0 0 0 0x1000>;
- bus-range = <0 0xff>;
- ranges = <0 0 0 0 0 0 0x10000>;
- };
- pcie@10000000000 {
- device_type = "pci";
- compatible = "example,pcie-bridge";
- #address-cells = < 3 >;
- #size-cells = < 2 >;
- reg = <0x10 0x00000000 0 0x1000>;
- bus-range = <0 0xff>;
- ranges = <0 0 0 0 0 0 0x10000>;
- };
-};
diff --git a/tests/phandle_format.c b/tests/phandle_format.c
deleted file mode 100644
index 5874ae79291c..000000000000
--- a/tests/phandle_format.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for phandle format options
- * Copyright (C) 2009 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-#define PHANDLE_LEGACY 0x1
-#define PHANDLE_EPAPR 0x2
-#define PHANDLE_BOTH 0x3
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int phandle_format;
- int n4;
- uint32_t h4;
-
- if (argc != 3)
- CONFIG("Usage: %s <dtb file> <legacy|epapr|both>\n", argv[0]);
-
- test_init(argc, argv);
- fdt = load_blob(argv[1]);
-
- if (streq(argv[2], "legacy"))
- phandle_format = PHANDLE_LEGACY;
- else if (streq(argv[2], "epapr"))
- phandle_format = PHANDLE_EPAPR;
- else if (streq(argv[2], "both"))
- phandle_format = PHANDLE_BOTH;
- else
- CONFIG("Usage: %s <dtb file> <legacy|epapr|both>\n", argv[0]);
-
- n4 = fdt_path_offset(fdt, "/node4");
- if (n4 < 0)
- FAIL("fdt_path_offset(/node4): %s", fdt_strerror(n4));
-
- h4 = fdt_get_phandle(fdt, n4);
- if ((h4 == 0) || (h4 == -1))
- FAIL("/node4 has bad phandle 0x%x\n", h4);
-
- if (phandle_format & PHANDLE_LEGACY)
- check_getprop_cell(fdt, n4, "linux,phandle", h4);
- else
- if (fdt_getprop(fdt, n4, "linux,phandle", NULL))
- FAIL("linux,phandle property present in non-legacy mode");
-
- if (phandle_format & PHANDLE_EPAPR)
- check_getprop_cell(fdt, n4, "phandle", h4);
- else
- if (fdt_getprop(fdt, n4, "phandle", NULL))
- FAIL("phandle property present in legacy-only mode");
-
- PASS();
-}
diff --git a/tests/prop-after-subnode.dts b/tests/prop-after-subnode.dts
deleted file mode 100644
index 6dd0b660fcd1..000000000000
--- a/tests/prop-after-subnode.dts
+++ /dev/null
@@ -1,9 +0,0 @@
-/dts-v1/;
-
-/ {
- node1 {
- };
- prop;
- node2 {
- };
-};
diff --git a/tests/property_iterate.c b/tests/property_iterate.c
deleted file mode 100644
index b5cedbeef399..000000000000
--- a/tests/property_iterate.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Tests that fdt_next_subnode() works as expected
- *
- * Copyright (C) 2013 Google, Inc
- *
- * Copyright (C) 2007 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void test_node(void *fdt, int parent_offset)
-{
- uint32_t properties;
- const fdt32_t *prop;
- int offset, property;
- int count;
- int len;
-
- /*
- * This property indicates the number of properties in our
- * test node to expect
- */
- prop = fdt_getprop(fdt, parent_offset, "test-properties", &len);
- if (!prop || len != sizeof(fdt32_t)) {
- FAIL("Missing/invalid test-properties property at '%s'",
- fdt_get_name(fdt, parent_offset, NULL));
- }
- properties = fdt32_to_cpu(*prop);
-
- count = 0;
- offset = fdt_first_subnode(fdt, parent_offset);
- if (offset < 0)
- FAIL("Missing test node\n");
-
- fdt_for_each_property_offset(property, fdt, offset)
- count++;
-
- if (count != properties) {
- FAIL("Node '%s': Expected %d properties, got %d\n",
- fdt_get_name(fdt, parent_offset, NULL), properties,
- count);
- }
-}
-
-static void check_fdt_next_subnode(void *fdt)
-{
- int offset;
- int count = 0;
-
- fdt_for_each_subnode(offset, fdt, 0) {
- test_node(fdt, offset);
- count++;
- }
-
- if (count != 2)
- FAIL("Expected %d tests, got %d\n", 2, count);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- if (argc != 2)
- CONFIG("Usage: %s <dtb file>", argv[0]);
-
- fdt = load_blob(argv[1]);
- if (!fdt)
- FAIL("No device tree available");
-
- check_fdt_next_subnode(fdt);
-
- PASS();
-}
diff --git a/tests/property_iterate.dts b/tests/property_iterate.dts
deleted file mode 100644
index e8f5f8f4fedd..000000000000
--- a/tests/property_iterate.dts
+++ /dev/null
@@ -1,23 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <1>;
- #size-cells = <0>;
-
- test1 {
- test-properties = <3>;
-
- test {
- linux,phandle = <0x1>;
- #address-cells = <1>;
- #size-cells = <0>;
- };
- };
-
- test2 {
- test-properties = <0>;
-
- test {
- };
- };
-};
diff --git a/tests/propname_escapes.c b/tests/propname_escapes.c
deleted file mode 100644
index e91bd9944de0..000000000000
--- a/tests/propname_escapes.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_getprop()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- * Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_getprop_cell(fdt, 0, "#address-cells", 1);
- check_getprop_cell(fdt, 0, "#gpio-cells", 2);
-
- PASS();
-}
diff --git a/tests/propname_escapes.dts b/tests/propname_escapes.dts
deleted file mode 100644
index 9f70618b9150..000000000000
--- a/tests/propname_escapes.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <1>;
- \#gpio-cells = <2>;
-};
diff --git a/tests/pylibfdt_tests.py b/tests/pylibfdt_tests.py
deleted file mode 100644
index 95d911aebbd7..000000000000
--- a/tests/pylibfdt_tests.py
+++ /dev/null
@@ -1,334 +0,0 @@
-# pylibfdt - Tests for Flat Device Tree manipulation in Python
-# Copyright (C) 2017 Google, Inc.
-# Written by Simon Glass <sjg@chromium.org>
-#
-# libfdt is dual licensed: you can use it either under the terms of
-# the GPL, or the BSD license, at your option.
-#
-# a) This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public
-# License along with this library; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
-# MA 02110-1301 USA
-#
-# Alternatively,
-#
-# b) Redistribution and use in source and binary forms, with or
-# without modification, are permitted provided that the following
-# conditions are met:
-#
-# 1. Redistributions of source code must retain the above
-# copyright notice, this list of conditions and the following
-# disclaimer.
-# 2. Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following
-# disclaimer in the documentation and/or other materials
-# provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
-# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-import sys
-import types
-import unittest
-
-sys.path.insert(0, '../pylibfdt')
-import libfdt
-from libfdt import FdtException, QUIET_NOTFOUND, QUIET_ALL
-
-def get_err(err_code):
- """Convert an error code into an error message
-
- Args:
- err_code: Error code value (FDT_ERR_...)
-
- Returns:
- String error code
- """
- return 'pylibfdt error %d: %s' % (-err_code, libfdt.strerror(-err_code))
-
-def _ReadFdt(fname):
- """Read a device tree file into an Fdt object, ready for use
-
- Args:
- fname: Filename to read from
-
- Returns:
- Fdt bytearray suitable for passing to libfdt functions
- """
- return libfdt.Fdt(open(fname).read())
-
-class PyLibfdtTests(unittest.TestCase):
- """Test class for pylibfdt
-
- Properties:
- fdt: Device tree file used for testing
- """
-
- def setUp(self):
- """Read in the device tree we use for testing"""
- self.fdt = _ReadFdt('test_tree1.dtb')
-
- def GetPropList(self, node_path):
- """Read a list of properties from a node
-
- Args:
- node_path: Full path to node, e.g. '/subnode@1/subsubnode'
-
- Returns:
- List of property names for that node, e.g. ['compatible', 'reg']
- """
- prop_list = []
- node = self.fdt.path_offset(node_path)
- poffset = self.fdt.first_property_offset(node, QUIET_NOTFOUND)
- while poffset > 0:
- prop = self.fdt.get_property_by_offset(poffset)
- prop_list.append(prop.name)
- poffset = self.fdt.next_property_offset(poffset, QUIET_NOTFOUND)
- return prop_list
-
- def testImport(self):
- """Check that we can import the library correctly"""
- self.assertEquals(type(libfdt), types.ModuleType)
-
- def testBadFdt(self):
- """Check that a filename provided accidentally is not accepted"""
- with self.assertRaises(FdtException) as e:
- fdt = libfdt.Fdt('a string')
- self.assertEquals(e.exception.err, -libfdt.BADMAGIC)
-
- def testSubnodeOffset(self):
- """check that we can locate a subnode by name"""
- node1 = self.fdt.path_offset('/subnode@1')
- self.assertEquals(self.fdt.subnode_offset(0, 'subnode@1'), node1)
-
- with self.assertRaises(FdtException) as e:
- self.fdt.subnode_offset(0, 'missing')
- self.assertEquals(e.exception.err, -libfdt.NOTFOUND)
-
- node2 = self.fdt.path_offset('/subnode@1/subsubnode')
- self.assertEquals(self.fdt.subnode_offset(node1, 'subsubnode'), node2)
-
- def testPathOffset(self):
- """Check that we can find the offset of a node"""
- self.assertEquals(self.fdt.path_offset('/'), 0)
- self.assertTrue(self.fdt.path_offset('/subnode@1') > 0)
- with self.assertRaises(FdtException) as e:
- self.fdt.path_offset('/wibble')
- self.assertEquals(e.exception.err, -libfdt.NOTFOUND)
- self.assertEquals(self.fdt.path_offset('/wibble', QUIET_NOTFOUND),
- -libfdt.NOTFOUND)
-
- def testPropertyOffset(self):
- """Walk through all the properties in the root node"""
- offset = self.fdt.first_property_offset(0)
- self.assertTrue(offset > 0)
- for i in range(5):
- next_offset = self.fdt.next_property_offset(offset)
- self.assertTrue(next_offset > offset)
- offset = next_offset
- self.assertEquals(self.fdt.next_property_offset(offset, QUIET_NOTFOUND),
- -libfdt.NOTFOUND)
-
- def testPropertyOffsetExceptions(self):
- """Check that exceptions are raised as expected"""
- with self.assertRaises(FdtException) as e:
- self.fdt.first_property_offset(107)
- self.assertEquals(e.exception.err, -libfdt.BADOFFSET)
-
- # Quieten the NOTFOUND exception and check that a BADOFFSET
- # exception is still raised.
- with self.assertRaises(FdtException) as e:
- self.fdt.first_property_offset(107, QUIET_NOTFOUND)
- self.assertEquals(e.exception.err, -libfdt.BADOFFSET)
- with self.assertRaises(FdtException) as e:
- self.fdt.next_property_offset(107, QUIET_NOTFOUND)
- self.assertEquals(e.exception.err, -libfdt.BADOFFSET)
-
- # Check that NOTFOUND can be quietened.
- node = self.fdt.path_offset('/subnode@1/ss1')
- self.assertEquals(self.fdt.first_property_offset(node, QUIET_NOTFOUND),
- -libfdt.NOTFOUND)
- with self.assertRaises(FdtException) as e:
- self.fdt.first_property_offset(node)
- self.assertEquals(e.exception.err, -libfdt.NOTFOUND)
-
- def testGetName(self):
- """Check that we can get the name of a node"""
- self.assertEquals(self.fdt.get_name(0), '')
- node = self.fdt.path_offset('/subnode@1/subsubnode')
- self.assertEquals(self.fdt.get_name(node), 'subsubnode')
-
- with self.assertRaises(FdtException) as e:
- self.fdt.get_name(-2)
- self.assertEquals(e.exception.err, -libfdt.BADOFFSET)
-
- def testGetPropertyByOffset(self):
- """Check that we can read the name and contents of a property"""
- root = 0
- poffset = self.fdt.first_property_offset(root)
- prop = self.fdt.get_property_by_offset(poffset)
- self.assertEquals(prop.name, 'compatible')
- self.assertEquals(prop.value, 'test_tree1\0')
-
- with self.assertRaises(FdtException) as e:
- self.fdt.get_property_by_offset(-2)
- self.assertEquals(e.exception.err, -libfdt.BADOFFSET)
- self.assertEquals(
- -libfdt.BADOFFSET,
- self.fdt.get_property_by_offset(-2, [libfdt.BADOFFSET]))
-
- def testGetProp(self):
- """Check that we can read the contents of a property by name"""
- root = self.fdt.path_offset('/')
- value = self.fdt.getprop(root, "compatible")
- self.assertEquals(value, 'test_tree1\0')
- self.assertEquals(-libfdt.NOTFOUND, self.fdt.getprop(root, 'missing',
- QUIET_NOTFOUND))
-
- with self.assertRaises(FdtException) as e:
- self.fdt.getprop(root, 'missing')
- self.assertEquals(e.exception.err, -libfdt.NOTFOUND)
-
- node = self.fdt.path_offset('/subnode@1/subsubnode')
- value = self.fdt.getprop(node, "compatible")
- self.assertEquals(value, 'subsubnode1\0subsubnode\0')
-
- def testStrError(self):
- """Check that we can get an error string"""
- self.assertEquals(libfdt.strerror(-libfdt.NOTFOUND),
- 'FDT_ERR_NOTFOUND')
-
- def testFirstNextSubnodeOffset(self):
- """Check that we can walk through subnodes"""
- node_list = []
- node = self.fdt.first_subnode(0, QUIET_NOTFOUND)
- while node >= 0:
- node_list.append(self.fdt.get_name(node))
- node = self.fdt.next_subnode(node, QUIET_NOTFOUND)
- self.assertEquals(node_list, ['subnode@1', 'subnode@2'])
-
- def testFirstNextSubnodeOffsetExceptions(self):
- """Check except handling for first/next subnode functions"""
- node = self.fdt.path_offset('/subnode@1/subsubnode', QUIET_NOTFOUND)
- self.assertEquals(self.fdt.first_subnode(node, QUIET_NOTFOUND),
- -libfdt.NOTFOUND)
- with self.assertRaises(FdtException) as e:
- self.fdt.first_subnode(node)
- self.assertEquals(e.exception.err, -libfdt.NOTFOUND)
-
- node = self.fdt.path_offset('/subnode@1/ss1', QUIET_NOTFOUND)
- self.assertEquals(self.fdt.next_subnode(node, QUIET_NOTFOUND),
- -libfdt.NOTFOUND)
- with self.assertRaises(FdtException) as e:
- self.fdt.next_subnode(node)
- self.assertEquals(e.exception.err, -libfdt.NOTFOUND)
-
- def testDeleteProperty(self):
- """Test that we can delete a property"""
- node_name = '/subnode@1'
- self.assertEquals(self.GetPropList(node_name),
- ['compatible', 'reg', 'prop-int'])
- node = self.fdt.path_offset('/%s' % node_name)
- self.assertEquals(self.fdt.delprop(node, 'reg'), 0)
- self.assertEquals(self.GetPropList(node_name),
- ['compatible', 'prop-int'])
-
- def testHeader(self):
- """Test that we can access the header values"""
- self.assertEquals(self.fdt.totalsize(), len(self.fdt._fdt))
- self.assertEquals(self.fdt.off_dt_struct(), 88)
-
- def testPack(self):
- """Test that we can pack the tree after deleting something"""
- orig_size = self.fdt.totalsize()
- node = self.fdt.path_offset('/subnode@2', QUIET_NOTFOUND)
- self.assertEquals(self.fdt.delprop(node, 'prop-int'), 0)
- self.assertEquals(orig_size, self.fdt.totalsize())
- self.assertEquals(self.fdt.pack(), 0)
- self.assertTrue(self.fdt.totalsize() < orig_size)
-
- def testBadPropertyOffset(self):
- """Test that bad property offsets are detected"""
- with self.assertRaises(FdtException) as e:
- self.fdt.get_property_by_offset(13)
- self.assertEquals(e.exception.err, -libfdt.BADOFFSET)
- with self.assertRaises(FdtException) as e:
- self.fdt.first_property_offset(3)
- self.assertEquals(e.exception.err, -libfdt.BADOFFSET)
- with self.assertRaises(FdtException) as e:
- self.fdt.next_property_offset(3)
- self.assertEquals(e.exception.err, -libfdt.BADOFFSET)
-
- def testBadPathOffset(self):
- """Test that bad path names are detected"""
- with self.assertRaisesRegexp(FdtException, get_err(libfdt.BADPATH)):
- self.fdt.path_offset('not-present')
-
- def testQuietAll(self):
- """Check that exceptions can be masked by QUIET_ALL"""
- self.assertEquals(-libfdt.NOTFOUND,
- self.fdt.path_offset('/missing', QUIET_ALL))
- self.assertEquals(-libfdt.BADOFFSET,
- self.fdt.get_property_by_offset(13, QUIET_ALL))
- self.assertEquals(-libfdt.BADPATH,
- self.fdt.path_offset('missing', QUIET_ALL))
-
- def testIntegers(self):
- """Check that integers can be passed and returned"""
- self.assertEquals(0, libfdt.fdt_get_phandle(self.fdt._fdt, 0))
- node2 = self.fdt.path_offset('/subnode@2')
- self.assertEquals(0x2000, libfdt.fdt_get_phandle(self.fdt._fdt, node2))
-
- def testGetPhandle(self):
- """Test for the get_phandle() method"""
- self.assertEquals(0, self.fdt.get_phandle(0))
- node2 = self.fdt.path_offset('/subnode@2')
- self.assertEquals(0x2000, self.fdt.get_phandle(node2))
-
- def testParentOffset(self):
- """Test for the parent_offset() method"""
- self.assertEquals(-libfdt.NOTFOUND,
- self.fdt.parent_offset(0, QUIET_NOTFOUND))
- with self.assertRaises(FdtException) as e:
- self.fdt.parent_offset(0)
- self.assertEquals(e.exception.err, -libfdt.NOTFOUND)
-
- node1 = self.fdt.path_offset('/subnode@2')
- self.assertEquals(0, self.fdt.parent_offset(node1))
- node2 = self.fdt.path_offset('/subnode@2/subsubnode@0')
- self.assertEquals(node1, self.fdt.parent_offset(node2))
-
- def testNodeOffsetByPhandle(self):
- """Test for the node_offset_by_phandle() method"""
- self.assertEquals(-libfdt.NOTFOUND,
- self.fdt.node_offset_by_phandle(1, QUIET_NOTFOUND))
- node1 = self.fdt.path_offset('/subnode@2')
- self.assertEquals(node1, self.fdt.node_offset_by_phandle(0x2000))
- node2 = self.fdt.path_offset('/subnode@2/subsubnode@0')
- self.assertEquals(node2, self.fdt.node_offset_by_phandle(0x2001))
-
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/tests/references.c b/tests/references.c
deleted file mode 100644
index cab70f6579af..000000000000
--- a/tests/references.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for phandle references in dtc
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_ref(const void *fdt, int node, uint32_t checkref)
-{
- const fdt32_t *p;
- uint32_t ref;
- int len;
-
- p = fdt_getprop(fdt, node, "ref", &len);
- if (!p)
- FAIL("fdt_getprop(%d, \"ref\"): %s", node, fdt_strerror(len));
- if (len != sizeof(*p))
- FAIL("'ref' in node at %d has wrong size (%d instead of %zd)",
- node, len, sizeof(*p));
- ref = fdt32_to_cpu(*p);
- if (ref != checkref)
- FAIL("'ref' in node at %d has value 0x%x instead of 0x%x",
- node, ref, checkref);
-
- p = fdt_getprop(fdt, node, "lref", &len);
- if (!p)
- FAIL("fdt_getprop(%d, \"lref\"): %s", node, fdt_strerror(len));
- if (len != sizeof(*p))
- FAIL("'lref' in node at %d has wrong size (%d instead of %zd)",
- node, len, sizeof(*p));
- ref = fdt32_to_cpu(*p);
- if (ref != checkref)
- FAIL("'lref' in node at %d has value 0x%x instead of 0x%x",
- node, ref, checkref);
-}
-
-static void check_rref(const void *fdt)
-{
- const fdt32_t *p;
- uint32_t ref;
- int len;
-
- p = fdt_getprop(fdt, 0, "rref", &len);
- if (!p)
- FAIL("fdt_getprop(0, \"rref\"): %s", fdt_strerror(len));
- if (len != sizeof(*p))
- FAIL("'rref' in root node has wrong size (%d instead of %zd)",
- len, sizeof(*p));
- ref = fdt32_to_cpu(*p);
- if (ref != fdt_get_phandle(fdt, 0))
- FAIL("'rref' in root node has value 0x%x instead of 0x0", ref);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int n1, n2, n3, n4, n5;
- uint32_t h1, h2, h4, h5;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- n1 = fdt_path_offset(fdt, "/node1");
- if (n1 < 0)
- FAIL("fdt_path_offset(/node1): %s", fdt_strerror(n1));
- n2 = fdt_path_offset(fdt, "/node2");
- if (n2 < 0)
- FAIL("fdt_path_offset(/node2): %s", fdt_strerror(n2));
- n3 = fdt_path_offset(fdt, "/node3");
- if (n3 < 0)
- FAIL("fdt_path_offset(/node3): %s", fdt_strerror(n3));
- n4 = fdt_path_offset(fdt, "/node4");
- if (n4 < 0)
- FAIL("fdt_path_offset(/node4): %s", fdt_strerror(n4));
- n5 = fdt_path_offset(fdt, "/node5");
- if (n5 < 0)
- FAIL("fdt_path_offset(/node5): %s", fdt_strerror(n5));
-
- h1 = fdt_get_phandle(fdt, n1);
- h2 = fdt_get_phandle(fdt, n2);
- h4 = fdt_get_phandle(fdt, n4);
- h5 = fdt_get_phandle(fdt, n5);
-
- if (h1 != 0x2000)
- FAIL("/node1 has wrong phandle, 0x%x instead of 0x%x",
- h1, 0x2000);
- if (h2 != 0x1)
- FAIL("/node2 has wrong phandle, 0x%x instead of 0x%x",
- h2, 0x1);
- if ((h4 == 0x2000) || (h4 == 0x1) || (h4 == 0))
- FAIL("/node4 has bad phandle, 0x%x", h4);
-
- if ((h5 == 0) || (h5 == -1))
- FAIL("/node5 has bad phandle, 0x%x", h5);
- if ((h5 == h4) || (h5 == h2) || (h5 == h1))
- FAIL("/node5 has duplicate phandle, 0x%x", h5);
-
- check_ref(fdt, n1, h2);
- check_ref(fdt, n2, h1);
- check_ref(fdt, n3, h4);
-
- check_rref(fdt);
-
- PASS();
-}
diff --git a/tests/references.dts b/tests/references.dts
deleted file mode 100644
index f783e8bc8643..000000000000
--- a/tests/references.dts
+++ /dev/null
@@ -1,36 +0,0 @@
-/dts-v1/;
-
-/ {
- rref = <&{/}>;
-
- /* Explicit phandles */
- n1: node1 {
- linux,phandle = <0x2000>;
- ref = <&{/node2}>; /* reference precedes target */
- lref = <&n2>;
- };
- n2: node2 {
- phandle = <0x1>;
- ref = <&{/node1}>; /* reference after target */
- lref = <&n1>;
- };
-
- /* Implicit phandles */
- n3: node3 {
- ref = <&{/node4}>;
- lref = <&n4>;
- };
- n4: node4 {
- };
-
- /* Explicit phandle with implicit value */
- /* This self-reference is the standard way to tag a node as requiring
- * a phandle (perhaps for reference by nodes that will be dynamically
- * added) without explicitly allocating it a phandle.
- * The self-reference requires some special internal handling, though
- * so check it actually works */
- n5: node5 {
- linux,phandle = <&n5>;
- phandle = <&n5>;
- };
-};
diff --git a/tests/reg-ranges-root.dts b/tests/reg-ranges-root.dts
deleted file mode 100644
index 9935b415ff6d..000000000000
--- a/tests/reg-ranges-root.dts
+++ /dev/null
@@ -1,8 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <1>;
- #size-cells = <1>;
- reg = <0x1000 0x10>;
- ranges = <0x1000 0x2000 0x1000>;
-};
diff --git a/tests/reg-without-unit-addr.dts b/tests/reg-without-unit-addr.dts
deleted file mode 100644
index aaf8af7a8cd2..000000000000
--- a/tests/reg-without-unit-addr.dts
+++ /dev/null
@@ -1,10 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <1>;
- #size-cells = <1>;
-
- node {
- reg = <0 1>;
- };
-};
diff --git a/tests/reuse-label.dts b/tests/reuse-label.dts
deleted file mode 100644
index 98b5ca9dcad8..000000000000
--- a/tests/reuse-label.dts
+++ /dev/null
@@ -1,15 +0,0 @@
-/dts-v1/;
-
-/ {
- label: property1 = "foo";
- label: property2 = "bar";
-
- test1 = &label;
-
- label: node1 {
- prop = "foo";
- };
- label: node2 {
- prop = "bar";
- };
-};
diff --git a/tests/reuse-label1.dts b/tests/reuse-label1.dts
deleted file mode 100644
index f22956932967..000000000000
--- a/tests/reuse-label1.dts
+++ /dev/null
@@ -1,10 +0,0 @@
-/dts-v1/;
-
-/ {
- label: node1 {
- prop = "foo";
- };
- label: node2 {
- prop = "bar";
- };
-};
diff --git a/tests/reuse-label2.dts b/tests/reuse-label2.dts
deleted file mode 100644
index 01ea6b27f03d..000000000000
--- a/tests/reuse-label2.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/ {
- label: property1 = "foo";
- label: property2 = "bar";
-};
diff --git a/tests/reuse-label3.dts b/tests/reuse-label3.dts
deleted file mode 100644
index fa3d2c72a264..000000000000
--- a/tests/reuse-label3.dts
+++ /dev/null
@@ -1,9 +0,0 @@
-/dts-v1/;
-
-/ {
- label: property = "foo";
-
- label: node {
- property = "foo";
- };
-};
diff --git a/tests/reuse-label4.dts b/tests/reuse-label4.dts
deleted file mode 100644
index 6805de32200d..000000000000
--- a/tests/reuse-label4.dts
+++ /dev/null
@@ -1,5 +0,0 @@
-/dts-v1/;
-
-/ {
- property = label: "foo" label:;
-};
diff --git a/tests/reuse-label5.dts b/tests/reuse-label5.dts
deleted file mode 100644
index b7238e64ac76..000000000000
--- a/tests/reuse-label5.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/ {
- prop1 = label: "foo";
- prop2 = "bar" label:;
-};
diff --git a/tests/reuse-label6.dts b/tests/reuse-label6.dts
deleted file mode 100644
index f5d507c6dfd9..000000000000
--- a/tests/reuse-label6.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/ {
- label: prop1 = "foo";
- prop2 = "bar" label:;
-};
diff --git a/tests/root_node.c b/tests/root_node.c
deleted file mode 100644
index 58aebf6b48c9..000000000000
--- a/tests/root_node.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Basic testcase for read-only access
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- const struct fdt_node_header *nh;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- nh = fdt_offset_ptr(fdt, 0, sizeof(*nh));
-
- if (! nh)
- FAIL("NULL retrieving root node");
-
- if (fdt32_to_cpu(nh->tag) != FDT_BEGIN_NODE)
- FAIL("Wrong tag on root node");
-
- if (strlen(nh->name) != 0)
- FAIL("Wrong name for root node, \"%s\" instead of empty",
- nh->name);
-
- PASS();
-}
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
deleted file mode 100755
index 3fa7c0a7fc98..000000000000
--- a/tests/run_tests.sh
+++ /dev/null
@@ -1,925 +0,0 @@
-#! /bin/sh
-
-. ./tests.sh
-
-if [ -z "$CC" ]; then
- CC=gcc
-fi
-
-# stat differs between platforms
-if [ -z "$STATSZ" ]; then
- STATSZ="stat -c %s"
-fi
-
-export QUIET_TEST=1
-STOP_ON_FAIL=0
-
-export VALGRIND=
-VGCODE=126
-
-tot_tests=0
-tot_pass=0
-tot_fail=0
-tot_config=0
-tot_vg=0
-tot_strange=0
-
-base_run_test() {
- tot_tests=$((tot_tests + 1))
- if VALGRIND="$VALGRIND" "$@"; then
- tot_pass=$((tot_pass + 1))
- else
- ret="$?"
- if [ "$STOP_ON_FAIL" -eq 1 ]; then
- exit 1
- fi
- if [ "$ret" -eq 1 ]; then
- tot_config=$((tot_config + 1))
- elif [ "$ret" -eq 2 ]; then
- tot_fail=$((tot_fail + 1))
- elif [ "$ret" -eq $VGCODE ]; then
- tot_vg=$((tot_vg + 1))
- else
- tot_strange=$((tot_strange + 1))
- fi
- fi
-}
-
-shorten_echo () {
- limit=32
- printf "$1"
- shift
- for x; do
- if [ ${#x} -le $limit ]; then
- printf " $x"
- else
- short=$(echo "$x" | head -c$limit)
- printf " \"$short\"...<${#x} bytes>"
- fi
- done
-}
-
-run_test () {
- printf "$*: "
- if [ -n "$VALGRIND" -a -f $1.supp ]; then
- VGSUPP="--suppressions=$1.supp"
- fi
- base_run_test $VALGRIND $VGSUPP "./$@"
-}
-
-run_sh_test () {
- printf "$*: "
- base_run_test sh "$@"
-}
-
-wrap_test () {
- (
- if verbose_run "$@"; then
- PASS
- else
- ret="$?"
- if [ "$ret" -gt 127 ]; then
- signame=$(kill -l $((ret - 128)))
- FAIL "Killed by SIG$signame"
- else
- FAIL "Returned error code $ret"
- fi
- fi
- )
-}
-
-run_wrap_test () {
- shorten_echo "$@: "
- base_run_test wrap_test "$@"
-}
-
-wrap_error () {
- (
- if verbose_run "$@"; then
- FAIL "Expected non-zero return code"
- else
- ret="$?"
- if [ "$ret" -gt 127 ]; then
- signame=$(kill -l $((ret - 128)))
- FAIL "Killed by SIG$signame"
- else
- PASS
- fi
- fi
- )
-}
-
-run_wrap_error_test () {
- shorten_echo "$@"
- printf " {!= 0}: "
- base_run_test wrap_error "$@"
-}
-
-# $1: dtb file
-# $2: align base
-check_align () {
- shorten_echo "check_align $@: "
- local size=$($STATSZ "$1")
- local align="$2"
- (
- if [ $(($size % $align)) -eq 0 ] ;then
- PASS
- else
- FAIL "Output size $size is not $align-byte aligned"
- fi
- )
-}
-
-run_dtc_test () {
- printf "dtc $*: "
- base_run_test wrap_test $VALGRIND $DTC "$@"
-}
-
-asm_to_so () {
- $CC -shared -o $1.test.so data.S $1.test.s
-}
-
-asm_to_so_test () {
- run_wrap_test asm_to_so "$@"
-}
-
-run_fdtget_test () {
- expect="$1"
- shift
- printf "fdtget-runtest.sh %s $*: " "$(echo $expect)"
- base_run_test sh fdtget-runtest.sh "$expect" "$@"
-}
-
-run_fdtput_test () {
- expect="$1"
- shift
- shorten_echo fdtput-runtest.sh "$expect" "$@"
- printf ": "
- base_run_test sh fdtput-runtest.sh "$expect" "$@"
-}
-
-run_fdtdump_test() {
- file="$1"
- shorten_echo fdtdump-runtest.sh "$file"
- printf ": "
- base_run_test sh fdtdump-runtest.sh "$file" 2>/dev/null
-}
-
-run_fdtoverlay_test() {
- expect="$1"
- shift
- shorten_echo fdtoverlay-runtest.sh "$expect" "$@"
- printf ": "
- base_run_test sh fdtoverlay-runtest.sh "$expect" "$@"
-}
-
-BAD_FIXUP_TREES="bad_index \
- empty \
- empty_index \
- index_trailing \
- path_empty_prop \
- path_only \
- path_only_sep \
- path_prop"
-
-# 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_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
-
- # test simplified plugin syntax
- run_dtc_test -@ -I dts -O dtb -o overlay_overlay_simple.dtb overlay_overlay_simple.dts
-
- # verify non-generation of local fixups
- run_test check_path overlay_overlay_simple.dtb not-exists "/__local_fixups__"
-
- # Bad fixup tests
- for test in $BAD_FIXUP_TREES; do
- tree="overlay_bad_fixup_$test"
- run_dtc_test -I dts -O dtb -o $tree.test.dtb $tree.dts
- run_test overlay_bad_fixup overlay_base_no_symbols.test.dtb $tree.test.dtb
- done
-}
-
-# Tests to exercise dtc's overlay generation support
-dtc_overlay_tests () {
- # Overlay tests for dtc
- run_dtc_test -@ -I dts -O dtb -o overlay_base.test.dtb overlay_base.dts
- run_test check_path overlay_base.test.dtb exists "/__symbols__"
- run_test check_path overlay_base.test.dtb not-exists "/__fixups__"
- run_test check_path overlay_base.test.dtb not-exists "/__local_fixups__"
-
- run_dtc_test -I dts -O dtb -o overlay_overlay.test.dtb overlay_overlay.dts
- run_test check_path overlay_overlay.test.dtb not-exists "/__symbols__"
- run_test check_path overlay_overlay.test.dtb exists "/__fixups__"
- run_test check_path overlay_overlay.test.dtb exists "/__local_fixups__"
-
- run_test overlay overlay_base.test.dtb overlay_overlay.test.dtb
-
- # test plugin source to dtb and back
- run_dtc_test -I dtb -O dts -o overlay_overlay_decompile.test.dts overlay_overlay.test.dtb
- run_dtc_test -I dts -O dtb -o overlay_overlay_decompile.test.dtb overlay_overlay_decompile.test.dts
- run_test dtbs_equal_ordered overlay_overlay.test.dtb overlay_overlay_decompile.test.dtb
-
- # Test generation of aliases insted of symbols
- run_dtc_test -A -I dts -O dtb -o overlay_base_with_aliases.dtb overlay_base.dts
- run_test check_path overlay_base_with_aliases.dtb exists "/aliases"
- run_test check_path overlay_base_with_aliases.dtb not-exists "/__symbols__"
- run_test check_path overlay_base_with_aliases.dtb not-exists "/__fixups__"
- run_test check_path overlay_base_with_aliases.dtb not-exists "/__local_fixups__"
-}
-
-tree1_tests () {
- TREE=$1
-
- # Read-only tests
- run_test get_mem_rsv $TREE
- run_test root_node $TREE
- run_test find_property $TREE
- run_test subnode_offset $TREE
- run_test path_offset $TREE
- run_test get_name $TREE
- run_test getprop $TREE
- run_test get_phandle $TREE
- run_test get_path $TREE
- run_test supernode_atdepth_offset $TREE
- run_test parent_offset $TREE
- run_test node_offset_by_prop_value $TREE
- run_test node_offset_by_phandle $TREE
- run_test node_check_compatible $TREE
- run_test node_offset_by_compatible $TREE
- run_test notfound $TREE
-
- # Write-in-place tests
- run_test setprop_inplace $TREE
- run_test nop_property $TREE
- run_test nop_node $TREE
-}
-
-tree1_tests_rw () {
- TREE=$1
-
- # Read-write tests
- run_test set_name $TREE
- run_test setprop $TREE
- run_test del_property $TREE
- run_test del_node $TREE
-}
-
-check_tests () {
- tree="$1"
- shift
- run_sh_test dtc-checkfails.sh "$@" -- -I dts -O dtb $tree
- run_dtc_test -I dts -O dtb -o $tree.test.dtb -f $tree
- run_sh_test dtc-checkfails.sh "$@" -- -I dtb -O dtb $tree.test.dtb
-}
-
-ALL_LAYOUTS="mts mst tms tsm smt stm"
-
-libfdt_tests () {
- tree1_tests test_tree1.dtb
-
- run_dtc_test -I dts -O dtb -o addresses.test.dtb addresses.dts
- run_test addr_size_cells addresses.test.dtb
-
- run_dtc_test -I dts -O dtb -o stringlist.test.dtb stringlist.dts
- run_test stringlist stringlist.test.dtb
-
- # Sequential write tests
- run_test sw_tree1
- tree1_tests sw_tree1.test.dtb
- tree1_tests unfinished_tree1.test.dtb
- run_test dtbs_equal_ordered test_tree1.dtb sw_tree1.test.dtb
-
- # Resizing tests
- for mode in resize realloc; do
- run_test sw_tree1 $mode
- tree1_tests sw_tree1.test.dtb
- tree1_tests unfinished_tree1.test.dtb
- run_test dtbs_equal_ordered test_tree1.dtb sw_tree1.test.dtb
- done
-
- # fdt_move tests
- for tree in test_tree1.dtb sw_tree1.test.dtb unfinished_tree1.test.dtb; do
- rm -f moved.$tree shunted.$tree deshunted.$tree
- run_test move_and_save $tree
- run_test dtbs_equal_ordered $tree moved.$tree
- run_test dtbs_equal_ordered $tree shunted.$tree
- run_test dtbs_equal_ordered $tree deshunted.$tree
- done
-
- # v16 and alternate layout tests
- for tree in test_tree1.dtb; do
- for version in 17 16; do
- for layout in $ALL_LAYOUTS; do
- run_test mangle-layout $tree $version $layout
- tree1_tests v$version.$layout.$tree
- run_test dtbs_equal_ordered $tree v$version.$layout.$tree
- done
- done
- done
-
- # Read-write tests
- for basetree in test_tree1.dtb; do
- for version in 17 16; do
- for layout in $ALL_LAYOUTS; do
- tree=v$version.$layout.$basetree
- rm -f opened.$tree repacked.$tree
- run_test open_pack $tree
- tree1_tests opened.$tree
- tree1_tests repacked.$tree
-
- tree1_tests_rw $tree
- tree1_tests_rw opened.$tree
- tree1_tests_rw repacked.$tree
- done
- done
- done
- run_test rw_tree1
- tree1_tests rw_tree1.test.dtb
- tree1_tests_rw rw_tree1.test.dtb
- run_test appendprop1
- run_test appendprop2 appendprop1.test.dtb
- run_dtc_test -I dts -O dtb -o appendprop.test.dtb appendprop.dts
- run_test dtbs_equal_ordered appendprop2.test.dtb appendprop.test.dtb
- libfdt_overlay_tests
-
- for basetree in test_tree1.dtb sw_tree1.test.dtb rw_tree1.test.dtb; do
- run_test nopulate $basetree
- run_test dtbs_equal_ordered $basetree noppy.$basetree
- tree1_tests noppy.$basetree
- tree1_tests_rw noppy.$basetree
- done
-
- run_dtc_test -I dts -O dtb -o subnode_iterate.dtb subnode_iterate.dts
- run_test subnode_iterate subnode_iterate.dtb
-
- run_dtc_test -I dts -O dtb -o property_iterate.dtb property_iterate.dts
- run_test property_iterate property_iterate.dtb
-
- # Tests for behaviour on various sorts of corrupted trees
- run_test truncated_property
-
- # Check aliases support in fdt_path_offset
- run_dtc_test -I dts -O dtb -o aliases.dtb aliases.dts
- run_test get_alias aliases.dtb
- run_test path_offset_aliases aliases.dtb
-
- # Specific bug tests
- run_test add_subnode_with_nops
- run_dtc_test -I dts -O dts -o sourceoutput.test.dts sourceoutput.dts
- run_dtc_test -I dts -O dtb -o sourceoutput.test.dtb sourceoutput.dts
- run_dtc_test -I dts -O dtb -o sourceoutput.test.dts.test.dtb sourceoutput.test.dts
- run_test dtbs_equal_ordered sourceoutput.test.dtb sourceoutput.test.dts.test.dtb
-
- run_dtc_test -I dts -O dtb -o embedded_nul.test.dtb embedded_nul.dts
- run_dtc_test -I dts -O dtb -o embedded_nul_equiv.test.dtb embedded_nul_equiv.dts
- run_test dtbs_equal_ordered embedded_nul.test.dtb embedded_nul_equiv.test.dtb
-
- run_dtc_test -I dts -O dtb bad-size-cells.dts
-
- run_wrap_error_test $DTC division-by-zero.dts
- run_wrap_error_test $DTC bad-octal-literal.dts
- run_dtc_test -I dts -O dtb nul-in-escape.dts
- run_wrap_error_test $DTC nul-in-line-info1.dts
- run_wrap_error_test $DTC nul-in-line-info2.dts
-
- run_wrap_error_test $DTC -I dtb -O dts -o /dev/null ovf_size_strings.dtb
-}
-
-dtc_tests () {
- run_dtc_test -I dts -O dtb -o dtc_tree1.test.dtb test_tree1.dts
- tree1_tests dtc_tree1.test.dtb
- tree1_tests_rw dtc_tree1.test.dtb
- run_test dtbs_equal_ordered dtc_tree1.test.dtb test_tree1.dtb
-
- run_dtc_test -I dts -O dtb -o dtc_escapes.test.dtb propname_escapes.dts
- run_test propname_escapes dtc_escapes.test.dtb
-
- run_dtc_test -I dts -O dtb -o line_directives.test.dtb line_directives.dts
-
- run_dtc_test -I dts -O dtb -o dtc_escapes.test.dtb escapes.dts
- run_test string_escapes dtc_escapes.test.dtb
-
- run_dtc_test -I dts -O dtb -o dtc_char_literal.test.dtb char_literal.dts
- run_test char_literal dtc_char_literal.test.dtb
-
- run_dtc_test -I dts -O dtb -o dtc_sized_cells.test.dtb sized_cells.dts
- run_test sized_cells dtc_sized_cells.test.dtb
-
- run_dtc_test -I dts -O dtb -o dtc_extra-terminating-null.test.dtb extra-terminating-null.dts
- run_test extra-terminating-null dtc_extra-terminating-null.test.dtb
-
- run_dtc_test -I dts -O dtb -o dtc_references.test.dtb references.dts
- run_test references dtc_references.test.dtb
-
- run_dtc_test -I dts -O dtb -o dtc_path-references.test.dtb path-references.dts
- run_test path-references dtc_path-references.test.dtb
-
- run_test phandle_format dtc_references.test.dtb epapr
- for f in legacy epapr both; do
- run_dtc_test -I dts -O dtb -H $f -o dtc_references.test.$f.dtb references.dts
- run_test phandle_format dtc_references.test.$f.dtb $f
- done
-
- run_dtc_test -I dts -O dtb -o multilabel.test.dtb multilabel.dts
- run_test references multilabel.test.dtb
-
- run_dtc_test -I dts -O dtb -o label_repeated.test.dtb label_repeated.dts
-
- run_dtc_test -I dts -O dtb -o dtc_comments.test.dtb comments.dts
- run_dtc_test -I dts -O dtb -o dtc_comments-cmp.test.dtb comments-cmp.dts
- run_test dtbs_equal_ordered dtc_comments.test.dtb dtc_comments-cmp.test.dtb
-
- # Check /include/ directive
- run_dtc_test -I dts -O dtb -o includes.test.dtb include0.dts
- run_test dtbs_equal_ordered includes.test.dtb test_tree1.dtb
-
- # Check /incbin/ directive
- run_dtc_test -I dts -O dtb -o incbin.test.dtb incbin.dts
- run_test incbin incbin.test.dtb
-
- # Check boot_cpuid_phys handling
- run_dtc_test -I dts -O dtb -o boot_cpuid.test.dtb boot-cpuid.dts
- run_test boot-cpuid boot_cpuid.test.dtb 16
-
- run_dtc_test -I dts -O dtb -b 17 -o boot_cpuid_17.test.dtb boot-cpuid.dts
- run_test boot-cpuid boot_cpuid_17.test.dtb 17
-
- run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb
- run_test boot-cpuid preserve_boot_cpuid.test.dtb 16
- run_test dtbs_equal_ordered preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb
-
- run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
- run_test boot-cpuid preserve_boot_cpuid_17.test.dtb 17
- run_test dtbs_equal_ordered preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
-
- run_dtc_test -I dtb -O dtb -b17 -o override17_boot_cpuid.test.dtb boot_cpuid.test.dtb
- run_test boot-cpuid override17_boot_cpuid.test.dtb 17
-
- run_dtc_test -I dtb -O dtb -b0 -o override0_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
- run_test boot-cpuid override0_boot_cpuid_17.test.dtb 0
-
-
- # Check -Oasm mode
- for tree in test_tree1.dts escapes.dts references.dts path-references.dts \
- comments.dts aliases.dts include0.dts incbin.dts \
- value-labels.dts ; do
- run_dtc_test -I dts -O asm -o oasm_$tree.test.s $tree
- asm_to_so_test oasm_$tree
- run_dtc_test -I dts -O dtb -o $tree.test.dtb $tree
- run_test asm_tree_dump ./oasm_$tree.test.so oasm_$tree.test.dtb
- run_wrap_test cmp oasm_$tree.test.dtb $tree.test.dtb
- done
-
- run_test value-labels ./oasm_value-labels.dts.test.so
-
- # Check -Odts mode preserve all dtb information
- for tree in test_tree1.dtb dtc_tree1.test.dtb dtc_escapes.test.dtb \
- dtc_extra-terminating-null.test.dtb dtc_references.test.dtb; do
- run_dtc_test -I dtb -O dts -o odts_$tree.test.dts $tree
- run_dtc_test -I dts -O dtb -o odts_$tree.test.dtb odts_$tree.test.dts
- run_test dtbs_equal_ordered $tree odts_$tree.test.dtb
- done
-
- # Check version conversions
- for tree in test_tree1.dtb ; do
- for aver in 1 2 3 16 17; do
- atree="ov${aver}_$tree.test.dtb"
- run_dtc_test -I dtb -O dtb -V$aver -o $atree $tree
- for bver in 16 17; do
- btree="ov${bver}_$atree"
- run_dtc_test -I dtb -O dtb -V$bver -o $btree $atree
- run_test dtbs_equal_ordered $btree $tree
- done
- done
- done
-
- # 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 dtc_tree1_label_noderef.test.dtb test_tree1_label_noderef.dts
- run_test dtbs_equal_unordered dtc_tree1_label_noderef.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
- run_dtc_test -I dts -O dtb -o dtc_tree1_merge_path.test.dtb test_tree1_merge_path.dts
- tree1_tests dtc_tree1_merge_path.test.dtb test_tree1.dtb
- run_wrap_error_test $DTC -I dts -O dtb -o /dev/null test_label_ref.dts
-
- # Check prop/node delete functionality
- run_dtc_test -I dts -O dtb -o dtc_tree1_delete.test.dtb test_tree1_delete.dts
- tree1_tests dtc_tree1_delete.test.dtb
-
- run_dtc_test -I dts -O dts -o delete_reinstate_multilabel.dts.test.dts delete_reinstate_multilabel.dts
- run_wrap_test cmp delete_reinstate_multilabel.dts.test.dts delete_reinstate_multilabel_ref.dts
-
- # Check some checks
- check_tests dup-nodename.dts duplicate_node_names
- check_tests dup-propname.dts duplicate_property_names
- check_tests dup-phandle.dts explicit_phandles
- check_tests zero-phandle.dts explicit_phandles
- 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
- check_tests bad-string-props.dts device_type_is_string model_is_string status_is_string label_is_string compatible_is_string_list names_is_string_list
- check_tests bad-chosen.dts chosen_node_is_root
- check_tests bad-chosen.dts chosen_node_bootargs
- check_tests bad-chosen.dts chosen_node_stdout_path
- check_tests bad-reg-ranges.dts reg_format ranges_format
- check_tests bad-empty-ranges.dts ranges_format
- check_tests reg-ranges-root.dts reg_format ranges_format
- check_tests default-addr-size.dts avoid_default_addr_size
- check_tests obsolete-chosen-interrupt-controller.dts obsolete_chosen_interrupt_controller
- check_tests reg-without-unit-addr.dts unit_address_vs_reg
- check_tests unit-addr-without-reg.dts unit_address_vs_reg
- check_tests unit-addr-leading-0x.dts unit_address_format
- check_tests unit-addr-leading-0s.dts unit_address_format
- check_tests bad-phandle-cells.dts interrupts_extended_property
- check_tests bad-gpio.dts gpios_property
- run_sh_test dtc-checkfails.sh deprecated_gpio_property -- -Wdeprecated_gpio_property -I dts -O dtb bad-gpio.dts
- check_tests bad-interrupt-cells.dts interrupts_property
- run_sh_test dtc-checkfails.sh node_name_chars -- -I dtb -O dtb bad_node_char.dtb
- run_sh_test dtc-checkfails.sh node_name_format -- -I dtb -O dtb bad_node_format.dtb
- run_sh_test dtc-checkfails.sh prop_name_chars -- -I dtb -O dtb bad_prop_char.dtb
-
- run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label1.dts
- run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label2.dts
- run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label3.dts
- run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label4.dts
- run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label5.dts
- run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label6.dts
-
- run_test check_path test_tree1.dtb exists "/subnode@1"
- run_test check_path test_tree1.dtb not-exists "/subnode@10"
-
- check_tests pci-bridge-ok.dts -n pci_bridge
- check_tests pci-bridge-bad1.dts pci_bridge
- check_tests pci-bridge-bad2.dts pci_bridge
-
- # Check warning options
- run_sh_test dtc-checkfails.sh address_cells_is_cell interrupt_cells_is_cell -n size_cells_is_cell -- -Wno_size_cells_is_cell -I dts -O dtb bad-ncells.dts
- run_sh_test dtc-fails.sh -n test-warn-output.test.dtb -I dts -O dtb bad-ncells.dts
- run_sh_test dtc-fails.sh test-error-output.test.dtb -I dts -O dtb bad-ncells.dts -Esize_cells_is_cell
- run_sh_test dtc-checkfails.sh always_fail -- -Walways_fail -I dts -O dtb test_tree1.dts
- run_sh_test dtc-checkfails.sh -n always_fail -- -Walways_fail -Wno_always_fail -I dts -O dtb test_tree1.dts
- run_sh_test dtc-fails.sh test-negation-1.test.dtb -Ealways_fail -I dts -O dtb test_tree1.dts
- run_sh_test dtc-fails.sh -n test-negation-2.test.dtb -Ealways_fail -Eno_always_fail -I dts -O dtb test_tree1.dts
- run_sh_test dtc-fails.sh test-negation-3.test.dtb -Ealways_fail -Wno_always_fail -I dts -O dtb test_tree1.dts
- run_sh_test dtc-fails.sh -n test-negation-4.test.dtb -Esize_cells_is_cell -Eno_size_cells_is_cell -I dts -O dtb bad-ncells.dts
- run_sh_test dtc-checkfails.sh size_cells_is_cell -- -Esize_cells_is_cell -Eno_size_cells_is_cell -I dts -O dtb bad-ncells.dts
-
- # Check for proper behaviour reading from stdin
- run_dtc_test -I dts -O dtb -o stdin_dtc_tree1.test.dtb - < test_tree1.dts
- run_wrap_test cmp stdin_dtc_tree1.test.dtb dtc_tree1.test.dtb
- run_dtc_test -I dtb -O dts -o stdin_odts_test_tree1.dtb.test.dts - < test_tree1.dtb
- run_wrap_test cmp stdin_odts_test_tree1.dtb.test.dts odts_test_tree1.dtb.test.dts
-
- # Check integer expresisons
- run_test integer-expressions -g integer-expressions.test.dts
- run_dtc_test -I dts -O dtb -o integer-expressions.test.dtb integer-expressions.test.dts
- run_test integer-expressions integer-expressions.test.dtb
-
- # Check for graceful failure in some error conditions
- run_sh_test dtc-fatal.sh -I dts -O dtb nosuchfile.dts
- run_sh_test dtc-fatal.sh -I dtb -O dtb nosuchfile.dtb
- run_sh_test dtc-fatal.sh -I fs -O dtb nosuchfile
-
- # Dependencies
- run_dtc_test -I dts -O dtb -o dependencies.test.dtb -d dependencies.test.d dependencies.dts
- run_wrap_test cmp dependencies.test.d dependencies.cmp
-
- # Search paths
- run_wrap_error_test $DTC -I dts -O dtb -o search_paths.dtb search_paths.dts
- run_dtc_test -i search_dir -I dts -O dtb -o search_paths.dtb \
- search_paths.dts
- run_wrap_error_test $DTC -i search_dir_b -I dts -O dtb \
- -o search_paths_b.dtb search_paths_b.dts
- run_dtc_test -i search_dir_b -i search_dir -I dts -O dtb \
- -o search_paths_b.dtb search_paths_b.dts
- run_dtc_test -I dts -O dtb -o search_paths_subdir.dtb \
- search_dir_b/search_paths_subdir.dts
-
- # Check -a option
- for align in 2 4 8 16 32 64; do
- # -p -a
- run_dtc_test -O dtb -p 1000 -a $align -o align0.dtb subnode_iterate.dts
- check_align align0.dtb $align
- # -S -a
- run_dtc_test -O dtb -S 1999 -a $align -o align1.dtb subnode_iterate.dts
- check_align align1.dtb $align
- done
-
- # Tests for overlay/plugin generation
- dtc_overlay_tests
-}
-
-cmp_tests () {
- basetree="$1"
- shift
- wrongtrees="$@"
-
- run_test dtb_reverse $basetree
-
- # First dtbs_equal_ordered
- run_test dtbs_equal_ordered $basetree $basetree
- run_test dtbs_equal_ordered -n $basetree $basetree.reversed.test.dtb
- for tree in $wrongtrees; do
- run_test dtbs_equal_ordered -n $basetree $tree
- done
-
- # now unordered
- run_test dtbs_equal_unordered $basetree $basetree
- run_test dtbs_equal_unordered $basetree $basetree.reversed.test.dtb
- run_test dtbs_equal_unordered $basetree.reversed.test.dtb $basetree
- for tree in $wrongtrees; do
- run_test dtbs_equal_unordered -n $basetree $tree
- done
-
- # now dtc --sort
- run_dtc_test -I dtb -O dtb -s -o $basetree.sorted.test.dtb $basetree
- run_test dtbs_equal_unordered $basetree $basetree.sorted.test.dtb
- run_dtc_test -I dtb -O dtb -s -o $basetree.reversed.sorted.test.dtb $basetree.reversed.test.dtb
- run_test dtbs_equal_unordered $basetree.reversed.test.dtb $basetree.reversed.sorted.test.dtb
- run_test dtbs_equal_ordered $basetree.sorted.test.dtb $basetree.reversed.sorted.test.dtb
-}
-
-dtbs_equal_tests () {
- WRONG_TREE1=""
- for x in 1 2 3 4 5 6 7 8 9; do
- run_dtc_test -I dts -O dtb -o test_tree1_wrong$x.test.dtb test_tree1_wrong$x.dts
- WRONG_TREE1="$WRONG_TREE1 test_tree1_wrong$x.test.dtb"
- done
- cmp_tests test_tree1.dtb $WRONG_TREE1
-}
-
-fdtget_tests () {
- dts=label01.dts
- dtb=$dts.fdtget.test.dtb
- run_dtc_test -O dtb -o $dtb $dts
-
- # run_fdtget_test <expected-result> [<flags>] <file> <node> <property>
- run_fdtget_test "MyBoardName" $dtb / model
- run_fdtget_test "MyBoardName MyBoardFamilyName" $dtb / compatible
- run_fdtget_test "77 121 66 111 \
-97 114 100 78 97 109 101 0 77 121 66 111 97 114 100 70 97 109 105 \
-108 121 78 97 109 101 0" -t bu $dtb / compatible
- run_fdtget_test "MyBoardName MyBoardFamilyName" -t s $dtb / compatible
- run_fdtget_test 32768 $dtb /cpus/PowerPC,970@1 d-cache-size
- run_fdtget_test 8000 -tx $dtb /cpus/PowerPC,970@1 d-cache-size
- run_fdtget_test "61 62 63 0" -tbx $dtb /randomnode tricky1
- run_fdtget_test "a b c d de ea ad be ef" -tbx $dtb /randomnode blob
-
- # Here the property size is not a multiple of 4 bytes, so it should fail
- run_wrap_error_test $DTGET -tlx $dtb /randomnode mixed
- run_fdtget_test "6162 6300 1234 0 a 0 b 0 c" -thx $dtb /randomnode mixed
- run_fdtget_test "61 62 63 0 12 34 0 0 0 a 0 0 0 b 0 0 0 c" \
- -thhx $dtb /randomnode mixed
- run_wrap_error_test $DTGET -ts $dtb /randomnode doctor-who
-
- # Test multiple arguments
- run_fdtget_test "MyBoardName\nmemory" -ts $dtb / model /memory device_type
-
- # Test defaults
- run_wrap_error_test $DTGET -tx $dtb /randomnode doctor-who
- run_fdtget_test "<the dead silence>" -tx \
- -d "<the dead silence>" $dtb /randomnode doctor-who
- run_fdtget_test "<blink>" -tx -d "<blink>" $dtb /memory doctor-who
-}
-
-fdtput_tests () {
- dts=label01.dts
- dtb=$dts.fdtput.test.dtb
- text=lorem.txt
-
- # Allow just enough space for $text
- run_dtc_test -O dtb -p $($STATSZ $text) -o $dtb $dts
-
- # run_fdtput_test <expected-result> <file> <node> <property> <flags> <value>
- run_fdtput_test "a_model" $dtb / model -ts "a_model"
- run_fdtput_test "board1 board2" $dtb / compatible -ts board1 board2
- run_fdtput_test "board1 board2" $dtb / compatible -ts "board1 board2"
- run_fdtput_test "32768" $dtb /cpus/PowerPC,970@1 d-cache-size "" "32768"
- run_fdtput_test "8001" $dtb /cpus/PowerPC,970@1 d-cache-size -tx 0x8001
- run_fdtput_test "2 3 12" $dtb /randomnode tricky1 -tbi "02 003 12"
- run_fdtput_test "a b c ea ad be ef" $dtb /randomnode blob \
- -tbx "a b c ea ad be ef"
- run_fdtput_test "a0b0c0d deeaae ef000000" $dtb /randomnode blob \
- -tx "a0b0c0d deeaae ef000000"
- run_fdtput_test "$(cat $text)" $dtb /randomnode blob -ts "$(cat $text)"
-
- # Test expansion of the blob when insufficient room for property
- run_fdtput_test "$(cat $text $text)" $dtb /randomnode blob -ts "$(cat $text $text)"
-
- # Start again with a fresh dtb
- run_dtc_test -O dtb -p $($STATSZ $text) -o $dtb $dts
-
- # Node creation
- run_wrap_error_test $DTPUT $dtb -c /baldrick sod
- run_wrap_test $DTPUT $dtb -c /chosen/son /chosen/daughter
- run_fdtput_test "eva" $dtb /chosen/daughter name "" -ts "eva"
- run_fdtput_test "adam" $dtb /chosen/son name "" -ts "adam"
-
- # Not allowed to create an existing node
- run_wrap_error_test $DTPUT $dtb -c /chosen
- run_wrap_error_test $DTPUT $dtb -c /chosen/son
-
- # Automatic node creation
- run_wrap_test $DTPUT $dtb -cp /blackadder/the-second/turnip \
- /blackadder/the-second/potato
- run_fdtput_test 1000 $dtb /blackadder/the-second/turnip cost "" 1000
- run_fdtput_test "fine wine" $dtb /blackadder/the-second/potato drink \
- "-ts" "fine wine"
- run_wrap_test $DTPUT $dtb -p /you/are/drunk/sir/winston slurp -ts twice
-
- # Test expansion of the blob when insufficent room for a new node
- run_wrap_test $DTPUT $dtb -cp "$(cat $text $text)/longish"
-
- # Allowed to create an existing node with -p
- run_wrap_test $DTPUT $dtb -cp /chosen
- run_wrap_test $DTPUT $dtb -cp /chosen/son
-
- # Start again with a fresh dtb
- run_dtc_test -O dtb -p $($STATSZ $text) -o $dtb $dts
-
- # Node delete
- run_wrap_test $DTPUT $dtb -c /chosen/node1 /chosen/node2 /chosen/node3
- run_fdtget_test "node3\nnode2\nnode1" $dtb -l /chosen
- run_wrap_test $DTPUT $dtb -r /chosen/node1 /chosen/node2
- run_fdtget_test "node3" $dtb -l /chosen
-
- # Delete the non-existent node
- run_wrap_error_test $DTPUT $dtb -r /non-existent/node
-
- # Property delete
- run_fdtput_test "eva" $dtb /chosen/ name "" -ts "eva"
- run_fdtput_test "016" $dtb /chosen/ age "" -ts "016"
- run_fdtget_test "age\nname\nbootargs\nlinux,platform" $dtb -p /chosen
- run_wrap_test $DTPUT $dtb -d /chosen/ name age
- run_fdtget_test "bootargs\nlinux,platform" $dtb -p /chosen
-
- # Delete the non-existent property
- run_wrap_error_test $DTPUT $dtb -d /chosen non-existent-prop
-
- # TODO: Add tests for verbose mode?
-}
-
-utilfdt_tests () {
- run_test utilfdt_test
-}
-
-fdtdump_tests () {
- run_fdtdump_test fdtdump.dts
-}
-
-fdtoverlay_tests() {
- base=overlay_base.dts
- basedtb=overlay_base.fdoverlay.test.dtb
- overlay=overlay_overlay_manual_fixups.dts
- overlaydtb=overlay_overlay_manual_fixups.fdoverlay.test.dtb
- targetdtb=target.fdoverlay.test.dtb
-
- run_dtc_test -@ -I dts -O dtb -o $basedtb $base
- run_dtc_test -@ -I dts -O dtb -o $overlaydtb $overlay
-
- # test that the new property is installed
- run_fdtoverlay_test foobar "/test-node" "test-str-property" "-ts" ${basedtb} ${targetdtb} ${overlaydtb}
-
- stacked_base=stacked_overlay_base.dts
- stacked_basedtb=stacked_overlay_base.fdtoverlay.test.dtb
- stacked_bar=stacked_overlay_bar.dts
- stacked_bardtb=stacked_overlay_bar.fdtoverlay.test.dtb
- stacked_baz=stacked_overlay_baz.dts
- stacked_bazdtb=stacked_overlay_baz.fdtoverlay.test.dtb
- stacked_targetdtb=stacked_overlay_target.fdtoverlay.test.dtb
-
- run_dtc_test -@ -I dts -O dtb -o $stacked_basedtb $stacked_base
- run_dtc_test -@ -I dts -O dtb -o $stacked_bardtb $stacked_bar
- run_dtc_test -@ -I dts -O dtb -o $stacked_bazdtb $stacked_baz
-
- # test that baz correctly inserted the property
- run_fdtoverlay_test baz "/foonode/barnode/baznode" "baz-property" "-ts" ${stacked_basedtb} ${stacked_targetdtb} ${stacked_bardtb} ${stacked_bazdtb}
-}
-
-pylibfdt_tests () {
- TMP=/tmp/tests.stderr.$$
- python pylibfdt_tests.py -v 2> $TMP
-
- # Use the 'ok' message meaning the test passed, 'ERROR' meaning it failed
- # and the summary line for total tests (e.g. 'Ran 17 tests in 0.002s').
- # We could add pass + fail to get total tests, but this provides a useful
- # sanity check.
- pass_count=$(grep "\.\.\. ok$" $TMP | wc -l)
- fail_count=$(grep "^ERROR: " $TMP | wc -l)
- total_tests=$(sed -n 's/^Ran \([0-9]*\) tests.*$/\1/p' $TMP)
- cat $TMP
- rm $TMP
-
- # Extract the test results and add them to our totals
- tot_fail=$((tot_fail + $fail_count))
- tot_pass=$((tot_pass + $pass_count))
- tot_tests=$((tot_tests + $total_tests))
-}
-
-while getopts "vt:me" ARG ; do
- case $ARG in
- "v")
- unset QUIET_TEST
- ;;
- "t")
- TESTSETS=$OPTARG
- ;;
- "m")
- VALGRIND="valgrind --tool=memcheck -q --error-exitcode=$VGCODE"
- ;;
- "e")
- STOP_ON_FAIL=1
- ;;
- esac
-done
-
-if [ -z "$TESTSETS" ]; then
- TESTSETS="libfdt utilfdt dtc dtbs_equal fdtget fdtput fdtdump fdtoverlay"
-
- # Test pylibfdt if the libfdt Python module is available.
- if [ -f ../pylibfdt/_libfdt.so ]; then
- TESTSETS="$TESTSETS pylibfdt"
- fi
-fi
-
-# Make sure we don't have stale blobs lying around
-rm -f *.test.dtb *.test.dts
-
-for set in $TESTSETS; do
- case $set in
- "libfdt")
- libfdt_tests
- ;;
- "utilfdt")
- utilfdt_tests
- ;;
- "dtc")
- dtc_tests
- ;;
- "dtbs_equal")
- dtbs_equal_tests
- ;;
- "fdtget")
- fdtget_tests
- ;;
- "fdtput")
- fdtput_tests
- ;;
- "fdtdump")
- fdtdump_tests
- ;;
- "pylibfdt")
- pylibfdt_tests
- ;;
- "fdtoverlay")
- fdtoverlay_tests
- ;;
- esac
-done
-
-echo "********** TEST SUMMARY"
-echo "* Total testcases: $tot_tests"
-echo "* PASS: $tot_pass"
-echo "* FAIL: $tot_fail"
-echo "* Bad configuration: $tot_config"
-if [ -n "$VALGRIND" ]; then
- echo "* valgrind errors: $tot_vg"
-fi
-echo "* Strange test result: $tot_strange"
-echo "**********"
-
-[ "$tot_tests" -eq "$tot_pass" ] || exit 1
diff --git a/tests/rw_tree1.c b/tests/rw_tree1.c
deleted file mode 100644
index efd471892f1c..000000000000
--- a/tests/rw_tree1.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_nop_node()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-#define SPACE 65536
-
-#define CHECK(code) \
- { \
- err = (code); \
- if (err) \
- FAIL(#code ": %s", fdt_strerror(err)); \
- }
-
-#define OFF_CHECK(off, code) \
- { \
- (off) = (code); \
- if (off < 0) \
- FAIL(#code ": %s", fdt_strerror(off)); \
- }
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int err;
- int offset, s1, s2;
-
- test_init(argc, argv);
-
- fdt = xmalloc(SPACE);
-
- /* First create empty tree with SW */
- CHECK(fdt_create_empty_tree(fdt, SPACE));
-
- CHECK(fdt_add_mem_rsv(fdt, TEST_ADDR_1, TEST_SIZE_1));
- CHECK(fdt_add_mem_rsv(fdt, TEST_ADDR_2, TEST_SIZE_2));
-
- CHECK(fdt_setprop_string(fdt, 0, "compatible", "test_tree1"));
- CHECK(fdt_setprop_u32(fdt, 0, "prop-int", TEST_VALUE_1));
- CHECK(fdt_setprop_u64(fdt, 0, "prop-int64", TEST_VALUE64_1));
- CHECK(fdt_setprop_string(fdt, 0, "prop-str", TEST_STRING_1));
-
- OFF_CHECK(offset, fdt_add_subnode(fdt, 0, "subnode@1"));
- s1 = offset;
- CHECK(fdt_setprop_string(fdt, s1, "compatible", "subnode1"));
- CHECK(fdt_setprop_cell(fdt, s1, "prop-int", TEST_VALUE_1));
- OFF_CHECK(offset, fdt_add_subnode(fdt, s1, "subsubnode"));
- CHECK(fdt_setprop(fdt, offset, "compatible",
- "subsubnode1\0subsubnode", 23));
- CHECK(fdt_setprop_cell(fdt, offset, "prop-int", TEST_VALUE_1));
- OFF_CHECK(offset, fdt_add_subnode(fdt, s1, "ss1"));
-
- OFF_CHECK(offset, fdt_add_subnode(fdt, 0, "subnode@2"));
- s2 = offset;
- CHECK(fdt_setprop_cell(fdt, s2, "linux,phandle", PHANDLE_1));
- CHECK(fdt_setprop_cell(fdt, s2, "prop-int", TEST_VALUE_2));
- OFF_CHECK(offset, fdt_add_subnode(fdt, s2, "subsubnode@0"));
- CHECK(fdt_setprop_cell(fdt, offset, "linux,phandle", PHANDLE_2));
- CHECK(fdt_setprop(fdt, offset, "compatible",
- "subsubnode2\0subsubnode", 23));
- CHECK(fdt_setprop_cell(fdt, offset, "prop-int", TEST_VALUE_2));
- OFF_CHECK(offset, fdt_add_subnode(fdt, s2, "ss2"));
-
- CHECK(fdt_pack(fdt));
-
- save_blob("rw_tree1.test.dtb", fdt);
-
- PASS();
-}
diff --git a/tests/search_dir/search_test.dtsi b/tests/search_dir/search_test.dtsi
deleted file mode 100644
index 217fb80a8a41..000000000000
--- a/tests/search_dir/search_test.dtsi
+++ /dev/null
@@ -1,4 +0,0 @@
-/include/ "search_test2.dtsi"
-
-/ {
-};
diff --git a/tests/search_dir/search_test2.dtsi b/tests/search_dir/search_test2.dtsi
deleted file mode 100644
index 7b9099e5cd85..000000000000
--- a/tests/search_dir/search_test2.dtsi
+++ /dev/null
@@ -1,3 +0,0 @@
-
-/ {
-};
diff --git a/tests/search_dir_b/search_paths_subdir.dts b/tests/search_dir_b/search_paths_subdir.dts
deleted file mode 100644
index 5c5c9622ce54..000000000000
--- a/tests/search_dir_b/search_paths_subdir.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/include/ "search_test_c.dtsi"
-
-/ {
-};
diff --git a/tests/search_dir_b/search_test_b.dtsi b/tests/search_dir_b/search_test_b.dtsi
deleted file mode 100644
index b06a7d6eca7b..000000000000
--- a/tests/search_dir_b/search_test_b.dtsi
+++ /dev/null
@@ -1,4 +0,0 @@
-/include/ "search_test_b2.dtsi"
-
-/ {
-};
diff --git a/tests/search_dir_b/search_test_b2.dtsi b/tests/search_dir_b/search_test_b2.dtsi
deleted file mode 100644
index 2526b43d6e66..000000000000
--- a/tests/search_dir_b/search_test_b2.dtsi
+++ /dev/null
@@ -1,5 +0,0 @@
-
-/include/ "search_test.dtsi"
-
-/ {
-};
diff --git a/tests/search_dir_b/search_test_c.dtsi b/tests/search_dir_b/search_test_c.dtsi
deleted file mode 100644
index 336d7a250678..000000000000
--- a/tests/search_dir_b/search_test_c.dtsi
+++ /dev/null
@@ -1,2 +0,0 @@
-/ {
-};
diff --git a/tests/search_paths.dts b/tests/search_paths.dts
deleted file mode 100644
index a2bf179e561d..000000000000
--- a/tests/search_paths.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/include/ "search_test.dtsi"
-
-/ {
-};
diff --git a/tests/search_paths_b.dts b/tests/search_paths_b.dts
deleted file mode 100644
index 6ace6e24d272..000000000000
--- a/tests/search_paths_b.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-
-/include/ "search_test_b.dtsi"
-
-/ {
-};
diff --git a/tests/set_name.c b/tests/set_name.c
deleted file mode 100644
index 986158733a58..000000000000
--- a/tests/set_name.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_set_name()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_set_name(void *fdt, const char *path, const char *newname)
-{
- int offset;
- const char *getname, *oldname;
- int len, err;
-
- oldname = strrchr(path, '/');
- if (!oldname)
- TEST_BUG();
- oldname += 1;
-
- offset = fdt_path_offset(fdt, path);
- if (offset < 0)
- FAIL("Couldn't find %s", path);
-
- getname = fdt_get_name(fdt, offset, &len);
- verbose_printf("fdt_get_name(%d) returns \"%s\" (len=%d)\n",
- offset, getname, len);
- if (!getname)
- FAIL("fdt_get_name(%d): %s", offset, fdt_strerror(len));
-
- if (strcmp(getname, oldname) != 0)
- FAIL("fdt_get_name(%s) returned \"%s\" instead of \"%s\"",
- path, getname, oldname);
-
- if (len != strlen(getname))
- FAIL("fdt_get_name(%s) returned length %d instead of %zd",
- path, len, strlen(getname));
-
- err = fdt_set_name(fdt, offset, newname);
- if (err)
- FAIL("fdt_set_name(%d, \"%s\"): %s", offset, newname,
- fdt_strerror(err));
-
- getname = fdt_get_name(fdt, offset, &len);
- if (!getname)
- FAIL("fdt_get_name(%d): %s", offset, fdt_strerror(len));
-
- if (strcmp(getname, newname) != 0)
- FAIL("fdt_get_name(%s) returned \"%s\" instead of \"%s\"",
- path, getname, newname);
-
- if (len != strlen(getname))
- FAIL("fdt_get_name(%s) returned length %d instead of %zd",
- path, len, strlen(getname));
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
- fdt = open_blob_rw(fdt);
-
- check_set_name(fdt, "/subnode@1", "subnode@17");
- check_set_name(fdt, "/subnode@2/subsubnode@0", "fred@0");
- check_set_name(fdt, "/subnode@17/subsubnode", "something@0");
-
- PASS();
-}
diff --git a/tests/setprop.c b/tests/setprop.c
deleted file mode 100644
index be1b1478f7f0..000000000000
--- a/tests/setprop.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_setprop()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-#define SPACE 65536
-#define NEW_STRING "here is quite a long test string, blah blah blah"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- void *buf;
- const uint32_t *intp;
- const char *strp;
- int err;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- buf = xmalloc(SPACE);
-
- err = fdt_open_into(fdt, buf, SPACE);
- if (err)
- FAIL("fdt_open_into(): %s", fdt_strerror(err));
-
- fdt = buf;
-
- intp = check_getprop_cell(fdt, 0, "prop-int", TEST_VALUE_1);
-
- verbose_printf("Old int value was 0x%08x\n", *intp);
- err = fdt_setprop_string(fdt, 0, "prop-int", NEW_STRING);
- if (err)
- FAIL("Failed to set \"prop-int\" to \"%s\": %s",
- NEW_STRING, fdt_strerror(err));
-
- strp = check_getprop_string(fdt, 0, "prop-int", NEW_STRING);
- verbose_printf("New value is \"%s\"\n", strp);
-
- strp = check_getprop(fdt, 0, "prop-str", strlen(TEST_STRING_1)+1,
- TEST_STRING_1);
-
- verbose_printf("Old string value was \"%s\"\n", strp);
- err = fdt_setprop_empty(fdt, 0, "prop-str");
- if (err)
- FAIL("Failed to empty \"prop-str\": %s",
- fdt_strerror(err));
-
- check_getprop(fdt, 0, "prop-str", 0, NULL);
-
- err = fdt_setprop_u32(fdt, 0, "prop-u32", TEST_VALUE_2);
- if (err)
- FAIL("Failed to set \"prop-u32\" to 0x%08x: %s",
- TEST_VALUE_2, fdt_strerror(err));
- check_getprop_cell(fdt, 0, "prop-u32", TEST_VALUE_2);
-
- err = fdt_setprop_cell(fdt, 0, "prop-cell", TEST_VALUE_2);
- if (err)
- FAIL("Failed to set \"prop-cell\" to 0x%08x: %s",
- TEST_VALUE_2, fdt_strerror(err));
- check_getprop_cell(fdt, 0, "prop-cell", TEST_VALUE_2);
-
- err = fdt_setprop_u64(fdt, 0, "prop-u64", TEST_VALUE64_1);
- if (err)
- FAIL("Failed to set \"prop-u64\" to 0x%016llx: %s",
- TEST_VALUE64_1, fdt_strerror(err));
- check_getprop_64(fdt, 0, "prop-u64", TEST_VALUE64_1);
-
- PASS();
-}
diff --git a/tests/setprop_inplace.c b/tests/setprop_inplace.c
deleted file mode 100644
index 80447a0b13ab..000000000000
--- a/tests/setprop_inplace.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_setprop_inplace()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <inttypes.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- const uint32_t *intp;
- const uint64_t *int64p;
- const char *strp;
- char *xstr;
- int xlen, i;
- int err;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- intp = check_getprop_cell(fdt, 0, "prop-int", TEST_VALUE_1);
-
- verbose_printf("Old int value was 0x%08x\n", *intp);
- err = fdt_setprop_inplace_cell(fdt, 0, "prop-int", ~TEST_VALUE_1);
- if (err)
- FAIL("Failed to set \"prop-int\" to 0x%08x: %s",
- ~TEST_VALUE_1, fdt_strerror(err));
- intp = check_getprop_cell(fdt, 0, "prop-int", ~TEST_VALUE_1);
- verbose_printf("New int value is 0x%08x\n", *intp);
-
- strp = check_getprop(fdt, 0, "prop-str", strlen(TEST_STRING_1)+1,
- TEST_STRING_1);
-
-
- int64p = check_getprop_64(fdt, 0, "prop-int64", TEST_VALUE64_1);
-
- verbose_printf("Old int64 value was 0x%016" PRIx64 "\n", *int64p);
- err = fdt_setprop_inplace_u64(fdt, 0, "prop-int64", ~TEST_VALUE64_1);
- if (err)
- FAIL("Failed to set \"prop-int64\" to 0x%016llx: %s",
- ~TEST_VALUE64_1, fdt_strerror(err));
- int64p = check_getprop_64(fdt, 0, "prop-int64", ~TEST_VALUE64_1);
- verbose_printf("New int64 value is 0x%016" PRIx64 "\n", *int64p);
-
- strp = check_getprop(fdt, 0, "prop-str", strlen(TEST_STRING_1)+1,
- TEST_STRING_1);
-
- verbose_printf("Old string value was \"%s\"\n", strp);
- xstr = strdup(strp);
- xlen = strlen(xstr);
- for (i = 0; i < xlen; i++)
- xstr[i] = toupper(xstr[i]);
- err = fdt_setprop_inplace(fdt, 0, "prop-str", xstr, xlen+1);
- if (err)
- FAIL("Failed to set \"prop-str\" to \"%s\": %s",
- xstr, fdt_strerror(err));
-
- strp = check_getprop(fdt, 0, "prop-str", xlen+1, xstr);
- verbose_printf("New string value is \"%s\"\n", strp);
-
- err = fdt_setprop_inplace_namelen_partial(fdt, 0, "compatible",
- strlen("compatible"), 4,
- TEST_STRING_4_PARTIAL,
- strlen(TEST_STRING_4_PARTIAL));
- if (err)
- FAIL("Failed to set \"compatible\": %s\n", fdt_strerror(err));
-
- check_getprop(fdt, 0, "compatible", strlen(TEST_STRING_4_RESULT) + 1,
- TEST_STRING_4_RESULT);
-
- PASS();
-}
diff --git a/tests/sized_cells.c b/tests/sized_cells.c
deleted file mode 100644
index 0b2b8dc56626..000000000000
--- a/tests/sized_cells.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for variable sized cells in dtc
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- * Copyright (C) 2011 The Chromium Authors. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_compare_properties(void *fdt,
- char const *name_one,
- char const *name_two)
-{
- const void *propval;
- int proplen;
-
- propval = fdt_getprop(fdt, 0, name_one, &proplen);
-
- if (!propval)
- FAIL("fdt_getprop(\"%s\"): %s",
- name_one,
- fdt_strerror(proplen));
-
- check_getprop(fdt, 0, name_two, proplen, propval);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- uint8_t expected_8[6] = {TEST_CHAR1,
- TEST_CHAR2,
- TEST_CHAR3,
- TEST_CHAR4,
- TEST_CHAR5,
- TEST_VALUE_1 >> 24};
- fdt16_t expected_16[6];
- fdt32_t expected_32[6];
- fdt64_t expected_64[6];
- int i;
-
- for (i = 0; i < 5; ++i) {
- expected_16[i] = cpu_to_fdt16(expected_8[i]);
- expected_32[i] = cpu_to_fdt32(expected_8[i]);
- expected_64[i] = cpu_to_fdt64(expected_8[i]);
- }
-
- expected_16[5] = cpu_to_fdt16(TEST_VALUE_1 >> 16);
- expected_32[5] = cpu_to_fdt32(TEST_VALUE_1);
- expected_64[5] = cpu_to_fdt64(TEST_ADDR_1);
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_getprop(fdt, 0, "cells-8b", sizeof(expected_8), expected_8);
- check_getprop(fdt, 0, "cells-16b", sizeof(expected_16), expected_16);
- check_getprop(fdt, 0, "cells-32b", sizeof(expected_32), expected_32);
- check_getprop(fdt, 0, "cells-64b", sizeof(expected_64), expected_64);
-
- check_compare_properties(fdt, "cells-one-16b", "cells-one-32b");
-
- PASS();
-}
diff --git a/tests/sized_cells.dts b/tests/sized_cells.dts
deleted file mode 100644
index efea9f567ba4..000000000000
--- a/tests/sized_cells.dts
+++ /dev/null
@@ -1,11 +0,0 @@
-/dts-v1/;
-
-/ {
- cells-8b = /bits/ 8 <'\r' 'b' '\0' '\'' '\xff' 0xde>;
- cells-16b = /bits/ 16 <'\r' 'b' '\0' '\'' '\xff' 0xdead>;
- cells-32b = /bits/ 32 <'\r' 'b' '\0' '\'' '\xff' 0xdeadbeef>;
- cells-64b = /bits/ 64 <'\r' 'b' '\0' '\'' '\xff' 0xdeadbeef00000000>;
-
- cells-one-16b = /bits/ 16 <0x1234 0x5678 0x0 0xffff>;
- cells-one-32b = <0x12345678 0x0000ffff>;
-};
diff --git a/tests/sourceoutput.dts b/tests/sourceoutput.dts
deleted file mode 100644
index 477762f5aaa7..000000000000
--- a/tests/sourceoutput.dts
+++ /dev/null
@@ -1,14 +0,0 @@
-/dts-v1/;
-
-/ {
- /* Some versions had an off-by-2 bug which caused an abort
- * when outputing labels within strings like this in source
- * format */
- prop1: prop1 = start1: "foo", mid1: "bar" end1: ;
-
- /* Make sure that we correctly handle source output of things
- * which could almost be expressed as strings, except for the
- * embedded labels */
- prop2 = start2: [66 6f 6f], mid2: "bar" end2: ;
-};
-
diff --git a/tests/stacked_overlay_bar.dts b/tests/stacked_overlay_bar.dts
deleted file mode 100644
index c64639952f4c..000000000000
--- a/tests/stacked_overlay_bar.dts
+++ /dev/null
@@ -1,13 +0,0 @@
-/dts-v1/;
-/plugin/;
-/ {
- fragment@1 {
- target = <&foo>;
- __overlay__ {
- overlay-1-property;
- bar: barnode {
- bar-property = "bar";
- };
- };
- };
-};
diff --git a/tests/stacked_overlay_base.dts b/tests/stacked_overlay_base.dts
deleted file mode 100644
index 29164230d6f6..000000000000
--- a/tests/stacked_overlay_base.dts
+++ /dev/null
@@ -1,6 +0,0 @@
-/dts-v1/;
-/ {
- foo: foonode {
- foo-property = "foo";
- };
-};
diff --git a/tests/stacked_overlay_baz.dts b/tests/stacked_overlay_baz.dts
deleted file mode 100644
index a52f0cc600e3..000000000000
--- a/tests/stacked_overlay_baz.dts
+++ /dev/null
@@ -1,13 +0,0 @@
-/dts-v1/;
-/plugin/;
-/ {
- fragment@1 {
- target = <&bar>;
- __overlay__ {
- overlay-2-property;
- baz: baznode {
- baz-property = "baz";
- };
- };
- };
-};
diff --git a/tests/string_escapes.c b/tests/string_escapes.c
deleted file mode 100644
index 8cdee4bb34fe..000000000000
--- a/tests/string_escapes.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for string escapes in dtc
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_getprop(fdt, 0, "escape-str",
- strlen(TEST_STRING_2)+1, TEST_STRING_2);
- check_getprop(fdt, 0, "escape-str-2",
- strlen(TEST_STRING_3)+1, TEST_STRING_3);
-
- PASS();
-}
diff --git a/tests/stringlist.c b/tests/stringlist.c
deleted file mode 100644
index 23cfece021dd..000000000000
--- a/tests/stringlist.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for string handling
- * Copyright (C) 2015 NVIDIA Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check_expected_failure(const void *fdt, const char *path,
- const char *property)
-{
- int offset, err;
-
- offset = fdt_path_offset(fdt, "/");
- if (offset < 0)
- FAIL("Couldn't find path %s", path);
-
- err = fdt_stringlist_count(fdt, offset, "#address-cells");
- if (err != -FDT_ERR_BADVALUE)
- FAIL("unexpectedly succeeded in parsing #address-cells\n");
-
- err = fdt_stringlist_search(fdt, offset, "#address-cells", "foo");
- if (err != -FDT_ERR_BADVALUE)
- FAIL("found string in #address-cells: %d\n", err);
-
- /*
- * Note that the #address-cells property contains a small 32-bit
- * unsigned integer, hence some bytes will be zero, and searching for
- * the empty string will succeed.
- *
- * The reason for this oddity is that the function will exit when the
- * first occurrence of the string is found, but in order to determine
- * that the property does not contain a valid string list it would
- * need to process the whole value.
- */
- err = fdt_stringlist_search(fdt, offset, "#address-cells", "");
- if (err != 0)
- FAIL("empty string not found in #address-cells: %d\n", err);
-
- /*
- * fdt_getprop_string() can successfully extract strings from
- * non-string properties. This is because it doesn't
- * necessarily parse the whole property value, which would be
- * necessary for it to determine if a valid string or string
- * list is present.
- */
-}
-
-static void check_string_count(const void *fdt, const char *path,
- const char *property, int count)
-{
- int offset, err;
-
- offset = fdt_path_offset(fdt, path);
- if (offset < 0)
- FAIL("Couldn't find path %s", path);
-
- err = fdt_stringlist_count(fdt, offset, property);
- if (err < 0)
- FAIL("Couldn't count strings in property %s of node %s: %d\n",
- property, path, err);
-
- if (err != count)
- FAIL("String count for property %s of node %s is %d instead of %d\n",
- path, property, err, count);
-}
-
-static void check_string_index(const void *fdt, const char *path,
- const char *property, const char *string,
- int idx)
-{
- int offset, err;
-
- offset = fdt_path_offset(fdt, path);
- if (offset < 0)
- FAIL("Couldn't find path %s", path);
-
- err = fdt_stringlist_search(fdt, offset, property, string);
-
- if (err != idx)
- FAIL("Index of %s in property %s of node %s is %d, expected %d\n",
- string, property, path, err, idx);
-}
-
-static void check_string(const void *fdt, const char *path,
- const char *property, int idx,
- const char *string)
-{
- const char *result;
- int offset, len;
-
- offset = fdt_path_offset(fdt, path);
- if (offset < 0)
- FAIL("Couldn't find path %s", path);
-
- result = fdt_stringlist_get(fdt, offset, property, idx, &len);
- if (!result)
- FAIL("Couldn't extract string %d from property %s of node %s: %d\n",
- idx, property, path, len);
-
- if (strcmp(string, result) != 0)
- FAIL("String %d in property %s of node %s is %s, expected %s\n",
- idx, property, path, result, string);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- if (argc != 2)
- CONFIG("Usage: %s <dtb file>\n", argv[0]);
-
- test_init(argc, argv);
- fdt = load_blob(argv[1]);
-
- check_expected_failure(fdt, "/", "#address-cells");
- check_expected_failure(fdt, "/", "#size-cells");
-
- check_string_count(fdt, "/", "compatible", 1);
- check_string_count(fdt, "/device", "compatible", 2);
- check_string_count(fdt, "/device", "big-endian", 0);
-
- check_string_index(fdt, "/", "compatible", "test-strings", 0);
- check_string_index(fdt, "/device", "compatible", "foo", 0);
- check_string_index(fdt, "/device", "compatible", "bar", 1);
- check_string_index(fdt, "/device", "big-endian", "baz", -1);
-
- check_string(fdt, "/", "compatible", 0, "test-strings");
- check_string(fdt, "/device", "compatible", 0, "foo");
- check_string(fdt, "/device", "compatible", 1, "bar");
-
- PASS();
-}
diff --git a/tests/stringlist.dts b/tests/stringlist.dts
deleted file mode 100644
index 1e4d3140458f..000000000000
--- a/tests/stringlist.dts
+++ /dev/null
@@ -1,12 +0,0 @@
-/dts-v1/;
-
-/ {
- compatible = "test-strings";
- #address-cells = <2>;
- #size-cells = <2>;
-
- device {
- compatible = "foo", "bar";
- big-endian;
- };
-};
diff --git a/tests/subnode_iterate.c b/tests/subnode_iterate.c
deleted file mode 100644
index 7be5706eeb30..000000000000
--- a/tests/subnode_iterate.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Tests that fdt_next_subnode() works as expected
- *
- * Copyright (C) 2013 Google, Inc
- *
- * Copyright (C) 2007 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void test_node(void *fdt, int parent_offset)
-{
- uint32_t subnodes;
- const fdt32_t *prop;
- int offset;
- int count;
- int len;
-
- /* This property indicates the number of subnodes to expect */
- prop = fdt_getprop(fdt, parent_offset, "subnodes", &len);
- if (!prop || len != sizeof(fdt32_t)) {
- FAIL("Missing/invalid subnodes property at '%s'",
- fdt_get_name(fdt, parent_offset, NULL));
- }
- subnodes = fdt32_to_cpu(*prop);
-
- count = 0;
- fdt_for_each_subnode(offset, fdt, parent_offset)
- count++;
-
- if (count != subnodes) {
- FAIL("Node '%s': Expected %d subnodes, got %d\n",
- fdt_get_name(fdt, parent_offset, NULL), subnodes,
- count);
- }
-}
-
-static void check_fdt_next_subnode(void *fdt)
-{
- int offset;
- int count = 0;
-
- fdt_for_each_subnode(offset, fdt, 0) {
- test_node(fdt, offset);
- count++;
- }
-
- if (count != 2)
- FAIL("Expected %d tests, got %d\n", 2, count);
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- if (argc != 2)
- CONFIG("Usage: %s <dtb file>", argv[0]);
-
- fdt = load_blob(argv[1]);
- if (!fdt)
- FAIL("No device tree available");
-
- check_fdt_next_subnode(fdt);
-
- PASS();
-}
diff --git a/tests/subnode_iterate.dts b/tests/subnode_iterate.dts
deleted file mode 100644
index 14a0d3aba1fb..000000000000
--- a/tests/subnode_iterate.dts
+++ /dev/null
@@ -1,44 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <1>;
- #size-cells = <0>;
-
- test1 {
- subnodes = <2>;
- linux,phandle = <0x1>;
- #address-cells = <1>;
- #size-cells = <0>;
- PowerPC,970@0 {
- name = "PowerPC,970";
- device_type = "cpu";
- reg = <0x00000000>;
- clock-frequency = <1600000000>;
- timebase-frequency = <33333333>;
- linux,boot-cpu;
- i-cache-size = <65536>;
- d-cache-size = <32768>;
- another-sub-node {
- should-be-ignored;
- yet-another {
- should-also-be-ignored;
- };
- };
- };
-
- PowerPC,970@1 {
- name = "PowerPC,970";
- device_type = "cpu";
- reg = <0x00000001>;
- clock-frequency = <1600000000>;
- timebase-frequency = <33333333>;
- i-cache-size = <65536>;
- d-cache-size = <32768>;
- };
- };
-
- test2 {
- subnodes = <0>;
- };
-};
-
diff --git a/tests/subnode_offset.c b/tests/subnode_offset.c
deleted file mode 100644
index 231fcb50a26c..000000000000
--- a/tests/subnode_offset.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_subnode_offset()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static int check_subnode(struct fdt_header *fdt, int parent, const char *name)
-{
- int offset;
- const struct fdt_node_header *nh;
- uint32_t tag;
-
- verbose_printf("Checking subnode \"%s\" of %d...", name, parent);
- offset = fdt_subnode_offset(fdt, parent, name);
- verbose_printf("offset %d...", offset);
- if (offset < 0)
- FAIL("fdt_subnode_offset(\"%s\"): %s", name, fdt_strerror(offset));
- nh = fdt_offset_ptr(fdt, offset, sizeof(*nh));
- verbose_printf("pointer %p\n", nh);
- if (! nh)
- FAIL("NULL retrieving subnode \"%s\"", name);
-
- tag = fdt32_to_cpu(nh->tag);
-
- if (tag != FDT_BEGIN_NODE)
- FAIL("Incorrect tag 0x%08x on property \"%s\"", tag, name);
- if (!nodename_eq(nh->name, name))
- FAIL("Subnode name mismatch \"%s\" instead of \"%s\"",
- nh->name, name);
-
- return offset;
-}
-
-int main(int argc, char *argv[])
-{
- void *fdt;
- int subnode1_offset, subnode2_offset;
- int subsubnode1_offset, subsubnode2_offset, subsubnode2_offset2;
- int ss12_off, ss21_off;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- subnode1_offset = check_subnode(fdt, 0, "subnode@1");
- subnode2_offset = check_subnode(fdt, 0, "subnode@2");
-
- if (subnode1_offset == subnode2_offset)
- FAIL("Different subnodes have same offset");
-
- check_property_cell(fdt, subnode1_offset, "prop-int", TEST_VALUE_1);
- check_property_cell(fdt, subnode2_offset, "prop-int", TEST_VALUE_2);
-
- subsubnode1_offset = check_subnode(fdt, subnode1_offset, "subsubnode");
- subsubnode2_offset = check_subnode(fdt, subnode2_offset, "subsubnode@0");
- subsubnode2_offset2 = check_subnode(fdt, subnode2_offset, "subsubnode");
-
- check_property_cell(fdt, subsubnode1_offset, "prop-int", TEST_VALUE_1);
- check_property_cell(fdt, subsubnode2_offset, "prop-int", TEST_VALUE_2);
- check_property_cell(fdt, subsubnode2_offset2, "prop-int", TEST_VALUE_2);
-
- if (subsubnode2_offset != subsubnode2_offset2)
- FAIL("Different offsets with and without unit address");
-
- check_subnode(fdt, subnode1_offset, "ss1");
- ss21_off = fdt_subnode_offset(fdt, subnode2_offset, "ss1");
- if (ss21_off != -FDT_ERR_NOTFOUND)
- FAIL("Incorrectly found ss1 in subnode2");
-
- ss12_off = fdt_subnode_offset(fdt, subnode1_offset, "ss2");
- if (ss12_off != -FDT_ERR_NOTFOUND)
- FAIL("Incorrectly found ss2 in subnode1");
- check_subnode(fdt, subnode2_offset, "ss2");
-
- PASS();
-}
diff --git a/tests/supernode_atdepth_offset.c b/tests/supernode_atdepth_offset.c
deleted file mode 100644
index 43e120d79e4e..000000000000
--- a/tests/supernode_atdepth_offset.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_supernode_atdepth_offset()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static int path_depth(const char *path)
-{
- const char *p;
- int depth = 0;
-
- if (path[0] != '/')
- TEST_BUG();
-
- if (strcmp(path, "/") == 0)
- return 0;
- for (p = path; *p; p++)
- if (*p == '/')
- depth++;
-
- /* Special case for path == "/" */
- if (p == (path + 1))
- return 0;
- else
- return depth;
-}
-
-static int path_prefix(const char *path, int depth)
-{
- const char *p;
- int i;
-
- if (path[0] != '/')
- TEST_BUG();
-
- if (depth == 0)
- return 1;
-
- p = path;
- for (i = 0; i < depth; i++)
- p = p+1 + strcspn(p+1, "/");
-
- return p - path;
-}
-
-static void check_supernode_atdepth(struct fdt_header *fdt, const char *path,
- int depth)
-{
- int pdepth = path_depth(path);
- char *superpath;
- int nodeoffset, supernodeoffset, superpathoffset, pathprefixlen;
- int nodedepth;
-
- pathprefixlen = path_prefix(path, depth);
- superpath = alloca(pathprefixlen + 1);
- strncpy(superpath, path, pathprefixlen);
- superpath[pathprefixlen] = '\0';
-
- verbose_printf("Path %s (%d), depth %d, supernode is %s\n",
- path, pdepth, depth, superpath);
-
- nodeoffset = fdt_path_offset(fdt, path);
- if (nodeoffset < 0)
- FAIL("fdt_path_offset(%s): %s", path, fdt_strerror(nodeoffset));
- superpathoffset = fdt_path_offset(fdt, superpath);
- if (superpathoffset < 0)
- FAIL("fdt_path_offset(%s): %s", superpath,
- fdt_strerror(superpathoffset));
-
- supernodeoffset = fdt_supernode_atdepth_offset(fdt, nodeoffset,
- depth, &nodedepth);
- if (supernodeoffset < 0)
- FAIL("fdt_supernode_atdepth_offset(): %s",
- fdt_strerror(supernodeoffset));
-
- if (supernodeoffset != superpathoffset)
- FAIL("fdt_supernode_atdepth_offset() returns %d instead of %d",
- supernodeoffset, superpathoffset);
-
- if (nodedepth != pdepth)
- FAIL("fdt_supernode_atdept_offset() returns node depth %d "
- "instead of %d", nodedepth, pdepth);
-}
-
-static void check_supernode_overdepth(struct fdt_header *fdt, const char *path)
-{
- int pdepth = path_depth(path);
- int nodeoffset, err;
-
- nodeoffset = fdt_path_offset(fdt, path);
- if (nodeoffset < 0)
- FAIL("fdt_path_offset(%s): %s", path, fdt_strerror(nodeoffset));
-
- err = fdt_supernode_atdepth_offset(fdt, nodeoffset, pdepth + 1, NULL);
- if (err != -FDT_ERR_NOTFOUND)
- FAIL("fdt_supernode_atdept_offset(%s, %d) returns %d instead "
- "of FDT_ERR_NOTFOUND", path, pdepth+1, err);
-}
-
-static void check_path(struct fdt_header *fdt, const char *path)
-{
- int i;
-
- for (i = 0; i <= path_depth(path); i++)
- check_supernode_atdepth(fdt, path, i);
- check_supernode_overdepth(fdt, path);
-}
-int main(int argc, char *argv[])
-{
- void *fdt;
-
- test_init(argc, argv);
- fdt = load_blob_arg(argc, argv);
-
- check_path(fdt, "/");
- check_path(fdt, "/subnode@1");
- check_path(fdt, "/subnode@2");
- check_path(fdt, "/subnode@1/subsubnode");
- check_path(fdt, "/subnode@2/subsubnode@0");
-
- PASS();
-}
diff --git a/tests/sw_tree1.c b/tests/sw_tree1.c
deleted file mode 100644
index 386b05f6f720..000000000000
--- a/tests/sw_tree1.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for fdt_nop_node()
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-#define SPACE 65536
-
-static enum {
- FIXED = 0,
- RESIZE,
- REALLOC,
-} alloc_mode;
-
-static void realloc_fdt(void **fdt, size_t *size, bool created)
-{
- switch (alloc_mode) {
- case FIXED:
- if (!(*fdt))
- *fdt = xmalloc(*size);
- else
- FAIL("Ran out of space");
- return;
-
- case RESIZE:
- if (!(*fdt)) {
- *fdt = xmalloc(SPACE);
- } else if (*size < SPACE) {
- *size += 1;
- fdt_resize(*fdt, *fdt, *size);
- } else {
- FAIL("Ran out of space");
- }
- return;
-
- case REALLOC:
- *size += 1;
- *fdt = xrealloc(*fdt, *size);
- if (created)
- fdt_resize(*fdt, *fdt, *size);
- return;
-
- default:
- CONFIG("Bad allocation mode");
- }
-}
-
-#define CHECK(code) \
- do { \
- err = (code); \
- if (err == -FDT_ERR_NOSPACE) \
- realloc_fdt(&fdt, &size, created); \
- else if (err) \
- FAIL(#code ": %s", fdt_strerror(err)); \
- } while (err != 0)
-
-int main(int argc, char *argv[])
-{
- void *fdt = NULL;
- size_t size;
- int err;
- bool created = false;
- void *place;
- const char place_str[] = "this is a placeholder string\0string2";
- int place_len = sizeof(place_str);
-
- test_init(argc, argv);
-
- if (argc == 1) {
- alloc_mode = FIXED;
- size = SPACE;
- } else if (argc == 2) {
- if (streq(argv[1], "resize")) {
- alloc_mode = REALLOC;
- size = 0;
- } else if (streq(argv[1], "realloc")) {
- alloc_mode = REALLOC;
- size = 0;
- } else {
- char *endp;
-
- size = strtoul(argv[1], &endp, 0);
- if (*endp == '\0')
- alloc_mode = FIXED;
- else
- CONFIG("Bad allocation mode \"%s\" specified",
- argv[1]);
- }
- } else {
- CONFIG("sw_tree1 <dtb file> [<allocation mode>]");
- }
-
- fdt = xmalloc(size);
- CHECK(fdt_create(fdt, size));
-
- created = true;
-
- CHECK(fdt_add_reservemap_entry(fdt, TEST_ADDR_1, TEST_SIZE_1));
-
- CHECK(fdt_add_reservemap_entry(fdt, TEST_ADDR_2, TEST_SIZE_2));
- CHECK(fdt_finish_reservemap(fdt));
-
- CHECK(fdt_begin_node(fdt, ""));
- CHECK(fdt_property_string(fdt, "compatible", "test_tree1"));
- CHECK(fdt_property_u32(fdt, "prop-int", TEST_VALUE_1));
- CHECK(fdt_property_u64(fdt, "prop-int64", TEST_VALUE64_1));
- CHECK(fdt_property_string(fdt, "prop-str", TEST_STRING_1));
- CHECK(fdt_property_u32(fdt, "#address-cells", 1));
- CHECK(fdt_property_u32(fdt, "#size-cells", 0));
-
- CHECK(fdt_begin_node(fdt, "subnode@1"));
- CHECK(fdt_property_string(fdt, "compatible", "subnode1"));
- CHECK(fdt_property_u32(fdt, "reg", 1));
- CHECK(fdt_property_cell(fdt, "prop-int", TEST_VALUE_1));
- CHECK(fdt_begin_node(fdt, "subsubnode"));
- CHECK(fdt_property(fdt, "compatible", "subsubnode1\0subsubnode",
- 23));
- CHECK(fdt_property_placeholder(fdt, "placeholder", place_len, &place));
- memcpy(place, place_str, place_len);
- CHECK(fdt_property_cell(fdt, "prop-int", TEST_VALUE_1));
- CHECK(fdt_end_node(fdt));
- CHECK(fdt_begin_node(fdt, "ss1"));
- CHECK(fdt_end_node(fdt));
- CHECK(fdt_end_node(fdt));
-
- CHECK(fdt_begin_node(fdt, "subnode@2"));
- CHECK(fdt_property_u32(fdt, "reg", 2));
- CHECK(fdt_property_cell(fdt, "linux,phandle", PHANDLE_1));
- CHECK(fdt_property_cell(fdt, "prop-int", TEST_VALUE_2));
- CHECK(fdt_property_u32(fdt, "#address-cells", 1));
- CHECK(fdt_property_u32(fdt, "#size-cells", 0));
- CHECK(fdt_begin_node(fdt, "subsubnode@0"));
- CHECK(fdt_property_u32(fdt, "reg", 0));
- CHECK(fdt_property_cell(fdt, "phandle", PHANDLE_2));
- CHECK(fdt_property(fdt, "compatible", "subsubnode2\0subsubnode",
- 23));
- CHECK(fdt_property_cell(fdt, "prop-int", TEST_VALUE_2));
- CHECK(fdt_end_node(fdt));
- CHECK(fdt_begin_node(fdt, "ss2"));
- CHECK(fdt_end_node(fdt));
-
- CHECK(fdt_end_node(fdt));
-
- CHECK(fdt_end_node(fdt));
-
- save_blob("unfinished_tree1.test.dtb", fdt);
-
- CHECK(fdt_finish(fdt));
-
- verbose_printf("Completed tree, totalsize = %d\n",
- fdt_totalsize(fdt));
-
- save_blob("sw_tree1.test.dtb", fdt);
-
- PASS();
-}
diff --git a/tests/sw_tree1.supp b/tests/sw_tree1.supp
deleted file mode 100644
index 279f9e55054c..000000000000
--- a/tests/sw_tree1.supp
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- allocation methods causes uninitialized data in alignment gap
- Memcheck:Param
- write(buf)
- fun:__write_nocancel
- fun:utilfdt_write_err
- fun:save_blob
- fun:main
-}
-{
- allocation methods causes uninitialized data in alignment gap
- Memcheck:Param
- write(buf)
- fun:__write_nocancel
- fun:utilfdt_write_err
- fun:save_blob
- fun:main
-}
diff --git a/tests/test01.asm b/tests/test01.asm
deleted file mode 100644
index bbf66c771d88..000000000000
--- a/tests/test01.asm
+++ /dev/null
@@ -1,294 +0,0 @@
-/* autogenerated by dtc, do not edit */
-
-#define OF_DT_HEADER 0xd00dfeed
-#define OF_DT_BEGIN_NODE 0x1
-#define OF_DT_END_NODE 0x2
-#define OF_DT_PROP 0x3
-#define OF_DT_END 0x9
-
- .globl dt_blob_start
-dt_blob_start:
-_dt_blob_start:
- .globl dt_header
-dt_header:
-_dt_header:
- .long OF_DT_HEADER /* magic */
- .long _dt_blob_end - _dt_blob_start /* totalsize */
- .long _dt_struct_start - _dt_blob_start /* off_dt_struct */
- .long _dt_strings_start - _dt_blob_start /* off_dt_strings */
- .long _dt_reserve_map - _dt_blob_start /* off_dt_strings */
- .long 16 /* version */
- .long 16 /* last_comp_version */
- .long 0 /*boot_cpuid_phys*/
- .long _dt_strings_end - _dt_strings_start /* size_dt_strings */
- .balign 8
- .globl dt_reserve_map
-dt_reserve_map:
-_dt_reserve_map:
-/* Memory reserve map from source file */
- .long 0x10000000
- .long 0x00000000
- .long 0x00000000
- .long 0x02000000
- .long 0x20000000
- .long 0x00000000
- .long 0x01000000
- .long 0x00000000
- .long 0x00000000
- .long 0x00000000
- .long 0x00000000
- .long 0x00000014
- .long 0, 0
- .long 0, 0
- .globl dt_struct_start
-dt_struct_start:
-_dt_struct_start:
- .long OF_DT_BEGIN_NODE
- .string ""
- .balign 4
- .long OF_DT_PROP
- .long 0xc
- .long 0x0
- .long 0x4d79426f
- .long 0x6172644e
- .long 0x616d6500
- .balign 4
- .long OF_DT_PROP
- .long 0x1e
- .long 0x6
- .long 0x4d79426f
- .long 0x6172644e
- .long 0x616d6500
- .long 0x4d79426f
- .long 0x61726446
- .long 0x616d696c
- .long 0x794e616d
- .short 0x6500
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x11
- .long 0x2
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x20
- .long 0x2
- .balign 4
- .long OF_DT_BEGIN_NODE
- .string "cpus"
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x2c
- .long 0x1
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x11
- .long 0x1
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x20
- .long 0x0
- .balign 4
- .long OF_DT_BEGIN_NODE
- .string "PowerPC,970@0"
- .balign 4
- .long OF_DT_PROP
- .long 0xc
- .long 0x3a
- .long 0x506f7765
- .long 0x7250432c
- .long 0x39373000
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x3f
- .long 0x63707500
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x4b
- .long 0x0
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x4f
- .long 0x5f5e1000
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x5f
- .long 0x1fca055
- .balign 4
- .long OF_DT_PROP
- .long 0x0
- .long 0x72
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x81
- .long 0x10000
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x8e
- .long 0x8000
- .balign 4
- .long OF_DT_END_NODE
- .long OF_DT_BEGIN_NODE
- .string "PowerPC,970@1"
- .balign 4
- .long OF_DT_PROP
- .long 0xc
- .long 0x3a
- .long 0x506f7765
- .long 0x7250432c
- .long 0x39373000
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x3f
- .long 0x63707500
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x4b
- .long 0x1
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x4f
- .long 0x5f5e1000
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x5f
- .long 0x1fca055
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x81
- .long 0x10000
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x8e
- .long 0x8000
- .balign 4
- .long OF_DT_END_NODE
- .long OF_DT_END_NODE
- .long OF_DT_BEGIN_NODE
- .string "randomnode"
- .balign 4
- .long OF_DT_PROP
- .long 0x13
- .long 0x9b
- .long 0xff007374
- .long 0x75666673
- .long 0x74756666
- .long 0x909090a
- .short 0xa0a
- .byte 0x0
- .balign 4
- .long OF_DT_PROP
- .long 0x9
- .long 0xa2
- .long 0xa0b0c0d
- .long 0xdeeaadbe
- .byte 0xef
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0xa7
- .long 0x2
- .balign 4
- .long OF_DT_PROP
- .long 0x14
- .long 0xab
- .long 0x61626300
- .long 0x12340000
- .long 0xa
- .long 0xb
- .long 0xc
- .balign 4
- .long OF_DT_END_NODE
- .long OF_DT_BEGIN_NODE
- .string "memory@0"
- .balign 4
- .long OF_DT_PROP
- .long 0x7
- .long 0x3f
- .long 0x6d656d6f
- .short 0x7279
- .byte 0x0
- .balign 4
- .globl memreg
-memreg:
- .long OF_DT_PROP
- .long 0x10
- .long 0x4b
- .long 0x0
- .long 0x0
- .long 0x0
- .long 0x20000000
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0x2c
- .long 0x2
- .balign 4
- .long OF_DT_END_NODE
- .long OF_DT_BEGIN_NODE
- .string "chosen"
- .balign 4
- .long OF_DT_PROP
- .long 0xf
- .long 0xb1
- .long 0x726f6f74
- .long 0x3d2f6465
- .long 0x762f7364
- .short 0x6132
- .byte 0x0
- .balign 4
- .long OF_DT_PROP
- .long 0x4
- .long 0xba
- .long 0x600
- .balign 4
- .long OF_DT_END_NODE
- .long OF_DT_END_NODE
- .long OF_DT_END
- .globl dt_struct_end
-dt_struct_end:
-_dt_struct_end:
- .globl dt_strings_start
-dt_strings_start:
-_dt_strings_start:
- .string "model"
- .string "compatible"
- .string "#address-cells"
- .string "#size-cells"
- .string "linux,phandle"
- .string "name"
- .string "device_type"
- .string "reg"
- .string "clock-frequency"
- .string "timebase-frequency"
- .string "linux,boot-cpu"
- .string "i-cache-size"
- .string "d-cache-size"
- .string "string"
- .string "blob"
- .string "ref"
- .string "mixed"
- .string "bootargs"
- .string "linux,platform"
- .globl dt_strings_end
-dt_strings_end:
-_dt_strings_end:
- .globl dt_blob_end
-dt_blob_end:
-_dt_blob_end:
diff --git a/tests/test01.dts b/tests/test01.dts
deleted file mode 100644
index f9fd165340f9..000000000000
--- a/tests/test01.dts
+++ /dev/null
@@ -1,57 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0x1000000000000000 0x0000000002000000;
-/memreserve/ 0x2000000000000000 0x0100000000000000;
-/memreserve/ 0x0000000000000000 0x0000000000000014;
-
-/ {
- model = "MyBoardName";
- compatible = "MyBoardName", "MyBoardFamilyName";
- #address-cells = <2>;
- #size-cells = <2>;
-
- cpus {
- linux,phandle = <0x1>;
- #address-cells = <1>;
- #size-cells = <0>;
- PowerPC,970@0 {
- name = "PowerPC,970";
- device_type = "cpu";
- reg = <0x00000000>;
- clock-frequency = <1600000000>;
- timebase-frequency = <33333333>;
- linux,boot-cpu;
- i-cache-size = <65536>;
- d-cache-size = <32768>;
- };
-
- PowerPC,970@1 {
- name = "PowerPC,970";
- device_type = "cpu";
- reg = <0x00000001>;
- clock-frequency = <1600000000>;
- timebase-frequency = <33333333>;
- i-cache-size = <65536>;
- d-cache-size = <32768>;
- };
-
- };
-
- randomnode {
- string = "\xff\0stuffstuff\t\t\t\n\n\n";
- blob = [0a 0b 0c 0d de ea ad be ef];
- ref = < &{/memory@0} >;
- mixed = "abc", [1234], <0xa 0xb 0xc>;
- };
-
- memory@0 {
- device_type = "memory";
- memreg: reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
- };
-
- chosen {
- bootargs = "root=/dev/sda2";
- linux,platform = <0x600>;
- };
-
-};
diff --git a/tests/test01.stderr b/tests/test01.stderr
deleted file mode 100644
index 82ea3f63467e..000000000000
--- a/tests/test01.stderr
+++ /dev/null
@@ -1,4 +0,0 @@
-DTC: dts->asm on file "test.dts"
-Warning: "linux,boot-cpu" property is deprecated in blob version 2 or higher
-Warning: /chosen has no "linux,stdout-path" property
-Warning: /chosen has no "interrupt-controller" property
diff --git a/tests/test_kernel_dts b/tests/test_kernel_dts
deleted file mode 100755
index 238f3f7c636a..000000000000
--- a/tests/test_kernel_dts
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/perl
-
-my $dtc_old = "/home/jdl/FSL/dtc/dtc-old";
-my $dtc_new = "/home/jdl/FSL/dtc/dtc-new";
-
-my $basic_options = "-b 0 -f -I dts -O dtb";
-
-my $linux_dts_dir = "/usr/src/linux-2.6/arch/powerpc/boot/dts";
-
-# Yeah, sure, we could, like, readdir() this instead...
-my @boards = (
- "bamboo",
- "ebony",
- "ep88xc",
- "holly",
- "kilauea",
- "kuroboxHD",
- "kuroboxHG",
- "lite5200",
- "lite5200b",
- "mpc7448hpc2",
- "mpc8272ads",
- "mpc8313erdb",
- "mpc832x_mds",
- "mpc832x_rdb",
- "mpc8349emitx",
- "mpc8349emitxgp",
- "mpc834x_mds",
- "mpc836x_mds",
- "mpc8540ads",
- "mpc8541cds",
- "mpc8544ds",
- "mpc8548cds",
- "mpc8555cds",
- "mpc8560ads",
- "mpc8568mds",
- "mpc8572ds",
- "mpc8610_hpcd",
- "mpc8641_hpcn",
- "mpc866ads", # Feh. Bad node references...
- "mpc885ads",
- "pq2fads",
- "prpmc2800",
- "ps3",
- "sequoia",
- "walnut",
-);
-
-foreach my $board (@boards) {
- my $dts_file = "$linux_dts_dir/$board.dts";
-
- my $old_dtb_file = "/tmp/$board.dtb.old";
- my $new_dtb_file = "/tmp/$board.dtb.new";
-
- my $cmd_old = "$dtc_old $basic_options -o $old_dtb_file $dts_file";
- my $cmd_new = "$dtc_new $basic_options -o $new_dtb_file $dts_file";
- my $cmd_cmp = "cmp $old_dtb_file $new_dtb_file";
-
- print "------------------------------------------------\n";
- print "OLD: $cmd_old\n";
- unlink($old_dtb_file) if (-f $old_dtb_file);
- system("$cmd_old >& /dev/null");
- my $status = $?;
- if ($status) {
- print " FAILED to run old DTC on $board\n";
- }
-
- print "NEW: $cmd_new\n";
- unlink($new_dtb_file) if (-f $new_dtb_file);
- system("$cmd_new >& /dev/null");
- $status = $?;
- if ($status) {
- print " FAILED to run new DTC on $board\n";
- }
-
- if (-f $old_dtb_file && -f $new_dtb_file) {
- print "CMP: $cmd_cmp\n";
- system($cmd_cmp);
- $status = $?;
- if ($status) {
- print " FAILED $board\n";
- }
- } else {
- printf " FAILED: Missing dtb file\n";
- }
-}
diff --git a/tests/test_label_ref.dts b/tests/test_label_ref.dts
deleted file mode 100644
index 7009c79531a7..000000000000
--- a/tests/test_label_ref.dts
+++ /dev/null
@@ -1,9 +0,0 @@
-/dts-v1/;
-
-/ {
-
-};
-
-label: &handle {
-
-};
diff --git a/tests/test_tree1.dts b/tests/test_tree1.dts
deleted file mode 100644
index 77ea3256947b..000000000000
--- a/tests/test_tree1.dts
+++ /dev/null
@@ -1,46 +0,0 @@
-/dts-v1/;
-
-/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";
- placeholder = "this is a placeholder string", "string2";
- 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 {
- };
- };
-};
diff --git a/tests/test_tree1_delete.dts b/tests/test_tree1_delete.dts
deleted file mode 100644
index b95ef1e7185f..000000000000
--- a/tests/test_tree1_delete.dts
+++ /dev/null
@@ -1,68 +0,0 @@
-/dts-v1/;
-
-/include/ "test_tree1.dts"
-
-/ {
- nonexistant-property = <0xdeadbeef>;
-
- nonexistant-subnode {
- prop-int = <1>;
- };
-
- dellabel: deleted-by-label {
- prop-int = <1>;
- };
-
- subnode@1 {
- delete-this-str = "deadbeef";
- };
-
-};
-
-/ {
- /delete-property/ nonexistant-property;
-
- /delete-node/ nonexistant-subnode;
-
- subnode@1 {
- /delete-property/ delete-this-str;
- };
-};
-
-/delete-node/ &dellabel;
-
-/ {
- /delete-property/ prop-str;
-};
-
-/ {
- prop-str = "hello world";
-};
-
-/ {
- subnode@1 {
- /delete-node/ ss1;
- };
-};
-
-/ {
- subnode@1 {
- ss1 {
- };
- };
-};
-
-/{
- duplabel1: foo1 = "bar";
- duplabel2: foo2 = "bar";
-};
-
-/{
- duplabel1: baz1 = "qux";
- duplabel2: baz2 = "qux";
-};
-
-/{
- /delete-property/ foo1;
- /delete-property/ baz2;
-};
diff --git a/tests/test_tree1_label_noderef.dts b/tests/test_tree1_label_noderef.dts
deleted file mode 100644
index cfe5946f8462..000000000000
--- a/tests/test_tree1_label_noderef.dts
+++ /dev/null
@@ -1,56 +0,0 @@
-/dts-v1/;
-
-/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";
- placeholder = "this is a placeholder string", "string2";
- prop-int = <0xdeadbeef>;
- };
-
- ss1 {
- };
- };
-
- subnode@2 {
- reg = <2>;
- linux,phandle = <0x2000>;
- prop-int = <123456789>;
- #address-cells = <1>;
- #size-cells = <0>;
-
- ssn0: subsubnode@0 {
- phandle = <0x2001>;
- prop-int = <0xbad>;
- };
-
- ss2 {
- };
- };
-};
-
-/* Add label to a noderef */
-ssn1: &ssn0 {
- reg = <0>;
- prop-int = <123456789>;
-};
-
-/* Use the new label for merging */
-&ssn1 {
- prop-int = <0726746425>;
- compatible = "subsubnode2", "subsubnode";
-};
diff --git a/tests/test_tree1_merge.dts b/tests/test_tree1_merge.dts
deleted file mode 100644
index b100c12debb5..000000000000
--- a/tests/test_tree1_merge.dts
+++ /dev/null
@@ -1,51 +0,0 @@
-/dts-v1/;
-/memreserve/ 0xdeadbeef00000000 0x100000;
-/memreserve/ 123456789 010000;
-
-/ {
- compatible = "test_tree1";
- prop-int = "wrong!";
- prop-str = "hello world";
- #address-cells = <1>;
- #size-cells = <0>;
-
- subnode@1 {
- compatible = "subnode1";
- reg = <1>;
-
- subsubnode {
- compatible = "subsubnode1", "subsubnode";
- prop-int = <0xdeadbeef>;
- };
-
- ss1 {
- };
- };
-
- subnode@2 {
- reg = <2>;
- linux,phandle = <0x2000>;
- prop-int = <123456789>;
- #address-cells = <1>;
- #size-cells = <0>;
-
- ss2 {
- };
- };
-};
-
-/ {
- prop-int = <0xdeadbeef>;
- prop-int64 = /bits/ 64 <0xdeadbeef01abcdef>;
- subnode@1 {
- prop-int = [deadbeef];
- };
- subnode@2 {
- ssn0: subsubnode@0 {
- reg = <0>;
- phandle = <0x2001>;
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
- };
- };
-};
diff --git a/tests/test_tree1_merge_labelled.dts b/tests/test_tree1_merge_labelled.dts
deleted file mode 100644
index fcf5dc45aeef..000000000000
--- a/tests/test_tree1_merge_labelled.dts
+++ /dev/null
@@ -1,49 +0,0 @@
-/dts-v1/;
-
-/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>;
- prop-int = <0xbad>;
- };
-
- ss2 {
- };
- };
-};
-
-&ssn0 {
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
-};
diff --git a/tests/test_tree1_merge_path.dts b/tests/test_tree1_merge_path.dts
deleted file mode 100644
index c2ad829727db..000000000000
--- a/tests/test_tree1_merge_path.dts
+++ /dev/null
@@ -1,49 +0,0 @@
-/dts-v1/;
-
-/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>;
- prop-int = <0xbad>;
- };
-
- ss2 {
- };
- };
-};
-
-&{/subnode@2/subsubnode@0} {
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
-};
diff --git a/tests/test_tree1_wrong1.dts b/tests/test_tree1_wrong1.dts
deleted file mode 100644
index 900d38582912..000000000000
--- a/tests/test_tree1_wrong1.dts
+++ /dev/null
@@ -1,43 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 123456789 010000;
-
-/ {
- compatible = "test_tree1";
- prop-int = <0xdeadbeef>;
- 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>;
-
- subsubnode@0 {
- reg = <0>;
- phandle = <0x2001>;
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
- };
-
- ss2 {
- };
- };
-};
diff --git a/tests/test_tree1_wrong2.dts b/tests/test_tree1_wrong2.dts
deleted file mode 100644
index 099752b374aa..000000000000
--- a/tests/test_tree1_wrong2.dts
+++ /dev/null
@@ -1,43 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0xdeadbeef00000000 0x100000;
-/memreserve/ 123456789 010000;
-
-/ {
- compatible = "test_tree1";
- 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>;
-
- subsubnode@0 {
- reg = <0>;
- phandle = <0x2001>;
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
- };
-
- ss2 {
- };
- };
-};
diff --git a/tests/test_tree1_wrong3.dts b/tests/test_tree1_wrong3.dts
deleted file mode 100644
index 069353a9400c..000000000000
--- a/tests/test_tree1_wrong3.dts
+++ /dev/null
@@ -1,43 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0xdeadbeef00000000 0x100000;
-/memreserve/ 123456789 010000;
-
-/ {
- compatible = "test_tree1";
- prop-int = <0xdeadbeef>;
- prop-str = "hello world";
- #address-cells = <1>;
- #size-cells = <0>;
-
- subnode@1 {
- compatible = "subnode1";
- reg = <1>;
-
- subsubnode {
- compatible = "subsubnode1", "subsubnode";
- prop-int = <0xdeadbeef>;
- };
-
- ss1 {
- };
- };
-
- subnode@2 {
- reg = <2>;
- linux,phandle = <0x2000>;
- prop-int = <123456789>;
- #address-cells = <1>;
- #size-cells = <0>;
-
- subsubnode@0 {
- reg = <0>;
- phandle = <0x2001>;
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
- };
-
- ss2 {
- };
- };
-};
diff --git a/tests/test_tree1_wrong4.dts b/tests/test_tree1_wrong4.dts
deleted file mode 100644
index 2c5641618e4a..000000000000
--- a/tests/test_tree1_wrong4.dts
+++ /dev/null
@@ -1,41 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0xdeadbeef00000000 0x100000;
-/memreserve/ 123456789 010000;
-
-/ {
- compatible = "test_tree1";
- prop-int = <0xdeadbeef>;
- 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>;
-
- subsubnode@0 {
- reg = <0>;
- phandle = <0x2001>;
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
- };
- };
-};
diff --git a/tests/test_tree1_wrong5.dts b/tests/test_tree1_wrong5.dts
deleted file mode 100644
index 6ddd72d52e1b..000000000000
--- a/tests/test_tree1_wrong5.dts
+++ /dev/null
@@ -1,44 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0xdeadbeef00000000 0x100000;
-/memreserve/ 123456789 010000;
-
-/ {
- compatible = "test_tree1";
- prop-int = <0xdeadbefe>;
- 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>;
-
- subsubnode@0 {
- reg = <0>;
- phandle = <0x2001>;
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
- };
-
- ss2 {
- };
- };
-};
diff --git a/tests/test_tree1_wrong6.dts b/tests/test_tree1_wrong6.dts
deleted file mode 100644
index 36b4e1f66fe5..000000000000
--- a/tests/test_tree1_wrong6.dts
+++ /dev/null
@@ -1,45 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0xdeadbeef00000000 0x100000;
-/memreserve/ 123456789 010000;
-
-/ {
- compatible = "test_tree1";
- prop-int = <0xdeadbeef>;
- 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 {
- extra-prop;
- };
- };
-
- subnode@2 {
- reg = <2>;
- linux,phandle = <0x2000>;
- prop-int = <123456789>;
- #address-cells = <1>;
- #size-cells = <0>;
-
- subsubnode@0 {
- reg = <0>;
- phandle = <0x2001>;
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
- };
-
- ss2 {
- };
- };
-};
diff --git a/tests/test_tree1_wrong7.dts b/tests/test_tree1_wrong7.dts
deleted file mode 100644
index 54150e6d9fb8..000000000000
--- a/tests/test_tree1_wrong7.dts
+++ /dev/null
@@ -1,46 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0xdeadbeef00000000 0x100000;
-/memreserve/ 123456789 010000;
-
-/ {
- compatible = "test_tree1";
- prop-int = <0xdeadbeef>;
- 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>;
-
- subsubnode@0 {
- reg = <0>;
- phandle = <0x2001>;
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
- };
-
- ss2 {
- extranode {
- };
- };
- };
-};
diff --git a/tests/test_tree1_wrong8.dts b/tests/test_tree1_wrong8.dts
deleted file mode 100644
index 7a28a9f2953a..000000000000
--- a/tests/test_tree1_wrong8.dts
+++ /dev/null
@@ -1,44 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0xdeadbeef00000000 0x100000;
-/memreserve/ 123456789 010001;
-
-/ {
- compatible = "test_tree1";
- prop-int = <0xdeadbeef>;
- 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 {
- linux,phandle = <0x2000>;
- prop-int = <123456789>;
- #address-cells = <1>;
- #size-cells = <0>;
- reg = <2>;
-
- subsubnode@0 {
- reg = <0>;
- phandle = <0x2001>;
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
- };
-
- ss2 {
- };
- };
-};
diff --git a/tests/test_tree1_wrong9.dts b/tests/test_tree1_wrong9.dts
deleted file mode 100644
index f6486fa9337d..000000000000
--- a/tests/test_tree1_wrong9.dts
+++ /dev/null
@@ -1,45 +0,0 @@
-/dts-v1/;
-
-/memreserve/ 0xdeadbeef00000000 0x100000;
-/memreserve/ 123456789 010000;
-/memreserve/ 0 1;
-
-/ {
- compatible = "test_tree1";
- prop-int = <0xdeadbeef>;
- 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>;
-
- subsubnode@0 {
- reg = <0>;
- phandle = <0x2001>;
- compatible = "subsubnode2", "subsubnode";
- prop-int = <0726746425>;
- };
-
- ss2 {
- };
- };
-};
diff --git a/tests/testdata.h b/tests/testdata.h
deleted file mode 100644
index c30f0c8a7698..000000000000
--- a/tests/testdata.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifdef __ASSEMBLY__
-#define ASM_CONST_LL(x) (x)
-#else
-#define ASM_CONST_LL(x) (x##ULL)
-#endif
-
-#define TEST_ADDR_1H ASM_CONST_LL(0xdeadbeef)
-#define TEST_ADDR_1L ASM_CONST_LL(0x00000000)
-#define TEST_ADDR_1 ((TEST_ADDR_1H << 32) | TEST_ADDR_1L)
-#define TEST_SIZE_1H ASM_CONST_LL(0x00000000)
-#define TEST_SIZE_1L ASM_CONST_LL(0x00100000)
-#define TEST_SIZE_1 ((TEST_SIZE_1H << 32) | TEST_SIZE_1L)
-#define TEST_ADDR_2H ASM_CONST_LL(0)
-#define TEST_ADDR_2L ASM_CONST_LL(123456789)
-#define TEST_ADDR_2 ((TEST_ADDR_2H << 32) | TEST_ADDR_2L)
-#define TEST_SIZE_2H ASM_CONST_LL(0)
-#define TEST_SIZE_2L ASM_CONST_LL(010000)
-#define TEST_SIZE_2 ((TEST_SIZE_2H << 32) | TEST_SIZE_2L)
-
-#define TEST_VALUE_1 0xdeadbeef
-#define TEST_VALUE_2 123456789
-
-#define TEST_VALUE64_1H ASM_CONST_LL(0xdeadbeef)
-#define TEST_VALUE64_1L ASM_CONST_LL(0x01abcdef)
-#define TEST_VALUE64_1 ((TEST_VALUE64_1H << 32) | TEST_VALUE64_1L)
-
-#define PHANDLE_1 0x2000
-#define PHANDLE_2 0x2001
-
-#define TEST_STRING_1 "hello world"
-#define TEST_STRING_2 "nastystring: \a\b\t\n\v\f\r\\\""
-#define TEST_STRING_3 "\xde\xad\xbe\xef"
-
-#define TEST_STRING_4_PARTIAL "foobar"
-#define TEST_STRING_4_RESULT "testfoobar"
-
-#define TEST_CHAR1 '\r'
-#define TEST_CHAR2 'b'
-#define TEST_CHAR3 '\0'
-#define TEST_CHAR4 '\''
-#define TEST_CHAR5 '\xff'
-
-#ifndef __ASSEMBLY__
-extern struct fdt_header test_tree1;
-extern struct fdt_header truncated_property;
-extern struct fdt_header bad_node_char;
-extern struct fdt_header bad_node_format;
-extern struct fdt_header bad_prop_char;
-extern struct fdt_header ovf_size_strings;
-#endif /* ! __ASSEMBLY */
diff --git a/tests/tests.h b/tests/tests.h
deleted file mode 100644
index df38b773cc37..000000000000
--- a/tests/tests.h
+++ /dev/null
@@ -1,129 +0,0 @@
-#ifndef TESTS_H
-#define TESTS_H
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase definitions
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#define DEBUG
-
-/* Test return codes */
-#define RC_PASS 0
-#define RC_CONFIG 1
-#define RC_FAIL 2
-#define RC_BUG 99
-
-extern int verbose_test;
-extern char *test_name;
-void test_init(int argc, char *argv[]);
-
-#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1))
-#define PALIGN(p, a) ((void *)ALIGN((unsigned long)(p), (a)))
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-
-#define streq(s1, s2) (strcmp((s1),(s2)) == 0)
-
-/* Each test case must define this function */
-void cleanup(void);
-
-#define verbose_printf(...) \
- if (verbose_test) { \
- printf(__VA_ARGS__); \
- fflush(stdout); \
- }
-#define ERR "ERR: "
-#define ERROR(fmt, args...) fprintf(stderr, ERR fmt, ## args)
-
-
-#define PASS() \
- do { \
- cleanup(); \
- printf("PASS\n"); \
- exit(RC_PASS); \
- } while (0)
-
-#define PASS_INCONCLUSIVE() \
- do { \
- cleanup(); \
- printf("PASS (inconclusive)\n"); \
- exit(RC_PASS); \
- } while (0)
-
-#define IRRELEVANT() \
- do { \
- cleanup(); \
- printf("PASS (irrelevant)\n"); \
- exit(RC_PASS); \
- } while (0)
-
-/* Look out, gcc extension below... */
-#define FAIL(fmt, ...) \
- do { \
- cleanup(); \
- printf("FAIL\t" fmt "\n", ##__VA_ARGS__); \
- exit(RC_FAIL); \
- } while (0)
-
-#define CONFIG(fmt, ...) \
- do { \
- cleanup(); \
- printf("Bad configuration: " fmt "\n", ##__VA_ARGS__); \
- exit(RC_CONFIG); \
- } while (0)
-
-#define TEST_BUG(fmt, ...) \
- do { \
- cleanup(); \
- printf("BUG in testsuite: " fmt "\n", ##__VA_ARGS__); \
- exit(RC_BUG); \
- } while (0)
-
-void check_mem_rsv(void *fdt, int n, uint64_t addr, uint64_t size);
-
-void check_property(void *fdt, int nodeoffset, const char *name,
- int len, const void *val);
-#define check_property_cell(fdt, nodeoffset, name, val) \
- ({ \
- fdt32_t x = cpu_to_fdt32(val); \
- check_property(fdt, nodeoffset, name, sizeof(x), &x); \
- })
-
-
-const void *check_getprop(void *fdt, int nodeoffset, const char *name,
- int len, const void *val);
-#define check_getprop_cell(fdt, nodeoffset, name, val) \
- ({ \
- fdt32_t x = cpu_to_fdt32(val); \
- check_getprop(fdt, nodeoffset, name, sizeof(x), &x); \
- })
-#define check_getprop_64(fdt, nodeoffset, name, val) \
- ({ \
- fdt64_t x = cpu_to_fdt64(val); \
- check_getprop(fdt, nodeoffset, name, sizeof(x), &x); \
- })
-#define check_getprop_string(fdt, nodeoffset, name, s) \
- check_getprop((fdt), (nodeoffset), (name), strlen(s)+1, (s))
-int nodename_eq(const char *s1, const char *s2);
-void *load_blob(const char *filename);
-void *load_blob_arg(int argc, char *argv[]);
-void save_blob(const char *filename, void *blob);
-void *open_blob_rw(void *blob);
-
-#include "util.h"
-
-#endif /* TESTS_H */
diff --git a/tests/tests.sh b/tests/tests.sh
deleted file mode 100755
index 8dda6e105635..000000000000
--- a/tests/tests.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-# Common functions for shell testcases
-
-PASS () {
- echo "PASS"
- exit 0
-}
-
-FAIL () {
- echo "FAIL" "$@"
- exit 2
-}
-
-FAIL_IF_SIGNAL () {
- ret="$1"
- if [ "$ret" -gt 127 ]; then
- signame=$(kill -l $((ret - 128)))
- FAIL "Killed by SIG$signame"
- fi
-}
-
-DTC=../dtc
-DTGET=../fdtget
-DTPUT=../fdtput
-FDTDUMP=../fdtdump
-FDTOVERLAY=../fdtoverlay
-
-verbose_run () {
- if [ -z "$QUIET_TEST" ]; then
- "$@"
- else
- "$@" > /dev/null 2> /dev/null
- fi
-}
-
-verbose_run_check () {
- verbose_run "$@"
- ret="$?"
- FAIL_IF_SIGNAL $ret
- if [ $ret != 0 ]; then
- FAIL "Returned error code $ret"
- fi
-}
-
-verbose_run_log () {
- LOG="$1"
- shift
- "$@" > "$LOG" 2>&1
- ret=$?
- if [ -z "$QUIET_TEST" ]; then
- cat "$LOG" >&2
- fi
- return $ret
-}
-
-verbose_run_log_check () {
- verbose_run_log "$@"
- ret="$?"
- FAIL_IF_SIGNAL $ret
- if [ $ret != 0 ]; then
- FAIL "Returned error code $ret"
- fi
-}
-
diff --git a/tests/testutils.c b/tests/testutils.c
deleted file mode 100644
index 521f4f1eaf99..000000000000
--- a/tests/testutils.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase common utility functions
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#define _GNU_SOURCE /* for strsignal() in glibc. FreeBSD has it either way */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <limits.h>
-#include <string.h>
-#include <errno.h>
-#include <signal.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-
-int verbose_test = 1;
-char *test_name;
-
-void __attribute__((weak)) cleanup(void)
-{
-}
-
-static void sigint_handler(int signum, siginfo_t *si, void *uc)
-{
- cleanup();
- fprintf(stderr, "%s: %s (pid=%d)\n", test_name,
- strsignal(signum), getpid());
- exit(RC_BUG);
-}
-
-void test_init(int argc, char *argv[])
-{
- int err;
- struct sigaction sa_int = {
- .sa_sigaction = sigint_handler,
- };
-
- test_name = argv[0];
-
- err = sigaction(SIGINT, &sa_int, NULL);
- if (err)
- FAIL("Can't install SIGINT handler");
-
- if (getenv("QUIET_TEST"))
- verbose_test = 0;
-
- verbose_printf("Starting testcase \"%s\", pid %d\n",
- test_name, getpid());
-}
-
-void check_mem_rsv(void *fdt, int n, uint64_t addr, uint64_t size)
-{
- int err;
- uint64_t addr_v, size_v;
-
- err = fdt_get_mem_rsv(fdt, n, &addr_v, &size_v);
- if (err < 0)
- FAIL("fdt_get_mem_rsv(%d): %s", n, fdt_strerror(err));
- if ((addr_v != addr) || (size_v != size))
- FAIL("fdt_get_mem_rsv() returned (0x%llx,0x%llx) "
- "instead of (0x%llx,0x%llx)",
- (unsigned long long)addr_v, (unsigned long long)size_v,
- (unsigned long long)addr, (unsigned long long)size);
-}
-
-void check_property(void *fdt, int nodeoffset, const char *name,
- int len, const void *val)
-{
- const struct fdt_property *prop;
- int retlen;
- uint32_t tag, nameoff, proplen;
- const char *propname;
-
- verbose_printf("Checking property \"%s\"...", name);
- prop = fdt_get_property(fdt, nodeoffset, name, &retlen);
- verbose_printf("pointer %p\n", prop);
- if (! prop)
- FAIL("Error retreiving \"%s\" pointer: %s", name,
- fdt_strerror(retlen));
-
- tag = fdt32_to_cpu(prop->tag);
- nameoff = fdt32_to_cpu(prop->nameoff);
- proplen = fdt32_to_cpu(prop->len);
-
- if (tag != FDT_PROP)
- FAIL("Incorrect tag 0x%08x on property \"%s\"", tag, name);
-
- propname = fdt_string(fdt, nameoff);
- if (!propname || !streq(propname, name))
- FAIL("Property name mismatch \"%s\" instead of \"%s\"",
- propname, name);
- if (proplen != retlen)
- FAIL("Length retrieved for \"%s\" by fdt_get_property()"
- " differs from stored length (%d != %d)",
- name, retlen, proplen);
- if (proplen != len)
- FAIL("Size mismatch on property \"%s\": %d insead of %d",
- name, proplen, len);
- if (memcmp(val, prop->data, len) != 0)
- FAIL("Data mismatch on property \"%s\"", name);
-}
-
-const void *check_getprop(void *fdt, int nodeoffset, const char *name,
- int len, const void *val)
-{
- const void *propval;
- int proplen;
-
- propval = fdt_getprop(fdt, nodeoffset, name, &proplen);
- if (! propval)
- FAIL("fdt_getprop(\"%s\"): %s", name, fdt_strerror(proplen));
-
- if (proplen != len)
- FAIL("Size mismatch on property \"%s\": %d insead of %d",
- name, proplen, len);
- if (memcmp(val, propval, len) != 0)
- FAIL("Data mismatch on property \"%s\"", name);
-
- return propval;
-}
-
-int nodename_eq(const char *s1, const char *s2)
-{
- int len = strlen(s2);
-
- if (strncmp(s1, s2, len) != 0)
- return 0;
- if (s1[len] == '\0')
- return 1;
- else if (!memchr(s2, '@', len) && (s1[len] == '@'))
- return 1;
- else
- return 0;
-}
-
-#define CHUNKSIZE 128
-
-void *load_blob(const char *filename)
-{
- char *blob;
- int ret = utilfdt_read_err(filename, &blob);
-
- if (ret)
- CONFIG("Couldn't open blob from \"%s\": %s", filename,
- strerror(ret));
- return blob;
-}
-
-void *load_blob_arg(int argc, char *argv[])
-{
- if (argc != 2)
- CONFIG("Usage: %s <dtb file>", argv[0]);
- return load_blob(argv[1]);
-}
-
-void save_blob(const char *filename, void *fdt)
-{
- int ret = utilfdt_write_err(filename, fdt);
-
- if (ret)
- CONFIG("Couldn't write blob to \"%s\": %s", filename,
- strerror(ret));
-}
-
-void *open_blob_rw(void *blob)
-{
- int err;
- void *buf = blob;
-
- err = fdt_open_into(blob, buf, fdt_totalsize(blob));
- if (err == -FDT_ERR_NOSPACE) {
- /* Ran out of space converting to v17 */
- int newsize = fdt_totalsize(blob) + 8;
-
- buf = xmalloc(newsize);
- err = fdt_open_into(blob, buf, newsize);
- }
- if (err)
- FAIL("fdt_open_into(): %s", fdt_strerror(err));
- return buf;
-}
diff --git a/tests/trees.S b/tests/trees.S
deleted file mode 100644
index 6898cf97320c..000000000000
--- a/tests/trees.S
+++ /dev/null
@@ -1,235 +0,0 @@
-#include <fdt.h>
-#include "testdata.h"
-
-#define FDTLONG(val) \
- .byte ((val) >> 24) & 0xff ; \
- .byte ((val) >> 16) & 0xff ; \
- .byte ((val) >> 8) & 0xff ; \
- .byte (val) & 0xff ;
-
-#define TREE_HDR(tree) \
- .balign 8 ; \
- .globl tree ; \
-tree: \
- FDTLONG(FDT_MAGIC) ; \
- FDTLONG(tree##_end - tree) ; \
- FDTLONG(tree##_struct - tree) ; \
- FDTLONG(tree##_strings - tree) ; \
- FDTLONG(tree##_rsvmap - tree) ; \
- FDTLONG(0x11) ; \
- FDTLONG(0x10) ; \
- FDTLONG(0) ; \
- FDTLONG(tree##_strings_end - tree##_strings) ; \
- FDTLONG(tree##_struct_end - tree##_struct) ;
-
-#define RSVMAP_ENTRY(addrh, addrl, lenh, lenl) \
- FDTLONG(addrh) ; \
- FDTLONG(addrl) ; \
- FDTLONG(lenh) ; \
- FDTLONG(lenl)
-
-#define EMPTY_RSVMAP(tree) \
- .balign 8 ; \
-tree##_rsvmap: ; \
- RSVMAP_ENTRY(0, 0, 0, 0) \
-tree##_rsvmap_end: ;
-
-#define PROPHDR(tree, name, len) \
- FDTLONG(FDT_PROP) ; \
- FDTLONG(len) ; \
- FDTLONG(tree##_##name - tree##_strings) ;
-
-#define PROP_INT(tree, name, val) \
- PROPHDR(tree, name, 4) \
- FDTLONG(val) ;
-
-#define PROP_INT64(tree, name, valh, vall) \
- PROPHDR(tree, name, 8) \
- FDTLONG(valh) ; \
- FDTLONG(vall) ;
-
-#define PROP_STR(tree, name, str) \
- PROPHDR(tree, name, 55f - 54f) \
-54: \
- .string str ; \
-55: \
- .balign 4 ;
-
-#define BEGIN_NODE(name) \
- FDTLONG(FDT_BEGIN_NODE) ; \
- .string name ; \
- .balign 4 ;
-
-#define END_NODE \
- FDTLONG(FDT_END_NODE) ;
-
-#define STRING(tree, name, str) \
-tree##_##name: ; \
- .string str ;
-
- .data
-
- TREE_HDR(test_tree1)
-
- .balign 8
-test_tree1_rsvmap:
- RSVMAP_ENTRY(TEST_ADDR_1H, TEST_ADDR_1L, TEST_SIZE_1H, TEST_SIZE_1L)
- RSVMAP_ENTRY(TEST_ADDR_2H, TEST_ADDR_2L, TEST_SIZE_2H, TEST_SIZE_2L)
- RSVMAP_ENTRY(0, 0, 0, 0)
-test_tree1_rsvmap_end:
-
-test_tree1_struct:
- BEGIN_NODE("")
- PROP_STR(test_tree1, compatible, "test_tree1")
- PROP_INT(test_tree1, prop_int, TEST_VALUE_1)
- PROP_INT64(test_tree1, prop_int64, TEST_VALUE64_1H, TEST_VALUE64_1L)
- PROP_STR(test_tree1, prop_str, TEST_STRING_1)
- PROP_INT(test_tree1, address_cells, 1)
- PROP_INT(test_tree1, size_cells, 0)
-
- BEGIN_NODE("subnode@1")
- PROP_STR(test_tree1, compatible, "subnode1")
- PROP_INT(test_tree1, reg, 1)
- PROP_INT(test_tree1, prop_int, TEST_VALUE_1)
-
- BEGIN_NODE("subsubnode")
- PROP_STR(test_tree1, compatible, "subsubnode1\0subsubnode")
- PROP_STR(test_tree1, placeholder, "this is a placeholder string\0string2")
- PROP_INT(test_tree1, prop_int, TEST_VALUE_1)
- END_NODE
-
- BEGIN_NODE("ss1")
- END_NODE
-
- END_NODE
-
- BEGIN_NODE("subnode@2")
- PROP_INT(test_tree1, reg, 2)
- PROP_INT(test_tree1, linux_phandle, PHANDLE_1)
- PROP_INT(test_tree1, prop_int, TEST_VALUE_2)
- PROP_INT(test_tree1, address_cells, 1)
- PROP_INT(test_tree1, size_cells, 0)
-
- BEGIN_NODE("subsubnode@0")
- PROP_INT(test_tree1, reg, 0)
- PROP_INT(test_tree1, phandle, PHANDLE_2)
- PROP_STR(test_tree1, compatible, "subsubnode2\0subsubnode")
- PROP_INT(test_tree1, prop_int, TEST_VALUE_2)
- END_NODE
-
- BEGIN_NODE("ss2")
- END_NODE
-
- END_NODE
-
- END_NODE
- FDTLONG(FDT_END)
-test_tree1_struct_end:
-
-test_tree1_strings:
- STRING(test_tree1, compatible, "compatible")
- STRING(test_tree1, prop_int, "prop-int")
- STRING(test_tree1, prop_int64, "prop-int64")
- STRING(test_tree1, prop_str, "prop-str")
- STRING(test_tree1, linux_phandle, "linux,phandle")
- STRING(test_tree1, phandle, "phandle")
- STRING(test_tree1, reg, "reg")
- STRING(test_tree1, placeholder, "placeholder")
- STRING(test_tree1, address_cells, "#address-cells")
- STRING(test_tree1, size_cells, "#size-cells")
-test_tree1_strings_end:
-test_tree1_end:
-
-
- TREE_HDR(truncated_property)
- EMPTY_RSVMAP(truncated_property)
-
-truncated_property_struct:
- BEGIN_NODE("")
- PROPHDR(truncated_property, prop_truncated, 4)
- /* Oops, no actual property data here */
-truncated_property_struct_end:
-
-truncated_property_strings:
- STRING(truncated_property, prop_truncated, "truncated")
-truncated_property_strings_end:
-
-truncated_property_end:
-
-
- TREE_HDR(bad_node_char)
- EMPTY_RSVMAP(bad_node_char)
-
-bad_node_char_struct:
- BEGIN_NODE("")
- BEGIN_NODE("sub$node")
- END_NODE
- END_NODE
- FDTLONG(FDT_END)
-bad_node_char_struct_end:
-
-bad_node_char_strings:
-bad_node_char_strings_end:
-bad_node_char_end:
-
-
- TREE_HDR(bad_node_format)
- EMPTY_RSVMAP(bad_node_format)
-
-bad_node_format_struct:
- BEGIN_NODE("")
- BEGIN_NODE("subnode@1@2")
- END_NODE
- END_NODE
- FDTLONG(FDT_END)
-bad_node_format_struct_end:
-
-bad_node_format_strings:
-bad_node_format_strings_end:
-bad_node_format_end:
-
-
- TREE_HDR(bad_prop_char)
- EMPTY_RSVMAP(bad_prop_char)
-
-bad_prop_char_struct:
- BEGIN_NODE("")
- PROP_INT(bad_prop_char, prop, TEST_VALUE_1)
- END_NODE
- FDTLONG(FDT_END)
-bad_prop_char_struct_end:
-
-bad_prop_char_strings:
- STRING(bad_prop_char, prop, "prop$erty")
-bad_prop_char_strings_end:
-bad_prop_char_end:
-
-
- /* overflow_size_strings */
- .balign 8
- .globl ovf_size_strings
-ovf_size_strings:
- FDTLONG(FDT_MAGIC)
- FDTLONG(ovf_size_strings_end - ovf_size_strings)
- FDTLONG(ovf_size_strings_struct - ovf_size_strings)
- FDTLONG(ovf_size_strings_strings - ovf_size_strings)
- FDTLONG(ovf_size_strings_rsvmap - ovf_size_strings)
- FDTLONG(0x11)
- FDTLONG(0x10)
- FDTLONG(0)
- FDTLONG(0xffffffff)
- FDTLONG(ovf_size_strings_struct_end - ovf_size_strings_struct)
- EMPTY_RSVMAP(ovf_size_strings)
-
-ovf_size_strings_struct:
- BEGIN_NODE("")
- PROP_INT(ovf_size_strings, bad_string, 0)
- END_NODE
- FDTLONG(FDT_END)
-ovf_size_strings_struct_end:
-
-ovf_size_strings_strings:
- STRING(ovf_size_strings, x, "x")
- ovf_size_strings_bad_string = ovf_size_strings_strings + 0x10000000
-ovf_size_strings_strings_end:
-ovf_size_strings_end:
diff --git a/tests/truncated_property.c b/tests/truncated_property.c
deleted file mode 100644
index 71619bbce2a9..000000000000
--- a/tests/truncated_property.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Testcase for misbehaviour on a truncated property
- * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-int main(int argc, char *argv[])
-{
- void *fdt = &truncated_property;
- const void *prop;
- int len;
-
- test_init(argc, argv);
-
- prop = fdt_getprop(fdt, 0, "truncated", &len);
- if (prop)
- FAIL("fdt_getprop() succeeded on truncated property");
- if (len != -FDT_ERR_BADSTRUCTURE)
- FAIL("fdt_getprop() failed with \"%s\" instead of \"%s\"",
- fdt_strerror(len), fdt_strerror(-FDT_ERR_BADSTRUCTURE));
-
- PASS();
-}
diff --git a/tests/unit-addr-leading-0s.dts b/tests/unit-addr-leading-0s.dts
deleted file mode 100644
index cc017e9431a2..000000000000
--- a/tests/unit-addr-leading-0s.dts
+++ /dev/null
@@ -1,12 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <1>;
- #size-cells = <1>;
-
- bus {
- node@001 {
- reg = <1 0>;
- };
- };
-};
diff --git a/tests/unit-addr-leading-0x.dts b/tests/unit-addr-leading-0x.dts
deleted file mode 100644
index 74f19678c98c..000000000000
--- a/tests/unit-addr-leading-0x.dts
+++ /dev/null
@@ -1,12 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <1>;
- #size-cells = <1>;
-
- bus {
- node@0x1 {
- reg = <1 0>;
- };
- };
-};
diff --git a/tests/unit-addr-without-reg.dts b/tests/unit-addr-without-reg.dts
deleted file mode 100644
index ac786ebb6bb8..000000000000
--- a/tests/unit-addr-without-reg.dts
+++ /dev/null
@@ -1,9 +0,0 @@
-/dts-v1/;
-
-/ {
- #address-cells = <1>;
- #size-cells = <1>;
-
- node@1 {
- };
-};
diff --git a/tests/utilfdt_test.c b/tests/utilfdt_test.c
deleted file mode 100644
index 274c3d68e953..000000000000
--- a/tests/utilfdt_test.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2011 The Chromium Authors, All Rights Reserved.
- *
- * utilfdt_test - Tests for utilfdt library
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <assert.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <stdarg.h>
-
-#include <libfdt.h>
-#include <util.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-static void check(const char *fmt, int expect_type, int expect_size)
-{
- int type;
- int size;
-
- if (utilfdt_decode_type(fmt, &type, &size))
- FAIL("format '%s': valid format string returned failure", fmt);
- if (expect_type != type)
- FAIL("format '%s': expected type='%c', got type='%c'", fmt,
- expect_type, type);
- if (expect_size != size)
- FAIL("format '%s': expected size=%d, got size=%d", fmt,
- expect_size, size);
-}
-
-static void checkfail(const char *fmt)
-{
- int type;
- int size;
-
- if (!utilfdt_decode_type(fmt, &type, &size))
- FAIL("format '%s': invalid format string returned success",
- fmt);
-}
-
-/**
- * Add the given modifier to each of the valid sizes, and check that we get
- * correct values.
- *
- * \param modifier Modifer string to use as a prefix
- * \param expected_size The size (in bytes) that we expect (ignored for
- * strings)
- */
-static void check_sizes(char *modifier, int expected_size)
-{
- char fmt[10], *ptr;
-
- /* set up a string with a hole in it for the format character */
- if (strlen(modifier) + 2 >= sizeof(fmt))
- FAIL("modifier string '%s' too long", modifier);
- strcpy(fmt, modifier);
- ptr = fmt + strlen(fmt);
- ptr[1] = '\0';
-
- /* now try each format character in turn */
- *ptr = 'i';
- check(fmt, 'i', expected_size);
-
- *ptr = 'u';
- check(fmt, 'u', expected_size);
-
- *ptr = 'x';
- check(fmt, 'x', expected_size);
-
- *ptr = 's';
- check(fmt, 's', -1);
-}
-
-static void test_utilfdt_decode_type(void)
-{
- char fmt[10];
- int ch;
-
- /* check all the valid modifiers and sizes */
- check_sizes("", -1);
- check_sizes("b", 1);
- check_sizes("hh", 1);
- check_sizes("h", 2);
- check_sizes("l", 4);
-
- /* try every other character */
- checkfail("");
- for (ch = ' '; ch < 127; ch++) {
- if (!strchr("iuxs", ch)) {
- *fmt = ch;
- fmt[1] = '\0';
- checkfail(fmt);
- }
- }
-
- /* try a few modifiers at the end */
- checkfail("sx");
- checkfail("ihh");
- checkfail("xb");
-
- /* and one for the doomsday archives */
- checkfail("He has all the virtues I dislike and none of the vices "
- "I admire.");
-}
-
-int main(int argc, char *argv[])
-{
- test_utilfdt_decode_type();
- PASS();
-}
diff --git a/tests/value-labels.c b/tests/value-labels.c
deleted file mode 100644
index 8aced74e28e7..000000000000
--- a/tests/value-labels.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * libfdt - Flat Device Tree manipulation
- * Test labels within values
- * Copyright (C) 2008 David Gibson, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <errno.h>
-
-#include <dlfcn.h>
-
-#include <libfdt.h>
-
-#include "tests.h"
-#include "testdata.h"
-
-struct val_label {
- const char *labelname;
- int propoff;
-};
-
-static struct val_label labels1[] = {
- { "start1", 0 },
- { "mid1", 2 },
- { "end1", -1 },
-};
-
-static struct val_label labels2[] = {
- { "start2", 0 },
- { "innerstart2", 0 },
- { "innermid2", 4 },
- { "innerend2", -1 },
- { "end2", -1 },
-};
-
-static struct val_label labels3[] = {
- { "start3", 0 },
- { "innerstart3", 0 },
- { "innermid3", 1 },
- { "innerend3", -1 },
- { "end3", -1 },
-};
-
-static void check_prop_labels(void *sohandle, void *fdt, const char *name,
- const struct val_label* labels, int n)
-{
- const struct fdt_property *prop;
- const char *p;
- int len;
- int i;
-
- prop = fdt_get_property(fdt, 0, name, &len);
- if (!prop)
- FAIL("Couldn't locate property \"%s\"", name);
-
- p = dlsym(sohandle, name);
- if (!p)
- FAIL("Couldn't locate label symbol \"%s\"", name);
-
- if (p != (const char *)prop)
- FAIL("Label \"%s\" does not point to correct property", name);
-
- for (i = 0; i < n; i++) {
- int off = labels[i].propoff;
-
- if (off == -1)
- off = len;
-
- p = dlsym(sohandle, labels[i].labelname);
- if (!p)
- FAIL("Couldn't locate label symbol \"%s\"", name);
-
- if ((p - prop->data) != off)
- FAIL("Label \"%s\" points to offset %ld instead of %d"
- "in property \"%s\"", labels[i].labelname,
- (long)(p - prop->data), off, name);
- }
-}
-
-int main(int argc, char *argv[])
-{
- void *sohandle;
- void *fdt;
- int err;
-
- test_init(argc, argv);
- if (argc != 2)
- CONFIG("Usage: %s <so file>", argv[0]);
-
- sohandle = dlopen(argv[1], RTLD_NOW);
- if (!sohandle)
- FAIL("Couldn't dlopen() %s", argv[1]);
-
- fdt = dlsym(sohandle, "dt_blob_start");
- if (!fdt)
- FAIL("Couldn't locate \"dt_blob_start\" symbol in %s",
- argv[1]);
-
- err = fdt_check_header(fdt);
- if (err != 0)
- FAIL("%s contains invalid tree: %s", argv[1],
- fdt_strerror(err));
-
-
- check_prop_labels(sohandle, fdt, "prop1", labels1, ARRAY_SIZE(labels1));
- check_prop_labels(sohandle, fdt, "prop2", labels2, ARRAY_SIZE(labels2));
- check_prop_labels(sohandle, fdt, "prop3", labels3, ARRAY_SIZE(labels3));
-
- PASS();
-}
diff --git a/tests/value-labels.dts b/tests/value-labels.dts
deleted file mode 100644
index 490c609f7fb0..000000000000
--- a/tests/value-labels.dts
+++ /dev/null
@@ -1,8 +0,0 @@
-/dts-v1/;
-
-/ {
- prop1: prop1 = start1: "a", mid1: "b" end1:;
- prop2: prop2 = start2: < innerstart2: 0xdeadbeef innermid2: 0xabcd1234 innerend2: > end2:;
- prop3: prop3 = start3: [ innerstart3: ab innermid3: cd innerend3: ] end3:;
-};
-
diff --git a/tests/zero-phandle.dts b/tests/zero-phandle.dts
deleted file mode 100644
index 7997d980d8a1..000000000000
--- a/tests/zero-phandle.dts
+++ /dev/null
@@ -1,7 +0,0 @@
-/dts-v1/;
-
-/ {
- node {
- linux,phandle = <0>;
- };
-};
diff --git a/treesource.c b/treesource.c
deleted file mode 100644
index 2461a3d068a0..000000000000
--- a/treesource.c
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "dtc.h"
-#include "srcpos.h"
-
-extern FILE *yyin;
-extern int yyparse(void);
-extern YYLTYPE yylloc;
-
-struct dt_info *parser_output;
-bool treesource_error;
-
-struct dt_info *dt_from_source(const char *fname)
-{
- parser_output = NULL;
- treesource_error = false;
-
- srcfile_push(fname);
- yyin = current_srcfile->f;
- yylloc.file = current_srcfile;
-
- if (yyparse() != 0)
- die("Unable to parse input tree\n");
-
- if (treesource_error)
- die("Syntax error parsing input tree\n");
-
- return parser_output;
-}
-
-static void write_prefix(FILE *f, int level)
-{
- int i;
-
- for (i = 0; i < level; i++)
- fputc('\t', f);
-}
-
-static bool isstring(char c)
-{
- return (isprint((unsigned char)c)
- || (c == '\0')
- || strchr("\a\b\t\n\v\f\r", c));
-}
-
-static void write_propval_string(FILE *f, struct data val)
-{
- const char *str = val.val;
- int i;
- struct marker *m = val.markers;
-
- assert(str[val.len-1] == '\0');
-
- while (m && (m->offset == 0)) {
- if (m->type == LABEL)
- fprintf(f, "%s: ", m->ref);
- m = m->next;
- }
- fprintf(f, "\"");
-
- for (i = 0; i < (val.len-1); i++) {
- char c = str[i];
-
- switch (c) {
- case '\a':
- fprintf(f, "\\a");
- break;
- case '\b':
- fprintf(f, "\\b");
- break;
- case '\t':
- fprintf(f, "\\t");
- break;
- case '\n':
- fprintf(f, "\\n");
- break;
- case '\v':
- fprintf(f, "\\v");
- break;
- case '\f':
- fprintf(f, "\\f");
- break;
- case '\r':
- fprintf(f, "\\r");
- break;
- case '\\':
- fprintf(f, "\\\\");
- break;
- case '\"':
- fprintf(f, "\\\"");
- break;
- case '\0':
- fprintf(f, "\", ");
- while (m && (m->offset <= (i + 1))) {
- if (m->type == LABEL) {
- assert(m->offset == (i+1));
- fprintf(f, "%s: ", m->ref);
- }
- m = m->next;
- }
- fprintf(f, "\"");
- break;
- default:
- if (isprint((unsigned char)c))
- fprintf(f, "%c", c);
- else
- fprintf(f, "\\x%02hhx", c);
- }
- }
- fprintf(f, "\"");
-
- /* Wrap up any labels at the end of the value */
- for_each_marker_of_type(m, LABEL) {
- assert (m->offset == val.len);
- fprintf(f, " %s:", m->ref);
- }
-}
-
-static void write_propval_cells(FILE *f, struct data val)
-{
- void *propend = val.val + val.len;
- fdt32_t *cp = (fdt32_t *)val.val;
- struct marker *m = val.markers;
-
- fprintf(f, "<");
- for (;;) {
- while (m && (m->offset <= ((char *)cp - val.val))) {
- if (m->type == LABEL) {
- assert(m->offset == ((char *)cp - val.val));
- fprintf(f, "%s: ", m->ref);
- }
- m = m->next;
- }
-
- fprintf(f, "0x%x", fdt32_to_cpu(*cp++));
- if ((void *)cp >= propend)
- break;
- fprintf(f, " ");
- }
-
- /* Wrap up any labels at the end of the value */
- for_each_marker_of_type(m, LABEL) {
- assert (m->offset == val.len);
- fprintf(f, " %s:", m->ref);
- }
- fprintf(f, ">");
-}
-
-static void write_propval_bytes(FILE *f, struct data val)
-{
- void *propend = val.val + val.len;
- const char *bp = val.val;
- struct marker *m = val.markers;
-
- fprintf(f, "[");
- for (;;) {
- while (m && (m->offset == (bp-val.val))) {
- if (m->type == LABEL)
- fprintf(f, "%s: ", m->ref);
- m = m->next;
- }
-
- fprintf(f, "%02hhx", (unsigned char)(*bp++));
- if ((const void *)bp >= propend)
- break;
- fprintf(f, " ");
- }
-
- /* Wrap up any labels at the end of the value */
- for_each_marker_of_type(m, LABEL) {
- assert (m->offset == val.len);
- fprintf(f, " %s:", m->ref);
- }
- fprintf(f, "]");
-}
-
-static void write_propval(FILE *f, struct property *prop)
-{
- int len = prop->val.len;
- const char *p = prop->val.val;
- struct marker *m = prop->val.markers;
- int nnotstring = 0, nnul = 0;
- int nnotstringlbl = 0, nnotcelllbl = 0;
- int i;
-
- if (len == 0) {
- fprintf(f, ";\n");
- return;
- }
-
- for (i = 0; i < len; i++) {
- if (! isstring(p[i]))
- nnotstring++;
- if (p[i] == '\0')
- nnul++;
- }
-
- for_each_marker_of_type(m, LABEL) {
- if ((m->offset > 0) && (prop->val.val[m->offset - 1] != '\0'))
- nnotstringlbl++;
- if ((m->offset % sizeof(cell_t)) != 0)
- nnotcelllbl++;
- }
-
- fprintf(f, " = ");
- if ((p[len-1] == '\0') && (nnotstring == 0) && (nnul < (len-nnul))
- && (nnotstringlbl == 0)) {
- write_propval_string(f, prop->val);
- } else if (((len % sizeof(cell_t)) == 0) && (nnotcelllbl == 0)) {
- write_propval_cells(f, prop->val);
- } else {
- write_propval_bytes(f, prop->val);
- }
-
- fprintf(f, ";\n");
-}
-
-static void write_tree_source_node(FILE *f, struct node *tree, int level)
-{
- struct property *prop;
- struct node *child;
- struct label *l;
-
- write_prefix(f, level);
- for_each_label(tree->labels, l)
- fprintf(f, "%s: ", l->label);
- if (tree->name && (*tree->name))
- fprintf(f, "%s {\n", tree->name);
- else
- fprintf(f, "/ {\n");
-
- for_each_property(tree, prop) {
- write_prefix(f, level+1);
- for_each_label(prop->labels, l)
- fprintf(f, "%s: ", l->label);
- fprintf(f, "%s", prop->name);
- write_propval(f, prop);
- }
- for_each_child(tree, child) {
- fprintf(f, "\n");
- write_tree_source_node(f, child, level+1);
- }
- write_prefix(f, level);
- fprintf(f, "};\n");
-}
-
-
-void dt_to_source(FILE *f, struct dt_info *dti)
-{
- struct reserve_info *re;
-
- fprintf(f, "/dts-v1/;\n\n");
-
- for (re = dti->reservelist; re; re = re->next) {
- struct label *l;
-
- for_each_label(re->labels, l)
- fprintf(f, "%s: ", l->label);
- fprintf(f, "/memreserve/\t0x%016llx 0x%016llx;\n",
- (unsigned long long)re->address,
- (unsigned long long)re->size);
- }
-
- write_tree_source_node(f, dti->dt, 0);
-}
-
diff --git a/util.c b/util.c
deleted file mode 100644
index 9953c32a0244..000000000000
--- a/util.c
+++ /dev/null
@@ -1,474 +0,0 @@
-/*
- * Copyright 2011 The Chromium Authors, All Rights Reserved.
- * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc.
- *
- * util_is_printable_string contributed by
- * Pantelis Antoniou <pantelis.antoniou AT gmail.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <assert.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include "libfdt.h"
-#include "util.h"
-#include "version_gen.h"
-
-char *xstrdup(const char *s)
-{
- int len = strlen(s) + 1;
- char *d = xmalloc(len);
-
- memcpy(d, s, len);
-
- return d;
-}
-
-/* based in part from (3) vsnprintf */
-int xasprintf(char **strp, const char *fmt, ...)
-{
- int n, size = 128; /* start with 128 bytes */
- char *p;
- va_list ap;
-
- /* initial pointer is NULL making the fist realloc to be malloc */
- p = NULL;
- while (1) {
- p = xrealloc(p, size);
-
- /* Try to print in the allocated space. */
- va_start(ap, fmt);
- n = vsnprintf(p, size, fmt, ap);
- va_end(ap);
-
- /* If that worked, return the string. */
- if (n > -1 && n < size)
- break;
- /* Else try again with more space. */
- if (n > -1) /* glibc 2.1 */
- size = n + 1; /* precisely what is needed */
- else /* glibc 2.0 */
- size *= 2; /* twice the old size */
- }
- *strp = p;
- return strlen(p);
-}
-
-char *join_path(const char *path, const char *name)
-{
- int lenp = strlen(path);
- int lenn = strlen(name);
- int len;
- int needslash = 1;
- char *str;
-
- len = lenp + lenn + 2;
- if ((lenp > 0) && (path[lenp-1] == '/')) {
- needslash = 0;
- len--;
- }
-
- str = xmalloc(len);
- memcpy(str, path, lenp);
- if (needslash) {
- str[lenp] = '/';
- lenp++;
- }
- memcpy(str+lenp, name, lenn+1);
- return str;
-}
-
-bool util_is_printable_string(const void *data, int len)
-{
- const char *s = data;
- const char *ss, *se;
-
- /* zero length is not */
- if (len == 0)
- return 0;
-
- /* must terminate with zero */
- if (s[len - 1] != '\0')
- return 0;
-
- se = s + len;
-
- while (s < se) {
- ss = s;
- while (s < se && *s && isprint((unsigned char)*s))
- s++;
-
- /* not zero, or not done yet */
- if (*s != '\0' || s == ss)
- return 0;
-
- s++;
- }
-
- return 1;
-}
-
-/*
- * Parse a octal encoded character starting at index i in string s. The
- * resulting character will be returned and the index i will be updated to
- * point at the character directly after the end of the encoding, this may be
- * the '\0' terminator of the string.
- */
-static char get_oct_char(const char *s, int *i)
-{
- char x[4];
- char *endx;
- long val;
-
- x[3] = '\0';
- strncpy(x, s + *i, 3);
-
- val = strtol(x, &endx, 8);
-
- assert(endx > x);
-
- (*i) += endx - x;
- return val;
-}
-
-/*
- * Parse a hexadecimal encoded character starting at index i in string s. The
- * resulting character will be returned and the index i will be updated to
- * point at the character directly after the end of the encoding, this may be
- * the '\0' terminator of the string.
- */
-static char get_hex_char(const char *s, int *i)
-{
- char x[3];
- char *endx;
- long val;
-
- x[2] = '\0';
- strncpy(x, s + *i, 2);
-
- val = strtol(x, &endx, 16);
- if (!(endx > x))
- die("\\x used with no following hex digits\n");
-
- (*i) += endx - x;
- return val;
-}
-
-char get_escape_char(const char *s, int *i)
-{
- char c = s[*i];
- int j = *i + 1;
- char val;
-
- switch (c) {
- case 'a':
- val = '\a';
- break;
- case 'b':
- val = '\b';
- break;
- case 't':
- val = '\t';
- break;
- case 'n':
- val = '\n';
- break;
- case 'v':
- val = '\v';
- break;
- case 'f':
- val = '\f';
- break;
- case 'r':
- val = '\r';
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- j--; /* need to re-read the first digit as
- * part of the octal value */
- val = get_oct_char(s, &j);
- break;
- case 'x':
- val = get_hex_char(s, &j);
- break;
- default:
- val = c;
- }
-
- (*i) = j;
- return val;
-}
-
-int utilfdt_read_err_len(const char *filename, char **buffp, off_t *len)
-{
- int fd = 0; /* assume stdin */
- char *buf = NULL;
- off_t bufsize = 1024, offset = 0;
- int ret = 0;
-
- *buffp = NULL;
- if (strcmp(filename, "-") != 0) {
- fd = open(filename, O_RDONLY);
- if (fd < 0)
- return errno;
- }
-
- /* Loop until we have read everything */
- buf = xmalloc(bufsize);
- do {
- /* Expand the buffer to hold the next chunk */
- if (offset == bufsize) {
- bufsize *= 2;
- buf = xrealloc(buf, bufsize);
- }
-
- ret = read(fd, &buf[offset], bufsize - offset);
- if (ret < 0) {
- ret = errno;
- break;
- }
- offset += ret;
- } while (ret != 0);
-
- /* Clean up, including closing stdin; return errno on error */
- close(fd);
- if (ret)
- free(buf);
- else
- *buffp = buf;
- *len = bufsize;
- return ret;
-}
-
-int utilfdt_read_err(const char *filename, char **buffp)
-{
- off_t len;
- return utilfdt_read_err_len(filename, buffp, &len);
-}
-
-char *utilfdt_read_len(const char *filename, off_t *len)
-{
- char *buff;
- int ret = utilfdt_read_err_len(filename, &buff, len);
-
- if (ret) {
- fprintf(stderr, "Couldn't open blob from '%s': %s\n", filename,
- strerror(ret));
- return NULL;
- }
- /* Successful read */
- return buff;
-}
-
-char *utilfdt_read(const char *filename)
-{
- off_t len;
- return utilfdt_read_len(filename, &len);
-}
-
-int utilfdt_write_err(const char *filename, const void *blob)
-{
- int fd = 1; /* assume stdout */
- int totalsize;
- int offset;
- int ret = 0;
- const char *ptr = blob;
-
- if (strcmp(filename, "-") != 0) {
- fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666);
- if (fd < 0)
- return errno;
- }
-
- totalsize = fdt_totalsize(blob);
- offset = 0;
-
- while (offset < totalsize) {
- ret = write(fd, ptr + offset, totalsize - offset);
- if (ret < 0) {
- ret = -errno;
- break;
- }
- offset += ret;
- }
- /* Close the file/stdin; return errno on error */
- if (fd != 1)
- close(fd);
- return ret < 0 ? -ret : 0;
-}
-
-
-int utilfdt_write(const char *filename, const void *blob)
-{
- int ret = utilfdt_write_err(filename, blob);
-
- if (ret) {
- fprintf(stderr, "Couldn't write blob to '%s': %s\n", filename,
- strerror(ret));
- }
- return ret ? -1 : 0;
-}
-
-int utilfdt_decode_type(const char *fmt, int *type, int *size)
-{
- int qualifier = 0;
-
- if (!*fmt)
- return -1;
-
- /* get the conversion qualifier */
- *size = -1;
- if (strchr("hlLb", *fmt)) {
- qualifier = *fmt++;
- if (qualifier == *fmt) {
- switch (*fmt++) {
-/* TODO: case 'l': qualifier = 'L'; break;*/
- case 'h':
- qualifier = 'b';
- break;
- }
- }
- }
-
- /* we should now have a type */
- if ((*fmt == '\0') || !strchr("iuxs", *fmt))
- return -1;
-
- /* convert qualifier (bhL) to byte size */
- if (*fmt != 's')
- *size = qualifier == 'b' ? 1 :
- qualifier == 'h' ? 2 :
- qualifier == 'l' ? 4 : -1;
- *type = *fmt++;
-
- /* that should be it! */
- if (*fmt)
- return -1;
- return 0;
-}
-
-void utilfdt_print_data(const char *data, int len)
-{
- int i;
- const char *s;
-
- /* no data, don't print */
- if (len == 0)
- return;
-
- if (util_is_printable_string(data, len)) {
- printf(" = ");
-
- s = data;
- do {
- printf("\"%s\"", s);
- s += strlen(s) + 1;
- if (s < data + len)
- printf(", ");
- } while (s < data + len);
-
- } else if ((len % 4) == 0) {
- const fdt32_t *cell = (const fdt32_t *)data;
-
- printf(" = <");
- for (i = 0, len /= 4; i < len; i++)
- printf("0x%08x%s", fdt32_to_cpu(cell[i]),
- i < (len - 1) ? " " : "");
- printf(">");
- } else {
- const unsigned char *p = (const unsigned char *)data;
- printf(" = [");
- for (i = 0; i < len; i++)
- printf("%02x%s", *p++, i < len - 1 ? " " : "");
- printf("]");
- }
-}
-
-void NORETURN util_version(void)
-{
- printf("Version: %s\n", DTC_VERSION);
- exit(0);
-}
-
-void NORETURN util_usage(const char *errmsg, const char *synopsis,
- const char *short_opts,
- struct option const long_opts[],
- const char * const opts_help[])
-{
- FILE *fp = errmsg ? stderr : stdout;
- const char a_arg[] = "<arg>";
- size_t a_arg_len = strlen(a_arg) + 1;
- size_t i;
- int optlen;
-
- fprintf(fp,
- "Usage: %s\n"
- "\n"
- "Options: -[%s]\n", synopsis, short_opts);
-
- /* prescan the --long opt length to auto-align */
- optlen = 0;
- for (i = 0; long_opts[i].name; ++i) {
- /* +1 is for space between --opt and help text */
- int l = strlen(long_opts[i].name) + 1;
- if (long_opts[i].has_arg == a_argument)
- l += a_arg_len;
- if (optlen < l)
- optlen = l;
- }
-
- for (i = 0; long_opts[i].name; ++i) {
- /* helps when adding new applets or options */
- assert(opts_help[i] != NULL);
-
- /* first output the short flag if it has one */
- if (long_opts[i].val > '~')
- fprintf(fp, " ");
- else
- fprintf(fp, " -%c, ", long_opts[i].val);
-
- /* then the long flag */
- if (long_opts[i].has_arg == no_argument)
- fprintf(fp, "--%-*s", optlen, long_opts[i].name);
- else
- fprintf(fp, "--%s %s%*s", long_opts[i].name, a_arg,
- (int)(optlen - strlen(long_opts[i].name) - a_arg_len), "");
-
- /* finally the help text */
- fprintf(fp, "%s\n", opts_help[i]);
- }
-
- if (errmsg) {
- fprintf(fp, "\nError: %s\n", errmsg);
- exit(EXIT_FAILURE);
- } else
- exit(EXIT_SUCCESS);
-}
diff --git a/util.h b/util.h
deleted file mode 100644
index 66fba8ea709b..000000000000
--- a/util.h
+++ /dev/null
@@ -1,266 +0,0 @@
-#ifndef UTIL_H
-#define UTIL_H
-
-#include <stdarg.h>
-#include <stdbool.h>
-#include <getopt.h>
-
-/*
- * Copyright 2011 The Chromium Authors, All Rights Reserved.
- * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#ifdef __GNUC__
-#define PRINTF(i, j) __attribute__((format (printf, i, j)))
-#define NORETURN __attribute__((noreturn))
-#else
-#define PRINTF(i, j)
-#define NORETURN
-#endif
-
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-
-#define stringify(s) stringify_(s)
-#define stringify_(s) #s
-
-static inline void NORETURN PRINTF(1, 2) die(const char *str, ...)
-{
- va_list ap;
-
- va_start(ap, str);
- fprintf(stderr, "FATAL ERROR: ");
- vfprintf(stderr, str, ap);
- va_end(ap);
- exit(1);
-}
-
-static inline void *xmalloc(size_t len)
-{
- void *new = malloc(len);
-
- if (!new)
- die("malloc() failed\n");
-
- return new;
-}
-
-static inline void *xrealloc(void *p, size_t len)
-{
- void *new = realloc(p, len);
-
- if (!new)
- die("realloc() failed (len=%zd)\n", len);
-
- return new;
-}
-
-extern char *xstrdup(const char *s);
-
-extern int PRINTF(2, 3) xasprintf(char **strp, const char *fmt, ...);
-extern char *join_path(const char *path, const char *name);
-
-/**
- * Check a property of a given length to see if it is all printable and
- * has a valid terminator. The property can contain either a single string,
- * or multiple strings each of non-zero length.
- *
- * @param data The string to check
- * @param len The string length including terminator
- * @return 1 if a valid printable string, 0 if not
- */
-bool util_is_printable_string(const void *data, int len);
-
-/*
- * Parse an escaped character starting at index i in string s. The resulting
- * character will be returned and the index i will be updated to point at the
- * character directly after the end of the encoding, this may be the '\0'
- * terminator of the string.
- */
-char get_escape_char(const char *s, int *i);
-
-/**
- * Read a device tree file into a buffer. This will report any errors on
- * stderr.
- *
- * @param filename The filename to read, or - for stdin
- * @return Pointer to allocated buffer containing fdt, or NULL on error
- */
-char *utilfdt_read(const char *filename);
-
-/**
- * Like utilfdt_read(), but also passes back the size of the file read.
- *
- * @param len If non-NULL, the amount of data we managed to read
- */
-char *utilfdt_read_len(const char *filename, off_t *len);
-
-/**
- * Read a device tree file into a buffer. Does not report errors, but only
- * returns them. The value returned can be passed to strerror() to obtain
- * an error message for the user.
- *
- * @param filename The filename to read, or - for stdin
- * @param buffp Returns pointer to buffer containing fdt
- * @return 0 if ok, else an errno value representing the error
- */
-int utilfdt_read_err(const char *filename, char **buffp);
-
-/**
- * Like utilfdt_read_err(), but also passes back the size of the file read.
- *
- * @param len If non-NULL, the amount of data we managed to read
- */
-int utilfdt_read_err_len(const char *filename, char **buffp, off_t *len);
-
-/**
- * Write a device tree buffer to a file. This will report any errors on
- * stderr.
- *
- * @param filename The filename to write, or - for stdout
- * @param blob Poiner to buffer containing fdt
- * @return 0 if ok, -1 on error
- */
-int utilfdt_write(const char *filename, const void *blob);
-
-/**
- * Write a device tree buffer to a file. Does not report errors, but only
- * returns them. The value returned can be passed to strerror() to obtain
- * an error message for the user.
- *
- * @param filename The filename to write, or - for stdout
- * @param blob Poiner to buffer containing fdt
- * @return 0 if ok, else an errno value representing the error
- */
-int utilfdt_write_err(const char *filename, const void *blob);
-
-/**
- * Decode a data type string. The purpose of this string
- *
- * The string consists of an optional character followed by the type:
- * Modifier characters:
- * hh or b 1 byte
- * h 2 byte
- * l 4 byte, default
- *
- * Type character:
- * s string
- * i signed integer
- * u unsigned integer
- * x hex
- *
- * TODO: Implement ll modifier (8 bytes)
- * TODO: Implement o type (octal)
- *
- * @param fmt Format string to process
- * @param type Returns type found(s/d/u/x), or 0 if none
- * @param size Returns size found(1,2,4,8) or 4 if none
- * @return 0 if ok, -1 on error (no type given, or other invalid format)
- */
-int utilfdt_decode_type(const char *fmt, int *type, int *size);
-
-/*
- * This is a usage message fragment for the -t option. It is the format
- * supported by utilfdt_decode_type.
- */
-
-#define USAGE_TYPE_MSG \
- "<type>\ts=string, i=int, u=unsigned, x=hex\n" \
- "\tOptional modifier prefix:\n" \
- "\t\thh or b=byte, h=2 byte, l=4 byte (default)";
-
-/**
- * Print property data in a readable format to stdout
- *
- * Properties that look like strings will be printed as strings. Otherwise
- * the data will be displayed either as cells (if len is a multiple of 4
- * bytes) or bytes.
- *
- * If len is 0 then this function does nothing.
- *
- * @param data Pointers to property data
- * @param len Length of property data
- */
-void utilfdt_print_data(const char *data, int len);
-
-/**
- * Show source version and exit
- */
-void NORETURN util_version(void);
-
-/**
- * Show usage and exit
- *
- * This helps standardize the output of various utils. You most likely want
- * to use the usage() helper below rather than call this.
- *
- * @param errmsg If non-NULL, an error message to display
- * @param synopsis The initial example usage text (and possible examples)
- * @param short_opts The string of short options
- * @param long_opts The structure of long options
- * @param opts_help An array of help strings (should align with long_opts)
- */
-void NORETURN util_usage(const char *errmsg, const char *synopsis,
- const char *short_opts,
- struct option const long_opts[],
- const char * const opts_help[]);
-
-/**
- * Show usage and exit
- *
- * If you name all your usage variables with usage_xxx, then you can call this
- * help macro rather than expanding all arguments yourself.
- *
- * @param errmsg If non-NULL, an error message to display
- */
-#define usage(errmsg) \
- util_usage(errmsg, usage_synopsis, usage_short_opts, \
- usage_long_opts, usage_opts_help)
-
-/**
- * Call getopt_long() with standard options
- *
- * Since all util code runs getopt in the same way, provide a helper.
- */
-#define util_getopt_long() getopt_long(argc, argv, usage_short_opts, \
- usage_long_opts, NULL)
-
-/* Helper for aligning long_opts array */
-#define a_argument required_argument
-
-/* Helper for usage_short_opts string constant */
-#define USAGE_COMMON_SHORT_OPTS "hV"
-
-/* Helper for usage_long_opts option array */
-#define USAGE_COMMON_LONG_OPTS \
- {"help", no_argument, NULL, 'h'}, \
- {"version", no_argument, NULL, 'V'}, \
- {NULL, no_argument, NULL, 0x0}
-
-/* Helper for usage_opts_help array */
-#define USAGE_COMMON_OPTS_HELP \
- "Print this help and exit", \
- "Print version and exit", \
- NULL
-
-/* Helper for getopt case statements */
-#define case_USAGE_COMMON_FLAGS \
- case 'h': usage(NULL); \
- case 'V': util_version(); \
- case '?': usage("unknown option");
-
-#endif /* UTIL_H */
diff --git a/libfdt/version.lds b/version.lds
index 18fb69f70cd8..18fb69f70cd8 100644
--- a/libfdt/version.lds
+++ b/version.lds