Enable NSID management from NS side
Enable the new implementation on NS client identification from NS side.
Replace TFM_NS_CLIENT_IDENTIFICATION with TFM_NS_MANAGE_NSID.
TFM_NS_MANAGE_NSID is used to enable new NSID management from NS side.
TFM_NS_CLIENT_IDENTIFICATION for old NSID implementation needs to be deprecated.
Signed-off-by: Xinyu Zhang <xinyu.zhang@arm.com>
Change-Id: I29700f1beeaba32e0167b90e9876c334992474d5
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index ace6184..9613494 100755
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -30,6 +30,9 @@
# NS interface implemented by NSPE
set(NS_INTERFACE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../ns_interface)
+# nsid_manager
+set(NSID_MGR_DIR ${NS_INTERFACE_DIR}/ns_client_ext)
+
#################### TF-M NS interface (header only) ###########################
add_library(tfm_ns_interface INTERFACE)
@@ -47,6 +50,7 @@
target_include_directories(tfm_ns_interface
INTERFACE
${NS_INTERFACE_DIR}
+ ${NSID_MGR_DIR}
)
# PSA interface files are generated from a template
@@ -65,7 +69,7 @@
INTERFACE
$<$<BOOL:${TFM_PSA_API}>:TFM_PSA_API>
$<$<STREQUAL:${TEST_PSA_API},IPC>:PSA_API_TEST_IPC>
- $<$<BOOL:${TFM_NS_CLIENT_IDENTIFICATION}>:TFM_NS_CLIENT_IDENTIFICATION>
+ $<$<BOOL:${TFM_NS_MANAGE_NSID}>:TFM_NS_MANAGE_NSID>
$<$<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>
@@ -76,6 +80,11 @@
add_library(tfm_api_ns STATIC)
+target_sources(tfm_api_ns
+ PRIVATE
+ $<$<BOOL:${TFM_NS_MANAGE_NSID}>:${NSID_MGR_DIR}/tfm_nsid_manager.c>
+)
+
if (${TFM_PSA_API})
target_sources(tfm_api_ns PRIVATE
$<$<OR:$<BOOL:${FORWARD_PROT_MSG}>,$<BOOL:${TFM_PARTITION_PLATFORM}>>:${INTERFACE_SRC_DIR}/tfm_platform_ipc_api.c>
@@ -269,9 +278,11 @@
target_sources(CMSIS_5_tfm_ns
INTERFACE
+ ${NSID_MGR_DIR}/tz_shim_layer.c
${CMSIS_5_PATH}/RTOS2/RTX/Config/RTX_Config.c
${CMSIS_5_PATH}/RTOS2/RTX/Source/rtx_lib.c
${CMAKE_CURRENT_SOURCE_DIR}/os_wrapper_cmsis_rtos_v2.c
+ $<$<BOOL:${TFM_NS_MANAGE_NSID}>:${CMAKE_CURRENT_SOURCE_DIR}/tfm_nsid_map_table.c>
)
target_include_directories(CMSIS_5_tfm_ns
@@ -280,9 +291,15 @@
${CMSIS_5_PATH}/RTOS2/Include
${CMSIS_5_PATH}/RTOS2/RTX/Include
${CMSIS_5_PATH}/RTOS2/RTX/Config
+ $<$<BOOL:${TFM_NS_MANAGE_NSID}>:${CMAKE_CURRENT_SOURCE_DIR}>
)
target_link_libraries(CMSIS_5_tfm_ns
INTERFACE
platform_ns
)
+
+target_compile_definitions(CMSIS_5_tfm_ns
+ INTERFACE
+ $<$<BOOL:${TFM_NS_MANAGE_NSID}>:TFM_NS_MANAGE_NSID>
+)
diff --git a/app/main_ns.c b/app/main_ns.c
index 2df4ffd..33a70db 100644
--- a/app/main_ns.c
+++ b/app/main_ns.c
@@ -9,6 +9,7 @@
#include "cmsis_os2.h"
#include "cmsis_compiler.h"
#include "tfm_ns_interface.h"
+#include "tfm_nsid_manager.h"
#if defined(TEST_FRAMEWORK_NS) || defined(TEST_FRAMEWORK_S)
#include "tfm_integ_test.h"
#endif
@@ -52,7 +53,8 @@
|| defined(PSA_API_TEST_NS)
static const osThreadAttr_t thread_attr = {
.name = "test_thread",
- .stack_size = 4096U
+ .stack_size = 4096U,
+ .tz_module = ((TZ_ModuleId_t)TFM_DEFAULT_NSID)
};
#endif
diff --git a/app/os_wrapper_cmsis_rtos_v2.c b/app/os_wrapper_cmsis_rtos_v2.c
old mode 100644
new mode 100755
index 810a244..ec785f2
--- a/app/os_wrapper_cmsis_rtos_v2.c
+++ b/app/os_wrapper_cmsis_rtos_v2.c
@@ -9,16 +9,22 @@
#include "os_wrapper/mutex.h"
#include "os_wrapper/semaphore.h"
-#include <string.h>
#include "cmsis_os2.h"
+#include "tfm_nsid_manager.h"
+#ifdef TFM_NS_MANAGE_NSID
+#include "tfm_nsid_map_table.h"
+#endif
+
/* This is an example OS abstraction layer for CMSIS-RTOSv2 */
void *os_wrapper_thread_new(const char *name, int32_t stack_size,
os_wrapper_thread_func func, void *arg,
uint32_t priority)
{
- osThreadAttr_t task_attribs = {.tz_module = 1};
+ osThreadAttr_t task_attribs = {
+ .tz_module = ((TZ_ModuleId_t)TFM_DEFAULT_NSID)
+ };
/* By default, the thread starts as osThreadDetached */
if (stack_size != OS_WRAPPER_DEFAULT_STACK_SIZE) {
@@ -27,6 +33,10 @@
task_attribs.name = name;
task_attribs.priority = (osPriority_t) priority;
+#ifdef TFM_NS_MANAGE_NSID
+ task_attribs.tz_module = (TZ_ModuleId_t)nsid_mgr_get_thread_nsid(name);
+#endif
+
return (void *)osThreadNew(func, arg, &task_attribs);
}
diff --git a/test/suites/ps/non_secure/psa_ps_ns_interface_testsuite.c b/test/suites/ps/non_secure/psa_ps_ns_interface_testsuite.c
index 6aee714..cdb0cd1 100644
--- a/test/suites/ps/non_secure/psa_ps_ns_interface_testsuite.c
+++ b/test/suites/ps/non_secure/psa_ps_ns_interface_testsuite.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ * Copyright (c) 2019-2021, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -62,13 +62,13 @@
static void tfm_ps_test_1013(struct test_result_t *ret);
static void tfm_ps_test_1014(struct test_result_t *ret);
static void tfm_ps_test_1015(struct test_result_t *ret);
-#ifdef TFM_NS_CLIENT_IDENTIFICATION
+#ifdef TFM_NS_MANAGE_NSID
static void tfm_ps_test_1016(struct test_result_t *ret);
static void tfm_ps_test_1017(struct test_result_t *ret);
static void tfm_ps_test_1018(struct test_result_t *ret);
static void tfm_ps_test_1019(struct test_result_t *ret);
static void tfm_ps_test_1020(struct test_result_t *ret);
-#endif /* TFM_NS_CLIENT_IDENTIFICATION */
+#endif /* TFM_NS_MANAGE_NSID */
static void tfm_ps_test_1021(struct test_result_t *ret);
static void tfm_ps_test_1022(struct test_result_t *ret);
static void tfm_ps_test_1023(struct test_result_t *ret);
@@ -106,7 +106,7 @@
"Remove interface with write once UID"},
{&tfm_ps_test_1015, "TFM_NS_PS_TEST_1015",
"Remove interface with invalid UID"},
-#ifdef TFM_NS_CLIENT_IDENTIFICATION
+#ifdef TFM_NS_MANAGE_NSID
{&tfm_ps_test_1016, "TFM_NS_PS_TEST_1016",
"Get interface with invalid thread name"},
{&tfm_ps_test_1017, "TFM_NS_PS_TEST_1017",
@@ -117,7 +117,7 @@
"Attempt to access UID belonging to another thread"},
{&tfm_ps_test_1020, "TFM_NS_PS_TEST_1020",
"Set UID alternately from two threads"},
-#endif /* TFM_NS_CLIENT_IDENTIFICATION */
+#endif /* TFM_NS_MANAGE_NSID */
{&tfm_ps_test_1021, "TFM_NS_PS_TEST_1021",
"Block compaction after remove"},
{&tfm_ps_test_1022, "TFM_NS_PS_TEST_1022",
@@ -855,7 +855,7 @@
ret->val = TEST_PASSED;
}
-#ifdef TFM_NS_CLIENT_IDENTIFICATION
+#ifdef TFM_NS_MANAGE_NSID
/**
* \brief Sets UID with a valid thread name.
*/
@@ -1449,7 +1449,7 @@
tfm_ps_run_test("Thread_A", ret, tfm_ps_test_1020_task_7);
}
-#endif /* TFM_NS_CLIENT_IDENTIFICATION */
+#endif /* TFM_NS_MANAGE_NSID */
/**
* \brief Tests data block compact feature.