Yann Gautier | 7511539 | 2018-07-16 14:49:34 +0200 | [diff] [blame] | 1 | Trusted Firmware-A for STM32MP1 |
| 2 | =============================== |
| 3 | |
| 4 | STM32MP1 is a microprocessor designed by STMicroelectronics |
| 5 | based on a dual Arm Cortex-A7. |
| 6 | It is an Armv7-A platform, using dedicated code from TF-A. |
Yann Gautier | 969be34 | 2019-02-20 17:34:16 +0100 | [diff] [blame] | 7 | The STM32MP1 chip also embeds a Cortex-M4. |
| 8 | More information can be found on `STM32MP1 Series`_ page. |
Yann Gautier | 7511539 | 2018-07-16 14:49:34 +0200 | [diff] [blame] | 9 | |
| 10 | |
| 11 | Design |
| 12 | ------ |
| 13 | The STM32MP1 resets in the ROM code of the Cortex-A7. |
| 14 | The primary boot core (core 0) executes the boot sequence while |
| 15 | secondary boot core (core 1) is kept in a holding pen loop. |
| 16 | The ROM code boot sequence loads the TF-A binary image from boot device |
| 17 | to embedded SRAM. |
| 18 | |
| 19 | The TF-A image must be properly formatted with a STM32 header structure |
| 20 | for ROM code is able to load this image. |
| 21 | Tool stm32image can be used to prepend this header to the generated TF-A binary. |
| 22 | |
| 23 | At compilation step, BL2, BL32 and DTB file are linked together in a single |
| 24 | binary. The stm32image tool is also generated and the header is added to TF-A |
| 25 | binary. This binary file with header is named tf-a-stm32mp157c-ev1.stm32. |
| 26 | It can then be copied in the first partition of the boot device. |
| 27 | |
| 28 | |
| 29 | Memory 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 | |
| 67 | Boot sequence |
| 68 | ~~~~~~~~~~~~~ |
| 69 | |
| 70 | ROM code -> BL2 (compiled with BL2_AT_EL3) -> BL32 (SP_min) -> BL33 (U-Boot) |
| 71 | |
Yann Gautier | b3386f7 | 2019-04-19 09:41:01 +0200 | [diff] [blame] | 72 | or if Op-TEE is used: |
| 73 | |
| 74 | ROM code -> BL2 (compiled with BL2_AT_EL3) -> OP-TEE -> BL33 (U-Boot) |
| 75 | |
Yann Gautier | 7511539 | 2018-07-16 14:49:34 +0200 | [diff] [blame] | 76 | |
| 77 | Build Instructions |
| 78 | ------------------ |
| 79 | |
Yann Gautier | b3386f7 | 2019-04-19 09:41:01 +0200 | [diff] [blame] | 80 | To build with SP_min: |
Yann Gautier | 7511539 | 2018-07-16 14:49:34 +0200 | [diff] [blame] | 81 | |
| 82 | .. code:: bash |
| 83 | |
| 84 | make CROSS_COMPILE=arm-linux-gnueabihf- PLAT=stm32mp1 ARCH=aarch32 ARM_ARCH_MAJOR=7 AARCH32_SP=sp_min |
Yann Gautier | b4ddd30 | 2018-10-24 10:50:12 +0200 | [diff] [blame] | 85 | cd <u-boot_directory> |
| 86 | make stm32mp15_basic_defconfig |
Yann Gautier | 969be34 | 2019-02-20 17:34:16 +0100 | [diff] [blame] | 87 | make DEVICE_TREE=stm32mp157c-ev1 all |
Yann Gautier | b4ddd30 | 2018-10-24 10:50:12 +0200 | [diff] [blame] | 88 | ./tools/mkimage -T stm32image -a 0xC0100000 -e 0xC0100000 -d u-boot.bin u-boot.stm32 |
Yann Gautier | 7511539 | 2018-07-16 14:49:34 +0200 | [diff] [blame] | 89 | |
Yann Gautier | b3386f7 | 2019-04-19 09:41:01 +0200 | [diff] [blame] | 90 | To build TF-A with with Op-TEE support: |
| 91 | |
| 92 | .. code:: bash |
| 93 | |
| 94 | make CROSS_COMPILE=arm-linux-gnueabihf- PLAT=stm32mp1 ARCH=aarch32 ARM_ARCH_MAJOR=7 AARCH32_SP=optee |
| 95 | |
Yann Gautier | 7511539 | 2018-07-16 14:49:34 +0200 | [diff] [blame] | 96 | The following build options are supported: |
| 97 | |
| 98 | - ``ENABLE_STACK_PROTECTOR``: To enable the stack protection. |
Yann Gautier | b4ddd30 | 2018-10-24 10:50:12 +0200 | [diff] [blame] | 99 | |
| 100 | |
| 101 | Populate SD-card |
| 102 | ---------------- |
| 103 | |
| 104 | The SD-card has to be formated with GPT. |
| 105 | It should contain at least those partitions: |
| 106 | |
| 107 | - fsbl: to copy the tf-a-stm32mp157c-ev1.stm32 binary |
| 108 | - ssbl: to copy the u-boot.stm32 binary |
| 109 | |
| 110 | Usually, two copies of fsbl are used (fsbl1 and fsbl2) instead of one partition fsbl. |
Yann Gautier | 969be34 | 2019-02-20 17:34:16 +0100 | [diff] [blame] | 111 | |
| 112 | |
| 113 | .. _STM32MP1 Series: https://www.st.com/en/microcontrollers-microprocessors/stm32mp1-series.html |