aboutsummaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
authorOlivier Deprez <olivier.deprez@arm.com>2020-12-01 15:33:59 +0100
committerMax Shvetsov <maksims.svecovs@arm.com>2021-02-12 10:54:08 +0000
commitbedb13f509ac68adaf9baa9b5f24eede912e801d (patch)
treea15d05dca6a07c5d2b9f1c39a8cdeaeb79fb202e /services
parentd3e145b4cdedd9aece87d603b30a1d539e20c5a5 (diff)
downloadtrusted-firmware-a-bedb13f509ac68adaf9baa9b5f24eede912e801d.tar.gz
spmd: ensure SIMD context is saved/restored on SPMC entry/exit
Signed-off-by: Olivier Deprez <olivier.deprez@arm.com> Change-Id: I8ed58ec5f97e05d91451020a2739464bb8e428b3
Diffstat (limited to 'services')
-rw-r--r--services/std_svc/spmd/spmd_main.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/services/std_svc/spmd/spmd_main.c b/services/std_svc/spmd/spmd_main.c
index 6aab5588ba..a076be255d 100644
--- a/services/std_svc/spmd/spmd_main.c
+++ b/services/std_svc/spmd/spmd_main.c
@@ -109,6 +109,7 @@ uint64_t spmd_spm_core_sync_entry(spmd_spm_core_context_t *spmc_ctx)
/* Restore the context assigned above */
cm_el1_sysregs_context_restore(SECURE);
+
#if SPMD_SPM_AT_SEL2
cm_el2_sysregs_context_restore(SECURE);
#endif
@@ -348,12 +349,18 @@ static uint64_t spmd_smc_forward(uint32_t smc_fid,
/* Save incoming security state */
cm_el1_sysregs_context_save(secure_state_in);
+#if CTX_INCLUDE_FPREGS
+ fpregs_context_save(get_fpregs_ctx(cm_get_context(secure_state_in)));
+#endif
#if SPMD_SPM_AT_SEL2
cm_el2_sysregs_context_save(secure_state_in);
#endif
/* Restore outgoing security state */
cm_el1_sysregs_context_restore(secure_state_out);
+#if CTX_INCLUDE_FPREGS
+ fpregs_context_restore(get_fpregs_ctx(cm_get_context(secure_state_out)));
+#endif
#if SPMD_SPM_AT_SEL2
cm_el2_sysregs_context_restore(secure_state_out);
#endif