![]() |
This page is a candidate for renaming (move). The requested new name is: STM32MP1 device tree . The supplied reason is: introduce MP2 device tree article . -- Registered User (-) 16:55, 2 November 2023 (CET). Wiki maintainers: remember to update the pages that link this page before renaming (moving) it. |
This article describes how the device tree files for STM32MPU are organized for Linux®, U-Boot and TF-A but also how they are organized when they are generated from STM32CubeMX.
1. Purpose and scope[edit source]
This article shows the structure of the device tree files as it is implemented in OpenSTLinux for Linux® kernel, U-Boot, TF-A and OP-TEE.
The purpose of this article is not to explain the device tree concept and the device tree configuration supported by STM32MP1 series. A good knowledge of the concept is a prerequisite before reading this article. The articles regarding the configuration can be read afterwards.
2. Device tree structure[edit source]
The device tree files are used during boot time by the FSBL (TF-A), the secure OS (OP-TEE), the SSBL (U-Boot) and, at run time, by the Linux kernel.
2.1. STM32MP1 series[edit source]
These files are stored in different github repositories (one for each first level bullet below), but source code reuse is maximized from one repository to another:
- The initial device tree files supporting STM32MP1 series are created in the Linux kernel.
- The source code path is arch/arm/boot/dts/stm32mp1* .
- In U-Boot, Linux files are copied and overloaded with U-Boot properties.
- The source code path is arch/arm/dts/stm32mp1* .
- The U-Boot add-ons file, "<dts-file-name>-u-boot.dtsi", is automatically included at the end of "<board>.dts" during device tree compilation: this is a generic U-Boot Makefile behavior, see binman.rst .
- In TF-A, Linux files are copied, completed with the security configuration (firewalling) and the DDR configuration. TF-A BL2 is applying some 'delete-property' on useless nodes, to lighten the final dtb file.
- The source code path is fdts/stm32mp1* .
- In OP-TEE, Linux files are reused.
- The source code path is core/arch/arm/dts/stm32mp1* .
The figure below shows the device tree files structure for Linux, U-Boot, TF-A and OP-TEE:
![Device tree for Linux U-Boot TF-A OP-TEE.png](/stm32mpu/nsfr_img_auth.php/3/3e/Device_tree_for_Linux_U-Boot_TF-A_OP-TEE.png)
2.2. STM32MP2 series[edit source]
These files are stored in different github repositories (one for each first level bullet below), but source code reuse is maximized from one repository to another:
- The initial device tree files supporting STM32MP2 series are created in the Linux kernel.
- The source code path is arch/arm64/boot/dts/st/stm32mp2* .
- In U-Boot, Linux files are copied and overloaded with U-Boot properties.
- The source code path is arch/arm/dts/stm32mp2* .
- The U-Boot add-ons file, "<dts-file-name>-u-boot.dtsi", is automatically included at the end of "<board>.dts" during device tree compilation: this is a generic U-Boot Makefile behavior, see binman.rst .
- In TF-A, Linux files are copied, completed with the security configuration (firewalling) and limited clock tree required for boot and the DDR configuration. TF-A BL2 is applying some 'delete-property' on useless nodes, to lighten the final dtb file. TF-A BL3 device tree is a subset from TF-A BL2 one.
- The source code path is fdts/stm32mp2* .
- In OP-TEE, Linux files are reused, completed with clock tree and security configuration required to configure the complete system.
- The source code path is core/arch/arm/dts/stm32mp2* .
The figure below shows the device tree files structure for Linux, U-Boot, TF-A and OP-TEE:
![Device tree for Linux U-Boot TF-A OP-TEE STM32MP2.png](/stm32mpu/nsfr_img_auth.php/9/90/Device_tree_for_Linux_U-Boot_TF-A_OP-TEE_STM32MP2.png)
![]() |
|
3. STM32CubeMX generated device tree[edit source]
STM32CubeMX can help to generate the device tree files for a given project, for the various software components:
- TF-A: STM32CubeMX generates three files:
- 'stm32mp15-mx.dtsi' is equivalent to 'stm32mp1*-<DDR type>.dtsi' in the diagram above, embedding DDR settings
- 'stm32mp1*-<your_project_name>-mx.dts' is the board device tree file, that includes all dtsi files (directly or not)
- 'stm32mp1*-<your_project_name>-mx-fw-config.dts' file corresponds to the TF-A firmware configuration and is out of the file structure shown in the previous paragraph
- U-Boot:
- 'stm32mp1*-<your_project_name>-mx.dts' is the board device tree file, that includes all dtsi files (directly or not)
- 'stm32mp1*-<your_project_name>-mx-u-boot.dts' is equivalent to the '<board>-u-boot.dtsi' file in the diagram above
- Linux:
- 'stm32mp1*-<your_project_name>-mx.dts' is the board device tree file, that includes all dtsi files (directly or not)
- OP-TEE:
- 'stm32mp1*-<your_project_name>-mx.dts' is the board device tree file, that includes all dtsi files (directly or not)
The device tree files generated by STM32CubeMX can be built with the Developer Package or Distribution Package:
- Use the Developer Package to store the STM32CubeMX-generated files in the folder of your choice. Then, manually copy or link them into Linux, U-Boot and TF-A device tree folders (see Device tree structure). Do not forget to add your device tree file name in ../Makefile.sdk (for TF-A SDK and U-Boot SDK) and in arch/arm/boot/dts/Makefile (for Linux kernel SDK), before compiling them as explained in How to cross-compile with the Developer Package.
- Use the Distribution Package to store the STM32CubeMX-generated files in meta-st/meta-st-stm32mp-addons/mx, as explained in the How to create your own machine article. This article also describes how to build the complete image. Examples of Linux (device tree), U-Boot and TF-A individual compiling can be found in the How to cross-compile with the Distribution Package article.