SPM: Add runtime SFN backend

A backend for implementing 'SFN'. This runtime backend is selected
if:
- All partitions included in the current build are 'SFN' partitions.
- Isolation level 1.

The configuration is generated by tooling, and output to the
generated file 'config_impl.h'.

Change-Id: I819c78c7a912f86174d102d389a2714ae17e5062
Signed-off-by: Ken Liu <Ken.Liu@arm.com>
Co-authored-by: Mingyang Sun <mingyang.sun@arm.com>
diff --git a/secure_fw/spm/ffm/backend_ipc.c b/secure_fw/spm/ffm/backend_ipc.c
index ee1a4c2..c544f73 100644
--- a/secure_fw/spm/ffm/backend_ipc.c
+++ b/secure_fw/spm/ffm/backend_ipc.c
@@ -41,7 +41,7 @@
 
 /*
  * Send message and wake up the SP who is waiting on message queue, block the
- * current thread and triggere scheduler.
+ * current thread and trigger scheduler.
  */
 static psa_status_t ipc_messaging(struct service_t *service,
                                   struct tfm_msg_body_t *msg)
@@ -80,13 +80,20 @@
     return PSA_SUCCESS;
 }
 
-static void ipc_replying(struct tfm_msg_body_t *p_msg, psa_status_t status)
+static int32_t ipc_replying(struct tfm_msg_body_t *p_msg, int32_t status)
 {
     if (is_tfm_rpc_msg(p_msg)) {
         tfm_rpc_client_call_reply(p_msg, status);
     } else {
         thrd_wake_up(&p_msg->ack_evnt, status);
     }
+
+    /*
+     * 'psa_reply' exists in IPC model only and returns 'void'. Return
+     * 'PSA_SUCCESS' here always since SPM does not forward the status
+     * to the caller.
+     */
+    return PSA_SUCCESS;
 }
 
 /* Parameters are treated as assuredly */