xref: /rk3399_ARM-atf/docs/components/secure-partition-manager.rst (revision 6f2b8810f6d48bde930d4384df4b6894effcd14f)
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