From 801cd3c84a7bb8a66c5a40de25e611ec6448239c Mon Sep 17 00:00:00 2001 From: Nishant Sharma <nishant.sharma@arm.com> Date: Tue, 27 Jun 2023 00:36:01 +0100 Subject: [PATCH] feat(el3-spmc): add a flag to enable support to load SEL0 SP Introduce a build flag for enabling the support for loading SEL0 SP in EL3 SPMC. Signed-off-by: Nishant Sharma <nishant.sharma@arm.com> Change-Id: I1d63ae4d0d8374a732113565be90d58861506e39 --- Makefile | 8 ++++++++ docs/components/secure-partition-manager.rst | 18 ++++++++++++++++++ docs/getting_started/build-options.rst | 4 ++++ make_helpers/defaults.mk | 3 +++ 4 files changed, 33 insertions(+) diff --git a/Makefile b/Makefile index 94dfc3e16..907ae21d4 100644 --- a/Makefile +++ b/Makefile @@ -599,6 +599,12 @@ ifneq (${SPD},none) ifneq ($(SP_LAYOUT_FILE),) BL2_ENABLE_SP_LOAD := 1 endif + + ifeq ($(SPMC_AT_EL3_SEL0_SP),1) + ifneq ($(SPMC_AT_EL3),1) + $(error SEL0 SP cannot be enabled without SPMC at EL3) + endif + endif else # All other SPDs in spd directory SPD_DIR := spd @@ -1191,6 +1197,7 @@ $(eval $(call assert_booleans,\ SPIN_ON_BL1_EXIT \ SPM_MM \ SPMC_AT_EL3 \ + SPMC_AT_EL3_SEL0_SP \ SPMD_SPM_AT_SEL2 \ ENABLE_SPMD_LP \ TRANSFER_LIST \ @@ -1355,6 +1362,7 @@ $(eval $(call add_defines,\ SPIN_ON_BL1_EXIT \ SPM_MM \ SPMC_AT_EL3 \ + SPMC_AT_EL3_SEL0_SP \ SPMD_SPM_AT_SEL2 \ TRANSFER_LIST \ TRUSTED_BOARD_BOOT \ diff --git a/docs/components/secure-partition-manager.rst b/docs/components/secure-partition-manager.rst index d4f0b0081..5d3adec82 100644 --- a/docs/components/secure-partition-manager.rst +++ b/docs/components/secure-partition-manager.rst @@ -152,6 +152,8 @@ SPMC located at S-EL1, S-EL2 or EL3: exception level is set to S-EL1. ``SPMD_SPM_AT_SEL2`` is enabled. The context save/restore routine and exhaustive list of registers is visible at `[4]`_. +- **SPMC_AT_EL3_SEL0_SP**: this option enables the support to load SEL0 SP + when SPMC at EL3 support is enabled. - **SP_LAYOUT_FILE**: this option specifies a text description file providing paths to SP binary images and manifests in DTS format (see `Describing secure partitions`_). It @@ -257,6 +259,22 @@ Sample TF-A build command line when the SPMC is located at EL3: PLAT=fvp \ all fip +Sample TF-A build command line when the SPMC is located at EL3 and SEL0 SP is +enabled: + +.. code:: shell + + make \ + CROSS_COMPILE=aarch64-none-elf- \ + SPD=spmd \ + SPMD_SPM_AT_SEL2=0 \ + SPMC_AT_EL3=1 \ + SPMC_AT_EL3_SEL0_SP=1 \ + BL32=<path-to-tee-binary> \ + BL33=<path-to-bl33-binary> \ + PLAT=fvp \ + all fip + FVP model invocation ==================== diff --git a/docs/getting_started/build-options.rst b/docs/getting_started/build-options.rst index c045a6aa2..cf8002d64 100644 --- a/docs/getting_started/build-options.rst +++ b/docs/getting_started/build-options.rst @@ -900,6 +900,10 @@ Common build options disabled). This configuration supports pre-Armv8.4 platforms (aka not implementing the ``FEAT_SEL2`` extension). This is an experimental feature. +- ``SPMC_AT_EL3_SEL0_SP`` : Boolean option to enable SEL0 SP load support when + ``SPMC_AT_EL3`` is enabled. The default value if ``0`` (disabled). This + option cannot be enabled (``1``) when (``SPMC_AT_EL3``) is disabled. + - ``SPMC_OPTEE`` : This boolean option is used jointly with the SPM Dispatcher option (``SPD=spmd``) and with ``SPMD_SPM_AT_SEL2=0`` to indicate that the SPMC at S-EL1 is OP-TEE and an OP-TEE specific loading diff --git a/make_helpers/defaults.mk b/make_helpers/defaults.mk index f31365a1f..ea22655ce 100644 --- a/make_helpers/defaults.mk +++ b/make_helpers/defaults.mk @@ -240,6 +240,9 @@ SPM_MM := 0 # Use the FF-A SPMC implementation in EL3. SPMC_AT_EL3 := 0 +# Enable SEL0 SP when SPMC is enabled at EL3 +SPMC_AT_EL3_SEL0_SP :=0 + # Use SPM at S-EL2 as a default config for SPMD SPMD_SPM_AT_SEL2 := 1