fix(spm_mm): do not compile if SVE/SME is enabled

As spm_mm cannot handle SVE/SME usage in NS world so its better to give
compilation error when ENABLE_SVE_FOR_NS=1 or ENABLE_SME_FOR_NS=1.

Signed-off-by: Manish Pandey <manish.pandey2@arm.com>
Change-Id: I69dbb272ca681bb020501342008eda20d4c0b096
This commit is contained in:
Manish Pandey 2021-11-15 15:29:08 +00:00
parent 3015267f60
commit 4333f95bed
3 changed files with 13 additions and 6 deletions

View File

@ -134,8 +134,8 @@ Interface). This will be referred to as the *Standalone MM Secure Partition* in
the rest of this document. the rest of this document.
To enable SPM support in TF-A, the source code must be compiled with the build To enable SPM support in TF-A, the source code must be compiled with the build
flag ``SPM_MM=1``, along with ``EL3_EXCEPTION_HANDLING=1``. On Arm flag ``SPM_MM=1``, along with ``EL3_EXCEPTION_HANDLING=1`` and ``ENABLE_SVE_FOR_NS=0``.
platforms the build option ``ARM_BL31_IN_DRAM`` must be set to 1. Also, the On Arm platforms the build option ``ARM_BL31_IN_DRAM`` must be set to 1. Also, the
location of the binary that contains the BL32 image location of the binary that contains the BL32 image
(``BL32=path/to/image.bin``) must be specified. (``BL32=path/to/image.bin``) must be specified.
@ -148,7 +148,7 @@ image in the FIP:
.. code:: shell .. code:: shell
BL32=path/to/standalone/mm/sp BL33=path/to/bl33.bin \ BL32=path/to/standalone/mm/sp BL33=path/to/bl33.bin \
make PLAT=fvp SPM_MM=1 EL3_EXCEPTION_HANDLING=1 ARM_BL31_IN_DRAM=1 all fip make PLAT=fvp SPM_MM=1 EL3_EXCEPTION_HANDLING=1 ENABLE_SVE_FOR_NS=0 ARM_BL31_IN_DRAM=1 all fip
Describing Secure Partition resources Describing Secure Partition resources
------------------------------------- -------------------------------------

View File

@ -305,8 +305,8 @@ Common build options
ENABLE_SME_FOR_SWD=1 will cause SME, SVE, and FPU/SIMD instructions in secure ENABLE_SME_FOR_SWD=1 will cause SME, SVE, and FPU/SIMD instructions in secure
world to trap to EL3. SME is an optional architectural feature for AArch64 world to trap to EL3. SME is an optional architectural feature for AArch64
and TF-A support is experimental. At this time, this build option cannot be and TF-A support is experimental. At this time, this build option cannot be
used on systems that have SPD=spmd or ENABLE_RME, and attempting to build used on systems that have SPD=spmd/SPM_MM or ENABLE_RME, and attempting to
with these options will fail. Default is 0. build with these options will fail. Default is 0.
- ``ENABLE_SME_FOR_SWD``: Boolean option to enable the Scalable Matrix - ``ENABLE_SME_FOR_SWD``: Boolean option to enable the Scalable Matrix
Extension for secure world use along with SVE and FPU/SIMD, ENABLE_SME_FOR_NS Extension for secure world use along with SVE and FPU/SIMD, ENABLE_SME_FOR_NS
@ -329,7 +329,8 @@ Common build options
compatible with the ``CTX_INCLUDE_FPREGS`` build option, and will raise an compatible with the ``CTX_INCLUDE_FPREGS`` build option, and will raise an
assert on platforms where SVE is implemented and ``ENABLE_SVE_FOR_NS`` set to assert on platforms where SVE is implemented and ``ENABLE_SVE_FOR_NS`` set to
1. The default is 1 but is automatically disabled when ENABLE_SME_FOR_NS=1 1. The default is 1 but is automatically disabled when ENABLE_SME_FOR_NS=1
since SME encompasses SVE. since SME encompasses SVE. At this time, this build option cannot be used on
systems that have SPM_MM enabled.
- ``ENABLE_SVE_FOR_SWD``: Boolean option to enable SVE for the Secure world. - ``ENABLE_SVE_FOR_SWD``: Boolean option to enable SVE for the Secure world.
SVE is an optional architectural feature for AArch64. Note that this option SVE is an optional architectural feature for AArch64. Note that this option

View File

@ -10,6 +10,12 @@ endif
ifneq (${ARCH},aarch64) ifneq (${ARCH},aarch64)
$(error "Error: SPM_MM is only supported on aarch64.") $(error "Error: SPM_MM is only supported on aarch64.")
endif endif
ifeq (${ENABLE_SVE_FOR_NS},1)
$(error "Error: SPM_MM is not compatible with ENABLE_SVE_FOR_NS")
endif
ifeq (${ENABLE_SME_FOR_NS},1)
$(error "Error: SPM_MM is not compatible with ENABLE_SME_FOR_NS")
endif
SPM_SOURCES := $(addprefix services/std_svc/spm_mm/, \ SPM_SOURCES := $(addprefix services/std_svc/spm_mm/, \
${ARCH}/spm_mm_helpers.S \ ${ARCH}/spm_mm_helpers.S \