1*91f16700SchasingluluSTM32MP1 2*91f16700Schasinglulu======== 3*91f16700Schasinglulu 4*91f16700SchasingluluSTM32MP1 is a microprocessor designed by STMicroelectronics 5*91f16700Schasinglulubased on Arm Cortex-A7. 6*91f16700SchasingluluIt is an Armv7-A platform, using dedicated code from TF-A. 7*91f16700SchasingluluMore information can be found on `STM32MP1 Series`_ page. 8*91f16700Schasinglulu 9*91f16700SchasingluluFor TF-A common configuration of STM32 MPUs, please check 10*91f16700Schasinglulu:ref:`STM32 MPUs` page. 11*91f16700Schasinglulu 12*91f16700SchasingluluSTM32MP1 Versions 13*91f16700Schasinglulu----------------- 14*91f16700Schasinglulu 15*91f16700SchasingluluThere are 2 variants for STM32MP1: STM32MP13 and STM32MP15 16*91f16700Schasinglulu 17*91f16700SchasingluluSTM32MP13 Versions 18*91f16700Schasinglulu~~~~~~~~~~~~~~~~~~ 19*91f16700SchasingluluThe STM32MP13 series is available in 3 different lines which are pin-to-pin compatible: 20*91f16700Schasinglulu 21*91f16700Schasinglulu- STM32MP131: Single Cortex-A7 core 22*91f16700Schasinglulu- STM32MP133: STM32MP131 + 2*CAN, ETH2(GMAC), ADC1 23*91f16700Schasinglulu- STM32MP135: STM32MP133 + DCMIPP, LTDC 24*91f16700Schasinglulu 25*91f16700SchasingluluEach line comes with a security option (cryptography & secure boot) and a Cortex-A frequency option: 26*91f16700Schasinglulu 27*91f16700Schasinglulu- A Cortex-A7 @ 650 MHz 28*91f16700Schasinglulu- C Secure Boot + HW Crypto + Cortex-A7 @ 650 MHz 29*91f16700Schasinglulu- D Cortex-A7 @ 900 MHz 30*91f16700Schasinglulu- F Secure Boot + HW Crypto + Cortex-A7 @ 900 MHz 31*91f16700Schasinglulu 32*91f16700SchasingluluSTM32MP15 Versions 33*91f16700Schasinglulu~~~~~~~~~~~~~~~~~~ 34*91f16700SchasingluluThe STM32MP15 series is available in 3 different lines which are pin-to-pin compatible: 35*91f16700Schasinglulu 36*91f16700Schasinglulu- STM32MP157: Dual Cortex-A7 cores, Cortex-M4 core @ 209 MHz, 3D GPU, DSI display interface and CAN FD 37*91f16700Schasinglulu- STM32MP153: Dual Cortex-A7 cores, Cortex-M4 core @ 209 MHz and CAN FD 38*91f16700Schasinglulu- STM32MP151: Single Cortex-A7 core, Cortex-M4 core @ 209 MHz 39*91f16700Schasinglulu 40*91f16700SchasingluluEach line comes with a security option (cryptography & secure boot) and a Cortex-A frequency option: 41*91f16700Schasinglulu 42*91f16700Schasinglulu- A Basic + Cortex-A7 @ 650 MHz 43*91f16700Schasinglulu- C Secure Boot + HW Crypto + Cortex-A7 @ 650 MHz 44*91f16700Schasinglulu- D Basic + Cortex-A7 @ 800 MHz 45*91f16700Schasinglulu- F Secure Boot + HW Crypto + Cortex-A7 @ 800 MHz 46*91f16700Schasinglulu 47*91f16700SchasingluluThe `STM32MP1 part number codification`_ page gives more information about part numbers. 48*91f16700Schasinglulu 49*91f16700SchasingluluMemory mapping 50*91f16700Schasinglulu-------------- 51*91f16700Schasinglulu 52*91f16700Schasinglulu:: 53*91f16700Schasinglulu 54*91f16700Schasinglulu 0x00000000 +-----------------+ 55*91f16700Schasinglulu | | ROM 56*91f16700Schasinglulu 0x00020000 +-----------------+ 57*91f16700Schasinglulu | | 58*91f16700Schasinglulu | ... | 59*91f16700Schasinglulu | | 60*91f16700Schasinglulu 0x2FFC0000 +-----------------+ \ 61*91f16700Schasinglulu | BL32 DTB | | 62*91f16700Schasinglulu 0x2FFC5000 +-----------------+ | 63*91f16700Schasinglulu | BL32 | | 64*91f16700Schasinglulu 0x2FFDF000 +-----------------+ | 65*91f16700Schasinglulu | ... | | 66*91f16700Schasinglulu 0x2FFE3000 +-----------------+ | 67*91f16700Schasinglulu | BL2 DTB | | Embedded SRAM 68*91f16700Schasinglulu 0x2FFEA000 +-----------------+ | 69*91f16700Schasinglulu | BL2 | | 70*91f16700Schasinglulu 0x2FFFF000 +-----------------+ | 71*91f16700Schasinglulu | SCMI mailbox | | 72*91f16700Schasinglulu 0x30000000 +-----------------+ / 73*91f16700Schasinglulu | | 74*91f16700Schasinglulu | ... | 75*91f16700Schasinglulu | | 76*91f16700Schasinglulu 0x40000000 +-----------------+ 77*91f16700Schasinglulu | | 78*91f16700Schasinglulu | | Devices 79*91f16700Schasinglulu | | 80*91f16700Schasinglulu 0xC0000000 +-----------------+ \ 81*91f16700Schasinglulu | | | 82*91f16700Schasinglulu 0xC0100000 +-----------------+ | 83*91f16700Schasinglulu | BL33 | | Non-secure RAM (DDR) 84*91f16700Schasinglulu | ... | | 85*91f16700Schasinglulu | | | 86*91f16700Schasinglulu 0xFFFFFFFF +-----------------+ / 87*91f16700Schasinglulu 88*91f16700Schasinglulu 89*91f16700SchasingluluBuild Instructions 90*91f16700Schasinglulu------------------ 91*91f16700Schasinglulu 92*91f16700SchasingluluSTM32MP1x specific flags 93*91f16700Schasinglulu~~~~~~~~~~~~~~~~~~~~~~~~ 94*91f16700Schasinglulu 95*91f16700SchasingluluDedicated STM32MP1 flags: 96*91f16700Schasinglulu 97*91f16700Schasinglulu- | ``STM32_TF_VERSION``: to manage BL2 monotonic counter. 98*91f16700Schasinglulu | Default: 0 99*91f16700Schasinglulu- | ``STM32MP13``: to select STM32MP13 variant configuration. 100*91f16700Schasinglulu | Default: 0 101*91f16700Schasinglulu- | ``STM32MP15``: to select STM32MP15 variant configuration. 102*91f16700Schasinglulu | Default: 1 103*91f16700Schasinglulu 104*91f16700Schasinglulu 105*91f16700SchasingluluBoot with FIP 106*91f16700Schasinglulu~~~~~~~~~~~~~ 107*91f16700SchasingluluYou need to build BL2, BL32 (SP_min or OP-TEE) and BL33 (U-Boot) before building FIP binary. 108*91f16700Schasinglulu 109*91f16700SchasingluluU-Boot 110*91f16700Schasinglulu______ 111*91f16700Schasinglulu 112*91f16700Schasinglulu.. code:: bash 113*91f16700Schasinglulu 114*91f16700Schasinglulu cd <u-boot_directory> 115*91f16700Schasinglulu make stm32mp15_trusted_defconfig 116*91f16700Schasinglulu make DEVICE_TREE=stm32mp157c-ev1 all 117*91f16700Schasinglulu 118*91f16700SchasingluluOP-TEE (optional) 119*91f16700Schasinglulu_________________ 120*91f16700Schasinglulu 121*91f16700Schasinglulu.. code:: bash 122*91f16700Schasinglulu 123*91f16700Schasinglulu cd <optee_directory> 124*91f16700Schasinglulu make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm PLATFORM=stm32mp1 \ 125*91f16700Schasinglulu CFG_EMBED_DTB_SOURCE_FILE=stm32mp157c-ev1.dts 126*91f16700Schasinglulu 127*91f16700Schasinglulu 128*91f16700SchasingluluTF-A BL32 (SP_min) 129*91f16700Schasinglulu__________________ 130*91f16700SchasingluluIf you choose not to use OP-TEE, you can use TF-A SP_min. 131*91f16700SchasingluluTo build TF-A BL32, and its device tree file: 132*91f16700Schasinglulu 133*91f16700Schasinglulu.. code:: bash 134*91f16700Schasinglulu 135*91f16700Schasinglulu make CROSS_COMPILE=arm-none-eabi- PLAT=stm32mp1 ARCH=aarch32 ARM_ARCH_MAJOR=7 \ 136*91f16700Schasinglulu AARCH32_SP=sp_min DTB_FILE_NAME=stm32mp157c-ev1.dtb bl32 dtbs 137*91f16700Schasinglulu 138*91f16700SchasingluluTF-A BL2 139*91f16700Schasinglulu________ 140*91f16700SchasingluluTo build TF-A BL2 with its STM32 header for SD-card boot: 141*91f16700Schasinglulu 142*91f16700Schasinglulu.. code:: bash 143*91f16700Schasinglulu 144*91f16700Schasinglulu make CROSS_COMPILE=arm-none-eabi- PLAT=stm32mp1 ARCH=aarch32 ARM_ARCH_MAJOR=7 \ 145*91f16700Schasinglulu DTB_FILE_NAME=stm32mp157c-ev1.dtb STM32MP_SDMMC=1 146*91f16700Schasinglulu 147*91f16700SchasingluluFor other boot devices, you have to replace STM32MP_SDMMC in the previous command 148*91f16700Schasingluluwith the desired device flag. 149*91f16700Schasinglulu 150*91f16700SchasingluluThis BL2 is independent of the BL32 used (SP_min or OP-TEE) 151*91f16700Schasinglulu 152*91f16700Schasinglulu 153*91f16700SchasingluluFIP 154*91f16700Schasinglulu___ 155*91f16700SchasingluluWith BL32 SP_min: 156*91f16700Schasinglulu 157*91f16700Schasinglulu.. code:: bash 158*91f16700Schasinglulu 159*91f16700Schasinglulu make CROSS_COMPILE=arm-none-eabi- PLAT=stm32mp1 ARCH=aarch32 ARM_ARCH_MAJOR=7 \ 160*91f16700Schasinglulu AARCH32_SP=sp_min \ 161*91f16700Schasinglulu DTB_FILE_NAME=stm32mp157c-ev1.dtb \ 162*91f16700Schasinglulu BL33=<u-boot_directory>/u-boot-nodtb.bin \ 163*91f16700Schasinglulu BL33_CFG=<u-boot_directory>/u-boot.dtb \ 164*91f16700Schasinglulu fip 165*91f16700Schasinglulu 166*91f16700SchasingluluWith OP-TEE: 167*91f16700Schasinglulu 168*91f16700Schasinglulu.. code:: bash 169*91f16700Schasinglulu 170*91f16700Schasinglulu make CROSS_COMPILE=arm-none-eabi- PLAT=stm32mp1 ARCH=aarch32 ARM_ARCH_MAJOR=7 \ 171*91f16700Schasinglulu AARCH32_SP=optee \ 172*91f16700Schasinglulu DTB_FILE_NAME=stm32mp157c-ev1.dtb \ 173*91f16700Schasinglulu BL33=<u-boot_directory>/u-boot-nodtb.bin \ 174*91f16700Schasinglulu BL33_CFG=<u-boot_directory>/u-boot.dtb \ 175*91f16700Schasinglulu BL32=<optee_directory>/tee-header_v2.bin \ 176*91f16700Schasinglulu BL32_EXTRA1=<optee_directory>/tee-pager_v2.bin 177*91f16700Schasinglulu BL32_EXTRA2=<optee_directory>/tee-pageable_v2.bin 178*91f16700Schasinglulu fip 179*91f16700Schasinglulu 180*91f16700SchasingluluTrusted Boot Board 181*91f16700Schasinglulu__________________ 182*91f16700Schasinglulu 183*91f16700Schasinglulu.. code:: shell 184*91f16700Schasinglulu 185*91f16700Schasinglulu tools/cert_create/cert_create -n --rot-key build/stm32mp1/release/rot_key.pem \ 186*91f16700Schasinglulu --tfw-nvctr 0 \ 187*91f16700Schasinglulu --ntfw-nvctr 0 \ 188*91f16700Schasinglulu --key-alg ecdsa --hash-alg sha256 \ 189*91f16700Schasinglulu --trusted-key-cert build/stm32mp1/release/trusted_key.crt \ 190*91f16700Schasinglulu --tos-fw <optee_directory>/tee-header_v2.bin \ 191*91f16700Schasinglulu --tos-fw-extra1 <optee_directory>/tee-pager_v2.bin \ 192*91f16700Schasinglulu --tos-fw-extra2 <optee_directory>/tee-pageable_v2.bin \ 193*91f16700Schasinglulu --tos-fw-cert build/stm32mp1/release/tos_fw_content.crt \ 194*91f16700Schasinglulu --tos-fw-key-cert build/stm32mp1/release/tos_fw_key.crt \ 195*91f16700Schasinglulu --nt-fw <u-boot_directory>/u-boot-nodtb.bin \ 196*91f16700Schasinglulu --nt-fw-cert build/stm32mp1/release/nt_fw_content.crt \ 197*91f16700Schasinglulu --nt-fw-key-cert build/stm32mp1/release/nt_fw_key.crt \ 198*91f16700Schasinglulu --hw-config <u-boot_directory>/u-boot.dtb \ 199*91f16700Schasinglulu --fw-config build/stm32mp1/release/fdts/fw-config.dtb \ 200*91f16700Schasinglulu --stm32mp-cfg-cert build/stm32mp1/release/stm32mp_cfg_cert.crt 201*91f16700Schasinglulu 202*91f16700Schasinglulu tools/fiptool/fiptool create --tos-fw <optee_directory>/tee-header_v2.bin \ 203*91f16700Schasinglulu --tos-fw-extra1 <optee_directory>/tee-pager_v2.bin \ 204*91f16700Schasinglulu --tos-fw-extra2 <optee_directory>/tee-pageable_v2.bin \ 205*91f16700Schasinglulu --nt-fw <u-boot_directory>/u-boot-nodtb.bin \ 206*91f16700Schasinglulu --hw-config <u-boot_directory>/u-boot.dtb \ 207*91f16700Schasinglulu --fw-config build/stm32mp1/release/fdts/fw-config.dtb \ 208*91f16700Schasinglulu --trusted-key-cert build/stm32mp1/release/trusted_key.crt \ 209*91f16700Schasinglulu --tos-fw-cert build/stm32mp1/release/tos_fw_content.crt \ 210*91f16700Schasinglulu --tos-fw-key-cert build/stm32mp1/release/tos_fw_key.crt \ 211*91f16700Schasinglulu --nt-fw-cert build/stm32mp1/release/nt_fw_content.crt \ 212*91f16700Schasinglulu --nt-fw-key-cert build/stm32mp1/release/nt_fw_key.crt \ 213*91f16700Schasinglulu --stm32mp-cfg-cert build/stm32mp1/release/stm32mp_cfg_cert.crt \ 214*91f16700Schasinglulu build/stm32mp1/release/stm32mp1.fip 215*91f16700Schasinglulu 216*91f16700Schasinglulu 217*91f16700Schasinglulu.. _STM32MP1 Series: https://www.st.com/en/microcontrollers-microprocessors/stm32mp1-series.html 218*91f16700Schasinglulu.. _STM32MP1 part number codification: https://wiki.st.com/stm32mpu/wiki/STM32MP15_microprocessor#Part_number_codification 219*91f16700Schasinglulu 220*91f16700Schasinglulu*Copyright (c) 2023, STMicroelectronics - All Rights Reserved* 221