1STMicroelectronics STM32MP1 2=========================== 3 4STM32MP1 is a microprocessor designed by STMicroelectronics 5based on a dual Arm Cortex-A7. 6It is an Armv7-A platform, using dedicated code from TF-A. 7The STM32MP1 chip also embeds a Cortex-M4. 8More information can be found on `STM32MP1 Series`_ page. 9 10 11Design 12------ 13The STM32MP1 resets in the ROM code of the Cortex-A7. 14The primary boot core (core 0) executes the boot sequence while 15secondary boot core (core 1) is kept in a holding pen loop. 16The ROM code boot sequence loads the TF-A binary image from boot device 17to embedded SRAM. 18 19The TF-A image must be properly formatted with a STM32 header structure 20for ROM code is able to load this image. 21Tool stm32image can be used to prepend this header to the generated TF-A binary. 22 23At compilation step, BL2, BL32 and DTB file are linked together in a single 24binary. The stm32image tool is also generated and the header is added to TF-A 25binary. This binary file with header is named tf-a-stm32mp157c-ev1.stm32. 26It can then be copied in the first partition of the boot device. 27 28 29Memory mapping 30~~~~~~~~~~~~~~ 31 32:: 33 34 0x00000000 +-----------------+ 35 | | ROM 36 0x00020000 +-----------------+ 37 | | 38 | ... | 39 | | 40 0x2FFC0000 +-----------------+ \ 41 | | | 42 | ... | | 43 | | | 44 0x2FFD8000 +-----------------+ | 45 | TF-A DTB | | Embedded SRAM 46 0x2FFDC000 +-----------------+ | 47 | BL2 | | 48 0x2FFEF000 +-----------------+ | 49 | BL32 | | 50 0x30000000 +-----------------+ / 51 | | 52 | ... | 53 | | 54 0x40000000 +-----------------+ 55 | | 56 | | Devices 57 | | 58 0xC0000000 +-----------------+ \ 59 | | | 60 0xC0100000 +-----------------+ | 61 | BL33 | | Non-secure RAM (DDR) 62 | ... | | 63 | | | 64 0xFFFFFFFF +-----------------+ / 65 66 67Boot sequence 68~~~~~~~~~~~~~ 69 70ROM code -> BL2 (compiled with BL2_AT_EL3) -> BL32 (SP_min) -> BL33 (U-Boot) 71 72or if Op-TEE is used: 73 74ROM code -> BL2 (compiled with BL2_AT_EL3) -> OP-TEE -> BL33 (U-Boot) 75 76 77Build Instructions 78------------------ 79Boot media(s) supported by BL2 must be specified in the build command. 80Available storage medias are: 81- ``STM32MP_SDMMC`` 82- ``STM32MP_EMMC`` 83- ``STM32MP_RAW_NAND`` 84- ``STM32MP_SPI_NAND`` 85- ``STM32MP_SPI_NOR`` 86 87To build with SP_min and support for all bootable devices: 88 89.. code:: bash 90 91 make CROSS_COMPILE=arm-linux-gnueabihf- PLAT=stm32mp1 ARCH=aarch32 ARM_ARCH_MAJOR=7 AARCH32_SP=sp_min STM32MP_SDMMC=1 STM32MP_EMMC=1 STM32MP_RAW_NAND=1 STM32MP_SPI_NAND=1 92 STM32MP_SPI_NOR=1 DTB_FILE_NAME=stm32mp157c-ev1.dtb 93 cd <u-boot_directory> 94 make stm32mp15_trusted_defconfig 95 make DEVICE_TREE=stm32mp157c-ev1 all 96 97To build TF-A with OP-TEE support for all bootable devices: 98.. code:: bash 99 100 make CROSS_COMPILE=arm-linux-gnueabihf- PLAT=stm32mp1 ARCH=aarch32 ARM_ARCH_MAJOR=7 AARCH32_SP=optee STM32MP_SDMMC=1 STM32MP_EMMC=1 STM32MP_RAW_NAND=1 STM32MP_SPI_NAND=1 STM32MP_SPI_NOR=1 DTB_FILE_NAME=stm32mp157c-ev1.dtb 101 cd <optee_directory> 102 make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm PLATFORM=stm32mp1 CFG_EMBED_DTB_SOURCE_FILE=stm32mp157c-ev1.dts 103 cd <u-boot_directory> 104 make stm32mp15_optee_defconfig 105 make DEVICE_TREE=stm32mp157c-ev1 all 106 107 108The following build options are supported: 109 110- ``ENABLE_STACK_PROTECTOR``: To enable the stack protection. 111 112 113Populate SD-card 114---------------- 115 116The SD-card has to be formated with GPT. 117It should contain at least those partitions: 118 119- fsbl: to copy the tf-a-stm32mp157c-ev1.stm32 binary 120- ssbl: to copy the u-boot.stm32 binary 121 122Usually, two copies of fsbl are used (fsbl1 and fsbl2) instead of one partition fsbl. 123 124 125.. _STM32MP1 Series: https://www.st.com/en/microcontrollers-microprocessors/stm32mp1-series.html 126