Revert "SPM: Add STATUS_NEED_SCHEDULE to manage scheduler"

This reverts commit 9e38935fabf7eae9d54a550bd578163ec9ca1f99.

Reason for revert: Nightly test issue.

Change-Id: I68af7380bd5aa3f9be8363b52b261b1cf310cd59
diff --git a/secure_fw/spm/cmsis_psa/internal_status_code.h b/secure_fw/spm/cmsis_psa/internal_status_code.h
index fbb0b63..d9665cf 100644
--- a/secure_fw/spm/cmsis_psa/internal_status_code.h
+++ b/secure_fw/spm/cmsis_psa/internal_status_code.h
@@ -16,6 +16,4 @@
 #define SPM_ERROR_MEMORY_CHECK     ((psa_status_t)-252)
 #define SPM_ERROR_GENERIC          ((psa_status_t)-253)
 
-#define STATUS_NEED_SCHEDULE       ((psa_status_t)-254)
-
 #endif /* __INTERNAL_STATUS_CODE_H__ */
diff --git a/secure_fw/spm/cmsis_psa/spm_cross_call.c b/secure_fw/spm/cmsis_psa/spm_cross_call.c
index 8778730..4e4aa40 100644
--- a/secure_fw/spm/cmsis_psa/spm_cross_call.c
+++ b/secure_fw/spm/cmsis_psa/spm_cross_call.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021-2023, Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -13,7 +13,6 @@
 #include "tfm_arch.h"
 #include "ffm/backend.h"
 #include "ffm/psa_api.h"
-#include "internal_status_code.h"
 
 typedef psa_status_t (*target_fn_t)(uint32_t a0, uint32_t a1,
                                     uint32_t a2, uint32_t a3);
@@ -54,7 +53,7 @@
     }
 
     /* Interrupt is masked, PendSV will not happen immediately. */
-    if (status == STATUS_NEED_SCHEDULE) {
+    if (THRD_EXPECTING_SCHEDULE()) {
         tfm_arch_trigger_pendsv();
     }
 }
diff --git a/secure_fw/spm/cmsis_psa/tfm_core_svcalls_ipc.c b/secure_fw/spm/cmsis_psa/tfm_core_svcalls_ipc.c
index 0d7caae..9c672bc 100644
--- a/secure_fw/spm/cmsis_psa/tfm_core_svcalls_ipc.c
+++ b/secure_fw/spm/cmsis_psa/tfm_core_svcalls_ipc.c
@@ -24,7 +24,6 @@
 #include "load/partition_defs.h"
 #include "psa/client.h"
 #include "tfm_hal_platform.h"
-#include "internal_status_code.h"
 
 #ifdef PLATFORM_SVC_HANDLERS
 extern int32_t platform_svc_handlers(uint8_t svc_num,
@@ -59,7 +58,7 @@
         break;
 #if CONFIG_TFM_DOORBELL_API == 1
     case TFM_SVC_PSA_NOTIFY:
-        return tfm_spm_partition_psa_notify((int32_t)ctx[0]);
+        tfm_spm_partition_psa_notify((int32_t)ctx[0]);
         break;
     case TFM_SVC_PSA_CLEAR:
         tfm_spm_partition_psa_clear();
@@ -197,7 +196,7 @@
             tfm_core_panic();
         }
         svc_args[0] = SVC_Handler_IPC(svc_number, svc_args, exc_return);
-        if (svc_args[0] == STATUS_NEED_SCHEDULE) {
+        if (THRD_EXPECTING_SCHEDULE()) {
             tfm_arch_trigger_pendsv();
         }
 #else
diff --git a/secure_fw/spm/cmsis_psa/thread.h b/secure_fw/spm/cmsis_psa/thread.h
index c01bae5..17bb3d0 100644
--- a/secure_fw/spm/cmsis_psa/thread.h
+++ b/secure_fw/spm/cmsis_psa/thread.h
@@ -96,6 +96,14 @@
                                 CURRENT_THREAD->p_context_ctrl = (void *)(x)
 
 /*
+ * Check if a schedule is under expectation by measuring on a given thread.
+ *
+ * Return :
+ *  `true` if schedule is under expectation. `false` if not.
+ */
+#define THRD_EXPECTING_SCHEDULE() (!(thrd_next() == CURRENT_THREAD))
+
+/*
  * Init the global query state callback function pointer.
  *
  * Parameters :
diff --git a/secure_fw/spm/ffm/backend_ipc.c b/secure_fw/spm/ffm/backend_ipc.c
index 305d508..31524c7 100644
--- a/secure_fw/spm/ffm/backend_ipc.c
+++ b/secure_fw/spm/ffm/backend_ipc.c
@@ -26,7 +26,6 @@
 #include "load/service_defs.h"
 #include "load/spm_load_api.h"
 #include "psa/error.h"
-#include "internal_status_code.h"
 
 /* Declare the global component list */
 struct partition_head_t partition_listhead;
@@ -161,7 +160,6 @@
 {
     struct partition_t *p_owner = NULL;
     psa_signal_t signal = 0;
-    psa_status_t ret = PSA_SUCCESS;
 
     if (!handle || !service || !service->p_ldinf || !service->partition) {
         return PSA_ERROR_PROGRAMMER_ERROR;
@@ -173,7 +171,7 @@
     UNI_LIST_INSERT_AFTER(p_owner, handle, p_handles);
 
     /* Messages put. Update signals */
-    ret = backend_assert_signal(p_owner, signal);
+    backend_assert_signal(p_owner, signal);
 
     /*
      * If it is a NS request via RPC, it is unnecessary to block current
@@ -181,14 +179,12 @@
      */
 
     if (!is_tfm_rpc_msg(handle)) {
-        ret = backend_wait_signals(handle->p_client, TFM_IPC_REPLY_SIGNAL);
-    } else {
-        ret = PSA_SUCCESS;
+        backend_wait_signals(handle->p_client, TFM_IPC_REPLY_SIGNAL);
     }
 
     handle->status = TFM_HANDLE_STATUS_ACTIVE;
 
-    return ret;
+    return PSA_SUCCESS;
 }
 
 psa_status_t backend_replying(struct connection_t *handle, int32_t status)
@@ -197,7 +193,7 @@
         tfm_rpc_client_call_reply(handle, status);
     } else {
         handle->p_client->reply_value = (uintptr_t)status;
-        return backend_assert_signal(handle->p_client, TFM_IPC_REPLY_SIGNAL);
+        backend_assert_signal(handle->p_client, TFM_IPC_REPLY_SIGNAL);
     }
 
     /*
@@ -286,10 +282,10 @@
     return control;
 }
 
-psa_status_t backend_wait_signals(struct partition_t *p_pt, psa_signal_t signals)
+psa_signal_t backend_wait_signals(struct partition_t *p_pt, psa_signal_t signals)
 {
     struct critical_section_t cs_signal = CRITICAL_SECTION_STATIC_INIT;
-    psa_status_t ret = PSA_SUCCESS;
+    psa_signal_t ret_signal;
 
     if (!p_pt) {
         tfm_core_panic();
@@ -297,21 +293,19 @@
 
     CRITICAL_SECTION_ENTER(cs_signal);
 
-    ret = p_pt->signals_asserted & signals;
-    if (ret == 0) {
+    ret_signal = p_pt->signals_asserted & signals;
+    if (ret_signal == 0) {
         p_pt->signals_waiting = signals;
-        ret = STATUS_NEED_SCHEDULE;
     }
 
     CRITICAL_SECTION_LEAVE(cs_signal);
 
-    return ret;
+    return ret_signal;
 }
 
-psa_status_t backend_assert_signal(struct partition_t *p_pt, psa_signal_t signal)
+uint32_t backend_assert_signal(struct partition_t *p_pt, psa_signal_t signal)
 {
     struct critical_section_t cs_signal = CRITICAL_SECTION_STATIC_INIT;
-    psa_status_t ret = PSA_SUCCESS;
 
     if (!p_pt) {
         tfm_core_panic();
@@ -319,13 +313,9 @@
 
     CRITICAL_SECTION_ENTER(cs_signal);
     p_pt->signals_asserted |= signal;
-
-    if (p_pt->signals_asserted & p_pt->signals_waiting) {
-        ret = STATUS_NEED_SCHEDULE;
-    }
     CRITICAL_SECTION_LEAVE(cs_signal);
 
-    return ret;
+    return PSA_SUCCESS;
 }
 
 uint64_t ipc_schedule(void)
diff --git a/secure_fw/spm/ffm/backend_sfn.c b/secure_fw/spm/ffm/backend_sfn.c
index e2154f1..b39d00a 100644
--- a/secure_fw/spm/ffm/backend_sfn.c
+++ b/secure_fw/spm/ffm/backend_sfn.c
@@ -148,7 +148,7 @@
     return EXC_RETURN_THREAD_PSP;
 }
 
-psa_status_t backend_wait_signals(struct partition_t *p_pt, psa_signal_t signals)
+psa_signal_t backend_wait_signals(struct partition_t *p_pt, psa_signal_t signals)
 {
     while (!(p_pt->signals_asserted & signals))
         ;
@@ -156,7 +156,7 @@
     return p_pt->signals_asserted & signals;
 }
 
-psa_status_t backend_assert_signal(struct partition_t *p_pt, psa_signal_t signal)
+uint32_t backend_assert_signal(struct partition_t *p_pt, psa_signal_t signal)
 {
     p_pt->signals_asserted |= signal;
 
diff --git a/secure_fw/spm/ffm/interrupt.c b/secure_fw/spm/ffm/interrupt.c
index 0b5e043..7ec611e 100644
--- a/secure_fw/spm/ffm/interrupt.c
+++ b/secure_fw/spm/ffm/interrupt.c
@@ -21,7 +21,6 @@
 
 #include "load/spm_load_api.h"
 #include "ffm/backend.h"
-#include "internal_status_code.h"
 
 extern uintptr_t spm_boundary;
 
@@ -143,7 +142,6 @@
 {
     psa_flih_result_t flih_result;
     struct partition_t *p_part;
-    psa_status_t ret = 0;
 
     if (!p_pt || !p_ildi) {
         tfm_core_panic();
@@ -177,10 +175,10 @@
     }
 
     if (flih_result == PSA_FLIH_SIGNAL) {
-        ret = backend_assert_signal(p_pt, p_ildi->signal);
+        backend_assert_signal(p_pt, p_ildi->signal);
         /* In SFN backend, there is only one thread, no thread switch. */
 #if CONFIG_TFM_SPM_BACKEND_SFN != 1
-        if (ret == STATUS_NEED_SCHEDULE) {
+        if (THRD_EXPECTING_SCHEDULE()) {
             tfm_arch_trigger_pendsv();
         }
 #endif
diff --git a/secure_fw/spm/ffm/psa_api.c b/secure_fw/spm/ffm/psa_api.c
index 7a46c04..1f1c715 100644
--- a/secure_fw/spm/ffm/psa_api.c
+++ b/secure_fw/spm/ffm/psa_api.c
@@ -530,11 +530,11 @@
 }
 
 #if CONFIG_TFM_DOORBELL_API == 1
-psa_status_t tfm_spm_partition_psa_notify(int32_t partition_id)
+void tfm_spm_partition_psa_notify(int32_t partition_id)
 {
     struct partition_t *p_pt = tfm_spm_get_partition_by_id(partition_id);
 
-    return backend_assert_signal(p_pt, PSA_DOORBELL);
+    backend_assert_signal(p_pt, PSA_DOORBELL);
 }
 
 void tfm_spm_partition_psa_clear(void)
diff --git a/secure_fw/spm/include/ffm/backend.h b/secure_fw/spm/include/ffm/backend.h
index d15fdc2..03f2f14 100644
--- a/secure_fw/spm/include/ffm/backend.h
+++ b/secure_fw/spm/include/ffm/backend.h
@@ -55,12 +55,12 @@
 /**
  * \brief Set the wait signal pattern in current partition.
  */
-psa_status_t backend_wait_signals(struct partition_t *p_pt, psa_signal_t signals);
+psa_signal_t backend_wait_signals(struct partition_t *p_pt, psa_signal_t signals);
 
 /**
  * \brief Set the asserted signal pattern in current partition.
  */
-psa_status_t backend_assert_signal(struct partition_t *p_pt, psa_signal_t signal);
+uint32_t backend_assert_signal(struct partition_t *p_pt, psa_signal_t signal);
 
 /* The component list, and a MACRO indicate this is not a common global. */
 extern struct partition_head_t partition_listhead;
diff --git a/secure_fw/spm/include/ffm/psa_api.h b/secure_fw/spm/include/ffm/psa_api.h
index 152ba17..868c178 100644
--- a/secure_fw/spm/include/ffm/psa_api.h
+++ b/secure_fw/spm/include/ffm/psa_api.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019-2023, Arm Limited. All rights reserved.
+ * Copyright (c) 2019-2022, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -267,12 +267,11 @@
  *
  * \param[in] partition_id      Secure Partition ID of the target partition.
  *
- * \retval PSA_SUCCESS          Success.
- * \retval PSA_NEED_SCHEDULE    Require schedule thread.
+ * \retval void                 Success.
  * \retval "PROGRAMMER ERROR"   partition_id does not correspond to a Secure
  *                              Partition.
  */
-psa_status_t tfm_spm_partition_psa_notify(int32_t partition_id);
+void tfm_spm_partition_psa_notify(int32_t partition_id);
 
 /**
  * \brief Function body of \ref psa_clear.