| .. SPDX-License-Identifier: GPL-2.0+ |
| |
| Devicetree Introduction |
| ======================= |
| |
| U-Boot uses a devicetree for configuration. This includes the devices used by |
| the board, the format of the image created with binman, which UART to use for |
| the console, public keys used for secure boot and many other things. |
| |
| See :doc:`control` for more information. |
| |
| Why does U-Boot put <thing> in the devicetree? |
| ---------------------------------------------- |
| |
| This question comes up a lot with people new to U-Boot, particular those coming |
| from Linux who are used to quite strict rules about what can go into the |
| devicetree. |
| |
| U-Boot uses the same devicetree as Linux but adds more things necessary for the |
| bootloader environment (see :ref:`dttweaks`). |
| |
| U-Boot does not have a user space to provide policy and configuration. It cannot |
| do what Linux does and run programs and look up filesystems to figure out how to |
| boot. So configuration and runtime information goes into the devicetree in |
| U-Boot. |
| |
| Of course it is possible to: |
| |
| - add tables into the rodata section of the U-Boot binary |
| - append some info to the end of U-Boot in a different format |
| - modify the linker script to bring in a file with some info in it |
| - put things in ACPI tables |
| - link in a UEFI hand-off block structure and put things in there |
| |
| but *please don't*. In general, devicetree is the sane place to hold U-Boot's |
| configuration. |
| |
| So, please, do NOT ask why U-Boot puts <thing> in the devicetree. It is the only |
| place it can go. It is a highly suitable data structure for just about anything |
| that U-Boot needs to know at runtime. |
| |
| Note, it is possible to use platdata directly so drivers avoid devicetreee in |
| SPL. But of-platdata is the modern way of avoiding devicetree overhead, so |
| please use that instead. |