Merge changes from topic "ns/save_fpregs_context" into integration

* changes:
  feat(sgi): enable fpregs context save and restore
  feat(spm_mm): add support to save and restore fp regs
This commit is contained in:
Olivier Deprez 2022-05-13 17:28:58 +02:00 committed by TrustedFirmware Code Review
commit 0dc2b51681
3 changed files with 21 additions and 0 deletions

View File

@ -23,6 +23,8 @@ CSS_SGI_PLATFORM_VARIANT := 0
# Do not enable SVE
ENABLE_SVE_FOR_NS := 0
CTX_INCLUDE_FPREGS := 1
INTERCONNECT_SOURCES := ${CSS_ENT_BASE}/sgi_interconnect.c
PLAT_INCLUDES += -I${CSS_ENT_BASE}/include

View File

@ -16,6 +16,9 @@ endif
ifeq (${ENABLE_SME_FOR_NS},1)
$(error "Error: SPM_MM is not compatible with ENABLE_SME_FOR_NS")
endif
ifeq (${CTX_INCLUDE_FPREGS},0)
$(warning "Warning: SPM_MM: CTX_INCLUDE_FPREGS is set to 0")
endif
SPM_MM_SOURCES := $(addprefix services/std_svc/spm/spm_mm/, \
${ARCH}/spm_mm_shim_exceptions.S \

View File

@ -190,6 +190,14 @@ uint64_t spm_mm_sp_call(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3)
uint64_t rc;
sp_context_t *sp_ptr = &sp_ctx;
#if CTX_INCLUDE_FPREGS
/*
* SP runs to completion, no need to restore FP registers of secure context.
* Save FP registers only for non secure context.
*/
fpregs_context_save(get_fpregs_ctx(cm_get_context(NON_SECURE)));
#endif
/* Wait until the Secure Partition is idle and set it to busy. */
sp_state_wait_switch(sp_ptr, SP_STATE_IDLE, SP_STATE_BUSY);
@ -208,6 +216,14 @@ uint64_t spm_mm_sp_call(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3)
assert(sp_ptr->state == SP_STATE_BUSY);
sp_state_set(sp_ptr, SP_STATE_IDLE);
#if CTX_INCLUDE_FPREGS
/*
* SP runs to completion, no need to save FP registers of secure context.
* Restore only non secure world FP registers.
*/
fpregs_context_restore(get_fpregs_ctx(cm_get_context(NON_SECURE)));
#endif
return rc;
}