033089f290
Elements of size 8, 16, 32, and 64 bits are supported. The new /bits/ syntax was selected so as to not pollute the reserved keyword space with uint8/uint16/... type names. With this patch the following property assignment: property = /bits/ 16 <0x1234 0x5678 0x0 0xffff>; is equivalent to: property = <0x12345678 0x0000ffff>; It is now also possible to directly specify a 64 bit literal in a cell list, also known as an array using: property = /bits/ 64 <0xdeadbeef00000000>; It is an error to attempt to store a literal into an element that is too small to hold the literal, and the compiler will generate an error when it detects this. For instance: property = /bits/ 8 <256>; Will fail to compile. It is also an error to attempt to place a reference in a non 32-bit element. The documentation has been changed to reflect that the cell list is now an array of elements that can be of sizes other than the default 32-bit cell size. The sized_cells test tests the creation and access of 8, 16, 32, and 64-bit sized elements. It also tests that the creation of two properties, one with 16 bit elements and one with 32 bit elements result in the same property contents. Signed-off-by: Anton Staaf <robotboy@chromium.org> Acked-by: David Gibson <david@gibson.dropbear.id.au>
122 lines
4.2 KiB
Text
122 lines
4.2 KiB
Text
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>
|