1fcb1398fSOlivier DeprezSecure Partition Manager 2fcb1398fSOlivier Deprez************************ 3fcb1398fSOlivier Deprez 4fcb1398fSOlivier Deprez.. contents:: 5fcb1398fSOlivier Deprez 69eea92a1SOlivier Deprez.. toctree:: 79eea92a1SOlivier Deprez ffa-manifest-binding 89eea92a1SOlivier Deprez 9fcb1398fSOlivier DeprezAcronyms 10fcb1398fSOlivier Deprez======== 11fcb1398fSOlivier Deprez 128a5bd3cfSOlivier Deprez+--------+--------------------------------------+ 13fcb1398fSOlivier Deprez| DTS | Device Tree Source | 148a5bd3cfSOlivier Deprez+--------+--------------------------------------+ 158a5bd3cfSOlivier Deprez| FF-A | Firmware Framework for Arm A-profile | 168a5bd3cfSOlivier Deprez+--------+--------------------------------------+ 17fcb1398fSOlivier Deprez| NWd | Normal World | 188a5bd3cfSOlivier Deprez+--------+--------------------------------------+ 19fcb1398fSOlivier Deprez| SP | Secure Partition | 208a5bd3cfSOlivier Deprez+--------+--------------------------------------+ 21b5dd2422SOlivier Deprez| SPD | Secure Payload Dispatcher | 228a5bd3cfSOlivier Deprez+--------+--------------------------------------+ 23fcb1398fSOlivier Deprez| SPM | Secure Partition Manager | 248a5bd3cfSOlivier Deprez+--------+--------------------------------------+ 25fcb1398fSOlivier Deprez| SPMC | SPM Core | 268a5bd3cfSOlivier Deprez+--------+--------------------------------------+ 27fcb1398fSOlivier Deprez| SPMD | SPM Dispatcher | 288a5bd3cfSOlivier Deprez+--------+--------------------------------------+ 29fcb1398fSOlivier Deprez| SWd | Secure World | 308a5bd3cfSOlivier Deprez+--------+--------------------------------------+ 31fcb1398fSOlivier Deprez 32fcb1398fSOlivier DeprezForeword 33fcb1398fSOlivier Deprez======== 34fcb1398fSOlivier Deprez 359eea92a1SOlivier DeprezThree implementations of a Secure Partition Manager co-exist in the TF-A 369eea92a1SOlivier Deprezcodebase: 37fcb1398fSOlivier Deprez 389eea92a1SOlivier Deprez#. S-EL2 SPMC based on the FF-A specification `[1]`_, enabling virtualization in 3965e573fcSMadhukar Pappireddy the secure world, managing multiple S-EL1 or S-EL0 partitions `[5]`_. 409eea92a1SOlivier Deprez#. EL3 SPMC based on the FF-A specification, managing a single S-EL1 partition 4165e573fcSMadhukar Pappireddy without virtualization in the secure world `[6]`_. 429eea92a1SOlivier Deprez#. EL3 SPM based on the MM specification, legacy implementation managing a 439eea92a1SOlivier Deprez single S-EL0 partition `[2]`_. 44fcb1398fSOlivier Deprez 459eea92a1SOlivier DeprezThese implementations differ in their respective SW architecture and only one 4665e573fcSMadhukar Pappireddycan be selected at build time. 47fcb1398fSOlivier Deprez 48fcb1398fSOlivier DeprezSupport for legacy platforms 49fcb1398fSOlivier Deprez---------------------------- 50fcb1398fSOlivier Deprez 519eea92a1SOlivier DeprezThe SPM is split into a dispatcher and a core component (respectively SPMD and 529eea92a1SOlivier DeprezSPMC) residing at different exception levels. To permit the FF-A specification 539eea92a1SOlivier Deprezadoption and a smooth migration, the SPMD supports an SPMC residing either at 549eea92a1SOlivier DeprezS-EL1 or S-EL2: 55fcb1398fSOlivier Deprez 569eea92a1SOlivier Deprez- The SPMD is located at EL3 and mainly relays the FF-A protocol from NWd 579eea92a1SOlivier Deprez (Hypervisor or OS kernel) to the SPMC. 589eea92a1SOlivier Deprez- The same SPMD component is used for both S-EL1 and S-EL2 SPMC configurations. 599eea92a1SOlivier Deprez- The SPMC exception level is a build time choice. 60fcb1398fSOlivier Deprez 619eea92a1SOlivier DeprezTF-A supports both cases: 629eea92a1SOlivier Deprez 639eea92a1SOlivier Deprez- S-EL1 SPMC for platforms not supporting the FEAT_SEL2 architecture 64b5dd2422SOlivier Deprez extension. The SPMD relays the FF-A protocol from EL3 to S-EL1. 659eea92a1SOlivier Deprez- S-EL2 SPMC for platforms implementing the FEAT_SEL2 architecture 66b5dd2422SOlivier Deprez extension. The SPMD relays the FF-A protocol from EL3 to S-EL2. 67fcb1398fSOlivier Deprez 68fcb1398fSOlivier DeprezTF-A build options 69fcb1398fSOlivier Deprez================== 70fcb1398fSOlivier Deprez 71b5dd2422SOlivier DeprezThis section explains the TF-A build options involved in building with 72b5dd2422SOlivier Deprezsupport for an FF-A based SPM where the SPMD is located at EL3 and the 731d63ae4dSMarc BonniciSPMC located at S-EL1, S-EL2 or EL3: 74fcb1398fSOlivier Deprez 75b5dd2422SOlivier Deprez- **SPD=spmd**: this option selects the SPMD component to relay the FF-A 76fcb1398fSOlivier Deprez protocol from NWd to SWd back and forth. It is not possible to 77fcb1398fSOlivier Deprez enable another Secure Payload Dispatcher when this option is chosen. 78b5dd2422SOlivier Deprez- **SPMD_SPM_AT_SEL2**: this option adjusts the SPMC exception 791d63ae4dSMarc Bonnici level to being at S-EL2. It defaults to enabled (value 1) when 80fcb1398fSOlivier Deprez SPD=spmd is chosen. 811d63ae4dSMarc Bonnici- **SPMC_AT_EL3**: this option adjusts the SPMC exception level to being 8265e573fcSMadhukar Pappireddy at EL3. If neither ``SPMD_SPM_AT_SEL2`` or ``SPMC_AT_EL3`` are enabled the 8365e573fcSMadhukar Pappireddy SPMC exception level is set to S-EL1. 84b5dd2422SOlivier Deprez ``SPMD_SPM_AT_SEL2`` is enabled. The context save/restore routine 85b5dd2422SOlivier Deprez and exhaustive list of registers is visible at `[4]`_. 86801cd3c8SNishant Sharma- **SPMC_AT_EL3_SEL0_SP**: this option enables the support to load SEL0 SP 87801cd3c8SNishant Sharma when SPMC at EL3 support is enabled. 88b5dd2422SOlivier Deprez- **SP_LAYOUT_FILE**: this option specifies a text description file 89b5dd2422SOlivier Deprez providing paths to SP binary images and manifests in DTS format 9065e573fcSMadhukar Pappireddy (see `[3]`_). It 91fcb1398fSOlivier Deprez is required when ``SPMD_SPM_AT_SEL2`` is enabled hence when multiple 929eea92a1SOlivier Deprez secure partitions are to be loaded by BL2 on behalf of the SPMC. 93fcb1398fSOlivier Deprez 94f1910cc1SGovindraj Raja+---------------+------------------+-------------+-------------------------+ 95f1910cc1SGovindraj Raja| | SPMD_SPM_AT_SEL2 | SPMC_AT_EL3 | CTX_INCLUDE_EL2_REGS(*) | 96f1910cc1SGovindraj Raja+---------------+------------------+-------------+-------------------------+ 971d63ae4dSMarc Bonnici| SPMC at S-EL1 | 0 | 0 | 0 | 98f1910cc1SGovindraj Raja+---------------+------------------+-------------+-------------------------+ 99f1910cc1SGovindraj Raja| SPMC at S-EL2 | 1 (default when | 0 | 1 | 100f1910cc1SGovindraj Raja| | SPD=spmd) | | | 101f1910cc1SGovindraj Raja+---------------+------------------+-------------+-------------------------+ 102f1910cc1SGovindraj Raja| SPMC at EL3 | 0 | 1 | 0 | 103f1910cc1SGovindraj Raja+---------------+------------------+-------------+-------------------------+ 104fcb1398fSOlivier Deprez 105fcb1398fSOlivier DeprezOther combinations of such build options either break the build or are not 106fcb1398fSOlivier Deprezsupported. 107fcb1398fSOlivier Deprez 108b5dd2422SOlivier DeprezNotes: 109b5dd2422SOlivier Deprez 110b5dd2422SOlivier Deprez- Only Arm's FVP platform is supported to use with the TF-A reference software 111b5dd2422SOlivier Deprez stack. 1129eea92a1SOlivier Deprez- When ``SPMD_SPM_AT_SEL2=1``, the reference software stack assumes enablement 113*6f2b8810SSona Mathew of FEAT_PAuth, FEAT_BTI and FEAT_MTE2 architecture extensions. 114f1910cc1SGovindraj Raja- ``(*) CTX_INCLUDE_EL2_REGS``, this flag is |TF-A| internal and informational 115f1910cc1SGovindraj Raja in this table. When set, it provides the generic support for saving/restoring 116f1910cc1SGovindraj Raja EL2 registers required when S-EL2 firmware is present. 117b5dd2422SOlivier Deprez- BL32 option is re-purposed to specify the SPMC image. It can specify either 118b5dd2422SOlivier Deprez the Hafnium binary path (built for the secure world) or the path to a TEE 119b5dd2422SOlivier Deprez binary implementing FF-A interfaces. 120b5dd2422SOlivier Deprez- BL33 option can specify the TFTF binary or a normal world loader 1219eea92a1SOlivier Deprez such as U-Boot or the UEFI framework payload. 122fcb1398fSOlivier Deprez 1239eea92a1SOlivier DeprezSample TF-A build command line when the SPMC is located at S-EL1 1249eea92a1SOlivier Deprez(e.g. when the FEAT_SEL2 architecture extension is not implemented): 125fcb1398fSOlivier Deprez 126fcb1398fSOlivier Deprez.. code:: shell 127fcb1398fSOlivier Deprez 128fcb1398fSOlivier Deprez make \ 129fcb1398fSOlivier Deprez CROSS_COMPILE=aarch64-none-elf- \ 130fcb1398fSOlivier Deprez SPD=spmd \ 131fcb1398fSOlivier Deprez SPMD_SPM_AT_SEL2=0 \ 132fcb1398fSOlivier Deprez BL32=<path-to-tee-binary> \ 133b5dd2422SOlivier Deprez BL33=<path-to-bl33-binary> \ 134fcb1398fSOlivier Deprez PLAT=fvp \ 135fcb1398fSOlivier Deprez all fip 136fcb1398fSOlivier Deprez 1379eea92a1SOlivier DeprezSample TF-A build command line when FEAT_SEL2 architecture extension is 1389eea92a1SOlivier Deprezimplemented and the SPMC is located at S-EL2: 139b2836dfeSNicola Mazzucato 140fcb1398fSOlivier Deprez.. code:: shell 141fcb1398fSOlivier Deprez 142fcb1398fSOlivier Deprez make \ 143fcb1398fSOlivier Deprez CROSS_COMPILE=aarch64-none-elf- \ 144b5dd2422SOlivier Deprez PLAT=fvp \ 145fcb1398fSOlivier Deprez SPD=spmd \ 146b5dd2422SOlivier Deprez ARM_ARCH_MINOR=5 \ 147b5dd2422SOlivier Deprez BRANCH_PROTECTION=1 \ 148b5dd2422SOlivier Deprez CTX_INCLUDE_PAUTH_REGS=1 \ 149c282384dSGovindraj Raja ENABLE_FEAT_MTE2=1 \ 150b5dd2422SOlivier Deprez BL32=<path-to-hafnium-binary> \ 151b5dd2422SOlivier Deprez BL33=<path-to-bl33-binary> \ 152fcb1398fSOlivier Deprez SP_LAYOUT_FILE=sp_layout.json \ 153fcb1398fSOlivier Deprez all fip 154fcb1398fSOlivier Deprez 1559eea92a1SOlivier DeprezSample TF-A build command line when FEAT_SEL2 architecture extension is 1569eea92a1SOlivier Deprezimplemented, the SPMC is located at S-EL2, and enabling secure boot: 157b2836dfeSNicola Mazzucato 158fcb1398fSOlivier Deprez.. code:: shell 159fcb1398fSOlivier Deprez 160fcb1398fSOlivier Deprez make \ 161fcb1398fSOlivier Deprez CROSS_COMPILE=aarch64-none-elf- \ 162b5dd2422SOlivier Deprez PLAT=fvp \ 163fcb1398fSOlivier Deprez SPD=spmd \ 164b5dd2422SOlivier Deprez ARM_ARCH_MINOR=5 \ 165b5dd2422SOlivier Deprez BRANCH_PROTECTION=1 \ 166b5dd2422SOlivier Deprez CTX_INCLUDE_PAUTH_REGS=1 \ 167c282384dSGovindraj Raja ENABLE_FEAT_MTE2=1 \ 168b5dd2422SOlivier Deprez BL32=<path-to-hafnium-binary> \ 169b5dd2422SOlivier Deprez BL33=<path-to-bl33-binary> \ 170b5dd2422SOlivier Deprez SP_LAYOUT_FILE=sp_layout.json \ 171fcb1398fSOlivier Deprez MBEDTLS_DIR=<path-to-mbedtls-lib> \ 172fcb1398fSOlivier Deprez TRUSTED_BOARD_BOOT=1 \ 173fcb1398fSOlivier Deprez COT=dualroot \ 174fcb1398fSOlivier Deprez ARM_ROTPK_LOCATION=devel_rsa \ 175fcb1398fSOlivier Deprez ROT_KEY=plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem \ 176fcb1398fSOlivier Deprez GENERATE_COT=1 \ 177fcb1398fSOlivier Deprez all fip 178fcb1398fSOlivier Deprez 1799eea92a1SOlivier DeprezSample TF-A build command line when the SPMC is located at EL3: 1801d63ae4dSMarc Bonnici 1811d63ae4dSMarc Bonnici.. code:: shell 1821d63ae4dSMarc Bonnici 1831d63ae4dSMarc Bonnici make \ 1841d63ae4dSMarc Bonnici CROSS_COMPILE=aarch64-none-elf- \ 1851d63ae4dSMarc Bonnici SPD=spmd \ 1861d63ae4dSMarc Bonnici SPMD_SPM_AT_SEL2=0 \ 1871d63ae4dSMarc Bonnici SPMC_AT_EL3=1 \ 1881d63ae4dSMarc Bonnici BL32=<path-to-tee-binary> \ 1891d63ae4dSMarc Bonnici BL33=<path-to-bl33-binary> \ 1901d63ae4dSMarc Bonnici PLAT=fvp \ 1911d63ae4dSMarc Bonnici all fip 1921d63ae4dSMarc Bonnici 193801cd3c8SNishant SharmaSample TF-A build command line when the SPMC is located at EL3 and SEL0 SP is 194801cd3c8SNishant Sharmaenabled: 195801cd3c8SNishant Sharma 196801cd3c8SNishant Sharma.. code:: shell 197801cd3c8SNishant Sharma 198801cd3c8SNishant Sharma make \ 199801cd3c8SNishant Sharma CROSS_COMPILE=aarch64-none-elf- \ 200801cd3c8SNishant Sharma SPD=spmd \ 201801cd3c8SNishant Sharma SPMD_SPM_AT_SEL2=0 \ 202801cd3c8SNishant Sharma SPMC_AT_EL3=1 \ 203801cd3c8SNishant Sharma SPMC_AT_EL3_SEL0_SP=1 \ 204801cd3c8SNishant Sharma BL32=<path-to-tee-binary> \ 205801cd3c8SNishant Sharma BL33=<path-to-bl33-binary> \ 206801cd3c8SNishant Sharma PLAT=fvp \ 207801cd3c8SNishant Sharma all fip 208801cd3c8SNishant Sharma 209fcb1398fSOlivier DeprezBoot process 210fcb1398fSOlivier Deprez============ 211fcb1398fSOlivier Deprez 21265e573fcSMadhukar PappireddyThe boot process involving SPMC is highly dependent on the SPMC implementation. 21365e573fcSMadhukar PappireddyIt is recommended to refer to corresponding SPMC documentation for further 21465e573fcSMadhukar Pappireddydetails. Some aspects of boot process are described here in the greater interest 21565e573fcSMadhukar Pappireddyof the project. 216fcb1398fSOlivier Deprez 217fcb1398fSOlivier DeprezSPMC boot 21865e573fcSMadhukar Pappireddy--------- 219fcb1398fSOlivier Deprez 22065e573fcSMadhukar PappireddyWhen SPMC resides at a lower EL i.e., S-EL1 or S-EL2, it is loaded by BL2 as the 22165e573fcSMadhukar PappireddyBL32 image. The SPMC manifest is loaded by BL2 as the ``TOS_FW_CONFIG`` image `[7]`_. 222fcb1398fSOlivier Deprez 22365e573fcSMadhukar PappireddyBL2 passes the SPMC manifest address to BL31 through a register. At boot time, 22465e573fcSMadhukar Pappireddythe SPMD in BL31 runs from the primary core, initializes the core contexts and 22565e573fcSMadhukar Pappireddylaunches the SPMC (BL32) passing the following information through registers: 226f2dcf418SOlivier Deprez 227f2dcf418SOlivier Deprez- X0 holds the ``TOS_FW_CONFIG`` physical address (or SPMC manifest blob). 228f2dcf418SOlivier Deprez- X1 holds the ``HW_CONFIG`` physical address. 229f2dcf418SOlivier Deprez- X4 holds the currently running core linear id. 230fcb1398fSOlivier Deprez 231aeea04d4SRaghu Krishnamurthy 232fcb1398fSOlivier DeprezReferences 233fcb1398fSOlivier Deprez========== 234fcb1398fSOlivier Deprez 235fcb1398fSOlivier Deprez.. _[1]: 236fcb1398fSOlivier Deprez 2378a5bd3cfSOlivier Deprez[1] `Arm Firmware Framework for Arm A-profile <https://developer.arm.com/docs/den0077/latest>`__ 238fcb1398fSOlivier Deprez 239fcb1398fSOlivier Deprez.. _[2]: 240fcb1398fSOlivier Deprez 2416844c347SMadhukar Pappireddy[2] :ref:`Secure Partition Manager using MM interface<Secure Partition Manager (MM)>` 242fcb1398fSOlivier Deprez 243fcb1398fSOlivier Deprez.. _[3]: 244fcb1398fSOlivier Deprez 24565e573fcSMadhukar Pappireddy[3] https://hafnium.readthedocs.io/en/latest/secure-partition-manager/secure-partition-manager.html#secure-partitions-layout-file 246fcb1398fSOlivier Deprez 247fcb1398fSOlivier Deprez.. _[4]: 248fcb1398fSOlivier Deprez 249fcb1398fSOlivier Deprez[4] https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tree/lib/el3_runtime/aarch64/context.S#n45 250fcb1398fSOlivier Deprez 251fcb1398fSOlivier Deprez.. _[5]: 252fcb1398fSOlivier Deprez 25365e573fcSMadhukar Pappireddy[5] https://hafnium.readthedocs.io/en/latest/secure-partition-manager/index.html 254fcb1398fSOlivier Deprez 255fcb1398fSOlivier Deprez.. _[6]: 256fcb1398fSOlivier Deprez 25765e573fcSMadhukar Pappireddy[6] :ref:`EL3 Secure Partition Manager<EL3 Secure Partition Manager>` 258fcb1398fSOlivier Deprez 259fcb1398fSOlivier Deprez.. _[7]: 260fcb1398fSOlivier Deprez 26165e573fcSMadhukar Pappireddy[7] https://trustedfirmware-a.readthedocs.io/en/latest/design/firmware-design.html#dynamic-configuration-during-cold-boot 262f2dcf418SOlivier Deprez 263fcb1398fSOlivier Deprez-------------- 264fcb1398fSOlivier Deprez 2650a33adc0SGovindraj Raja*Copyright (c) 2020-2024, Arm Limited and Contributors. All rights reserved.* 266