Difference between revisions of "STM32MP15 U-Boot"

[quality revision] [quality revision]
m (Examples)
m
Applicable for STM32MP15x lines

This article briefly describes the STM32MP15x lines More info.png support in U-Boot.

1 STM32MP15x lines More info.png support[edit]

For detailed information, please read the file in the delivered U-Boot code = doc/board/st/stm32mp1.rst or the stm32mp1 documentation generated by make htlmdocs: board/st/stm32mp1.html.

Also available in official U-Boot Git.

Code :

Configuration Filesfiles:

Warning white.png Warning
The U-Boot defconfig to use for ecosystem release ≥ v4.0.0 More info.png change to stm32mp15_defconfig.

The two next defconfig are kept only for compatibility with upstream, don't use them:

2 Selecting targets : choose defconfig and Device Treedevice tree[edit]

The STM32 MPU boot chain is supported by one U-Boot configuration with defconfig = stm32mp15_defconfig

Several boards are supported with the associated device-tree (same name as kernel):

Board part number Device tree Description
STM32MP157A-EV1 Evaluation board Warning.png stm32mp157a-ev1 MB1262+MB1263
STM32MP157C-EV1 Evaluation board Warning.png stm32mp157c-ev1
STM32MP157D-EV1 Evaluation board More info green.png stm32mp157d-ev1
STM32MP157F-EV1 Evaluation board More info green.png stm32mp157f-ev1
STM32MP157A-DK1 Discovery kit Warning.png stm32mp157a-dk1 MB1272
STM32MP157D-DK1 Discovery kit More info green.png stm32mp157d-dk1
STM32MP157C-DK2 Discovery kit Warning.png stm32mp157c-dk2 MB1272+MB1407
STM32MP157F-DK2 Discovery kit More info green.png stm32mp157f-dk2

For information the 'Evaluation' daughter-board only (MB1263 without MB1262) is also supported by stm32mp15*-ed1.dts device tree files.

3 Compilation[edit]

See U-Boot_overview#U-Boot_build with the defconfig file: stm32mp15_defconfig

 
 make stm32mp15_defconfig
  make DEVICE_TREE=<Device tree> all

The supported variables are:

  • DEVICE_TREE: select in arch/arm/dts the device tree that is used
  • KBUILD_OUTPUT: change the destination directory for the build
  • EXT_DTB: select external device tree

The output files u-boot.dtb and u-boot-nodtb.bin are integrated in FIP.

NotaNote: All the compiled device tree trees are available in $KBUILD_OUTPUT/arch/arm/dts/*.dtb.
You can select them instead of u-boot.dtb without U-Boot recompilation.

The ouput file u-boot.stm32' is only generated for stm32mp15_trusted_defconfig with CONFIG_STM32MP15x_STM32IMAGE; it is not more used for ecosystem release ≥ v4.0.0 More info.png .

4 U-Boot integration in FIP[edit]

U-Boot binary and its associated device tree are part of the FIP binary, created with TF-A Makefile option :

  • BL33_CFG = u-boot.dtb
  • BL33 = u-boot-nodtb.bin

or updated with fiptools:

  • --hw-config u-boot.dtb
  • --nt-fw u-boot-nodtb.bin

Example for FIP update :

 
 fiptool --verbose update --nt-fw u-boot-nodtb.bin \
             --hw-config  u-boot.dtb \
             fip-<board>.bin
 
 DEBUG: Replacing nt-fw with.../u-boot-nodtb.bin
 DEBUG: Replacing hw-config with .../u-boot.dtb
 DEBUG: Metadata size: ... bytes
 DEBUG: Payload size: ... bytes

See How_to_configure_TF-A_FIP for details.

5 Examples[edit]

5.1 STM32MP157F-EV1 Evaluation board More info green.png[edit]

 
 make stm32mp15_defconfig
  make DEVICE_TREE=stm32mp157f-ev1 all

An existing FIP file is updated with:

 
 fiptool --verbose update --nt-fw u-boot-nodtb.bin --hw-config u-boot.dtb \
              fip-stm32mp157f-ev1.bin

5.2 STM32MP157C-EV1 Evaluation board Warning.png[edit]

 
 make stm32mp15_defconfig
  make DEVICE_TREE=stm32mp157c-ev1 all

An existing FIP file is updated with:

 
 fiptool --verbose update --nt-fw u-boot-nodtb.bin --hw-config u-boot.dtb \
              fip-stm32mp157c-ev1.bin

5.3 STM32MP157D-DK1 Discovery kit More info green.png[edit]

 
 make stm32mp15_defconfig
  make DEVICE_TREE=stm32mp157d-dk1 all

An existing FIP file is updated with:

 
 fiptool --verbose update --nt-fw u-boot-nodtb.bin --hw-config u-boot.dtb \
              fip-stm32mp157d-dk1.bin

5.4 STM32MP157C-DK2 Discovery kit Warning.png[edit]

Using export to select the device tree

 
 export KBUILD_OUTPUT=../build/stm32mp15
  export DEVICE_TREE=stm32mp157c-dk2
  make stm32mp15_defconfig
  make all

An existing FIP file is updated with:

 
 fiptool --verbose update --nt-fw $KBUILD_OUTPUT/u-boot-nodtb.bin \
              --hw-config  $KBUILD_OUTPUT/u-boot.dtb \
              fip-stm32mp157c-dk2.bin

5.5 Custom board with external device tree[edit]

 
 make stm32mp15_defconfig
  make EXT_DTB=stm32mp151a-myboard.dtb all

Then you can create or update the FIP


<noinclude>{{ApplicableFor
|MPUs list=STM32MP15x
|MPUs checklist=STM32MP13x, STM32MP15x
}}</noinclude>

This article briefly describes the {{MicroprocessorDevice | device=15}} support in [[U-Boot_overview|U-Boot]].

== {{MicroprocessorDevice | device=15}} support ==

For detailed information, please read the file in the delivered U-Boot code = {{CodeSource | U-Boot | doc/board/st/stm32mp1.rst}} or the stm32mp1 documentation generated by <code>make htlmdocs</code>: {{DocSource | domain=U-Boot | path=board/st/stm32mp1.html}}.
Also available in official U-Boot Git.
Code :
* {{CodeSource | U-Boot | arch/arm/mach-stm32mp}}: arch specific code for {{MicroprocessorDevice | device=Class}}
** {{CodeSource | U-Boot | arch/arm/mach-stm32mp/Kconfig}}: generic configuration for {{MicroprocessorDevice | device=Class}}
** {{CodeSource | U-Boot | arch/arm/mach-stm32mp/Kconfig.15x}}: specific configuration for {{MicroprocessorDevice | device=15}}
* {{CodeSource | U-Boot | board/st/common}}: STMicroelectronics common code
* {{CodeSource | U-Boot | board/st/stm32mp1}}: STMicroelectronics boards support for {{MicroprocessorDevice | device=1}}
* drivers/*/*stm32* : drivers

Configuration Filesfiles:
* defconfig file
** '''{{CodeSource | U-Boot | configs/stm32mp15_defconfig}}''' when FIP is used in OpenSTLinux
* config files
* {{CodeSource | U-Boot | include/configs/stm32mp15_common.h}}: generic for {{MicroprocessorDevice | device=15}}
* {{CodeSource | U-Boot | include/configs/stm32mp15_st_common.h}}: STMicroelectronics board for {{MicroprocessorDevice | device=15}}
* [[STM32_MPU_device_tree]] in {{CodeSource | U-Boot | arch/arm/dts }} : stm32mp15*.dts*
** {{HighlightParam|<Device tree>}}.dts : same as kernel
** {{HighlightParam|<Device tree>}}-u-boot.dtsi : addition for u-boot automatically included in build process

{{Warning | The U-Boot defconfig to use for {{EcosystemRelease | revision=4.0.0 | | range=and after}} change to '''stm32mp15_defconfig'''.}} 

The two next defconfig are kept only for compatibility with upstream, don't use them:
* {{CodeSource | U-Boot | configs/stm32mp15_trusted_defconfig}} with stm32 image header support (CONFIG_STM32MP15x_STM32IMAGE)
* {{CodeSource | U-Boot | configs/stm32mp15_basic_defconfig}} when SPL is used

== Selecting targets : choose defconfig and Device Treedevice tree ==

The [[Boot_chain_overview|STM32 MPU boot chain]] is supported by one [[U-Boot_overview#Kbuild|U-Boot configuration with defconfig]] = {{HighlightParam|stm32mp15_defconfig}}

Several [[STM32MP15_boards|boards]] are supported with the associated device-tree (same name as kernel):

{| class="st-table"
|-
! Board part number  !! {{HighlightParam|Device tree}} !! Description 
|-
| '''{{Board | type=157A-EV1}}''' || {{CodeSource | U-Boot | arch/arm/dts/stm32mp157a-ev1.dts|stm32mp157a-ev1}} || rowspan="4" | [[MB1262]]+[[MB1263]]
|-
| '''{{Board | type=157C-EV1}}''' || {{CodeSource | U-Boot | arch/arm/dts/stm32mp157c-ev1.dts|stm32mp157c-ev1}}
|-
| '''{{Board | type=157D-EV1}}''' || {{CodeSource | U-Boot | arch/arm/dts/stm32mp157d-ev1.dts|stm32mp157d-ev1}}
|-
| '''{{Board | type=157F-EV1}}''' || {{CodeSource | U-Boot | arch/arm/dts/stm32mp157f-ev1.dts|stm32mp157f-ev1}}
|-
| '''{{Board | type=157A-DK1}}''' ||  {{CodeSource | U-Boot | arch/arm/dts/stm32mp157a-dk1.dts|stm32mp157a-dk1}} || rowspan="2" | [[MB1272]]
|-
| '''{{Board | type=157D-DK1}}''' ||  {{CodeSource | U-Boot | arch/arm/dts/stm32mp157d-dk1.dts|stm32mp157d-dk1}}
|-
| '''{{Board | type=157C-DK2}}''' || {{CodeSource | U-Boot | arch/arm/dts/stm32mp157c-dk2.dts|stm32mp157c-dk2}} || rowspan="2" | [[MB1272]]+[[MB1407]] 
|-
| '''{{Board | type=157F-DK2}}''' || {{CodeSource | U-Boot | arch/arm/dts/stm32mp157f-dk2.dts|stm32mp157f-dk2}}
|}

For information the 'Evaluation' daughter-board only ([[MB1263]] without [[MB1262]]) is also supported by stm32mp15*-ed1.dts device tree files.

== Compilation ==
See [[U-Boot_overview#U-Boot_build]] with the defconfig file: {{HighlightParam|stm32mp15_defconfig}}

  {{PC$}} make {{HighlightParam|stm32mp15_defconfig}}
  {{PC$}} make DEVICE_TREE={{HighlightParam|<Device tree>}} all

The supported variables are:
* '''DEVICE_TREE''': select in arch/arm/dts the device tree that is used
* '''KBUILD_OUTPUT''': change the destination directory for the build
* '''EXT_DTB''': select external device tree

The output files {{Highlight|'''u-boot.dtb'''}} and {{Highlight|'''u-boot-nodtb.bin'''}} are integrated in [[#U-Boot integration in FIP|FIP]].
NotaNote: All the compiled device treetrees are available in $KBUILD_OUTPUT/arch/arm/dts/*.dtb.<br/>You can select them instead of {{Highlight|u-boot.dtb}} without U-Boot recompilation.

The ouput file ''u-boot.stm32''' is only generated for {{HighlightParam|stm32mp15_trusted_defconfig}} with  {{HighlightParam|CONFIG_STM32MP15x_STM32IMAGE}}; it is not more used for {{EcosystemRelease | revision=4.0.0 | | range=and after}}.

== U-Boot integration in FIP ==
U-Boot binary and its associated device tree are part of the FIP binary, [[How to configure TF-A FIP#FIP_binary_creation|created]]  with TF-A Makefile option :
* {{HighlightParam|BL33_CFG}} = {{Highlight|'''u-boot.dtb'''}} 
* {{HighlightParam|BL33}} = {{Highlight|'''u-boot-nodtb.bin'''}}
or  [[How to configure TF-A FIP#Updating_U-Boot|updated]]  with <code>fiptools</code>:
* {{HighlightParam|--hw-config}} {{Highlight|'''u-boot.dtb'''}} 
* {{HighlightParam|--nt-fw}} {{Highlight|'''u-boot-nodtb.bin'''}}

Example for FIP update :

  {{PC$}} fiptool {{HighlightParam|--verbose}} {{Highlight|update}} {{HighlightParam|--nt-fw}} {{Highlight|u-boot-nodtb.bin}} \
              {{HighlightParam|--hw-config}}  {{Highlight|u-boot.dtb}} \
              '''fip-<board>.bin'''

  DEBUG: Replacing nt-fw with.../u-boot-nodtb.bin
  DEBUG: Replacing hw-config with .../u-boot.dtb
  DEBUG: Metadata size: ... bytes
  DEBUG: Payload size: ... bytes

See [[How_to_configure_TF-A_FIP]] for details.

== Examples ==

=== {{Board | type=157F-EV1}} ===
  {{PC$}} make {{HighlightParam|stm32mp15_defconfig}}
  {{PC$}} make DEVICE_TREE={{HighlightParam|stm32mp157f-ev1}} all

An existing FIP file is updated with:
  {{PC$}} fiptool --verbose update --nt-fw {{Highlight|u-boot-nodtb.bin}} --hw-config {{Highlight|u-boot.dtb}} \
               fip-{{HighlightParam|stm32mp157f-ev1}}.bin

=== {{Board | type=157C-EV1}} ===
  {{PC$}} make {{HighlightParam|stm32mp15_defconfig}}
  {{PC$}} make DEVICE_TREE={{HighlightParam|stm32mp157c-ev1}} all

An existing FIP file is updated with:
  {{PC$}} fiptool --verbose update --nt-fw {{Highlight|u-boot-nodtb.bin}} --hw-config {{Highlight|u-boot.dtb}} \
               fip-{{HighlightParam|stm32mp157c-ev1}}.bin

=== {{Board | type=157D-DK1}} ===
  {{PC$}} make {{HighlightParam|stm32mp15_defconfig}}
  {{PC$}} make DEVICE_TREE={{HighlightParam|stm32mp157d-dk1}} all

An existing FIP file is updated with:
  {{PC$}} fiptool --verbose update --nt-fw {{Highlight|u-boot-nodtb.bin}} --hw-config {{Highlight|u-boot.dtb}} \
               fip-{{HighlightParam|stm32mp157d-dk1}}.bin

=== {{Board | type=157C-DK2}} ===
Using export to select the device tree
  {{PC$}} export KBUILD_OUTPUT=../build/stm32mp15
  {{PC$}} export DEVICE_TREE={{HighlightParam|stm32mp157c-dk2}}
  {{PC$}} make {{HighlightParam|stm32mp15_defconfig}}
  {{PC$}} make all

An existing FIP file is updated with:
  {{PC$}} fiptool --verbose update --nt-fw {{Highlight|$KBUILD_OUTPUT/u-boot-nodtb.bin}} \
               --hw-config  {{Highlight|$KBUILD_OUTPUT/u-boot.dtb}} \
               fip-{{HighlightParam|stm32mp157c-dk2}}.bin

=== Custom board with external device tree ===
  {{PC$}} make {{HighlightParam|stm32mp15_defconfig}}
  {{PC$}} make EXT_DTB={{HighlightParam|stm32mp151a-myboard.dtb}} all

Then you can create or update the FIP
<noinclude>

[[Category:U-Boot|U-Boot - 3 STM32MP15]]
{{PublicationRequestId | 12895 | 2019-08-01}}</noinclude>
Line 7: Line 7:
 
== {{MicroprocessorDevice | device=15}} support ==
 
== {{MicroprocessorDevice | device=15}} support ==
   
For detailed information, please read the file in the delivered U-Boot code = {{CodeSource | U-Boot | doc/board/st/stm32mp1.rst}} or the stm32mp1 documentation generated by <code>make htlmdocs</code>: {{DocSource | domain=U-Boot | path=board/st/stm32mp1.html}}.
+
For detailed information, read the file in the delivered U-Boot code = {{CodeSource | U-Boot | doc/board/st/stm32mp1.rst}} or the documentation generated by <code>make htlmdocs</code>: {{DocSource | domain=U-Boot | path=board/st/stm32mp1.html}}.
 
 
Also available in official U-Boot Git.
 
   
 
Code :
 
Code :
Line 19: Line 17:
 
* drivers/*/*stm32* : drivers
 
* drivers/*/*stm32* : drivers
   
Configuration Files:
+
Configuration files:
 
* defconfig file
 
* defconfig file
 
** '''{{CodeSource | U-Boot | configs/stm32mp15_defconfig}}''' when FIP is used in OpenSTLinux
 
** '''{{CodeSource | U-Boot | configs/stm32mp15_defconfig}}''' when FIP is used in OpenSTLinux
Line 35: Line 33:
 
* {{CodeSource | U-Boot | configs/stm32mp15_basic_defconfig}} when SPL is used
 
* {{CodeSource | U-Boot | configs/stm32mp15_basic_defconfig}} when SPL is used
   
== Selecting targets : choose defconfig and Device Tree ==
+
== Selecting targets : choose defconfig and device tree ==
   
 
The [[Boot_chain_overview|STM32 MPU boot chain]] is supported by one [[U-Boot_overview#Kbuild|U-Boot configuration with defconfig]] = {{HighlightParam|stm32mp15_defconfig}}
 
The [[Boot_chain_overview|STM32 MPU boot chain]] is supported by one [[U-Boot_overview#Kbuild|U-Boot configuration with defconfig]] = {{HighlightParam|stm32mp15_defconfig}}
Line 77: Line 75:
 
The output files {{Highlight|'''u-boot.dtb'''}} and {{Highlight|'''u-boot-nodtb.bin'''}} are integrated in [[#U-Boot integration in FIP|FIP]].
 
The output files {{Highlight|'''u-boot.dtb'''}} and {{Highlight|'''u-boot-nodtb.bin'''}} are integrated in [[#U-Boot integration in FIP|FIP]].
   
Nota: All the compiled device tree are available in $KBUILD_OUTPUT/arch/arm/dts/*.dtb.<br/>You can select them instead of {{Highlight|u-boot.dtb}} without U-Boot recompilation.
+
Note: All the compiled device trees are available in $KBUILD_OUTPUT/arch/arm/dts/*.dtb.<br/>You can select them instead of {{Highlight|u-boot.dtb}} without U-Boot recompilation.
   
 
The ouput file ''u-boot.stm32''' is only generated for {{HighlightParam|stm32mp15_trusted_defconfig}} with  {{HighlightParam|CONFIG_STM32MP15x_STM32IMAGE}}; it is not more used for {{EcosystemRelease | revision=4.0.0 | | range=and after}}.
 
The ouput file ''u-boot.stm32''' is only generated for {{HighlightParam|stm32mp15_trusted_defconfig}} with  {{HighlightParam|CONFIG_STM32MP15x_STM32IMAGE}}; it is not more used for {{EcosystemRelease | revision=4.0.0 | | range=and after}}.