aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEtienne Carriere <etienne.carriere@linaro.org>2020-04-29 18:17:48 +0200
committerJérôme Forissier <jerome@forissier.org>2020-05-04 16:14:28 +0200
commite7d7d25714970ad0cb33bd4125ec811221839d18 (patch)
treebacb3c78936322d223d0764d14c233f98b4bff1a
parent296403e1a2ce9d3a26123c02c31c8cd50869a5a5 (diff)
core: sm: remove #ifdef around CFG_SM_PLATFORM_HANDLER
Use IS_ENABLED() and weak attribute to remove conditional statement at pre-compilation time. Keep IS_ENABLED(CFG_SM_PLATFORM_HANDLER) in the decision to ensure weak function is not even called when CFG_SM_PLATFORM_HANDLER is disabled, for fast path consideration of secure monitor traversal. Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Jerome Forissier <jerome@forissier.org>
-rw-r--r--core/arch/arm/include/sm/sm.h2
-rw-r--r--core/arch/arm/sm/sm.c10
2 files changed, 7 insertions, 5 deletions
diff --git a/core/arch/arm/include/sm/sm.h b/core/arch/arm/include/sm/sm.h
index a03c920b..16792cff 100644
--- a/core/arch/arm/include/sm/sm.h
+++ b/core/arch/arm/include/sm/sm.h
@@ -118,13 +118,11 @@ enum sm_handler_ret {
SM_HANDLER_PENDING_SMC,
};
-#ifdef CFG_SM_PLATFORM_HANDLER
/*
* Returns whether SMC was handled from platform handler in secure monitor
* or if it shall reach OP-TEE core .
*/
enum sm_handler_ret sm_platform_handler(struct sm_ctx *ctx);
-#endif
void sm_save_unbanked_regs(struct sm_unbanked_regs *regs);
void sm_restore_unbanked_regs(struct sm_unbanked_regs *regs);
diff --git a/core/arch/arm/sm/sm.c b/core/arch/arm/sm/sm.c
index a668d15e..44a4cd5e 100644
--- a/core/arch/arm/sm/sm.c
+++ b/core/arch/arm/sm/sm.c
@@ -15,6 +15,11 @@
#include <string.h>
#include "sm_private.h"
+enum sm_handler_ret __weak sm_platform_handler(struct sm_ctx *ctx __unused)
+{
+ return SM_HANDLER_PENDING_SMC;
+}
+
static void smc_arch_handler(struct thread_smc_args *args)
{
uint32_t smc_fid = args->a0;
@@ -62,10 +67,9 @@ uint32_t sm_from_nsec(struct sm_ctx *ctx)
COMPILE_TIME_ASSERT(!(offsetof(struct sm_ctx, nsec.r0) % 8));
COMPILE_TIME_ASSERT(!(sizeof(struct sm_ctx) % 8));
-#ifdef CFG_SM_PLATFORM_HANDLER
- if (sm_platform_handler(ctx) == SM_HANDLER_SMC_HANDLED)
+ if (IS_ENABLED(CFG_SM_PLATFORM_HANDLER) &&
+ sm_platform_handler(ctx) == SM_HANDLER_SMC_HANDLED)
return SM_EXIT_TO_NON_SECURE;
-#endif
switch (OPTEE_SMC_OWNER_NUM(args->a0)) {
case OPTEE_SMC_OWNER_STANDARD: