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 11STM32MP1 Versions 12----------------- 13The STM32MP1 series is available in 3 different lines which are pin-to-pin compatible: 14 15- STM32MP157: Dual Cortex-A7 cores, Cortex-M4 core @ 209 MHz, 3D GPU, DSI display interface and CAN FD 16- STM32MP153: Dual Cortex-A7 cores, Cortex-M4 core @ 209 MHz and CAN FD 17- STM32MP151: Single Cortex-A7 core, Cortex-M4 core @ 209 MHz 18 19Each line comes with a security option (cryptography & secure boot) and a Cortex-A frequency option: 20 21- A Basic + Cortex-A7 @ 650 MHz 22- C Secure Boot + HW Crypto + Cortex-A7 @ 650 MHz 23- D Basic + Cortex-A7 @ 800 MHz 24- F Secure Boot + HW Crypto + Cortex-A7 @ 800 MHz 25 26The `STM32MP1 part number codification`_ page gives more information about part numbers. 27 28Design 29------ 30The STM32MP1 resets in the ROM code of the Cortex-A7. 31The primary boot core (core 0) executes the boot sequence while 32secondary boot core (core 1) is kept in a holding pen loop. 33The ROM code boot sequence loads the TF-A binary image from boot device 34to embedded SRAM. 35 36The TF-A image must be properly formatted with a STM32 header structure 37for ROM code is able to load this image. 38Tool stm32image can be used to prepend this header to the generated TF-A binary. 39 40At compilation step, BL2, BL32 and DTB file are linked together in a single 41binary. The stm32image tool is also generated and the header is added to TF-A 42binary. This binary file with header is named tf-a-stm32mp157c-ev1.stm32. 43It can then be copied in the first partition of the boot device. 44 45 46Memory mapping 47~~~~~~~~~~~~~~ 48 49:: 50 51 0x00000000 +-----------------+ 52 | | ROM 53 0x00020000 +-----------------+ 54 | | 55 | ... | 56 | | 57 0x2FFC0000 +-----------------+ \ 58 | | | 59 | ... | | 60 | | | 61 0x2FFD8000 +-----------------+ | 62 | TF-A DTB | | Embedded SRAM 63 0x2FFDC000 +-----------------+ | 64 | BL2 | | 65 0x2FFEF000 +-----------------+ | 66 | BL32 | | 67 0x30000000 +-----------------+ / 68 | | 69 | ... | 70 | | 71 0x40000000 +-----------------+ 72 | | 73 | | Devices 74 | | 75 0xC0000000 +-----------------+ \ 76 | | | 77 0xC0100000 +-----------------+ | 78 | BL33 | | Non-secure RAM (DDR) 79 | ... | | 80 | | | 81 0xFFFFFFFF +-----------------+ / 82 83 84Boot sequence 85~~~~~~~~~~~~~ 86 87ROM code -> BL2 (compiled with BL2_AT_EL3) -> BL32 (SP_min) -> BL33 (U-Boot) 88 89or if Op-TEE is used: 90 91ROM code -> BL2 (compiled with BL2_AT_EL3) -> OP-TEE -> BL33 (U-Boot) 92 93 94Build Instructions 95------------------ 96Boot media(s) supported by BL2 must be specified in the build command. 97Available storage medias are: 98 99- ``STM32MP_SDMMC`` 100- ``STM32MP_EMMC`` 101- ``STM32MP_RAW_NAND`` 102- ``STM32MP_SPI_NAND`` 103- ``STM32MP_SPI_NOR`` 104 105To build with SP_min and support for all bootable devices: 106 107.. code:: bash 108 109 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 110 STM32MP_SPI_NOR=1 DTB_FILE_NAME=stm32mp157c-ev1.dtb 111 cd <u-boot_directory> 112 make stm32mp15_trusted_defconfig 113 make DEVICE_TREE=stm32mp157c-ev1 all 114 115To build TF-A with OP-TEE support for all bootable devices: 116 117.. code:: bash 118 119 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 120 cd <optee_directory> 121 make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm PLATFORM=stm32mp1 CFG_EMBED_DTB_SOURCE_FILE=stm32mp157c-ev1.dts 122 cd <u-boot_directory> 123 make stm32mp15_trusted_defconfig 124 make DEVICE_TREE=stm32mp157c-ev1 all 125 126 127The following build options are supported: 128 129- ``ENABLE_STACK_PROTECTOR``: To enable the stack protection. 130 131 132Populate SD-card 133---------------- 134 135The SD-card has to be formated with GPT. 136It should contain at least those partitions: 137 138- fsbl: to copy the tf-a-stm32mp157c-ev1.stm32 binary 139- ssbl: to copy the u-boot.stm32 binary 140 141Usually, two copies of fsbl are used (fsbl1 and fsbl2) instead of one partition fsbl. 142 143OP-TEE artifacts go into separate partitions as follows: 144 145- teeh: tee-header_v2.stm32 146- teed: tee-pageable_v2.stm32 147- teex: tee-pager_v2.stm32 148 149 150.. _STM32MP1 Series: https://www.st.com/en/microcontrollers-microprocessors/stm32mp1-series.html 151.. _STM32MP1 part number codification: https://wiki.st.com/stm32mpu/wiki/STM32MP15_microprocessor#Part_number_codification 152