Difference between revisions of "STM32MP15 U-Boot"

[unchecked revision] [quality revision]
m (U-Boot integration in FIP)
m (U-Boot integration in FIP)
 

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[1].

Also available in official U-Boot Git.

Code :

Configuration Files:

2 Selecting targets : choose defconfig and Device Tree[edit]

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

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

Board part number Device tree Description
STM32MP157A-EV1 Evaluation board More info green.png stm32mp157a-ev1 MB1262+MB1263
STM32MP157C-EV1 Evaluation board More info green.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 More info green.png stm32mp157a-dk1 MB1272
STM32MP157D-DK1 Discovery kit More info green.png stm32mp157d-dk1
STM32MP157C-DK2 Discovery kit More info green.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_trusted_defconfig

 
PC $> make stm32mp15_trusted_defconfig
 PC $> 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.

Nota: All the compiled device tree 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 is u-boot.stm32 for ecosystem release ≤ v2.1.0 or if you activate CONFIG_STM32MP15x_STM32IMAGE in your defconfig for ecosystem release v3.0.0 More info.png (this temporary option is only introduced to facilitate the FIP migration but it will be removed in the next EcosystemRelease).

With FIP support for ecosystem release v3.0.0 More info.png , the offset on U-Boot environment in NOR are defined in the defconfig with:

 CONFIG_ENV_OFFSET=0x480000
 CONFIG_ENV_OFFSET_REDUND=0x4C0000

Without FIP support these MTD partition offsets in NOR for default flashlayout change and to reuse the ecosystem release ≤ v2.1.0 flashlayout the defconfig options become:

 CONFIG_STM32MP15x_STM32IMAGE=y
 CONFIG_ENV_OFFSET=0x280000
 CONFIG_ENV_OFFSET_REDUND=0x2C0000

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 upddate of STM32MP157C-EV1 Evaluation board More info green.png:

 
PC $> fiptool update --verbose --nt-fw u-boot-nodtb.bin \
             --hw-config  u-boot.dtb \
             tf-a-fip-stm32mp157c-ev1.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

5 SPL compilation[edit]

The alternate boot chain with SPL is also supported by "stm32mp15_basic_defconfig" but only for U-Boot_SPL:_DDR_interactive_mode

With the defconfig file: stm32mp15_basic_defconfig

 
PC $> make stm32mp15_basic_defconfig
 PC $> make DEVICE_TREE=<Device tree> all

The resulting U-Boot files are located in your build directory:

  • u-boot-spl.stm32 : FSBL = SPL binary with STM32 image header, loaded by ROM code
  • u-boot.img : SSBL = U-Boot binary with U-Boot image header (uImage), loaded by SPL
Warning.png This alternate boot chain with SPL is not supported/promoted by STMicroelectronics to make product.

6 Examples[edit]

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

 
PC $> make stm32mp15_trusted_defconfig
 PC $> make DEVICE_TREE=stm32mp157f-ev1 all

6.2 STM32MP157C-EV1 Evaluation board More info green.png[edit]

 
PC $> make stm32mp15_trusted_defconfig
 PC $> make DEVICE_TREE=stm32mp157c-ev1 all

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

 
PC $> make stm32mp15_trusted_defconfig
 PC $> make DEVICE_TREE=stm32mp157d-dk1 all

6.4 STM32MP157C-DK2 Discovery kit More info green.png[edit]

Using export to select the device tree

 
PC $> export KBUILD_OUTPUT=../build/stm32mp15_trusted
 PC $> export DEVICE_TREE=stm32mp157c-dk2
 PC $> make stm32mp15_trusted_defconfig
 PC $> make all

6.5 Custom board with external device tree[edit]

 
PC $> make stm32mp15_trusted_defconfig
 PC $> make EXT_DTB=stm32mp151a-myboard.dtb all

6.6 SPL for STM32MP157F-EV1 Evaluation board More info green.png[edit]

 
PC $> make stm32mp15_basic_defconfig
 PC $> make DEVICE_TREE=stm32mp157f-ev1 all
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><ref>https://u-boot.readthedocs.io/en/stable/board/st/stm32mp1.html</ref>.

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 | board/st/common}}: STMicroelectronics common code 
* {{CodeSource | U-Boot | board/st/stm32mp1}}: generic STMicroelectronics board for {{MicroprocessorDevice | device=1}}
* drivers/*/*stm32* : drivers

Configuration Files:
* defconfig file
** '''{{CodeSource | U-Boot | configs/stm32mp15_trusted_defconfig}}'''
** {{CodeSource | U-Boot | configs/stm32mp15_basic_defconfig}}
* config files
** {{CodeSource | U-Boot | include/configs/stm32mp1.h}}
* [[STM32MP15_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

== 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_trusted_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_trusted_defconfig}}

  {{PC$}} make {{HighlightParam|stm32mp15_trusted_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]].

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.

The ouput file is {{Highlight|'''u-boot.stm32'''}} for {{EcosystemRelease | revision=2.1.0 | range=and before}} or if you activate {{HighlightParam|CONFIG_STM32MP15x_STM32IMAGE}} in your defconfig for {{EcosystemRelease | revision=3.0.0}} (this temporary option is only introduced to facilitate the FIP migration but it will be removed in the next EcosystemRelease).

With FIP support for {{EcosystemRelease | revision=3.0.0}} , the offset on [[STM32CubeProgrammer_flashlayout#NOR_Flash_memory_and_SD_card_with_FIP|U-Boot environment in NOR]] are defined in the defconfig with:
  CONFIG_ENV_OFFSET=0x480000
  CONFIG_ENV_OFFSET_REDUND=0x4C0000

Without FIP support [[STM32CubeProgrammer_flashlayout#Typical_FlashLayout_file_without_FIP|these MTD partition offsets in NOR for default flashlayout]] change and to reuse the {{EcosystemRelease | revision=2.1.0 | range=and before}}  flashlayout  the defconfig options become:
  CONFIG_STM32MP15x_STM32IMAGE=y
  CONFIG_ENV_OFFSET=0x280000
  CONFIG_ENV_OFFSET_REDUND=0x2C0000

== 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 upddate of {{Board | type=157C-EV1}}:

  {{PC$}} fiptool update {{HighlightParam|--verbose}} {{HighlightParam|--nt-fw}} {{Highlight|u-boot-nodtb.bin}} \
              {{HighlightParam|--hw-config}}  {{Highlight|u-boot.dtb}} \
              '''tf-a-fip-stm32mp157c-ev1.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
<div class="mw-collapsible mw-collapsed">


== SPL compilation ==<div class="mw-collapsible-content">

The alternate boot chain with SPL is also supported by ''"stm32mp15_basic_defconfig"'' but only for [[U-Boot_SPL:_DDR_interactive_mode]]

With the defconfig file: {{HighlightParam|stm32mp15_basic_defconfig}}

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

The resulting U-Boot files are located in your build directory:
* '''u-boot-spl.stm32''' : FSBL = SPL binary with STM32 image header, loaded by ROM code
* '''u-boot.img''' : SSBL = U-Boot binary with U-Boot image header (uImage), loaded by SPL

{{Warning | This alternate boot chain with SPL is not supported/promoted by STMicroelectronics to make product.}} </div></div>


== Examples ==

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

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

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

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

=== Custom board with external device tree ===
  {{PC$}} make {{HighlightParam|stm32mp15_trusted_defconfig}}
  {{PC$}} make EXT_DTB={{HighlightParam|stm32mp151a-myboard.dtb}} all
<div class="mw-collapsible mw-collapsed">

=== SPL for {{Board | type=157F-EV1}} ===<div class="mw-collapsible-content">

  {{PC$}} make stm32mp15_basic_defconfig
  {{PC$}} make DEVICE_TREE={{HighlightParam|stm32mp157f-ev1}} all</div></div>

<noinclude>

[[Category:U-Boot]]
{{PublicationRequestId | 12895 | 2019-08-01}}</noinclude>
Line 93: Line 93:
 
               {{HighlightParam|--hw-config}}  {{Highlight|u-boot.dtb}} \
 
               {{HighlightParam|--hw-config}}  {{Highlight|u-boot.dtb}} \
 
               '''tf-a-fip-stm32mp157c-ev1.bin'''
 
               '''tf-a-fip-stm32mp157c-ev1.bin'''
  +
 
 
   DEBUG: Replacing nt-fw with.../u-boot-nodtb.bin
 
   DEBUG: Replacing nt-fw with.../u-boot-nodtb.bin
 
   DEBUG: Replacing hw-config with .../u-boot.dtb
 
   DEBUG: Replacing hw-config with .../u-boot.dtb