From 2f79a047673d9432c0af51fb0142f20ad28cf3f3 Mon Sep 17 00:00:00 2001 From: Etienne Carriere Date: Tue, 5 Nov 2019 23:03:04 +0100 Subject: [PATCH 1/6] framework: define max_align_t when BUILD_OPTEE When BUILD_OPTEE is enabled, fwk_align.h provides a typedef for max_align_t expected by SCP-firmware. max_align_t is a CPP typedef expected from / [1]. [1] https://en.cppreference.com/w/cpp/types/max_align_t Signed-off-by: Etienne Carriere --- framework/include/fwk_align.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/framework/include/fwk_align.h b/framework/include/fwk_align.h index 52d7e3a07..dedf4862a 100644 --- a/framework/include/fwk_align.h +++ b/framework/include/fwk_align.h @@ -22,4 +22,11 @@ # include #endif +#ifdef BUILD_OPTEE +#include +#ifndef _GCC_MAX_ALIGN_T +typedef uintmax_t max_align_t; +#endif +#endif /*BUILD_OPTEE*/ + #endif /* FWK_ALIGN_H */ -- GitLab From 1cd54190f119e71ed422e92cc50407bc28b4efdb Mon Sep 17 00:00:00 2001 From: Etienne Carriere Date: Tue, 5 Nov 2019 23:06:47 +0100 Subject: [PATCH 2/6] framework: define FWK_HOST_PRINT for BUILD_OPTEE OP-TEE native trace uses xMSG() macros. This change uses DMSG() debug level trace for macro FWK_HOST_PRINT(). Signed-off-by: Etienne Carriere --- framework/include/fwk_host.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/framework/include/fwk_host.h b/framework/include/fwk_host.h index 8cb210a0a..ff94047c3 100644 --- a/framework/include/fwk_host.h +++ b/framework/include/fwk_host.h @@ -23,6 +23,9 @@ */ #define FWK_HOST_PRINT printf +#elif defined(BUILD_OPTEE) +#include +#define FWK_HOST_PRINT(...) DMSG(__VA_ARGS__) #else #define FWK_HOST_PRINT(...) \ do { \ -- GitLab From e040bdeaa3bd1429ebab4cf81976e11817df1950 Mon Sep 17 00:00:00 2001 From: Etienne Carriere Date: Tue, 5 Nov 2019 23:07:17 +0100 Subject: [PATCH 3/6] framework: add __fwk_run_event() API in framework __fwk_run_event() processes all pending messages in the SCP-firmware and returns on completion. This function mimics __fwk_thread_run() bu that it does not endlessly loops for new pending messages. Signed-off-by: Etienne Carriere Signed-off-by: Vincent Guittot --- framework/include/internal/fwk_thread.h | 7 +++++++ framework/src/fwk_thread.c | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/framework/include/internal/fwk_thread.h b/framework/include/internal/fwk_thread.h index 09988a558..fbdd981c5 100644 --- a/framework/include/internal/fwk_thread.h +++ b/framework/include/internal/fwk_thread.h @@ -31,6 +31,13 @@ int __fwk_thread_init(size_t event_count); */ noreturn void __fwk_thread_run(void); +/* + * \brief Processing events already raised by modules and interrupt handlers. + * + * \return The function does not return. + */ +void __fwk_run_event(void); + /* * \brief Get the event being currently processed. * diff --git a/framework/src/fwk_thread.c b/framework/src/fwk_thread.c index 0982a3194..9ac803c59 100644 --- a/framework/src/fwk_thread.c +++ b/framework/src/fwk_thread.c @@ -172,6 +172,19 @@ noreturn void __fwk_thread_run(void) } } +void __fwk_run_event(void) +{ + for (;;) { + while (!fwk_list_is_empty(&ctx.event_queue)) + process_next_event(); + + if (fwk_list_is_empty(&ctx.isr_event_queue)) + return; + + process_isr(); + } +} + struct __fwk_thread_ctx *__fwk_thread_get_ctx(void) { return &ctx; -- GitLab From 562ec02e95d4115e2e6d37a5c381129ab4ea01a6 Mon Sep 17 00:00:00 2001 From: Etienne Carriere Date: Tue, 5 Nov 2019 23:07:45 +0100 Subject: [PATCH 4/6] framweork: trace message maybe unused with BUILD_OPTEE When BUILD_OPTEE is enabled and OP-TEE core uses a low verbosity level framework trace may be unused as not embedded in firmware. This change allows BUILD_OPTEE not not fail to build on unused variable. Signed-off-by: Etienne Carriere --- framework/src/fwk_multi_thread.c | 9 ++++++--- framework/src/fwk_thread.c | 8 +++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/framework/src/fwk_multi_thread.c b/framework/src/fwk_multi_thread.c index 546d2fc75..96418df45 100644 --- a/framework/src/fwk_multi_thread.c +++ b/framework/src/fwk_multi_thread.c @@ -25,9 +25,12 @@ #define SIGNAL_NO_READY_THREAD 0x08 static struct __fwk_multi_thread_ctx ctx; -#ifdef BUILD_HOST -static const char err_msg_line[] = "[THR] Error %d @%d\n"; -static const char err_msg_func[] = "[THR] Error %d in %s\n"; + +#if defined(BUILD_HOST) || defined(BUILD_OPTEE) +static const char __attribute__((unused)) err_msg_line[] = + "[THR] Error %d @%d\n"; +static const char __attribute__((unused)) err_msg_func[] = + "[THR] Error %d in %s\n"; #endif /* diff --git a/framework/src/fwk_thread.c b/framework/src/fwk_thread.c index 9ac803c59..2e92a0609 100644 --- a/framework/src/fwk_thread.c +++ b/framework/src/fwk_thread.c @@ -24,9 +24,11 @@ static struct __fwk_thread_ctx ctx; -#ifdef BUILD_HOST -static const char err_msg_line[] = "[THR] Error %d in %s @%d\n"; -static const char err_msg_func[] = "[THR] Error %d in %s\n"; +#if defined(BUILD_HOST) || defined(BUILD_OPTEE) +static const char __attribute__((unused)) err_msg_line[] = + "[THR] Error %d in %s @%d\n"; +static const char __attribute__((unused)) err_msg_func[] = + "[THR] Error %d in %s\n"; #endif /* -- GitLab From 94ea587cc10c2b32b67d024223b57bad2ee9642c Mon Sep 17 00:00:00 2001 From: Etienne Carriere Date: Tue, 5 Nov 2019 23:09:01 +0100 Subject: [PATCH 5/6] framework: trap API with panic() when BUILD_OPTEE Whe BUILD_OPTEE is enabled, fwk_trap() reles on OP-TEE panic(). Signed-off-by: Etienne Carriere --- framework/src/fwk_assert.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/framework/src/fwk_assert.c b/framework/src/fwk_assert.c index 0f9d92833..06ba72128 100644 --- a/framework/src/fwk_assert.c +++ b/framework/src/fwk_assert.c @@ -8,6 +8,10 @@ #include #include +#if defined(BUILD_OPTEE) +#include +#endif + void fwk_trap(void) { #ifdef BUILD_MODE_DEBUG @@ -28,6 +32,8 @@ void fwk_unreachable(void) { #ifdef BUILD_MODE_DEBUG fwk_trap(); + #elif defined(BUILD_OPTEE) + panic(); #else /* * Let the optimizer know that anything after this point is unreachable. -- GitLab From 34b9d68c8a0842107c45c0115cab4accc616321d Mon Sep 17 00:00:00 2001 From: Etienne Carriere Date: Tue, 5 Nov 2019 23:12:27 +0100 Subject: [PATCH 6/6] framework: initialization does not run thread loop when BUILD_OPTEE When BUILD_OPTEE is enabled, the SCMI server does not enter framework message processing endless loop upon initialization completion. Signed-off-by: Etienne Carriere --- framework/src/fwk_module.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/src/fwk_module.c b/framework/src/fwk_module.c index f42b1a29e..3450b94db 100644 --- a/framework/src/fwk_module.c +++ b/framework/src/fwk_module.c @@ -55,7 +55,7 @@ extern const struct fwk_module_config *module_config_table[]; static struct context ctx; -#ifdef BUILD_HOST +#if defined(BUILD_HOST) || defined(BUILD_OPTEE) static const char err_msg_line[] = "[MOD] Error %d in %s @%d\n"; static const char err_msg_func[] = "[MOD] Error %d in %s\n"; #endif @@ -419,7 +419,9 @@ int __fwk_module_init(void) ctx.initialized = true; + #ifndef BUILD_OPTEE __fwk_thread_run(); + #endif return FWK_SUCCESS; } -- GitLab