Core: Eliminate SPM DB initialising code

This commit modifies template files related to the SPM DB so that
instead of generating code that initialises the DB, a C structure
initialiser is generated directly for the DB.

Change-Id: I88c2cd077a15101d24559027a73716a2f0a5c185
Signed-off-by: Mate Toth-Pal <mate.toth-pal@arm.com>
diff --git a/secure_fw/services/tfm_spm_db.inc b/secure_fw/services/tfm_spm_db.inc
new file mode 100644
index 0000000..35b0774
--- /dev/null
+++ b/secure_fw/services/tfm_spm_db.inc
@@ -0,0 +1,1223 @@
+/*
+ * Copyright (c) 2019, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*********** WARNING: This is an auto-generated file. Do not edit! ***********/
+
+#ifndef __TFM_SPM_DB_INC__
+#define __TFM_SPM_DB_INC__
+
+#include "spm_api.h"
+
+/**************************************************************************/
+/** IRQ count per partition */
+/**************************************************************************/
+#define TFM_PARTITION_TFM_SP_STORAGE_IRQ_COUNT 0
+
+#ifdef TFM_PARTITION_AUDIT_LOG
+#define TFM_PARTITION_TFM_SP_AUDIT_LOG_IRQ_COUNT 0
+#endif /* TFM_PARTITION_AUDIT_LOG */
+
+#define TFM_PARTITION_TFM_SP_CRYPTO_IRQ_COUNT 0
+
+#ifdef TFM_PARTITION_PLATFORM
+#define TFM_PARTITION_TFM_SP_PLATFORM_IRQ_COUNT 0
+#endif /* TFM_PARTITION_PLATFORM */
+
+#define TFM_PARTITION_TFM_SP_INITIAL_ATTESTATION_IRQ_COUNT 0
+
+#ifdef TFM_PARTITION_TEST_CORE
+#define TFM_PARTITION_TFM_SP_CORE_TEST_IRQ_COUNT 0
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_CORE
+#define TFM_PARTITION_TFM_SP_CORE_TEST_2_IRQ_COUNT 0
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
+#define TFM_PARTITION_TFM_SP_SECURE_TEST_PARTITION_IRQ_COUNT 0
+#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+#define TFM_PARTITION_TFM_SP_IPC_SERVICE_TEST_IRQ_COUNT 0
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+#define TFM_PARTITION_TFM_SP_IPC_CLIENT_TEST_IRQ_COUNT 0
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE
+#define TFM_PARTITION_TFM_IRQ_TEST_1_IRQ_COUNT 1
+#endif /* TFM_PARTITION_TEST_CORE */
+
+/**************************************************************************/
+/** Declarations of partition init functions */
+/**************************************************************************/
+extern int32_t tfm_sst_req_mngr_init(void);
+
+#ifdef TFM_PARTITION_AUDIT_LOG
+extern int32_t audit_core_init(void);
+#endif /* TFM_PARTITION_AUDIT_LOG */
+
+extern int32_t tfm_crypto_init(void);
+
+#ifdef TFM_PARTITION_PLATFORM
+extern int32_t platform_sp_init(void);
+#endif /* TFM_PARTITION_PLATFORM */
+
+extern int32_t attest_partition_init(void);
+
+#ifdef TFM_PARTITION_TEST_CORE
+extern int32_t core_test_init(void);
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_CORE
+extern int32_t core_test_2_init(void);
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
+extern int32_t tfm_secure_client_service_init(void);
+#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+extern int32_t ipc_service_test_main(void);
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+extern int32_t ipc_client_test_main(void);
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE
+extern int32_t tfm_irq_test_1_init(void);
+#endif /* TFM_PARTITION_TEST_CORE */
+
+/**************************************************************************/
+/** Memory region declarations */
+/**************************************************************************/
+REGION_DECLARE(Image$$, TFM_SP_STORAGE, $$Base);
+REGION_DECLARE(Image$$, TFM_SP_STORAGE, $$Limit);
+REGION_DECLARE(Image$$, TFM_SP_STORAGE, $$RO$$Base);
+REGION_DECLARE(Image$$, TFM_SP_STORAGE, $$RO$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_STORAGE, _DATA$$RW$$Base);
+REGION_DECLARE(Image$$, TFM_SP_STORAGE, _DATA$$RW$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_STORAGE, _DATA$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_STORAGE, _DATA$$ZI$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_STORAGE, _STACK$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_STORAGE, _STACK$$ZI$$Limit);
+
+#ifdef TFM_PARTITION_AUDIT_LOG
+REGION_DECLARE(Image$$, TFM_SP_AUDIT_LOG, $$Base);
+REGION_DECLARE(Image$$, TFM_SP_AUDIT_LOG, $$Limit);
+REGION_DECLARE(Image$$, TFM_SP_AUDIT_LOG, $$RO$$Base);
+REGION_DECLARE(Image$$, TFM_SP_AUDIT_LOG, $$RO$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_AUDIT_LOG, _DATA$$RW$$Base);
+REGION_DECLARE(Image$$, TFM_SP_AUDIT_LOG, _DATA$$RW$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_AUDIT_LOG, _DATA$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_AUDIT_LOG, _DATA$$ZI$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_AUDIT_LOG, _STACK$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_AUDIT_LOG, _STACK$$ZI$$Limit);
+#endif /* TFM_PARTITION_AUDIT_LOG */
+
+REGION_DECLARE(Image$$, TFM_SP_CRYPTO, $$Base);
+REGION_DECLARE(Image$$, TFM_SP_CRYPTO, $$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CRYPTO, $$RO$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CRYPTO, $$RO$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CRYPTO, _DATA$$RW$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CRYPTO, _DATA$$RW$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CRYPTO, _DATA$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CRYPTO, _DATA$$ZI$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CRYPTO, _STACK$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CRYPTO, _STACK$$ZI$$Limit);
+
+#ifdef TFM_PARTITION_PLATFORM
+REGION_DECLARE(Image$$, TFM_SP_PLATFORM, $$Base);
+REGION_DECLARE(Image$$, TFM_SP_PLATFORM, $$Limit);
+REGION_DECLARE(Image$$, TFM_SP_PLATFORM, $$RO$$Base);
+REGION_DECLARE(Image$$, TFM_SP_PLATFORM, $$RO$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_PLATFORM, _DATA$$RW$$Base);
+REGION_DECLARE(Image$$, TFM_SP_PLATFORM, _DATA$$RW$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_PLATFORM, _DATA$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_PLATFORM, _DATA$$ZI$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_PLATFORM, _STACK$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_PLATFORM, _STACK$$ZI$$Limit);
+#endif /* TFM_PARTITION_PLATFORM */
+
+REGION_DECLARE(Image$$, TFM_SP_INITIAL_ATTESTATION, $$Base);
+REGION_DECLARE(Image$$, TFM_SP_INITIAL_ATTESTATION, $$Limit);
+REGION_DECLARE(Image$$, TFM_SP_INITIAL_ATTESTATION, $$RO$$Base);
+REGION_DECLARE(Image$$, TFM_SP_INITIAL_ATTESTATION, $$RO$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_INITIAL_ATTESTATION, _DATA$$RW$$Base);
+REGION_DECLARE(Image$$, TFM_SP_INITIAL_ATTESTATION, _DATA$$RW$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_INITIAL_ATTESTATION, _DATA$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_INITIAL_ATTESTATION, _DATA$$ZI$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_INITIAL_ATTESTATION, _STACK$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_INITIAL_ATTESTATION, _STACK$$ZI$$Limit);
+
+#ifdef TFM_PARTITION_TEST_CORE
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST, $$Base);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST, $$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST, $$RO$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST, $$RO$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST, _DATA$$RW$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST, _DATA$$RW$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST, _DATA$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST, _DATA$$ZI$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST, _STACK$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST, _STACK$$ZI$$Limit);
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_CORE
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST_2, $$Base);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST_2, $$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST_2, $$RO$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST_2, $$RO$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST_2, _DATA$$RW$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST_2, _DATA$$RW$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST_2, _DATA$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST_2, _DATA$$ZI$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST_2, _STACK$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_CORE_TEST_2, _STACK$$ZI$$Limit);
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
+REGION_DECLARE(Image$$, TFM_SP_SECURE_TEST_PARTITION, $$Base);
+REGION_DECLARE(Image$$, TFM_SP_SECURE_TEST_PARTITION, $$Limit);
+REGION_DECLARE(Image$$, TFM_SP_SECURE_TEST_PARTITION, $$RO$$Base);
+REGION_DECLARE(Image$$, TFM_SP_SECURE_TEST_PARTITION, $$RO$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_SECURE_TEST_PARTITION, _DATA$$RW$$Base);
+REGION_DECLARE(Image$$, TFM_SP_SECURE_TEST_PARTITION, _DATA$$RW$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_SECURE_TEST_PARTITION, _DATA$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_SECURE_TEST_PARTITION, _DATA$$ZI$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_SECURE_TEST_PARTITION, _STACK$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_SECURE_TEST_PARTITION, _STACK$$ZI$$Limit);
+#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+REGION_DECLARE(Image$$, TFM_SP_IPC_SERVICE_TEST, $$Base);
+REGION_DECLARE(Image$$, TFM_SP_IPC_SERVICE_TEST, $$Limit);
+REGION_DECLARE(Image$$, TFM_SP_IPC_SERVICE_TEST, $$RO$$Base);
+REGION_DECLARE(Image$$, TFM_SP_IPC_SERVICE_TEST, $$RO$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_IPC_SERVICE_TEST, _DATA$$RW$$Base);
+REGION_DECLARE(Image$$, TFM_SP_IPC_SERVICE_TEST, _DATA$$RW$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_IPC_SERVICE_TEST, _DATA$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_IPC_SERVICE_TEST, _DATA$$ZI$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_IPC_SERVICE_TEST, _STACK$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_IPC_SERVICE_TEST, _STACK$$ZI$$Limit);
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+REGION_DECLARE(Image$$, TFM_SP_IPC_CLIENT_TEST, $$Base);
+REGION_DECLARE(Image$$, TFM_SP_IPC_CLIENT_TEST, $$Limit);
+REGION_DECLARE(Image$$, TFM_SP_IPC_CLIENT_TEST, $$RO$$Base);
+REGION_DECLARE(Image$$, TFM_SP_IPC_CLIENT_TEST, $$RO$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_IPC_CLIENT_TEST, _DATA$$RW$$Base);
+REGION_DECLARE(Image$$, TFM_SP_IPC_CLIENT_TEST, _DATA$$RW$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_IPC_CLIENT_TEST, _DATA$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_IPC_CLIENT_TEST, _DATA$$ZI$$Limit);
+REGION_DECLARE(Image$$, TFM_SP_IPC_CLIENT_TEST, _STACK$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_SP_IPC_CLIENT_TEST, _STACK$$ZI$$Limit);
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE
+REGION_DECLARE(Image$$, TFM_IRQ_TEST_1, $$Base);
+REGION_DECLARE(Image$$, TFM_IRQ_TEST_1, $$Limit);
+REGION_DECLARE(Image$$, TFM_IRQ_TEST_1, $$RO$$Base);
+REGION_DECLARE(Image$$, TFM_IRQ_TEST_1, $$RO$$Limit);
+REGION_DECLARE(Image$$, TFM_IRQ_TEST_1, _DATA$$RW$$Base);
+REGION_DECLARE(Image$$, TFM_IRQ_TEST_1, _DATA$$RW$$Limit);
+REGION_DECLARE(Image$$, TFM_IRQ_TEST_1, _DATA$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_IRQ_TEST_1, _DATA$$ZI$$Limit);
+REGION_DECLARE(Image$$, TFM_IRQ_TEST_1, _STACK$$ZI$$Base);
+REGION_DECLARE(Image$$, TFM_IRQ_TEST_1, _STACK$$ZI$$Limit);
+#endif /* TFM_PARTITION_TEST_CORE */
+
+/**************************************************************************/
+/** Context stacks for IRQ handling */
+/**************************************************************************/
+/* The max size of the context stack can be calculated as a function of the IRQ
+ * count of the secure partition:
+ *
+ * max_stack_size = intr_ctx_size + (IRQ_CNT * (intr_ctx_size + hndl_ctx_size))
+ *
+ * where:
+ *   intr_ctx: Frame pushed when the partition is interrupted
+ *   hndl_ctx: Frame pushed when the partition is handling an interrupt
+ */
+static uint32_t ctx_stack_TFM_SP_STORAGE[
+        (sizeof(struct interrupted_ctx_stack_frame_t) +
+            (TFM_PARTITION_TFM_SP_STORAGE_IRQ_COUNT) * (
+                sizeof(struct interrupted_ctx_stack_frame_t) +
+                sizeof(struct handler_ctx_stack_frame_t)
+        )) / sizeof(uint32_t)];
+
+#ifdef TFM_PARTITION_AUDIT_LOG
+static uint32_t ctx_stack_TFM_SP_AUDIT_LOG[
+        (sizeof(struct interrupted_ctx_stack_frame_t) +
+            (TFM_PARTITION_TFM_SP_AUDIT_LOG_IRQ_COUNT) * (
+                sizeof(struct interrupted_ctx_stack_frame_t) +
+                sizeof(struct handler_ctx_stack_frame_t)
+        )) / sizeof(uint32_t)];
+#endif /* TFM_PARTITION_AUDIT_LOG */
+
+static uint32_t ctx_stack_TFM_SP_CRYPTO[
+        (sizeof(struct interrupted_ctx_stack_frame_t) +
+            (TFM_PARTITION_TFM_SP_CRYPTO_IRQ_COUNT) * (
+                sizeof(struct interrupted_ctx_stack_frame_t) +
+                sizeof(struct handler_ctx_stack_frame_t)
+        )) / sizeof(uint32_t)];
+
+#ifdef TFM_PARTITION_PLATFORM
+static uint32_t ctx_stack_TFM_SP_PLATFORM[
+        (sizeof(struct interrupted_ctx_stack_frame_t) +
+            (TFM_PARTITION_TFM_SP_PLATFORM_IRQ_COUNT) * (
+                sizeof(struct interrupted_ctx_stack_frame_t) +
+                sizeof(struct handler_ctx_stack_frame_t)
+        )) / sizeof(uint32_t)];
+#endif /* TFM_PARTITION_PLATFORM */
+
+static uint32_t ctx_stack_TFM_SP_INITIAL_ATTESTATION[
+        (sizeof(struct interrupted_ctx_stack_frame_t) +
+            (TFM_PARTITION_TFM_SP_INITIAL_ATTESTATION_IRQ_COUNT) * (
+                sizeof(struct interrupted_ctx_stack_frame_t) +
+                sizeof(struct handler_ctx_stack_frame_t)
+        )) / sizeof(uint32_t)];
+
+#ifdef TFM_PARTITION_TEST_CORE
+static uint32_t ctx_stack_TFM_SP_CORE_TEST[
+        (sizeof(struct interrupted_ctx_stack_frame_t) +
+            (TFM_PARTITION_TFM_SP_CORE_TEST_IRQ_COUNT) * (
+                sizeof(struct interrupted_ctx_stack_frame_t) +
+                sizeof(struct handler_ctx_stack_frame_t)
+        )) / sizeof(uint32_t)];
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_CORE
+static uint32_t ctx_stack_TFM_SP_CORE_TEST_2[
+        (sizeof(struct interrupted_ctx_stack_frame_t) +
+            (TFM_PARTITION_TFM_SP_CORE_TEST_2_IRQ_COUNT) * (
+                sizeof(struct interrupted_ctx_stack_frame_t) +
+                sizeof(struct handler_ctx_stack_frame_t)
+        )) / sizeof(uint32_t)];
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
+static uint32_t ctx_stack_TFM_SP_SECURE_TEST_PARTITION[
+        (sizeof(struct interrupted_ctx_stack_frame_t) +
+            (TFM_PARTITION_TFM_SP_SECURE_TEST_PARTITION_IRQ_COUNT) * (
+                sizeof(struct interrupted_ctx_stack_frame_t) +
+                sizeof(struct handler_ctx_stack_frame_t)
+        )) / sizeof(uint32_t)];
+#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+static uint32_t ctx_stack_TFM_SP_IPC_SERVICE_TEST[
+        (sizeof(struct interrupted_ctx_stack_frame_t) +
+            (TFM_PARTITION_TFM_SP_IPC_SERVICE_TEST_IRQ_COUNT) * (
+                sizeof(struct interrupted_ctx_stack_frame_t) +
+                sizeof(struct handler_ctx_stack_frame_t)
+        )) / sizeof(uint32_t)];
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+static uint32_t ctx_stack_TFM_SP_IPC_CLIENT_TEST[
+        (sizeof(struct interrupted_ctx_stack_frame_t) +
+            (TFM_PARTITION_TFM_SP_IPC_CLIENT_TEST_IRQ_COUNT) * (
+                sizeof(struct interrupted_ctx_stack_frame_t) +
+                sizeof(struct handler_ctx_stack_frame_t)
+        )) / sizeof(uint32_t)];
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE
+static uint32_t ctx_stack_TFM_IRQ_TEST_1[
+        (sizeof(struct interrupted_ctx_stack_frame_t) +
+            (TFM_PARTITION_TFM_IRQ_TEST_1_IRQ_COUNT) * (
+                sizeof(struct interrupted_ctx_stack_frame_t) +
+                sizeof(struct handler_ctx_stack_frame_t)
+        )) / sizeof(uint32_t)];
+#endif /* TFM_PARTITION_TEST_CORE */
+
+/**************************************************************************/
+/** The partition list for the DB */
+/**************************************************************************/
+struct spm_partition_desc_t partition_list [] =
+{
+    {{0}}, /* placeholder for Non-secure internal partition */
+    {{0}}, /* placeholder for TF-M Core internal partition */
+
+    /* -----------------------------------------------------------------------*/
+    /* - Partition DB record for TFM_SP_STORAGE */
+    /* -----------------------------------------------------------------------*/
+    {
+    /* Static data */
+        {
+            .partition_id         = TFM_SP_STORAGE_ID,
+            .partition_flags      = SPM_PART_FLAG_IPC
+                                  | SPM_PART_FLAG_PSA_ROT | SPM_PART_FLAG_APP_ROT
+                                  ,
+            .partition_priority   = TFM_PRIORITY(NORMAL),
+            .partition_init       = tfm_sst_req_mngr_init,
+        },
+
+    /* Runtime data */
+        {
+            .partition_state      = SPM_PARTITION_STATE_UNINIT,
+            .caller_partition_idx = SPM_INVALID_PARTITION_IDX,
+            .caller_client_id     = TFM_INVALID_CLIENT_ID,
+            .share                = TFM_BUFFER_SHARE_DISABLE,
+#if TFM_LVL != 1
+            .stack_ptr            = PART_REGION_ADDR(TFM_SP_STORAGE, _STACK$$ZI$$Limit) -
+                                    sizeof(struct iovec_args_t),
+#else /* TFM_LVL != 1 */
+            .stack_ptr            = 0,
+#endif /* TFM_LVL != 1 */
+            .lr                   = 0,
+            .iovec_api            = TFM_SFN_API_IOVEC,
+            .iovec_args           =
+                {
+                    .in_vec       = {{0}},
+                    .in_len       = 0,
+                    .out_vec      = {{0}},
+                    .out_len      = 0,
+                },
+            .orig_outvec          = NULL,
+            .ctx_stack_ptr        = ctx_stack_TFM_SP_STORAGE,
+            .signal_mask          = 0,
+        },
+
+        .platform_data            = NULL,
+
+#if (TFM_LVL != 1) || defined(TFM_PSA_API)
+    /* memory_data */
+        .memory_data = {
+            .code_start           = PART_REGION_ADDR(TFM_SP_STORAGE, $$Base),
+            .code_limit           = PART_REGION_ADDR(TFM_SP_STORAGE, $$Limit),
+            .ro_start             = PART_REGION_ADDR(TFM_SP_STORAGE, $$RO$$Base),
+            .ro_limit             = PART_REGION_ADDR(TFM_SP_STORAGE, $$RO$$Limit),
+            .rw_start             = PART_REGION_ADDR(TFM_SP_STORAGE, _DATA$$RW$$Base),
+            .rw_limit             = PART_REGION_ADDR(TFM_SP_STORAGE, _DATA$$RW$$Limit),
+            .zi_start             = PART_REGION_ADDR(TFM_SP_STORAGE, _DATA$$ZI$$Base),
+            .zi_limit             = PART_REGION_ADDR(TFM_SP_STORAGE, _DATA$$ZI$$Limit),
+            .stack_bottom         = PART_REGION_ADDR(TFM_SP_STORAGE, _STACK$$ZI$$Base),
+            .stack_top            = PART_REGION_ADDR(TFM_SP_STORAGE, _STACK$$ZI$$Limit),
+        },
+#endif
+
+#ifdef TFM_PSA_API
+    /* sp_thrd */
+        .sp_thrd = {
+                .pfn              = NULL,
+                .param            = NULL,
+                .sp_base          = NULL,
+                .sp_top           = NULL,
+                .prior            = THRD_PRIOR_LOWEST,
+                .status           = THRD_STAT_INVALID,
+                .state_ctx        =
+                {
+                    .ctxb         = {0}, /* Fields are not detailed as they are architecture dependent*/
+                },
+                .next             = NULL,
+        },
+#endif /* defined(TFM_PSA_API) */
+    },
+
+    /* -----------------------------------------------------------------------*/
+    /* - Partition DB record for TFM_SP_AUDIT_LOG */
+    /* -----------------------------------------------------------------------*/
+#ifdef TFM_PARTITION_AUDIT_LOG
+    {
+    /* Static data */
+        {
+            .partition_id         = TFM_SP_AUDIT_LOG_ID,
+            .partition_flags      = 0
+                                  | SPM_PART_FLAG_PSA_ROT | SPM_PART_FLAG_APP_ROT
+                                  ,
+            .partition_priority   = TFM_PRIORITY(NORMAL),
+            .partition_init       = audit_core_init,
+        },
+
+    /* Runtime data */
+        {
+            .partition_state      = SPM_PARTITION_STATE_UNINIT,
+            .caller_partition_idx = SPM_INVALID_PARTITION_IDX,
+            .caller_client_id     = TFM_INVALID_CLIENT_ID,
+            .share                = TFM_BUFFER_SHARE_DISABLE,
+#if TFM_LVL != 1
+            .stack_ptr            = PART_REGION_ADDR(TFM_SP_AUDIT_LOG, _STACK$$ZI$$Limit) -
+                                    sizeof(struct iovec_args_t),
+#else /* TFM_LVL != 1 */
+            .stack_ptr            = 0,
+#endif /* TFM_LVL != 1 */
+            .lr                   = 0,
+            .iovec_api            = TFM_SFN_API_IOVEC,
+            .iovec_args           =
+                {
+                    .in_vec       = {{0}},
+                    .in_len       = 0,
+                    .out_vec      = {{0}},
+                    .out_len      = 0,
+                },
+            .orig_outvec          = NULL,
+            .ctx_stack_ptr        = ctx_stack_TFM_SP_AUDIT_LOG,
+            .signal_mask          = 0,
+        },
+
+    /* platform data */
+        /* FIXME: Only adding the first mmio region */
+#ifdef AUDIT_UART_REDIRECTION
+        .platform_data            = TFM_PERIPHERAL_UART1,
+#else /* AUDIT_UART_REDIRECTION */
+        .platform_data            = NULL,
+#endif /* AUDIT_UART_REDIRECTION */
+
+#if (TFM_LVL != 1) || defined(TFM_PSA_API)
+    /* memory_data */
+        .memory_data = {
+            .code_start           = PART_REGION_ADDR(TFM_SP_AUDIT_LOG, $$Base),
+            .code_limit           = PART_REGION_ADDR(TFM_SP_AUDIT_LOG, $$Limit),
+            .ro_start             = PART_REGION_ADDR(TFM_SP_AUDIT_LOG, $$RO$$Base),
+            .ro_limit             = PART_REGION_ADDR(TFM_SP_AUDIT_LOG, $$RO$$Limit),
+            .rw_start             = PART_REGION_ADDR(TFM_SP_AUDIT_LOG, _DATA$$RW$$Base),
+            .rw_limit             = PART_REGION_ADDR(TFM_SP_AUDIT_LOG, _DATA$$RW$$Limit),
+            .zi_start             = PART_REGION_ADDR(TFM_SP_AUDIT_LOG, _DATA$$ZI$$Base),
+            .zi_limit             = PART_REGION_ADDR(TFM_SP_AUDIT_LOG, _DATA$$ZI$$Limit),
+            .stack_bottom         = PART_REGION_ADDR(TFM_SP_AUDIT_LOG, _STACK$$ZI$$Base),
+            .stack_top            = PART_REGION_ADDR(TFM_SP_AUDIT_LOG, _STACK$$ZI$$Limit),
+        },
+#endif
+
+#ifdef TFM_PSA_API
+    /* sp_thrd */
+        .sp_thrd = {
+                .pfn              = NULL,
+                .param            = NULL,
+                .sp_base          = NULL,
+                .sp_top           = NULL,
+                .prior            = THRD_PRIOR_LOWEST,
+                .status           = THRD_STAT_INVALID,
+                .state_ctx        =
+                {
+                    .ctxb         = {0}, /* Fields are not detailed as they are architecture dependent*/
+                },
+                .next             = NULL,
+        },
+#endif /* defined(TFM_PSA_API) */
+    },
+#endif /* TFM_PARTITION_AUDIT_LOG */
+
+    /* -----------------------------------------------------------------------*/
+    /* - Partition DB record for TFM_SP_CRYPTO */
+    /* -----------------------------------------------------------------------*/
+    {
+    /* Static data */
+        {
+            .partition_id         = TFM_SP_CRYPTO_ID,
+            .partition_flags      = SPM_PART_FLAG_IPC
+                                  | SPM_PART_FLAG_PSA_ROT | SPM_PART_FLAG_APP_ROT
+                                  ,
+            .partition_priority   = TFM_PRIORITY(NORMAL),
+            .partition_init       = tfm_crypto_init,
+        },
+
+    /* Runtime data */
+        {
+            .partition_state      = SPM_PARTITION_STATE_UNINIT,
+            .caller_partition_idx = SPM_INVALID_PARTITION_IDX,
+            .caller_client_id     = TFM_INVALID_CLIENT_ID,
+            .share                = TFM_BUFFER_SHARE_DISABLE,
+#if TFM_LVL != 1
+            .stack_ptr            = PART_REGION_ADDR(TFM_SP_CRYPTO, _STACK$$ZI$$Limit) -
+                                    sizeof(struct iovec_args_t),
+#else /* TFM_LVL != 1 */
+            .stack_ptr            = 0,
+#endif /* TFM_LVL != 1 */
+            .lr                   = 0,
+            .iovec_api            = TFM_SFN_API_IOVEC,
+            .iovec_args           =
+                {
+                    .in_vec       = {{0}},
+                    .in_len       = 0,
+                    .out_vec      = {{0}},
+                    .out_len      = 0,
+                },
+            .orig_outvec          = NULL,
+            .ctx_stack_ptr        = ctx_stack_TFM_SP_CRYPTO,
+            .signal_mask          = 0,
+        },
+
+        .platform_data            = NULL,
+
+#if (TFM_LVL != 1) || defined(TFM_PSA_API)
+    /* memory_data */
+        .memory_data = {
+            .code_start           = PART_REGION_ADDR(TFM_SP_CRYPTO, $$Base),
+            .code_limit           = PART_REGION_ADDR(TFM_SP_CRYPTO, $$Limit),
+            .ro_start             = PART_REGION_ADDR(TFM_SP_CRYPTO, $$RO$$Base),
+            .ro_limit             = PART_REGION_ADDR(TFM_SP_CRYPTO, $$RO$$Limit),
+            .rw_start             = PART_REGION_ADDR(TFM_SP_CRYPTO, _DATA$$RW$$Base),
+            .rw_limit             = PART_REGION_ADDR(TFM_SP_CRYPTO, _DATA$$RW$$Limit),
+            .zi_start             = PART_REGION_ADDR(TFM_SP_CRYPTO, _DATA$$ZI$$Base),
+            .zi_limit             = PART_REGION_ADDR(TFM_SP_CRYPTO, _DATA$$ZI$$Limit),
+            .stack_bottom         = PART_REGION_ADDR(TFM_SP_CRYPTO, _STACK$$ZI$$Base),
+            .stack_top            = PART_REGION_ADDR(TFM_SP_CRYPTO, _STACK$$ZI$$Limit),
+        },
+#endif
+
+#ifdef TFM_PSA_API
+    /* sp_thrd */
+        .sp_thrd = {
+                .pfn              = NULL,
+                .param            = NULL,
+                .sp_base          = NULL,
+                .sp_top           = NULL,
+                .prior            = THRD_PRIOR_LOWEST,
+                .status           = THRD_STAT_INVALID,
+                .state_ctx        =
+                {
+                    .ctxb         = {0}, /* Fields are not detailed as they are architecture dependent*/
+                },
+                .next             = NULL,
+        },
+#endif /* defined(TFM_PSA_API) */
+    },
+
+    /* -----------------------------------------------------------------------*/
+    /* - Partition DB record for TFM_SP_PLATFORM */
+    /* -----------------------------------------------------------------------*/
+#ifdef TFM_PARTITION_PLATFORM
+    {
+    /* Static data */
+        {
+            .partition_id         = TFM_SP_PLATFORM_ID,
+            .partition_flags      = 0
+                                  | SPM_PART_FLAG_PSA_ROT | SPM_PART_FLAG_APP_ROT
+                                  ,
+            .partition_priority   = TFM_PRIORITY(NORMAL),
+            .partition_init       = platform_sp_init,
+        },
+
+    /* Runtime data */
+        {
+            .partition_state      = SPM_PARTITION_STATE_UNINIT,
+            .caller_partition_idx = SPM_INVALID_PARTITION_IDX,
+            .caller_client_id     = TFM_INVALID_CLIENT_ID,
+            .share                = TFM_BUFFER_SHARE_DISABLE,
+#if TFM_LVL != 1
+            .stack_ptr            = PART_REGION_ADDR(TFM_SP_PLATFORM, _STACK$$ZI$$Limit) -
+                                    sizeof(struct iovec_args_t),
+#else /* TFM_LVL != 1 */
+            .stack_ptr            = 0,
+#endif /* TFM_LVL != 1 */
+            .lr                   = 0,
+            .iovec_api            = TFM_SFN_API_IOVEC,
+            .iovec_args           =
+                {
+                    .in_vec       = {{0}},
+                    .in_len       = 0,
+                    .out_vec      = {{0}},
+                    .out_len      = 0,
+                },
+            .orig_outvec          = NULL,
+            .ctx_stack_ptr        = ctx_stack_TFM_SP_PLATFORM,
+            .signal_mask          = 0,
+        },
+
+        .platform_data            = NULL,
+
+#if (TFM_LVL != 1) || defined(TFM_PSA_API)
+    /* memory_data */
+        .memory_data = {
+            .code_start           = PART_REGION_ADDR(TFM_SP_PLATFORM, $$Base),
+            .code_limit           = PART_REGION_ADDR(TFM_SP_PLATFORM, $$Limit),
+            .ro_start             = PART_REGION_ADDR(TFM_SP_PLATFORM, $$RO$$Base),
+            .ro_limit             = PART_REGION_ADDR(TFM_SP_PLATFORM, $$RO$$Limit),
+            .rw_start             = PART_REGION_ADDR(TFM_SP_PLATFORM, _DATA$$RW$$Base),
+            .rw_limit             = PART_REGION_ADDR(TFM_SP_PLATFORM, _DATA$$RW$$Limit),
+            .zi_start             = PART_REGION_ADDR(TFM_SP_PLATFORM, _DATA$$ZI$$Base),
+            .zi_limit             = PART_REGION_ADDR(TFM_SP_PLATFORM, _DATA$$ZI$$Limit),
+            .stack_bottom         = PART_REGION_ADDR(TFM_SP_PLATFORM, _STACK$$ZI$$Base),
+            .stack_top            = PART_REGION_ADDR(TFM_SP_PLATFORM, _STACK$$ZI$$Limit),
+        },
+#endif
+
+#ifdef TFM_PSA_API
+    /* sp_thrd */
+        .sp_thrd = {
+                .pfn              = NULL,
+                .param            = NULL,
+                .sp_base          = NULL,
+                .sp_top           = NULL,
+                .prior            = THRD_PRIOR_LOWEST,
+                .status           = THRD_STAT_INVALID,
+                .state_ctx        =
+                {
+                    .ctxb         = {0}, /* Fields are not detailed as they are architecture dependent*/
+                },
+                .next             = NULL,
+        },
+#endif /* defined(TFM_PSA_API) */
+    },
+#endif /* TFM_PARTITION_PLATFORM */
+
+    /* -----------------------------------------------------------------------*/
+    /* - Partition DB record for TFM_SP_INITIAL_ATTESTATION */
+    /* -----------------------------------------------------------------------*/
+    {
+    /* Static data */
+        {
+            .partition_id         = TFM_SP_INITIAL_ATTESTATION_ID,
+            .partition_flags      = SPM_PART_FLAG_IPC
+                                  | SPM_PART_FLAG_PSA_ROT | SPM_PART_FLAG_APP_ROT
+                                  ,
+            .partition_priority   = TFM_PRIORITY(NORMAL),
+            .partition_init       = attest_partition_init,
+        },
+
+    /* Runtime data */
+        {
+            .partition_state      = SPM_PARTITION_STATE_UNINIT,
+            .caller_partition_idx = SPM_INVALID_PARTITION_IDX,
+            .caller_client_id     = TFM_INVALID_CLIENT_ID,
+            .share                = TFM_BUFFER_SHARE_DISABLE,
+#if TFM_LVL != 1
+            .stack_ptr            = PART_REGION_ADDR(TFM_SP_INITIAL_ATTESTATION, _STACK$$ZI$$Limit) -
+                                    sizeof(struct iovec_args_t),
+#else /* TFM_LVL != 1 */
+            .stack_ptr            = 0,
+#endif /* TFM_LVL != 1 */
+            .lr                   = 0,
+            .iovec_api            = TFM_SFN_API_IOVEC,
+            .iovec_args           =
+                {
+                    .in_vec       = {{0}},
+                    .in_len       = 0,
+                    .out_vec      = {{0}},
+                    .out_len      = 0,
+                },
+            .orig_outvec          = NULL,
+            .ctx_stack_ptr        = ctx_stack_TFM_SP_INITIAL_ATTESTATION,
+            .signal_mask          = 0,
+        },
+
+        .platform_data            = NULL,
+
+#if (TFM_LVL != 1) || defined(TFM_PSA_API)
+    /* memory_data */
+        .memory_data = {
+            .code_start           = PART_REGION_ADDR(TFM_SP_INITIAL_ATTESTATION, $$Base),
+            .code_limit           = PART_REGION_ADDR(TFM_SP_INITIAL_ATTESTATION, $$Limit),
+            .ro_start             = PART_REGION_ADDR(TFM_SP_INITIAL_ATTESTATION, $$RO$$Base),
+            .ro_limit             = PART_REGION_ADDR(TFM_SP_INITIAL_ATTESTATION, $$RO$$Limit),
+            .rw_start             = PART_REGION_ADDR(TFM_SP_INITIAL_ATTESTATION, _DATA$$RW$$Base),
+            .rw_limit             = PART_REGION_ADDR(TFM_SP_INITIAL_ATTESTATION, _DATA$$RW$$Limit),
+            .zi_start             = PART_REGION_ADDR(TFM_SP_INITIAL_ATTESTATION, _DATA$$ZI$$Base),
+            .zi_limit             = PART_REGION_ADDR(TFM_SP_INITIAL_ATTESTATION, _DATA$$ZI$$Limit),
+            .stack_bottom         = PART_REGION_ADDR(TFM_SP_INITIAL_ATTESTATION, _STACK$$ZI$$Base),
+            .stack_top            = PART_REGION_ADDR(TFM_SP_INITIAL_ATTESTATION, _STACK$$ZI$$Limit),
+        },
+#endif
+
+#ifdef TFM_PSA_API
+    /* sp_thrd */
+        .sp_thrd = {
+                .pfn              = NULL,
+                .param            = NULL,
+                .sp_base          = NULL,
+                .sp_top           = NULL,
+                .prior            = THRD_PRIOR_LOWEST,
+                .status           = THRD_STAT_INVALID,
+                .state_ctx        =
+                {
+                    .ctxb         = {0}, /* Fields are not detailed as they are architecture dependent*/
+                },
+                .next             = NULL,
+        },
+#endif /* defined(TFM_PSA_API) */
+    },
+
+    /* -----------------------------------------------------------------------*/
+    /* - Partition DB record for TFM_SP_CORE_TEST */
+    /* -----------------------------------------------------------------------*/
+#ifdef TFM_PARTITION_TEST_CORE
+    {
+    /* Static data */
+        {
+            .partition_id         = TFM_SP_CORE_TEST_ID,
+            .partition_flags      = SPM_PART_FLAG_IPC
+                                  | SPM_PART_FLAG_APP_ROT
+                                  ,
+            .partition_priority   = TFM_PRIORITY(NORMAL),
+            .partition_init       = core_test_init,
+        },
+
+    /* Runtime data */
+        {
+            .partition_state      = SPM_PARTITION_STATE_UNINIT,
+            .caller_partition_idx = SPM_INVALID_PARTITION_IDX,
+            .caller_client_id     = TFM_INVALID_CLIENT_ID,
+            .share                = TFM_BUFFER_SHARE_DISABLE,
+#if TFM_LVL != 1
+            .stack_ptr            = PART_REGION_ADDR(TFM_SP_CORE_TEST, _STACK$$ZI$$Limit) -
+                                    sizeof(struct iovec_args_t),
+#else /* TFM_LVL != 1 */
+            .stack_ptr            = 0,
+#endif /* TFM_LVL != 1 */
+            .lr                   = 0,
+            .iovec_api            = TFM_SFN_API_IOVEC,
+            .iovec_args           =
+                {
+                    .in_vec       = {{0}},
+                    .in_len       = 0,
+                    .out_vec      = {{0}},
+                    .out_len      = 0,
+                },
+            .orig_outvec          = NULL,
+            .ctx_stack_ptr        = ctx_stack_TFM_SP_CORE_TEST,
+            .signal_mask          = 0,
+        },
+
+    /* platform data */
+        /* FIXME: Only adding the first mmio region */
+        .platform_data            = TFM_PERIPHERAL_FPGA_IO,
+
+#if (TFM_LVL != 1) || defined(TFM_PSA_API)
+    /* memory_data */
+        .memory_data = {
+            .code_start           = PART_REGION_ADDR(TFM_SP_CORE_TEST, $$Base),
+            .code_limit           = PART_REGION_ADDR(TFM_SP_CORE_TEST, $$Limit),
+            .ro_start             = PART_REGION_ADDR(TFM_SP_CORE_TEST, $$RO$$Base),
+            .ro_limit             = PART_REGION_ADDR(TFM_SP_CORE_TEST, $$RO$$Limit),
+            .rw_start             = PART_REGION_ADDR(TFM_SP_CORE_TEST, _DATA$$RW$$Base),
+            .rw_limit             = PART_REGION_ADDR(TFM_SP_CORE_TEST, _DATA$$RW$$Limit),
+            .zi_start             = PART_REGION_ADDR(TFM_SP_CORE_TEST, _DATA$$ZI$$Base),
+            .zi_limit             = PART_REGION_ADDR(TFM_SP_CORE_TEST, _DATA$$ZI$$Limit),
+            .stack_bottom         = PART_REGION_ADDR(TFM_SP_CORE_TEST, _STACK$$ZI$$Base),
+            .stack_top            = PART_REGION_ADDR(TFM_SP_CORE_TEST, _STACK$$ZI$$Limit),
+        },
+#endif
+
+#ifdef TFM_PSA_API
+    /* sp_thrd */
+        .sp_thrd = {
+                .pfn              = NULL,
+                .param            = NULL,
+                .sp_base          = NULL,
+                .sp_top           = NULL,
+                .prior            = THRD_PRIOR_LOWEST,
+                .status           = THRD_STAT_INVALID,
+                .state_ctx        =
+                {
+                    .ctxb         = {0}, /* Fields are not detailed as they are architecture dependent*/
+                },
+                .next             = NULL,
+        },
+#endif /* defined(TFM_PSA_API) */
+    },
+#endif /* TFM_PARTITION_TEST_CORE */
+
+    /* -----------------------------------------------------------------------*/
+    /* - Partition DB record for TFM_SP_CORE_TEST_2 */
+    /* -----------------------------------------------------------------------*/
+#ifdef TFM_PARTITION_TEST_CORE
+    {
+    /* Static data */
+        {
+            .partition_id         = TFM_SP_CORE_TEST_2_ID,
+            .partition_flags      = SPM_PART_FLAG_IPC
+                                  | SPM_PART_FLAG_APP_ROT
+                                  ,
+            .partition_priority   = TFM_PRIORITY(NORMAL),
+            .partition_init       = core_test_2_init,
+        },
+
+    /* Runtime data */
+        {
+            .partition_state      = SPM_PARTITION_STATE_UNINIT,
+            .caller_partition_idx = SPM_INVALID_PARTITION_IDX,
+            .caller_client_id     = TFM_INVALID_CLIENT_ID,
+            .share                = TFM_BUFFER_SHARE_DISABLE,
+#if TFM_LVL != 1
+            .stack_ptr            = PART_REGION_ADDR(TFM_SP_CORE_TEST_2, _STACK$$ZI$$Limit) -
+                                    sizeof(struct iovec_args_t),
+#else /* TFM_LVL != 1 */
+            .stack_ptr            = 0,
+#endif /* TFM_LVL != 1 */
+            .lr                   = 0,
+            .iovec_api            = TFM_SFN_API_IOVEC,
+            .iovec_args           =
+                {
+                    .in_vec       = {{0}},
+                    .in_len       = 0,
+                    .out_vec      = {{0}},
+                    .out_len      = 0,
+                },
+            .orig_outvec          = NULL,
+            .ctx_stack_ptr        = ctx_stack_TFM_SP_CORE_TEST_2,
+            .signal_mask          = 0,
+        },
+
+        .platform_data            = NULL,
+
+#if (TFM_LVL != 1) || defined(TFM_PSA_API)
+    /* memory_data */
+        .memory_data = {
+            .code_start           = PART_REGION_ADDR(TFM_SP_CORE_TEST_2, $$Base),
+            .code_limit           = PART_REGION_ADDR(TFM_SP_CORE_TEST_2, $$Limit),
+            .ro_start             = PART_REGION_ADDR(TFM_SP_CORE_TEST_2, $$RO$$Base),
+            .ro_limit             = PART_REGION_ADDR(TFM_SP_CORE_TEST_2, $$RO$$Limit),
+            .rw_start             = PART_REGION_ADDR(TFM_SP_CORE_TEST_2, _DATA$$RW$$Base),
+            .rw_limit             = PART_REGION_ADDR(TFM_SP_CORE_TEST_2, _DATA$$RW$$Limit),
+            .zi_start             = PART_REGION_ADDR(TFM_SP_CORE_TEST_2, _DATA$$ZI$$Base),
+            .zi_limit             = PART_REGION_ADDR(TFM_SP_CORE_TEST_2, _DATA$$ZI$$Limit),
+            .stack_bottom         = PART_REGION_ADDR(TFM_SP_CORE_TEST_2, _STACK$$ZI$$Base),
+            .stack_top            = PART_REGION_ADDR(TFM_SP_CORE_TEST_2, _STACK$$ZI$$Limit),
+        },
+#endif
+
+#ifdef TFM_PSA_API
+    /* sp_thrd */
+        .sp_thrd = {
+                .pfn              = NULL,
+                .param            = NULL,
+                .sp_base          = NULL,
+                .sp_top           = NULL,
+                .prior            = THRD_PRIOR_LOWEST,
+                .status           = THRD_STAT_INVALID,
+                .state_ctx        =
+                {
+                    .ctxb         = {0}, /* Fields are not detailed as they are architecture dependent*/
+                },
+                .next             = NULL,
+        },
+#endif /* defined(TFM_PSA_API) */
+    },
+#endif /* TFM_PARTITION_TEST_CORE */
+
+    /* -----------------------------------------------------------------------*/
+    /* - Partition DB record for TFM_SP_SECURE_TEST_PARTITION */
+    /* -----------------------------------------------------------------------*/
+#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
+    {
+    /* Static data */
+        {
+            .partition_id         = TFM_SP_SECURE_TEST_PARTITION_ID,
+            .partition_flags      = SPM_PART_FLAG_IPC
+                                  | SPM_PART_FLAG_PSA_ROT | SPM_PART_FLAG_APP_ROT
+                                  ,
+            .partition_priority   = TFM_PRIORITY(NORMAL),
+            .partition_init       = tfm_secure_client_service_init,
+        },
+
+    /* Runtime data */
+        {
+            .partition_state      = SPM_PARTITION_STATE_UNINIT,
+            .caller_partition_idx = SPM_INVALID_PARTITION_IDX,
+            .caller_client_id     = TFM_INVALID_CLIENT_ID,
+            .share                = TFM_BUFFER_SHARE_DISABLE,
+#if TFM_LVL != 1
+            .stack_ptr            = PART_REGION_ADDR(TFM_SP_SECURE_TEST_PARTITION, _STACK$$ZI$$Limit) -
+                                    sizeof(struct iovec_args_t),
+#else /* TFM_LVL != 1 */
+            .stack_ptr            = 0,
+#endif /* TFM_LVL != 1 */
+            .lr                   = 0,
+            .iovec_api            = TFM_SFN_API_IOVEC,
+            .iovec_args           =
+                {
+                    .in_vec       = {{0}},
+                    .in_len       = 0,
+                    .out_vec      = {{0}},
+                    .out_len      = 0,
+                },
+            .orig_outvec          = NULL,
+            .ctx_stack_ptr        = ctx_stack_TFM_SP_SECURE_TEST_PARTITION,
+            .signal_mask          = 0,
+        },
+
+    /* platform data */
+        /* FIXME: Only adding the first mmio region */
+        .platform_data            = TFM_PERIPHERAL_STD_UART,
+
+#if (TFM_LVL != 1) || defined(TFM_PSA_API)
+    /* memory_data */
+        .memory_data = {
+            .code_start           = PART_REGION_ADDR(TFM_SP_SECURE_TEST_PARTITION, $$Base),
+            .code_limit           = PART_REGION_ADDR(TFM_SP_SECURE_TEST_PARTITION, $$Limit),
+            .ro_start             = PART_REGION_ADDR(TFM_SP_SECURE_TEST_PARTITION, $$RO$$Base),
+            .ro_limit             = PART_REGION_ADDR(TFM_SP_SECURE_TEST_PARTITION, $$RO$$Limit),
+            .rw_start             = PART_REGION_ADDR(TFM_SP_SECURE_TEST_PARTITION, _DATA$$RW$$Base),
+            .rw_limit             = PART_REGION_ADDR(TFM_SP_SECURE_TEST_PARTITION, _DATA$$RW$$Limit),
+            .zi_start             = PART_REGION_ADDR(TFM_SP_SECURE_TEST_PARTITION, _DATA$$ZI$$Base),
+            .zi_limit             = PART_REGION_ADDR(TFM_SP_SECURE_TEST_PARTITION, _DATA$$ZI$$Limit),
+            .stack_bottom         = PART_REGION_ADDR(TFM_SP_SECURE_TEST_PARTITION, _STACK$$ZI$$Base),
+            .stack_top            = PART_REGION_ADDR(TFM_SP_SECURE_TEST_PARTITION, _STACK$$ZI$$Limit),
+        },
+#endif
+
+#ifdef TFM_PSA_API
+    /* sp_thrd */
+        .sp_thrd = {
+                .pfn              = NULL,
+                .param            = NULL,
+                .sp_base          = NULL,
+                .sp_top           = NULL,
+                .prior            = THRD_PRIOR_LOWEST,
+                .status           = THRD_STAT_INVALID,
+                .state_ctx        =
+                {
+                    .ctxb         = {0}, /* Fields are not detailed as they are architecture dependent*/
+                },
+                .next             = NULL,
+        },
+#endif /* defined(TFM_PSA_API) */
+    },
+#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+
+    /* -----------------------------------------------------------------------*/
+    /* - Partition DB record for TFM_SP_IPC_SERVICE_TEST */
+    /* -----------------------------------------------------------------------*/
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+    {
+    /* Static data */
+        {
+            .partition_id         = TFM_SP_IPC_SERVICE_TEST_ID,
+            .partition_flags      = SPM_PART_FLAG_IPC
+                                  | SPM_PART_FLAG_PSA_ROT | SPM_PART_FLAG_APP_ROT
+                                  ,
+            .partition_priority   = TFM_PRIORITY(HIGH),
+            .partition_init       = ipc_service_test_main,
+        },
+
+    /* Runtime data */
+        {
+            .partition_state      = SPM_PARTITION_STATE_UNINIT,
+            .caller_partition_idx = SPM_INVALID_PARTITION_IDX,
+            .caller_client_id     = TFM_INVALID_CLIENT_ID,
+            .share                = TFM_BUFFER_SHARE_DISABLE,
+#if TFM_LVL != 1
+            .stack_ptr            = PART_REGION_ADDR(TFM_SP_IPC_SERVICE_TEST, _STACK$$ZI$$Limit) -
+                                    sizeof(struct iovec_args_t),
+#else /* TFM_LVL != 1 */
+            .stack_ptr            = 0,
+#endif /* TFM_LVL != 1 */
+            .lr                   = 0,
+            .iovec_api            = TFM_SFN_API_IOVEC,
+            .iovec_args           =
+                {
+                    .in_vec       = {{0}},
+                    .in_len       = 0,
+                    .out_vec      = {{0}},
+                    .out_len      = 0,
+                },
+            .orig_outvec          = NULL,
+            .ctx_stack_ptr        = ctx_stack_TFM_SP_IPC_SERVICE_TEST,
+            .signal_mask          = 0,
+        },
+
+        .platform_data            = NULL,
+
+#if (TFM_LVL != 1) || defined(TFM_PSA_API)
+    /* memory_data */
+        .memory_data = {
+            .code_start           = PART_REGION_ADDR(TFM_SP_IPC_SERVICE_TEST, $$Base),
+            .code_limit           = PART_REGION_ADDR(TFM_SP_IPC_SERVICE_TEST, $$Limit),
+            .ro_start             = PART_REGION_ADDR(TFM_SP_IPC_SERVICE_TEST, $$RO$$Base),
+            .ro_limit             = PART_REGION_ADDR(TFM_SP_IPC_SERVICE_TEST, $$RO$$Limit),
+            .rw_start             = PART_REGION_ADDR(TFM_SP_IPC_SERVICE_TEST, _DATA$$RW$$Base),
+            .rw_limit             = PART_REGION_ADDR(TFM_SP_IPC_SERVICE_TEST, _DATA$$RW$$Limit),
+            .zi_start             = PART_REGION_ADDR(TFM_SP_IPC_SERVICE_TEST, _DATA$$ZI$$Base),
+            .zi_limit             = PART_REGION_ADDR(TFM_SP_IPC_SERVICE_TEST, _DATA$$ZI$$Limit),
+            .stack_bottom         = PART_REGION_ADDR(TFM_SP_IPC_SERVICE_TEST, _STACK$$ZI$$Base),
+            .stack_top            = PART_REGION_ADDR(TFM_SP_IPC_SERVICE_TEST, _STACK$$ZI$$Limit),
+        },
+#endif
+
+#ifdef TFM_PSA_API
+    /* sp_thrd */
+        .sp_thrd = {
+                .pfn              = NULL,
+                .param            = NULL,
+                .sp_base          = NULL,
+                .sp_top           = NULL,
+                .prior            = THRD_PRIOR_LOWEST,
+                .status           = THRD_STAT_INVALID,
+                .state_ctx        =
+                {
+                    .ctxb         = {0}, /* Fields are not detailed as they are architecture dependent*/
+                },
+                .next             = NULL,
+        },
+#endif /* defined(TFM_PSA_API) */
+    },
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+    /* -----------------------------------------------------------------------*/
+    /* - Partition DB record for TFM_SP_IPC_CLIENT_TEST */
+    /* -----------------------------------------------------------------------*/
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+    {
+    /* Static data */
+        {
+            .partition_id         = TFM_SP_IPC_CLIENT_TEST_ID,
+            .partition_flags      = SPM_PART_FLAG_IPC
+                                  | SPM_PART_FLAG_APP_ROT
+                                  ,
+            .partition_priority   = TFM_PRIORITY(NORMAL),
+            .partition_init       = ipc_client_test_main,
+        },
+
+    /* Runtime data */
+        {
+            .partition_state      = SPM_PARTITION_STATE_UNINIT,
+            .caller_partition_idx = SPM_INVALID_PARTITION_IDX,
+            .caller_client_id     = TFM_INVALID_CLIENT_ID,
+            .share                = TFM_BUFFER_SHARE_DISABLE,
+#if TFM_LVL != 1
+            .stack_ptr            = PART_REGION_ADDR(TFM_SP_IPC_CLIENT_TEST, _STACK$$ZI$$Limit) -
+                                    sizeof(struct iovec_args_t),
+#else /* TFM_LVL != 1 */
+            .stack_ptr            = 0,
+#endif /* TFM_LVL != 1 */
+            .lr                   = 0,
+            .iovec_api            = TFM_SFN_API_IOVEC,
+            .iovec_args           =
+                {
+                    .in_vec       = {{0}},
+                    .in_len       = 0,
+                    .out_vec      = {{0}},
+                    .out_len      = 0,
+                },
+            .orig_outvec          = NULL,
+            .ctx_stack_ptr        = ctx_stack_TFM_SP_IPC_CLIENT_TEST,
+            .signal_mask          = 0,
+        },
+
+        .platform_data            = NULL,
+
+#if (TFM_LVL != 1) || defined(TFM_PSA_API)
+    /* memory_data */
+        .memory_data = {
+            .code_start           = PART_REGION_ADDR(TFM_SP_IPC_CLIENT_TEST, $$Base),
+            .code_limit           = PART_REGION_ADDR(TFM_SP_IPC_CLIENT_TEST, $$Limit),
+            .ro_start             = PART_REGION_ADDR(TFM_SP_IPC_CLIENT_TEST, $$RO$$Base),
+            .ro_limit             = PART_REGION_ADDR(TFM_SP_IPC_CLIENT_TEST, $$RO$$Limit),
+            .rw_start             = PART_REGION_ADDR(TFM_SP_IPC_CLIENT_TEST, _DATA$$RW$$Base),
+            .rw_limit             = PART_REGION_ADDR(TFM_SP_IPC_CLIENT_TEST, _DATA$$RW$$Limit),
+            .zi_start             = PART_REGION_ADDR(TFM_SP_IPC_CLIENT_TEST, _DATA$$ZI$$Base),
+            .zi_limit             = PART_REGION_ADDR(TFM_SP_IPC_CLIENT_TEST, _DATA$$ZI$$Limit),
+            .stack_bottom         = PART_REGION_ADDR(TFM_SP_IPC_CLIENT_TEST, _STACK$$ZI$$Base),
+            .stack_top            = PART_REGION_ADDR(TFM_SP_IPC_CLIENT_TEST, _STACK$$ZI$$Limit),
+        },
+#endif
+
+#ifdef TFM_PSA_API
+    /* sp_thrd */
+        .sp_thrd = {
+                .pfn              = NULL,
+                .param            = NULL,
+                .sp_base          = NULL,
+                .sp_top           = NULL,
+                .prior            = THRD_PRIOR_LOWEST,
+                .status           = THRD_STAT_INVALID,
+                .state_ctx        =
+                {
+                    .ctxb         = {0}, /* Fields are not detailed as they are architecture dependent*/
+                },
+                .next             = NULL,
+        },
+#endif /* defined(TFM_PSA_API) */
+    },
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+    /* -----------------------------------------------------------------------*/
+    /* - Partition DB record for TFM_IRQ_TEST_1 */
+    /* -----------------------------------------------------------------------*/
+#ifdef TFM_PARTITION_TEST_CORE
+    {
+    /* Static data */
+        {
+            .partition_id         = TFM_IRQ_TEST_1_ID,
+            .partition_flags      = SPM_PART_FLAG_IPC
+                                  | SPM_PART_FLAG_APP_ROT
+                                  ,
+            .partition_priority   = TFM_PRIORITY(NORMAL),
+            .partition_init       = tfm_irq_test_1_init,
+        },
+
+    /* Runtime data */
+        {
+            .partition_state      = SPM_PARTITION_STATE_UNINIT,
+            .caller_partition_idx = SPM_INVALID_PARTITION_IDX,
+            .caller_client_id     = TFM_INVALID_CLIENT_ID,
+            .share                = TFM_BUFFER_SHARE_DISABLE,
+#if TFM_LVL != 1
+            .stack_ptr            = PART_REGION_ADDR(TFM_IRQ_TEST_1, _STACK$$ZI$$Limit) -
+                                    sizeof(struct iovec_args_t),
+#else /* TFM_LVL != 1 */
+            .stack_ptr            = 0,
+#endif /* TFM_LVL != 1 */
+            .lr                   = 0,
+            .iovec_api            = TFM_SFN_API_IOVEC,
+            .iovec_args           =
+                {
+                    .in_vec       = {{0}},
+                    .in_len       = 0,
+                    .out_vec      = {{0}},
+                    .out_len      = 0,
+                },
+            .orig_outvec          = NULL,
+            .ctx_stack_ptr        = ctx_stack_TFM_IRQ_TEST_1,
+            .signal_mask          = 0,
+        },
+
+    /* platform data */
+        /* FIXME: Only adding the first mmio region */
+        .platform_data            = TFM_PERIPHERAL_TIMER0,
+
+#if (TFM_LVL != 1) || defined(TFM_PSA_API)
+    /* memory_data */
+        .memory_data = {
+            .code_start           = PART_REGION_ADDR(TFM_IRQ_TEST_1, $$Base),
+            .code_limit           = PART_REGION_ADDR(TFM_IRQ_TEST_1, $$Limit),
+            .ro_start             = PART_REGION_ADDR(TFM_IRQ_TEST_1, $$RO$$Base),
+            .ro_limit             = PART_REGION_ADDR(TFM_IRQ_TEST_1, $$RO$$Limit),
+            .rw_start             = PART_REGION_ADDR(TFM_IRQ_TEST_1, _DATA$$RW$$Base),
+            .rw_limit             = PART_REGION_ADDR(TFM_IRQ_TEST_1, _DATA$$RW$$Limit),
+            .zi_start             = PART_REGION_ADDR(TFM_IRQ_TEST_1, _DATA$$ZI$$Base),
+            .zi_limit             = PART_REGION_ADDR(TFM_IRQ_TEST_1, _DATA$$ZI$$Limit),
+            .stack_bottom         = PART_REGION_ADDR(TFM_IRQ_TEST_1, _STACK$$ZI$$Base),
+            .stack_top            = PART_REGION_ADDR(TFM_IRQ_TEST_1, _STACK$$ZI$$Limit),
+        },
+#endif
+
+#ifdef TFM_PSA_API
+    /* sp_thrd */
+        .sp_thrd = {
+                .pfn              = NULL,
+                .param            = NULL,
+                .sp_base          = NULL,
+                .sp_top           = NULL,
+                .prior            = THRD_PRIOR_LOWEST,
+                .status           = THRD_STAT_INVALID,
+                .state_ctx        =
+                {
+                    .ctxb         = {0}, /* Fields are not detailed as they are architecture dependent*/
+                },
+                .next             = NULL,
+        },
+#endif /* defined(TFM_PSA_API) */
+    },
+#endif /* TFM_PARTITION_TEST_CORE */
+
+};
+
+struct spm_partition_db_t g_spm_partition_db = {
+    .is_init = 0,
+    .partition_count = sizeof(partition_list) / sizeof(partition_list[0]),
+    .running_partition_idx = 0,
+    .partitions = partition_list,
+};
+
+#endif /* __TFM_SPM_DB_INC__ */