From cb03c917658c551c9f63d5093b831a961560f224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Date: Tue, 4 Aug 2015 16:19:27 -0700 Subject: trusty: Add fpu/simd support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The original patch has been partly merged. This adds the missing pieces. Change-Id: I77fd434feab396ff05d9b8e0c1761e4dd588a701 Signed-off-by: Arve Hjønnevåg --- services/spd/trusty/trusty.c | 7 +++---- services/spd/trusty/trusty.mk | 2 ++ 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'services') 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 -- cgit v1.2.3