xref: /arm-trusted-firmware/docs/plat/st/stm32mp1.rst (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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