summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
authorArve Hjønnevåg <arve@android.com>2015-08-04 16:19:27 -0700
committerArve Hjønnevåg <arve@android.com>2018-01-24 17:40:20 -0800
commitcb03c917658c551c9f63d5093b831a961560f224 (patch)
treea0b8f236897bcd780baf10f8d5aa5be8075e6452 /services
parent61496151c0a1fc692ba0e58d34d1fde7c1c31808 (diff)
trusty: Add fpu/simd support
The original patch has been partly merged. This adds the missing pieces. Change-Id: I77fd434feab396ff05d9b8e0c1761e4dd588a701 Signed-off-by: Arve Hjønnevåg <arve@android.com>
Diffstat (limited to 'services')
-rw-r--r--services/spd/trusty/trusty.c7
-rw-r--r--services/spd/trusty/trusty.mk2
2 files changed, 5 insertions, 4 deletions
diff --git a/services/spd/trusty/trusty.c b/services/spd/trusty/trusty.c
index 08767bb5..6e80b7b7 100644
--- a/services/spd/trusty/trusty.c
+++ b/services/spd/trusty/trusty.c
@@ -105,10 +105,8 @@ static struct args trusty_context_switch(uint32_t security_state, uint64_t r0,
* when it's needed the PSCI caller has preserved FP context before
* going here.
*/
-#if CTX_INCLUDE_FPREGS
if (r0 != SMC_FC_CPU_SUSPEND && r0 != SMC_FC_CPU_RESUME)
fpregs_context_save(get_fpregs_ctx(cm_get_context(security_state)));
-#endif
cm_el1_sysregs_context_save(security_state);
ctx->saved_security_state = security_state;
@@ -117,10 +115,8 @@ static struct args trusty_context_switch(uint32_t security_state, uint64_t r0,
assert(ctx->saved_security_state == !security_state);
cm_el1_sysregs_context_restore(security_state);
-#if CTX_INCLUDE_FPREGS
if (r0 != SMC_FC_CPU_SUSPEND && r0 != SMC_FC_CPU_RESUME)
fpregs_context_restore(get_fpregs_ctx(cm_get_context(security_state)));
-#endif
cm_set_next_eret_context(security_state);
@@ -299,6 +295,7 @@ static int32_t trusty_init(void)
ep_info = bl31_plat_get_next_image_ep_info(SECURE);
assert(ep_info);
+ fpregs_context_save(get_fpregs_ctx(cm_get_context(NON_SECURE)));
cm_el1_sysregs_context_save(NON_SECURE);
cm_set_context(&ctx->cpu_ctx, SECURE);
@@ -315,6 +312,7 @@ static int32_t trusty_init(void)
}
cm_el1_sysregs_context_restore(SECURE);
+ fpregs_context_restore(get_fpregs_ctx(cm_get_context(SECURE)));
cm_set_next_eret_context(SECURE);
ctx->saved_security_state = ~0; /* initial saved state is invalid */
@@ -323,6 +321,7 @@ static int32_t trusty_init(void)
trusty_context_switch_helper(&ctx->saved_sp, &zero_args);
cm_el1_sysregs_context_restore(NON_SECURE);
+ fpregs_context_restore(get_fpregs_ctx(cm_get_context(NON_SECURE)));
cm_set_next_eret_context(NON_SECURE);
return 0;
diff --git a/services/spd/trusty/trusty.mk b/services/spd/trusty/trusty.mk
index 2e51bd5c..a571fa2c 100644
--- a/services/spd/trusty/trusty.mk
+++ b/services/spd/trusty/trusty.mk
@@ -14,3 +14,5 @@ SPD_SOURCES += services/spd/trusty/generic-arm64-smcall.c
endif
NEED_BL32 := yes
+
+CTX_INCLUDE_FPREGS := 1