21fdc27a05
This is a split merge because of non-uniform licensing of the DTC package contents and the way these components will be used in the FreeBSD environment. The original DTC package is composed of the following two major pieces: 1. sys/contrib/libfdt (BSD [dual] license) 2. contrib/dtc (GPLv2) The libfdt component is going to be shared in all aspects of the environment: - /boot/loader - kernel - dtc (the device tree compiler proper, userspace tool)
111 lines
3.5 KiB
Plaintext
111 lines
3.5 KiB
Plaintext
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 32-bit integer cells, as
|
|
NUL-terminated strings, as bytestrings or a combination of these.
|
|
|
|
* Arrays of cells are represented by angle brackets surrounding a
|
|
space separated list of C-style integers
|
|
|
|
e.g. interrupts = <17 0xc>;
|
|
|
|
* A 64-bit value is represented with two 32-bit cells.
|
|
|
|
e.g. clock-frequency = <0x00000001 0x00000000>;
|
|
|
|
* 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 a cell 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} >;
|
|
|
|
* Outside a cell 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 cells of a cell 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>
|