App: Create a dedicated mailbox thread
Create a dedicated mailbox thread to align with TF-M dual-cpu NS
mailbox new working model.
Update other NS mailbox APIs to align with TF-M changes.
Signed-off-by: David Hu <david.hu@arm.com>
Change-Id: I1eac4b84085b9e5a329cf82f7bf4e017fcf6062a
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index a98f856..aabdaed 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -37,6 +37,7 @@
${CMAKE_BINARY_DIR}/generated/interface/include
${INTERFACE_INC_DIR}/os_wrapper
$<$<BOOL:${TFM_MULTI_CORE_TOPOLOGY}>:${INTERFACE_INC_DIR}/multi_core>
+ $<$<BOOL:${TFM_MULTI_CORE_TOPOLOGY}>:${CMAKE_SOURCE_DIR}/platform/ext/cmsis>
)
# PSA interface files are generated from a template
@@ -58,6 +59,7 @@
$<$<BOOL:${TFM_NS_CLIENT_IDENTIFICATION}>:TFM_NS_CLIENT_IDENTIFICATION>
$<$<BOOL:${TFM_MULTI_CORE_TOPOLOGY}>:TFM_MULTI_CORE_TOPOLOGY>
$<$<BOOL:${TFM_MULTI_CORE_NS_OS}>:TFM_MULTI_CORE_NS_OS>
+ $<$<AND:$<BOOL:${TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD}>,$<BOOL:${TFM_MULTI_CORE_NS_OS}>>:TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD>
$<$<BOOL:${FORWARD_PROT_MSG}>:FORWARD_PROT_MSG>
)
@@ -82,10 +84,12 @@
if (TFM_MULTI_CORE_TOPOLOGY)
target_sources(tfm_api_ns PRIVATE
- ${INTERFACE_SRC_DIR}/multi_core/tfm_ns_mailbox.c
${INTERFACE_SRC_DIR}/multi_core/tfm_multi_core_ns_api.c
${INTERFACE_SRC_DIR}/multi_core/tfm_multi_core_psa_ns_api.c
$<$<BOOL:${TFM_MULTI_CORE_NS_OS}>:${INTERFACE_SRC_DIR}/multi_core/tfm_ns_mailbox_rtos_api.c>
+ $<$<NOT:$<BOOL:${TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD}>>:${INTERFACE_SRC_DIR}/multi_core/tfm_ns_mailbox.c>
+ $<$<AND:$<BOOL:${TFM_MULTI_CORE_NS_OS}>,$<BOOL:${TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD}>>:${INTERFACE_SRC_DIR}/multi_core/tfm_ns_mailbox_thread.c>
+ $<$<BOOL:${TEST_NS}>:${INTERFACE_SRC_DIR}/multi_core/tfm_ns_mailbox_test.c>
)
else()
target_sources(tfm_api_ns PRIVATE
diff --git a/app/main_ns.c b/app/main_ns.c
index e153572..850b6a6 100644
--- a/app/main_ns.c
+++ b/app/main_ns.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017-2020, Arm Limited. All rights reserved.
+ * Copyright (c) 2017-2021, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -71,6 +71,19 @@
};
#endif
+#ifdef TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD
+static osThreadFunc_t mailbox_thread_func = tfm_ns_mailbox_thread_runner;
+/* 1KB stack */
+#define MAILBOX_THREAD_STACK_SIZE (1u * 1024u)
+static uint64_t mailbox_thread_stack[MAILBOX_THREAD_STACK_SIZE /
+ sizeof(uint64_t)];
+static const osThreadAttr_t mailbox_thread_attr = {
+ .name = "mailbox_thread",
+ .stack_mem = mailbox_thread_stack,
+ .stack_size = sizeof(mailbox_thread_stack),
+};
+#endif
+
/**
* \brief Static globals to hold RTOS related quantities,
* main thread
@@ -163,6 +176,10 @@
/* Initialize the TFM NS interface */
tfm_ns_interface_init();
+#ifdef TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD
+ (void) osThreadNew(mailbox_thread_func, NULL, &mailbox_thread_attr);
+#endif
+
#if defined(TEST_FRAMEWORK_NS) || defined(TEST_FRAMEWORK_S)
thread_func = test_app;
#elif defined(PSA_API_TEST_NS)
diff --git a/test/suites/multi_core/non_secure/multi_core_ns_interface_testsuite.c b/test/suites/multi_core/non_secure/multi_core_ns_interface_testsuite.c
index 74f452a..be21695 100644
--- a/test/suites/multi_core/non_secure/multi_core_ns_interface_testsuite.c
+++ b/test/suites/multi_core/non_secure/multi_core_ns_interface_testsuite.c
@@ -122,7 +122,7 @@
struct ns_mailbox_stats_res_t stats_res;
struct test_params parent_params, params[NR_MULTI_CALL_CHILD];
- tfm_ns_mailbox_tx_stats_init();
+ tfm_ns_mailbox_tx_stats_reinit();
current_thread_handle = os_wrapper_thread_get_handle();
if (!current_thread_handle) {