Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/gpl2/dtc/dist Import of DTC from DTC version 1.4.4



details:   https://anonhg.NetBSD.org/src/rev/4503dd87ae57
branches:  trunk
changeset: 354240:4503dd87ae57
user:      skrll <skrll%NetBSD.org@localhost>
date:      Thu Jun 08 15:59:15 2017 +0000

description:
Import of DTC from DTC version 1.4.4

diffstat:

 external/gpl2/dtc/dist/Documentation/dt-object-internal.txt        |  310 ++++++
 external/gpl2/dtc/dist/Documentation/manual.txt                    |   23 +-
 external/gpl2/dtc/dist/Makefile                                    |   32 +-
 external/gpl2/dtc/dist/README                                      |    4 -
 external/gpl2/dtc/dist/checks.c                                    |  481 +++++----
 external/gpl2/dtc/dist/convert-dtsv0-lexer.l                       |    6 +-
 external/gpl2/dtc/dist/dtc.c                                       |   78 +-
 external/gpl2/dtc/dist/fdtget.c                                    |   14 +-
 external/gpl2/dtc/dist/fstree.c                                    |    7 +-
 external/gpl2/dtc/dist/livetree.c                                  |  321 ++++++-
 external/gpl2/dtc/dist/srcpos.h                                    |   14 +-
 external/gpl2/dtc/dist/tests/.gitignore                            |    4 +
 external/gpl2/dtc/dist/tests/Makefile.tests                        |    5 +-
 external/gpl2/dtc/dist/tests/add_subnode_with_nops.c               |    2 +
 external/gpl2/dtc/dist/tests/addr_size_cells.c                     |    2 +
 external/gpl2/dtc/dist/tests/appendprop1.c                         |    2 +
 external/gpl2/dtc/dist/tests/appendprop2.c                         |    2 +
 external/gpl2/dtc/dist/tests/asm_tree_dump.c                       |    2 +
 external/gpl2/dtc/dist/tests/bad-octal-literal.dts                 |    5 +
 external/gpl2/dtc/dist/tests/boot-cpuid.c                          |    2 +
 external/gpl2/dtc/dist/tests/char_literal.c                        |    4 +-
 external/gpl2/dtc/dist/tests/check_path.c                          |   85 +
 external/gpl2/dtc/dist/tests/del_node.c                            |    2 +
 external/gpl2/dtc/dist/tests/del_property.c                        |    2 +
 external/gpl2/dtc/dist/tests/division-by-zero.dts                  |    6 +
 external/gpl2/dtc/dist/tests/dtb_reverse.c                         |    2 +
 external/gpl2/dtc/dist/tests/dtbs_equal_ordered.c                  |    4 +-
 external/gpl2/dtc/dist/tests/dtbs_equal_unordered.c                |   12 +-
 external/gpl2/dtc/dist/tests/dumptrees.c                           |    5 +-
 external/gpl2/dtc/dist/tests/extra-terminating-null.c              |    2 +
 external/gpl2/dtc/dist/tests/find_property.c                       |    2 +
 external/gpl2/dtc/dist/tests/get_alias.c                           |    2 +
 external/gpl2/dtc/dist/tests/get_mem_rsv.c                         |    2 +
 external/gpl2/dtc/dist/tests/get_name.c                            |    2 +
 external/gpl2/dtc/dist/tests/get_path.c                            |    2 +
 external/gpl2/dtc/dist/tests/get_phandle.c                         |    8 +
 external/gpl2/dtc/dist/tests/getprop.c                             |    2 +
 external/gpl2/dtc/dist/tests/incbin.c                              |    2 +
 external/gpl2/dtc/dist/tests/integer-expressions.c                 |    6 +-
 external/gpl2/dtc/dist/tests/line_directives.dts                   |    5 +
 external/gpl2/dtc/dist/tests/node_check_compatible.c               |    2 +
 external/gpl2/dtc/dist/tests/node_offset_by_compatible.c           |    2 +
 external/gpl2/dtc/dist/tests/node_offset_by_phandle.c              |    2 +
 external/gpl2/dtc/dist/tests/node_offset_by_prop_value.c           |    4 +-
 external/gpl2/dtc/dist/tests/nop_node.c                            |    2 +
 external/gpl2/dtc/dist/tests/nop_property.c                        |    2 +
 external/gpl2/dtc/dist/tests/nopulate.c                            |    4 +-
 external/gpl2/dtc/dist/tests/notfound.c                            |    2 +
 external/gpl2/dtc/dist/tests/nul-in-escape.dts                     |  Bin 
 external/gpl2/dtc/dist/tests/nul-in-line-info1.dts                 |  Bin 
 external/gpl2/dtc/dist/tests/nul-in-line-info2.dts                 |    1 +
 external/gpl2/dtc/dist/tests/open_pack.c                           |    2 +
 external/gpl2/dtc/dist/tests/overlay.c                             |  235 ++++
 external/gpl2/dtc/dist/tests/overlay_bad_fixup.c                   |   72 +
 external/gpl2/dtc/dist/tests/overlay_bad_fixup_bad_index.dts       |   14 +
 external/gpl2/dtc/dist/tests/overlay_bad_fixup_base.dtsi           |   18 +
 external/gpl2/dtc/dist/tests/overlay_bad_fixup_empty.dts           |   14 +
 external/gpl2/dtc/dist/tests/overlay_bad_fixup_empty_index.dts     |   14 +
 external/gpl2/dtc/dist/tests/overlay_bad_fixup_index_trailing.dts  |   14 +
 external/gpl2/dtc/dist/tests/overlay_bad_fixup_path_empty_prop.dts |   14 +
 external/gpl2/dtc/dist/tests/overlay_bad_fixup_path_only.dts       |   14 +
 external/gpl2/dtc/dist/tests/overlay_bad_fixup_path_only_sep.dts   |   14 +
 external/gpl2/dtc/dist/tests/overlay_bad_fixup_path_prop.dts       |   14 +
 external/gpl2/dtc/dist/tests/overlay_base.dts                      |   21 +
 external/gpl2/dtc/dist/tests/overlay_base_manual_symbols.dts       |   25 +
 external/gpl2/dtc/dist/tests/overlay_overlay.dts                   |   86 +
 external/gpl2/dtc/dist/tests/overlay_overlay_manual_fixups.dts     |  112 ++
 external/gpl2/dtc/dist/tests/overlay_overlay_no_fixups.dts         |   82 +
 external/gpl2/dtc/dist/tests/overlay_overlay_simple.dts            |   12 +
 external/gpl2/dtc/dist/tests/parent_offset.c                       |    2 +
 external/gpl2/dtc/dist/tests/path-references.c                     |    2 +
 external/gpl2/dtc/dist/tests/path_offset.c                         |    2 +
 external/gpl2/dtc/dist/tests/path_offset_aliases.c                 |    2 +
 external/gpl2/dtc/dist/tests/phandle_format.c                      |    2 +
 external/gpl2/dtc/dist/tests/property_iterate.c                    |   99 ++
 external/gpl2/dtc/dist/tests/property_iterate.dts                  |   23 +
 external/gpl2/dtc/dist/tests/propname_escapes.c                    |    2 +
 external/gpl2/dtc/dist/tests/references.c                          |    6 +-
 external/gpl2/dtc/dist/tests/reg-without-unit-addr.dts             |   10 +
 external/gpl2/dtc/dist/tests/root_node.c                           |    2 +
 external/gpl2/dtc/dist/tests/run_tests.sh                          |  119 ++
 external/gpl2/dtc/dist/tests/rw_tree1.c                            |    2 +
 external/gpl2/dtc/dist/tests/set_name.c                            |    2 +
 external/gpl2/dtc/dist/tests/setprop.c                             |    4 +-
 external/gpl2/dtc/dist/tests/setprop_inplace.c                     |   12 +
 external/gpl2/dtc/dist/tests/sized_cells.c                         |    8 +-
 external/gpl2/dtc/dist/tests/string_escapes.c                      |    2 +
 external/gpl2/dtc/dist/tests/stringlist.c                          |    2 +
 external/gpl2/dtc/dist/tests/subnode_iterate.c                     |   14 +-
 external/gpl2/dtc/dist/tests/subnode_offset.c                      |    2 +
 external/gpl2/dtc/dist/tests/supernode_atdepth_offset.c            |    2 +
 external/gpl2/dtc/dist/tests/sw_tree1.c                            |    6 +-
 external/gpl2/dtc/dist/tests/test_label_ref.dts                    |    9 +
 external/gpl2/dtc/dist/tests/test_tree1.dts                        |   44 +-
 external/gpl2/dtc/dist/tests/test_tree1_delete.dts                 |    2 +-
 external/gpl2/dtc/dist/tests/testdata.h                            |    6 +
 external/gpl2/dtc/dist/tests/testutils.c                           |    2 +
 external/gpl2/dtc/dist/tests/trees.S                               |   31 +
 external/gpl2/dtc/dist/tests/truncated_property.c                  |    2 +
 external/gpl2/dtc/dist/tests/unit-addr-without-reg.dts             |    9 +
 external/gpl2/dtc/dist/tests/utilfdt_test.c                        |    2 +
 external/gpl2/dtc/dist/tests/value-labels.c                        |    8 +-
 external/gpl2/dtc/dist/treesource.c                                |   22 +-
 external/gpl2/dtc/dist/util.c                                      |   44 +-
 104 files changed, 2467 insertions(+), 312 deletions(-)

diffs (truncated from 4430 to 300 lines):

diff -r 7a1433118663 -r 4503dd87ae57 external/gpl2/dtc/dist/Documentation/dt-object-internal.txt
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/external/gpl2/dtc/dist/Documentation/dt-object-internal.txt       Thu Jun 08 15:59:15 2017 +0000
@@ -0,0 +1,310 @@
+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 {



Home | Main Index | Thread Index | Old Index