Core: Restructure partition service data

The patch modifies template files related to the service data
so that instead of generating service database array only,
a C structure initialiser is generated directly for the whole
service data.

Change-Id: If756ec9cd2a39db52b81c4770fa1cac6edf41b7c
Signed-off-by: Summer Qin <summer.qin@arm.com>
diff --git a/secure_fw/core/ipc/tfm_svcalls.c b/secure_fw/core/ipc/tfm_svcalls.c
index a5f3239..cee5c7e 100644
--- a/secure_fw/core/ipc/tfm_svcalls.c
+++ b/secure_fw/core/ipc/tfm_svcalls.c
@@ -57,11 +57,11 @@
      * It should return PSA_VERSION_NONE if the caller is not authorized
      * to access the RoT Service.
      */
-    if (ns_caller && !service->service_db->non_secure_client) {
+    if (ns_caller && !service->service_db.non_secure_client) {
         return PSA_VERSION_NONE;
     }
 
-    return service->service_db->minor_version;
+    return service->service_db.minor_version;
 }
 
 psa_handle_t tfm_svcall_psa_connect(uint32_t *args, int32_t ns_caller)
@@ -95,7 +95,7 @@
      * It is a fatal error if the caller is not authorized to access the RoT
      * Service.
      */
-    if (ns_caller && !service->service_db->non_secure_client) {
+    if (ns_caller && !service->service_db.non_secure_client) {
         tfm_panic();
     }
 
diff --git a/secure_fw/services/tfm_service_list.inc b/secure_fw/services/tfm_service_list.inc
index 617b3ce..3ff8d7b 100644
--- a/secure_fw/services/tfm_service_list.inc
+++ b/secure_fw/services/tfm_service_list.inc
@@ -22,385 +22,625 @@
 #include "test/test_services/tfm_ipc_client/psa_manifest/tfm_ipc_client_partition.h"
 #include "test/test_services/tfm_irq_test_service_1/psa_manifest/tfm_irq_test_service_1.h"
 
-/******** TFM_SP_STORAGE ********/
+/**************************************************************************/
+/** The service list */
+/**************************************************************************/
+struct tfm_spm_service_t service[] =
 {
-        "TFM_SST_SET",
-        TFM_SP_STORAGE_ID,
-        TFM_SST_SET_SIG,
-        0x00000060,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "TFM_SST_GET",
-        TFM_SP_STORAGE_ID,
-        TFM_SST_GET_SIG,
-        0x00000061,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "TFM_SST_GET_INFO",
-        TFM_SP_STORAGE_ID,
-        TFM_SST_GET_INFO_SIG,
-        0x00000062,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "TFM_SST_REMOVE",
-        TFM_SP_STORAGE_ID,
-        TFM_SST_REMOVE_SIG,
-        0x00000063,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "TFM_SST_GET_SUPPORT",
-        TFM_SP_STORAGE_ID,
-        TFM_SST_GET_SUPPORT_SIG,
-        0x00000064,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
+    /******** TFM_SP_STORAGE ********/
+    {
+        .service_db = {
+            .name = "TFM_SST_SET",
+            .partition_id = TFM_SP_STORAGE_ID,
+            .signal = TFM_SST_SET_SIG,
+            .sid = 0x00000060,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "TFM_SST_GET",
+            .partition_id = TFM_SP_STORAGE_ID,
+            .signal = TFM_SST_GET_SIG,
+            .sid = 0x00000061,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "TFM_SST_GET_INFO",
+            .partition_id = TFM_SP_STORAGE_ID,
+            .signal = TFM_SST_GET_INFO_SIG,
+            .sid = 0x00000062,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "TFM_SST_REMOVE",
+            .partition_id = TFM_SP_STORAGE_ID,
+            .signal = TFM_SST_REMOVE_SIG,
+            .sid = 0x00000063,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "TFM_SST_GET_SUPPORT",
+            .partition_id = TFM_SP_STORAGE_ID,
+            .signal = TFM_SST_GET_SUPPORT_SIG,
+            .sid = 0x00000064,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
 
-/******** TFM_SP_CRYPTO ********/
-{
-        "TFM_CRYPTO",
-        TFM_SP_CRYPTO_ID,
-        TFM_CRYPTO_SIG,
-        0x00000080,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
+    /******** TFM_SP_CRYPTO ********/
+    {
+        .service_db = {
+            .name = "TFM_CRYPTO",
+            .partition_id = TFM_SP_CRYPTO_ID,
+            .signal = TFM_CRYPTO_SIG,
+            .sid = 0x00000080,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
 
-/******** TFM_SP_INITIAL_ATTESTATION ********/
-{
-        "TFM_ATTEST_GET_TOKEN",
-        TFM_SP_INITIAL_ATTESTATION_ID,
-        PSA_ATTEST_GET_TOKEN_SIG,
-        0x00000020,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "TFM_ATTEST_GET_TOKEN_SIZE",
-        TFM_SP_INITIAL_ATTESTATION_ID,
-        PSA_ATTEST_GET_TOKEN_SIZE_SIG,
-        0x00000021,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
+    /******** TFM_SP_INITIAL_ATTESTATION ********/
+    {
+        .service_db = {
+            .name = "TFM_ATTEST_GET_TOKEN",
+            .partition_id = TFM_SP_INITIAL_ATTESTATION_ID,
+            .signal = PSA_ATTEST_GET_TOKEN_SIG,
+            .sid = 0x00000020,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "TFM_ATTEST_GET_TOKEN_SIZE",
+            .partition_id = TFM_SP_INITIAL_ATTESTATION_ID,
+            .signal = PSA_ATTEST_GET_TOKEN_SIZE_SIG,
+            .sid = 0x00000021,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
 
 #ifdef TFM_PARTITION_TEST_CORE
-/******** TFM_SP_CORE_TEST ********/
-{
-        "SPM_CORE_TEST_INIT_SUCCESS",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_INIT_SUCCESS_SIGNAL,
-        0x0000F020,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_DIRECT_RECURSION",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_DIRECT_RECURSION_SIGNAL,
-        0x0000F021,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_MPU_ACCESS",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_MPU_ACCESS_SIGNAL,
-        0x0000F022,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_MEMORY_PERMISSIONS",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_MEMORY_PERMISSIONS_SIGNAL,
-        0x0000F023,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_SHARE_REDIRECTION",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_SHARE_REDIRECTION_SIGNAL,
-        0x0000F024,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_SS_TO_SS",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_SS_TO_SS_SIGNAL,
-        0x0000F025,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_SS_TO_SS_BUFFER",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_SS_TO_SS_BUFFER_SIGNAL,
-        0x0000F026,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_OUTVEC_WRITE",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_OUTVEC_WRITE_SIGNAL,
-        0x0000F027,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_PERIPHERAL_ACCESS",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_PERIPHERAL_ACCESS_SIGNAL,
-        0x0000F028,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_GET_CALLER_CLIENT_ID",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_GET_CALLER_CLIENT_ID_SIGNAL,
-        0x0000F029,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_SPM_REQUEST",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_SPM_REQUEST_SIGNAL,
-        0x0000F02A,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_BLOCK",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_BLOCK_SIGNAL,
-        0x0000F02B,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_NS_THREAD",
-        TFM_SP_CORE_TEST_ID,
-        SPM_CORE_TEST_NS_THREAD_SIGNAL,
-        0x0000F02C,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
+    /******** TFM_SP_CORE_TEST ********/
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_INIT_SUCCESS",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_INIT_SUCCESS_SIGNAL,
+            .sid = 0x0000F020,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_DIRECT_RECURSION",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_DIRECT_RECURSION_SIGNAL,
+            .sid = 0x0000F021,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_MPU_ACCESS",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_MPU_ACCESS_SIGNAL,
+            .sid = 0x0000F022,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_MEMORY_PERMISSIONS",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_MEMORY_PERMISSIONS_SIGNAL,
+            .sid = 0x0000F023,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_SHARE_REDIRECTION",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_SHARE_REDIRECTION_SIGNAL,
+            .sid = 0x0000F024,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_SS_TO_SS",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_SS_TO_SS_SIGNAL,
+            .sid = 0x0000F025,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_SS_TO_SS_BUFFER",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_SS_TO_SS_BUFFER_SIGNAL,
+            .sid = 0x0000F026,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_OUTVEC_WRITE",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_OUTVEC_WRITE_SIGNAL,
+            .sid = 0x0000F027,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_PERIPHERAL_ACCESS",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_PERIPHERAL_ACCESS_SIGNAL,
+            .sid = 0x0000F028,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_GET_CALLER_CLIENT_ID",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_GET_CALLER_CLIENT_ID_SIGNAL,
+            .sid = 0x0000F029,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_SPM_REQUEST",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_SPM_REQUEST_SIGNAL,
+            .sid = 0x0000F02A,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_BLOCK",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_BLOCK_SIGNAL,
+            .sid = 0x0000F02B,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_NS_THREAD",
+            .partition_id = TFM_SP_CORE_TEST_ID,
+            .signal = SPM_CORE_TEST_NS_THREAD_SIGNAL,
+            .sid = 0x0000F02C,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
 #endif /* TFM_PARTITION_TEST_CORE */
 
 #ifdef TFM_PARTITION_TEST_CORE
-/******** TFM_SP_CORE_TEST_2 ********/
-{
-        "SPM_CORE_TEST_2_SLAVE_SERVICE",
-        TFM_SP_CORE_TEST_2_ID,
-        SPM_CORE_TEST_2_SLAVE_SERVICE_SIGNAL,
-        0x0000F040,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_2_CHECK_CALLER_CLIENT_ID",
-        TFM_SP_CORE_TEST_2_ID,
-        SPM_CORE_TEST_2_CHECK_CALLER_CLIENT_ID_SIGNAL,
-        0x0000F041,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_2_GET_EVERY_SECOND_BYTE",
-        TFM_SP_CORE_TEST_2_ID,
-        SPM_CORE_TEST_2_GET_EVERY_SECOND_BYTE_SIGNAL,
-        0x0000F042,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_2_INVERT",
-        TFM_SP_CORE_TEST_2_ID,
-        SPM_CORE_TEST_2_INVERT_SIGNAL,
-        0x0000F043,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_2_PREPARE_TEST_SCENARIO",
-        TFM_SP_CORE_TEST_2_ID,
-        SPM_CORE_TEST_2_PREPARE_TEST_SCENARIO_SIGNAL,
-        0x0000F044,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_TEST_2_EXECUTE_TEST_SCENARIO",
-        TFM_SP_CORE_TEST_2_ID,
-        SPM_CORE_TEST_2_EXECUTE_TEST_SCENARIO_SIGNAL,
-        0x0000F045,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
+    /******** TFM_SP_CORE_TEST_2 ********/
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_2_SLAVE_SERVICE",
+            .partition_id = TFM_SP_CORE_TEST_2_ID,
+            .signal = SPM_CORE_TEST_2_SLAVE_SERVICE_SIGNAL,
+            .sid = 0x0000F040,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_2_CHECK_CALLER_CLIENT_ID",
+            .partition_id = TFM_SP_CORE_TEST_2_ID,
+            .signal = SPM_CORE_TEST_2_CHECK_CALLER_CLIENT_ID_SIGNAL,
+            .sid = 0x0000F041,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_2_GET_EVERY_SECOND_BYTE",
+            .partition_id = TFM_SP_CORE_TEST_2_ID,
+            .signal = SPM_CORE_TEST_2_GET_EVERY_SECOND_BYTE_SIGNAL,
+            .sid = 0x0000F042,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_2_INVERT",
+            .partition_id = TFM_SP_CORE_TEST_2_ID,
+            .signal = SPM_CORE_TEST_2_INVERT_SIGNAL,
+            .sid = 0x0000F043,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_2_PREPARE_TEST_SCENARIO",
+            .partition_id = TFM_SP_CORE_TEST_2_ID,
+            .signal = SPM_CORE_TEST_2_PREPARE_TEST_SCENARIO_SIGNAL,
+            .sid = 0x0000F044,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_TEST_2_EXECUTE_TEST_SCENARIO",
+            .partition_id = TFM_SP_CORE_TEST_2_ID,
+            .signal = SPM_CORE_TEST_2_EXECUTE_TEST_SCENARIO_SIGNAL,
+            .sid = 0x0000F045,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
 #endif /* TFM_PARTITION_TEST_CORE */
 
 #ifdef TFM_PARTITION_TEST_SECURE_SERVICES
-/******** TFM_SP_SECURE_TEST_PARTITION ********/
-{
-        "TFM_SECURE_CLIENT_SFN_RUN_TESTS",
-        TFM_SP_SECURE_TEST_PARTITION_ID,
-        TFM_SECURE_CLIENT_SFN_RUN_TESTS_SIG,
-        0x0000F000,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
+    /******** TFM_SP_SECURE_TEST_PARTITION ********/
+    {
+        .service_db = {
+            .name = "TFM_SECURE_CLIENT_SFN_RUN_TESTS",
+            .partition_id = TFM_SP_SECURE_TEST_PARTITION_ID,
+            .signal = TFM_SECURE_CLIENT_SFN_RUN_TESTS_SIG,
+            .sid = 0x0000F000,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
 #endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
 
 #ifdef TFM_PARTITION_TEST_CORE_IPC
-/******** TFM_SP_IPC_SERVICE_TEST ********/
-{
-        "IPC_SERVICE_TEST_BASIC",
-        TFM_SP_IPC_SERVICE_TEST_ID,
-        IPC_SERVICE_TEST_BASIC_SIGNAL,
-        0x0000F080,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "IPC_SERVICE_TEST_PSA_ACCESS_APP_MEM",
-        TFM_SP_IPC_SERVICE_TEST_ID,
-        IPC_SERVICE_TEST_PSA_ACCESS_APP_MEM_SIGNAL,
-        0x0000F081,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "IPC_SERVICE_TEST_PSA_ACCESS_APP_READ_ONLY_MEM",
-        TFM_SP_IPC_SERVICE_TEST_ID,
-        IPC_SERVICE_TEST_PSA_ACCESS_APP_READ_ONLY_MEM_SIGNAL,
-        0x0000F082,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "IPC_SERVICE_TEST_APP_ACCESS_PSA_MEM",
-        TFM_SP_IPC_SERVICE_TEST_ID,
-        IPC_SERVICE_TEST_APP_ACCESS_PSA_MEM_SIGNAL,
-        0x0000F083,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
+    /******** TFM_SP_IPC_SERVICE_TEST ********/
+    {
+        .service_db = {
+            .name = "IPC_SERVICE_TEST_BASIC",
+            .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
+            .signal = IPC_SERVICE_TEST_BASIC_SIGNAL,
+            .sid = 0x0000F080,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "IPC_SERVICE_TEST_PSA_ACCESS_APP_MEM",
+            .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
+            .signal = IPC_SERVICE_TEST_PSA_ACCESS_APP_MEM_SIGNAL,
+            .sid = 0x0000F081,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "IPC_SERVICE_TEST_PSA_ACCESS_APP_READ_ONLY_MEM",
+            .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
+            .signal = IPC_SERVICE_TEST_PSA_ACCESS_APP_READ_ONLY_MEM_SIGNAL,
+            .sid = 0x0000F082,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "IPC_SERVICE_TEST_APP_ACCESS_PSA_MEM",
+            .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
+            .signal = IPC_SERVICE_TEST_APP_ACCESS_PSA_MEM_SIGNAL,
+            .sid = 0x0000F083,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
 #endif /* TFM_PARTITION_TEST_CORE_IPC */
 
 #ifdef TFM_PARTITION_TEST_CORE_IPC
-/******** TFM_SP_IPC_CLIENT_TEST ********/
-{
-        "IPC_CLIENT_TEST_BASIC",
-        TFM_SP_IPC_CLIENT_TEST_ID,
-        IPC_CLIENT_TEST_BASIC_SIGNAL,
-        0x0000F060,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "IPC_CLIENT_TEST_PSA_ACCESS_APP_MEM",
-        TFM_SP_IPC_CLIENT_TEST_ID,
-        IPC_CLIENT_TEST_PSA_ACCESS_APP_MEM_SIGNAL,
-        0x0000F061,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "IPC_CLIENT_TEST_PSA_ACCESS_APP_READ_ONLY_MEM",
-        TFM_SP_IPC_CLIENT_TEST_ID,
-        IPC_CLIENT_TEST_PSA_ACCESS_APP_READ_ONLY_MEM_SIGNAL,
-        0x0000F062,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "IPC_CLIENT_TEST_APP_ACCESS_PSA_MEM",
-        TFM_SP_IPC_CLIENT_TEST_ID,
-        IPC_CLIENT_TEST_APP_ACCESS_PSA_MEM_SIGNAL,
-        0x0000F063,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "IPC_CLIENT_TEST_MEM_CHECK",
-        TFM_SP_IPC_CLIENT_TEST_ID,
-        IPC_CLIENT_TEST_MEM_CHECK_SIGNAL,
-        0x0000F064,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
+    /******** TFM_SP_IPC_CLIENT_TEST ********/
+    {
+        .service_db = {
+            .name = "IPC_CLIENT_TEST_BASIC",
+            .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
+            .signal = IPC_CLIENT_TEST_BASIC_SIGNAL,
+            .sid = 0x0000F060,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "IPC_CLIENT_TEST_PSA_ACCESS_APP_MEM",
+            .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
+            .signal = IPC_CLIENT_TEST_PSA_ACCESS_APP_MEM_SIGNAL,
+            .sid = 0x0000F061,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "IPC_CLIENT_TEST_PSA_ACCESS_APP_READ_ONLY_MEM",
+            .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
+            .signal = IPC_CLIENT_TEST_PSA_ACCESS_APP_READ_ONLY_MEM_SIGNAL,
+            .sid = 0x0000F062,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "IPC_CLIENT_TEST_APP_ACCESS_PSA_MEM",
+            .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
+            .signal = IPC_CLIENT_TEST_APP_ACCESS_PSA_MEM_SIGNAL,
+            .sid = 0x0000F063,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "IPC_CLIENT_TEST_MEM_CHECK",
+            .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
+            .signal = IPC_CLIENT_TEST_MEM_CHECK_SIGNAL,
+            .sid = 0x0000F064,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
 #endif /* TFM_PARTITION_TEST_CORE_IPC */
 
 #ifdef TFM_PARTITION_TEST_CORE
-/******** TFM_IRQ_TEST_1 ********/
-{
-        "SPM_CORE_IRQ_TEST_1_PREPARE_TEST_SCENARIO",
-        TFM_IRQ_TEST_1_ID,
-        SPM_CORE_IRQ_TEST_1_PREPARE_TEST_SCENARIO_SIGNAL,
-        0x0000F0A0,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
-{
-        "SPM_CORE_IRQ_TEST_1_EXECUTE_TEST_SCENARIO",
-        TFM_IRQ_TEST_1_ID,
-        SPM_CORE_IRQ_TEST_1_EXECUTE_TEST_SCENARIO_SIGNAL,
-        0x0000F0A1,
-        true,
-        1,
-        TFM_VERSION_POLICY_STRICT
-},
+    /******** TFM_IRQ_TEST_1 ********/
+    {
+        .service_db = {
+            .name = "SPM_CORE_IRQ_TEST_1_PREPARE_TEST_SCENARIO",
+            .partition_id = TFM_IRQ_TEST_1_ID,
+            .signal = SPM_CORE_IRQ_TEST_1_PREPARE_TEST_SCENARIO_SIGNAL,
+            .sid = 0x0000F0A0,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
+    {
+        .service_db = {
+            .name = "SPM_CORE_IRQ_TEST_1_EXECUTE_TEST_SCENARIO",
+            .partition_id = TFM_IRQ_TEST_1_ID,
+            .signal = SPM_CORE_IRQ_TEST_1_EXECUTE_TEST_SCENARIO_SIGNAL,
+            .sid = 0x0000F0A1,
+            .non_secure_client = true,
+            .minor_version = 1,
+            .minor_policy = TFM_VERSION_POLICY_STRICT
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    },
 #endif /* TFM_PARTITION_TEST_CORE */
 
+};
 #endif /* __TFM_SERVICE_LIST_INC__ */
diff --git a/secure_fw/services/tfm_service_list.inc.template b/secure_fw/services/tfm_service_list.inc.template
index 6d05675..3cfb945 100644
--- a/secure_fw/services/tfm_service_list.inc.template
+++ b/secure_fw/services/tfm_service_list.inc.template
@@ -14,35 +14,46 @@
 #include "{{header}}"
 {% endfor %}
 
+/**************************************************************************/
+/** The service list */
+/**************************************************************************/
+struct tfm_spm_service_t service[] =
+{
 {% for manifest in manifests %}
     {% if manifest.attr.tfm_partition_ipc %}
         {% if manifest.manifest.services %}
             {% if manifest.attr.conditional %}
 #ifdef {{manifest.attr.conditional}}
             {% endif %}
-/******** {{manifest.manifest.name}} ********/
+    /******** {{manifest.manifest.name}} ********/
             {% for service in manifest.manifest.services %}
-{{'{'}}
-        "{{service.name}}",
-        {{manifest.manifest.name}}_ID,
-        {{service.signal}},
-        {{service.sid}},
+    {{'{'}}
+        .service_db = {
+            .name = "{{service.name}}",
+            .partition_id = {{manifest.manifest.name}}_ID,
+            .signal = {{service.signal}},
+            .sid = {{service.sid}},
                 {% if service.non_secure_clients is sameas true %}
-        true,
+            .non_secure_client = true,
                 {% else %}
-        false,
+            .non_secure_client = false,
                 {% endif %}
                 {% if service.minor_version %}
-        {{service.minor_version}},
+            .minor_version = {{service.minor_version}},
                 {% else %}
-        1,
+            .minor_version = 1,
                 {% endif %}
                 {% if service.minor_policy %}
-        TFM_VERSION_POLICY_{{service.minor_policy}}
+            .minor_policy = TFM_VERSION_POLICY_{{service.minor_policy}}
                 {% else %}
-        TFM_VERSION_POLICY_STRICT
+            .minor_policy = TFM_VERSION_POLICY_STRICT
                 {% endif %}
-{{'}'}},
+        },
+        .partition = NULL,
+        .handle_list = {0},
+        .msg_queue = {0},
+        .list = {0},
+    {{'}'}},
             {% endfor %}
             {% if manifest.attr.conditional %}
 #endif /* {{manifest.attr.conditional}} */
@@ -51,4 +62,5 @@
 
     {% endif %}
 {% endfor %}
+};
 #endif /* __TFM_SERVICE_LIST_INC__ */
diff --git a/secure_fw/spm/spm_api.h b/secure_fw/spm/spm_api.h
index 02c5dbf..eb2d107 100644
--- a/secure_fw/spm/spm_api.h
+++ b/secure_fw/spm/spm_api.h
@@ -136,7 +136,7 @@
 
 /* RoT Service data */
 struct tfm_spm_service_t {
-    struct tfm_spm_service_db_t *service_db; /* Service database pointer     */
+    struct tfm_spm_service_db_t service_db;  /* Service database pointer     */
     struct spm_partition_desc_t *partition;  /*
                                               * Point to secure partition
                                               * data
diff --git a/secure_fw/spm/spm_api_ipc.c b/secure_fw/spm/spm_api_ipc.c
index b05ec81..60fd82d 100644
--- a/secure_fw/spm/spm_api_ipc.c
+++ b/secure_fw/spm/spm_api_ipc.c
@@ -28,6 +28,11 @@
 #include "tfm_nspm.h"
 #include "tfm_memory_utils.h"
 
+#include "secure_fw/services/tfm_service_list.inc"
+
+/* Extern service variable */
+extern struct tfm_spm_service_t service[];
+
 /* Extern SPM variable */
 extern struct spm_partition_db_t g_spm_partition_db;
 
@@ -37,15 +42,9 @@
 /* Pools */
 TFM_POOL_DECLARE(conn_handle_pool, sizeof(struct tfm_conn_handle_t),
                  TFM_CONN_HANDLE_MAX_NUM);
-TFM_POOL_DECLARE(spm_service_pool, sizeof(struct tfm_spm_service_t),
-                 TFM_SPM_MAX_ROT_SERV_NUM);
 TFM_POOL_DECLARE(msg_db_pool, sizeof(struct tfm_msg_body_t),
                  TFM_MSG_QUEUE_MAX_MSG_NUM);
 
-static struct tfm_spm_service_db_t g_spm_service_db[] = {
-    #include "secure_fw/services/tfm_service_list.inc"
-};
-
 /********************** SPM functions for handler mode ***********************/
 
 /* Service handle management functions */
@@ -166,7 +165,7 @@
     head = &partition->runtime_data.service_list;
     TFM_LIST_FOR_EACH(node, head) {
         service = TFM_GET_CONTAINER_PTR(node, struct tfm_spm_service_t, list);
-        if (service->service_db->signal == signal) {
+        if (service->service_db.signal == signal) {
             return service;
         }
     }
@@ -195,7 +194,7 @@
         TFM_LIST_FOR_EACH(node, head) {
             service = TFM_GET_CONTAINER_PTR(node, struct tfm_spm_service_t,
                                             list);
-            if (service->service_db->sid == sid) {
+            if (service->service_db.sid == sid) {
                 return service;
             }
         }
@@ -265,14 +264,14 @@
 {
     TFM_ASSERT(service);
 
-    switch (service->service_db->minor_policy) {
+    switch (service->service_db.minor_policy) {
     case TFM_VERSION_POLICY_RELAXED:
-        if (minor_version > service->service_db->minor_version) {
+        if (minor_version > service->service_db.minor_version) {
             return IPC_ERROR_VERSION;
         }
         break;
     case TFM_VERSION_POLICY_STRICT:
-        if (minor_version != service->service_db->minor_version) {
+        if (minor_version != service->service_db.minor_version) {
             return IPC_ERROR_VERSION;
         }
         break;
@@ -401,7 +400,7 @@
     }
 
     /* Messages put. Update signals */
-    p_runtime_data->signals |= service->service_db->signal;
+    p_runtime_data->signals |= service->service_db.signal;
 
     tfm_event_wake(&p_runtime_data->signal_evnt, (p_runtime_data->signals &
                                                   p_runtime_data->signal_mask));
@@ -499,16 +498,13 @@
 {
     uint32_t i, num;
     struct spm_partition_desc_t *partition;
-    struct tfm_spm_service_t *service;
+    /*struct tfm_spm_service_t *service;*/
     struct tfm_thrd_ctx *pth, this_thrd;
 
     tfm_pool_init(conn_handle_pool,
                   POOL_BUFFER_SIZE(conn_handle_pool),
                   sizeof(struct tfm_conn_handle_t),
                   TFM_CONN_HANDLE_MAX_NUM);
-    tfm_pool_init(spm_service_pool, POOL_BUFFER_SIZE(spm_service_pool),
-                  sizeof(struct tfm_spm_service_t),
-                  TFM_SPM_MAX_ROT_SERV_NUM);
     tfm_pool_init(msg_db_pool, POOL_BUFFER_SIZE(msg_db_pool),
                   sizeof(struct tfm_msg_body_t),
                   TFM_MSG_QUEUE_MAX_MSG_NUM);
@@ -545,22 +541,17 @@
     }
 
     /* Init Service */
-    num = sizeof(g_spm_service_db) / sizeof(struct tfm_spm_service_db_t);
+    num = sizeof(service) / sizeof(struct tfm_spm_service_t);
     for (i = 0; i < num; i++) {
         partition =
-            tfm_spm_get_partition_by_id(g_spm_service_db[i].partition_id);
+            tfm_spm_get_partition_by_id(service[i].service_db.partition_id);
         if (!partition) {
             tfm_panic();
         }
-        service = (struct tfm_spm_service_t *)tfm_pool_alloc(spm_service_pool);
-        if (!service) {
-            tfm_panic();
-        }
-        service->service_db = &g_spm_service_db[i];
-        service->partition = partition;
-        tfm_list_init(&service->handle_list);
+        service[i].partition = partition;
+        tfm_list_init(&service[i].handle_list);
         tfm_list_add_tail(&partition->runtime_data.service_list,
-                          &service->list);
+                          &service[i].list);
     }
 
     /*