DTS file explanation - aliases

device-tree, embedded, embedded-linux, operating-system, systems-programming

Solution

In the `aliases` section of a DTS, we see entries of the format

`property = &label;`

Each of the entries consists of : a. `property` -- A new property defined here. b. `&label` -- Complete DTS path to the `node` referenced by the `label`.

It basically assigns the value of b to a. Henceforth, the long-name to the node identified by the `label` can be accessed using the shorthand `property`.

Note that the RHS of this assignment is using `label`s and NOT the short-names of the individual nodes. Just like a `label` in C code refers to an instruction on the line where it is defined, a `label` in DTS refers to the individual node (using its complete long path) that is defined on that line.

For example, considering the following DTS, lxr.free-electrons.com/source/arch/powerpc/boot/dts/mpc8313erdb.dts

whose `aliases` section consists of the following :

 20         aliases {
 21                 ethernet0 = &enet0;
 22                 ethernet1 = &enet1;
 23                 serial0 = &serial0;
 24                 serial1 = &serial1;
 25                 pci0 = &pci0;
 26         };

The newly defined properties (LHS)

- `ethernet0`

- `ethernet1`

- `serial0`

- `serial1`

- `pci0`

refer to the corresponding labels (RHS)

- `enet0`

- `enet1`

- `serial0`

- `serial1`

- `pci0`

For example, the property `ethernet0` is now set to `"/soc8313@e0000000/ethernet@24000"` i.e. the node defined on the line where the label `enet0` is defined.

UPDATE :

Why are aliases defined ONLY for `ethernet0`, `serial0` ... ?

Further down the line, the developer intends to access these nodes in the kernel source code. Once an alias is defined in the DTS, a handle to the node it is referring to is obtained by simply searching for it in the `aliases` section rather than searching for it in the entire DTS.

Source: The function find_node_by_alias() in the Linux kernel source.

Why `pci0` node in NOT under the `soc8313` node?

- On MPC8313, the PCI and DMA blocks are interfaced via the IO-Sequencer(IOS). Hence the special treatment as compared to the other blocks (ethernet, I2C, UART) that are connected directly to the system bus.

Problem

I am trying to understand the following snippet from a DTS file. ``` /dts-v1/; / { model = "MPC8313ERDB"; compatible = "MPC8313ERDB", "MPC831xRDB", "MPC83xxRDB"; #address-cells = <1>; #size-cells = <1>; aliases { ethernet0 = &enet0; serial0 = &serial0; serial1 = &serial1; pci0 = &pci0; }; ``` What does the aliases part does? My understanding is as follows. For ethernet0, we can use enet0. But why serial0=&serial0? and serial1 = &serial1 Can anyone brief please? Thanks.

Original source