aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Hu <david.hu@arm.com>2019-09-27 14:08:11 +0800
committerDavid Hu <david.hu@arm.com>2020-02-14 11:06:17 +0800
commit286b94a8db42f9d341506d39322892fce04e8d17 (patch)
tree3bb8170dbd1f00853d37ca8f6b32e2d1d2433ade
parentf3e2047f2680bbd2e96a93f5442e22a9a6384a32 (diff)
downloadtrusted-firmware-m-286b94a8db42f9d341506d39322892fce04e8d17.tar.gz
Dualcpu: Use counting semaphore in TF-M multi-core NS interface
Replace mutex with counting semaphore as the lock to sync up TF-M multi-core NS interface. Prepare for support of multiple outstanding NS PSA Client calls. Change-Id: I55832a9bed7ea411a639b33728dc81fb6ba6ec7f Signed-off-by: David Hu <david.hu@arm.com>
-rw-r--r--interface/src/tfm_multi_core_api.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/interface/src/tfm_multi_core_api.c b/interface/src/tfm_multi_core_api.c
index 002c8eb796..c3deb50da7 100644
--- a/interface/src/tfm_multi_core_api.c
+++ b/interface/src/tfm_multi_core_api.c
@@ -5,17 +5,22 @@
*
*/
-#include "os_wrapper/mutex.h"
+#include "os_wrapper/semaphore.h"
#include "tfm_api.h"
+#include "tfm_mailbox.h"
#include "tfm_multi_core_api.h"
+#define MAX_SEMAPHORE_COUNT NUM_MAILBOX_QUEUE_SLOT
+
static void *ns_lock_handle = NULL;
__attribute__((weak))
enum tfm_status_e tfm_ns_interface_init(void)
{
- ns_lock_handle = os_wrapper_mutex_create();
+ ns_lock_handle = os_wrapper_semaphore_create(MAX_SEMAPHORE_COUNT,
+ MAX_SEMAPHORE_COUNT,
+ NULL);
if (!ns_lock_handle) {
return TFM_ERROR_GENERIC;
}
@@ -30,10 +35,11 @@ int32_t tfm_ns_wait_for_s_cpu_ready(void)
uint32_t tfm_ns_multi_core_lock_acquire(void)
{
- return os_wrapper_mutex_acquire(ns_lock_handle, OS_WRAPPER_WAIT_FOREVER);
+ return os_wrapper_semaphore_acquire(ns_lock_handle,
+ OS_WRAPPER_WAIT_FOREVER);
}
uint32_t tfm_ns_multi_core_lock_release(void)
{
- return os_wrapper_mutex_release(ns_lock_handle);
+ return os_wrapper_semaphore_release(ns_lock_handle);
}