A property’s value is a run of bytes, and the blob does not say what kind. The Devicetree Specification fixes the kind for the names it defines, and the explorer shows a property of one of those names as that kind. The table below is the list the explorer uses, put together from the Specification’s chapters 2, 3 and 4; the descriptions are in our own words. These are the value types:
- string: text ended by a zero byte; stringlist: several of them one after the other.
- u32 and u64: one big-endian number of 4 or 8 bytes; a few properties are either, and the property’s own length says which.
- phandle: a u32 that names a node, the number in that node’s
phandleproperty. - empty: no bytes; the property’s presence is the value.
- prop-encoded-array: a list of cells (u32 words) grouped as the property’s rules say.
Cells, reg and ranges
An address and a size are made of 32-bit cells. How many cells they take is set by the parent node’s
#address-cells and #size-cells (not inherited from further up; if absent, 2 and 1). So the
reg of a node is a list of (address, size) groups of that many cells each, and when the parent’s
#size-cells is 0 (the children of /cpus) there is no size. ranges is a list of
(child address, parent address, length): the child address uses this node’s #address-cells, the parent
address the parent’s, and the length this node’s #size-cells. An empty ranges means the two
address spaces are the same. The viewer cuts the values this way and says when the length does not divide into whole groups.
The names
| Name | Value | What it is |
|---|---|---|
#address-cells | u32 | Cells a child’s address takes in its reg. Default 2. |
#size-cells | u32 | Cells a child’s size takes in its reg. Default 1. |
#interrupt-cells | u32 | Cells one interrupt specifier takes, for the devices this interrupt controller serves. |
reg | cells | (address, size) groups in the parent’s address space; no size when the parent’s #size-cells is 0. In /memory, the memory ranges; initial-mapped-area there is a u64 effective address, a u64 physical address and a u32 size. virtual-reg is a u32 or u64 effective address of the first reg address. |
ranges, dma-ranges | cells, or empty | Address translation between a bus and its parent, as above; dma-ranges for the addresses a device uses for DMA. |
compatible | stringlist | The devices or platforms the node is compatible with, most specific first. A bus that the OS may treat as a simple bus lists "simple-bus". |
model | string | The manufacturer’s model of the board or device. |
phandle | u32 | The number other nodes use to point to this node. Unique in the tree. The viewer shows a phandle with the path of the node that has it, and lists all of them in a table. |
status | string | "okay", "disabled", "reserved", "fail" or "fail-sss". For a CPU: "okay" is running and "disabled" is quiescent. |
name | string | The node’s name. The Specification deprecates it. |
device_type | string | The class of the device: "cpu" or "memory"; deprecated otherwise. |
interrupt-parent | phandle | The node that receives the device’s interrupts. |
interrupts | cells | The device’s interrupt specifiers, #interrupt-cells cells each, taken from the interrupt parent. The viewer finds the parent through the nearest interrupt-parent, else the parent node, walking up to a node that has #interrupt-cells (our reading of the usual rule; the Specification’s summary states the interrupt-parent and parent rule only). If it cannot find the cell count it shows the cells ungrouped and says so. |
interrupt-controller | empty | Marks a node as an interrupt controller. |
interrupt-map | cells | Entries of (child unit address, child specifier, interrupt parent phandle, parent unit address, parent specifier). Each parent’s own cell counts say how long its part is; #address-cells of an interrupt parent that has none is taken as 0. |
bootargs | string | The command line the boot program passes to the operating system, in /chosen. Can be empty. |
stdout-path, stdin-path, linux,stdout-path | string | The path or /aliases name of the console device in /chosen. A colon ends the path (serial0:115200n8); what follows is parameters. linux,stdout-path is the deprecated old name. |
every property of /aliases | string | The name is an alias; the value is the full path of a node. |
clock-frequency, timebase-frequency, bus-frequency | u32 or u64 | A frequency in Hz (a CPU’s clock, its timebase; for a serial device the input of its baud generator). bus-frequency on a CPU is deprecated. |
enable-method, cpu-release-addr | stringlist, u64 | How a disabled CPU is started ("spin-table"), and the physical address of the spin-table entry that releases it. |
next-level-cache, cache-level, cache-size, cache-sets, cache-block-size, cache-line-size, i-cache-*, d-cache-*, tlb-*, cache-unified, tlb-split, power-isa-version, power-isa-*, mmu-type, cache-op-block-size, reservation-granule-size | phandle, u32, string or empty | The CPU node’s cache and TLB properties: sizes and counts are u32, next-level-cache a phandle, cache-unified, tlb-split and the power-isa-* category flags are empty. |
current-speed, reg-shift | u32 | Serial devices: the speed in bits per second, and the byte spacing of the registers (an offset is shifted left by it; default 0). |
local-mac-address, mac-address, max-frame-size, max-speed, address-bits, phy-handle, phy-connection-type | bytes, u32, phandle, string | Network devices: the assigned and last used MAC address (shown as bytes), the largest frame, the fastest speed in Mbit/s, the width of an address (default 48), the PHY’s node and how it is joined to the device. |
label | string | A description of the device for people. |
Overlay properties
Inside an overlay, target (a phandle) and target-path (a string), the properties of __fixups__
and __local_fixups__ and the paths in __symbols__ have their own types. They are described on the
overlays page and come from the dtc project, not from the Specification.
Any other name
A property whose name is not in this table has no type that the file or the Specification gives. The viewer does not decide:
it shows the bytes with three readings side by side, as a string list (when the value ends in a zero byte), as 32-bit cells
(when the length is a multiple of 4) and as hexadecimal bytes. The options bar can instead show every such property in one
reading, chosen by the user. Vendor and subsystem properties (clocks, resets, gpios,
pinctrl-0, dmas) belong to bindings that are not part of the Specification and are
shown this way.