Core: Minimize the memory usage for service list

Split the rodata, data and bss of the service information.

Change-Id: I27b304dcde4220ebe106ba5ed8363da525ca351a
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 cfa8f4d..b657e63 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 08ffd7d..4f44d6d 100644
--- a/secure_fw/services/tfm_service_list.inc
+++ b/secure_fw/services/tfm_service_list.inc
@@ -22,6 +22,391 @@
 #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"
 
+const struct tfm_spm_service_db_t service_db[] =
+{
+    /******** TFM_SP_STORAGE ********/
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+
+    /******** TFM_SP_CRYPTO ********/
+    {
+        .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
+    },
+
+    /******** TFM_SP_INITIAL_ATTESTATION ********/
+    {
+        .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
+    },
+    {
+        .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
+    },
+
+#ifdef TFM_PARTITION_TEST_CORE
+    /******** TFM_SP_CORE_TEST ********/
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_CORE
+    /******** TFM_SP_CORE_TEST_2 ********/
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
+    /******** TFM_SP_SECURE_TEST_PARTITION ********/
+    {
+        .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
+    },
+#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+    /******** TFM_SP_IPC_SERVICE_TEST ********/
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+    /******** TFM_SP_IPC_CLIENT_TEST ********/
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+    {
+        .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
+    },
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE
+    /******** TFM_IRQ_TEST_1 ********/
+    {
+        .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
+    },
+    {
+        .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
+    },
+#endif /* TFM_PARTITION_TEST_CORE */
+
+};
+
 /**************************************************************************/
 /** The service list */
 /**************************************************************************/
@@ -29,75 +414,35 @@
 {
     /******** 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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .partition = NULL,
         .handle_list = {0},
         .msg_queue = {0},
@@ -106,15 +451,7 @@
 
     /******** 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
-        },
+        .service_db = NULL,
         .partition = NULL,
         .handle_list = {0},
         .msg_queue = {0},
@@ -123,30 +460,14 @@
 
     /******** 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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .partition = NULL,
         .handle_list = {0},
         .msg_queue = {0},
@@ -156,195 +477,91 @@
 #ifdef TFM_PARTITION_TEST_CORE
     /******** 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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .partition = NULL,
         .handle_list = {0},
         .msg_queue = {0},
@@ -355,90 +572,42 @@
 #ifdef TFM_PARTITION_TEST_CORE
     /******** 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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .partition = NULL,
         .handle_list = {0},
         .msg_queue = {0},
@@ -449,15 +618,7 @@
 #ifdef TFM_PARTITION_TEST_SECURE_SERVICES
     /******** 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
-        },
+        .service_db = NULL,
         .partition = NULL,
         .handle_list = {0},
         .msg_queue = {0},
@@ -468,60 +629,28 @@
 #ifdef TFM_PARTITION_TEST_CORE_IPC
     /******** 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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .partition = NULL,
         .handle_list = {0},
         .msg_queue = {0},
@@ -532,75 +661,35 @@
 #ifdef TFM_PARTITION_TEST_CORE_IPC
     /******** 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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .partition = NULL,
         .handle_list = {0},
         .msg_queue = {0},
@@ -611,30 +700,14 @@
 #ifdef TFM_ENABLE_IRQ_TEST
     /******** 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
-        },
+        .service_db = NULL,
         .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
-        },
+        .service_db = NULL,
         .partition = NULL,
         .handle_list = {0},
         .msg_queue = {0},
@@ -643,4 +716,5 @@
 #endif /* TFM_ENABLE_IRQ_TEST */
 
 };
+
 #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 3cfb945..02c63d3 100644
--- a/secure_fw/services/tfm_service_list.inc.template
+++ b/secure_fw/services/tfm_service_list.inc.template
@@ -14,6 +14,47 @@
 #include "{{header}}"
 {% endfor %}
 
+const struct tfm_spm_service_db_t service_db[] =
+{
+{% 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}} ********/
+            {% for service in manifest.manifest.services %}
+    {{'{'}}
+        .name = "{{service.name}}",
+        .partition_id = {{manifest.manifest.name}}_ID,
+        .signal = {{service.signal}},
+        .sid = {{service.sid}},
+            {% if service.non_secure_clients is sameas true %}
+        .non_secure_client = true,
+            {% else %}
+        .non_secure_client = false,
+            {% endif %}
+            {% if service.minor_version %}
+        .minor_version = {{service.minor_version}},
+            {% else %}
+        .minor_version = 1,
+            {% endif %}
+            {% if service.minor_policy %}
+        .minor_policy = TFM_VERSION_POLICY_{{service.minor_policy}}
+            {% else %}
+        .minor_policy = TFM_VERSION_POLICY_STRICT
+            {% endif %}
+    {{'}'}},
+            {% endfor %}
+            {% if manifest.attr.conditional %}
+#endif /* {{manifest.attr.conditional}} */
+            {% endif %}
+        {% endif %}
+
+    {% endif %}
+{% endfor %}
+};
+
 /**************************************************************************/
 /** The service list */
 /**************************************************************************/
@@ -28,27 +69,7 @@
     /******** {{manifest.manifest.name}} ********/
             {% for service in manifest.manifest.services %}
     {{'{'}}
-        .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 %}
-            .non_secure_client = true,
-                {% else %}
-            .non_secure_client = false,
-                {% endif %}
-                {% if service.minor_version %}
-            .minor_version = {{service.minor_version}},
-                {% else %}
-            .minor_version = 1,
-                {% endif %}
-                {% if service.minor_policy %}
-            .minor_policy = TFM_VERSION_POLICY_{{service.minor_policy}}
-                {% else %}
-            .minor_policy = TFM_VERSION_POLICY_STRICT
-                {% endif %}
-        },
+        .service_db = NULL,
         .partition = NULL,
         .handle_list = {0},
         .msg_queue = {0},
@@ -63,4 +84,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 3edd8a8..99d35a2 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     */
+    const 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 13a00bb..3db55b5 100644
--- a/secure_fw/spm/spm_api_ipc.c
+++ b/secure_fw/spm/spm_api_ipc.c
@@ -32,6 +32,7 @@
 
 /* Extern service variable */
 extern struct tfm_spm_service_t service[];
+extern const struct tfm_spm_service_db_t service_db[];
 
 /* Extern SPM variable */
 extern struct spm_partition_db_t g_spm_partition_db;
@@ -151,7 +152,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;
         }
     }
@@ -180,7 +181,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;
             }
         }
@@ -218,14 +219,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;
@@ -350,7 +351,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));
@@ -448,7 +449,6 @@
 {
     uint32_t i, num;
     struct spm_partition_desc_t *partition;
-    /*struct tfm_spm_service_t *service;*/
     struct tfm_thrd_ctx *pth, this_thrd;
 
     tfm_pool_init(conn_handle_pool,
@@ -490,8 +490,9 @@
     /* Init Service */
     num = sizeof(service) / sizeof(struct tfm_spm_service_t);
     for (i = 0; i < num; i++) {
+        service[i].service_db = &service_db[i];
         partition =
-            tfm_spm_get_partition_by_id(service[i].service_db.partition_id);
+            tfm_spm_get_partition_by_id(service[i].service_db->partition_id);
         if (!partition) {
             tfm_panic();
         }