diff --git a/arch/arm/core/cortex_m/fpu.c b/arch/arm/core/cortex_m/fpu.c index b937d725c2834..2b11487e448be 100644 --- a/arch/arm/core/cortex_m/fpu.c +++ b/arch/arm/core/cortex_m/fpu.c @@ -16,7 +16,7 @@ void z_arm_save_fp_context(struct fpu_ctx_full *buffer) { -#if defined(CONFIG_FPU_SHARING) +#if defined(CONFIG_FPU) __ASSERT_NO_MSG(buffer != NULL); uint32_t CONTROL = __get_CONTROL(); @@ -44,7 +44,7 @@ void z_arm_save_fp_context(struct fpu_ctx_full *buffer) void z_arm_restore_fp_context(const struct fpu_ctx_full *buffer) { -#if defined(CONFIG_FPU_SHARING) +#if defined(CONFIG_FPU) if (buffer->ctx_saved) { /* Set FPCA first so it is set even if an interrupt happens * during restoration. @@ -61,3 +61,17 @@ void z_arm_restore_fp_context(const struct fpu_ctx_full *buffer) } #endif } + +void z_arm_save_shared_fp_context(struct fpu_ctx_full *buffer) +{ +#if defined(CONFIG_FPU_SHARING) + z_arm_save_fp_context(buffer); +#endif +} + +void z_arm_restore_shared_fp_context(struct fpu_ctx_full *buffer) +{ +#if defined(CONFIG_FPU_SHARING) + z_arm_restore_fp_context(buffer); +#endif +} diff --git a/include/zephyr/arch/arm/cortex_m/fpu.h b/include/zephyr/arch/arm/cortex_m/fpu.h index cf01fddf4f938..e5b9ade31ed60 100644 --- a/include/zephyr/arch/arm/cortex_m/fpu.h +++ b/include/zephyr/arch/arm/cortex_m/fpu.h @@ -7,6 +7,9 @@ #ifndef ZEPHYR_INCLUDE_ARCH_ARM_CORTEX_M_FPU_H_ #define ZEPHYR_INCLUDE_ARCH_ARM_CORTEX_M_FPU_H_ +#include +#include + struct fpu_ctx_full { uint32_t caller_saved[16]; uint32_t callee_saved[16]; @@ -16,5 +19,7 @@ struct fpu_ctx_full { void z_arm_save_fp_context(struct fpu_ctx_full *buffer); void z_arm_restore_fp_context(const struct fpu_ctx_full *buffer); +void z_arm_save_shared_fp_context(struct fpu_ctx_full *buffer) +void z_arm_restore_shared_fp_context(const struct fpu_ctx_full *buffer); #endif /* ZEPHYR_INCLUDE_ARCH_ARM_CORTEX_M_FPU_H_ */ diff --git a/modules/trusted-firmware-m/interface/interface.c b/modules/trusted-firmware-m/interface/interface.c index abff7efdc72f5..5645792220870 100644 --- a/modules/trusted-firmware-m/interface/interface.c +++ b/modules/trusted-firmware-m/interface/interface.c @@ -55,11 +55,11 @@ int32_t tfm_ns_interface_dispatch(veneer_fn fn, struct fpu_ctx_full context_buffer; - z_arm_save_fp_context(&context_buffer); + z_arm_save_shared_fp_context(&context_buffer); result = fn(arg0, arg1, arg2, arg3); - z_arm_restore_fp_context(&context_buffer); + z_arm_restore_shared_fp_context(&context_buffer); if (!isr_mode) { #if !defined(CONFIG_ARM_NONSECURE_PREEMPTIBLE_SECURE_CALLS)