Core: Minimize the memory usage for partition list
Split the rodata, data and bss of the partition list.
Change-Id: I1b7e876ceee38b65b871b6be664d46bc7bd49af3
Signed-off-by: Summer Qin <summer.qin@arm.com>
diff --git a/secure_fw/services/tfm_spm_db.inc b/secure_fw/services/tfm_spm_db.inc
index c531fc6..14a4020 100644
--- a/secure_fw/services/tfm_spm_db.inc
+++ b/secure_fw/services/tfm_spm_db.inc
@@ -56,6 +56,10 @@
/**************************************************************************/
/** Declarations of partition init functions */
/**************************************************************************/
+#ifdef TFM_PSA_API
+extern psa_status_t tfm_nspm_thread_entry(void);
+#endif
+
extern int32_t tfm_sst_req_mngr_init(void);
#ifdef TFM_PARTITION_AUDIT_LOG
@@ -97,6 +101,10 @@
/**************************************************************************/
/** Memory region declarations */
/**************************************************************************/
+#ifdef TFM_PSA_API
+REGION_DECLARE(Image$$, ARM_LIB_STACK, $$ZI$$Base);
+REGION_DECLARE(Image$$, ARM_LIB_STACK, $$ZI$$Limit);
+
REGION_DECLARE(Image$$, TFM_SP_STORAGE, $$Base);
REGION_DECLARE(Image$$, TFM_SP_STORAGE, $$Limit);
REGION_DECLARE(Image$$, TFM_SP_STORAGE, $$RO$$Base);
@@ -234,6 +242,8 @@
REGION_DECLARE(Image$$, TFM_IRQ_TEST_1, _STACK$$ZI$$Limit);
#endif /* TFM_ENABLE_IRQ_TEST */
+#endif /* defined(TFM_PSA_API) */
+
#ifndef TFM_PSA_API
/**************************************************************************/
/** Context stacks for IRQ handling */
@@ -247,6 +257,12 @@
* intr_ctx: Frame pushed when the partition is interrupted
* hndl_ctx: Frame pushed when the partition is handling an interrupt
*/
+static uint32_t ns_interrupt_ctx_stack[
+ sizeof(struct interrupted_ctx_stack_frame_t) / sizeof(uint32_t)];
+
+static uint32_t tfm_core_interrupt_ctx_stack[
+ sizeof(struct interrupted_ctx_stack_frame_t) / sizeof(uint32_t)];
+
static uint32_t ctx_stack_TFM_SP_STORAGE[
(sizeof(struct interrupted_ctx_stack_frame_t) +
(TFM_PARTITION_TFM_SP_STORAGE_IRQ_COUNT) * (
@@ -340,99 +356,432 @@
)) / sizeof(uint32_t)];
#endif /* TFM_ENABLE_IRQ_TEST */
+
+uint32_t *ctx_stack_list[] =
+{
+ ns_interrupt_ctx_stack,
+ tfm_core_interrupt_ctx_stack,
+ ctx_stack_TFM_SP_STORAGE,
+#ifdef TFM_PARTITION_AUDIT_LOG
+ ctx_stack_TFM_SP_AUDIT_LOG,
+#endif /* TFM_PARTITION_AUDIT_LOG */
+ ctx_stack_TFM_SP_CRYPTO,
+#ifdef TFM_PARTITION_PLATFORM
+ ctx_stack_TFM_SP_PLATFORM,
+#endif /* TFM_PARTITION_PLATFORM */
+ ctx_stack_TFM_SP_INITIAL_ATTESTATION,
+#ifdef TFM_PARTITION_TEST_CORE
+ ctx_stack_TFM_SP_CORE_TEST,
+#endif /* TFM_PARTITION_TEST_CORE */
+#ifdef TFM_PARTITION_TEST_CORE
+ ctx_stack_TFM_SP_CORE_TEST_2,
+#endif /* TFM_PARTITION_TEST_CORE */
+#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
+ ctx_stack_TFM_SP_SECURE_TEST_PARTITION,
+#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+ ctx_stack_TFM_SP_IPC_SERVICE_TEST,
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+ ctx_stack_TFM_SP_IPC_CLIENT_TEST,
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+#ifdef TFM_ENABLE_IRQ_TEST
+ ctx_stack_TFM_IRQ_TEST_1,
+#endif /* TFM_ENABLE_IRQ_TEST */
+};
#endif /* !defined(TFM_PSA_API) */
/**************************************************************************/
+/** The static data of the partition list */
+/**************************************************************************/
+const struct spm_partition_static_data_t static_data_list[] =
+{
+ {
+ .partition_id = TFM_SP_NON_SECURE_ID,
+#ifdef TFM_PSA_API
+ .partition_flags = SPM_PART_FLAG_APP_ROT | SPM_PART_FLAG_IPC,
+ .partition_priority = TFM_PRIORITY_LOW,
+ .partition_init = tfm_nspm_thread_entry,
+#else
+ .partition_flags = 0,
+#endif
+ },
+
+#ifndef TFM_PSA_API
+ {
+ .partition_id = TFM_SP_CORE_ID,
+ .partition_flags = SPM_PART_FLAG_APP_ROT | SPM_PART_FLAG_PSA_ROT,
+ },
+#endif
+
+ {
+ .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,
+ },
+
+#ifdef TFM_PARTITION_AUDIT_LOG
+ {
+ .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,
+ },
+#endif /* TFM_PARTITION_AUDIT_LOG */
+
+ {
+ .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,
+ },
+
+#ifdef TFM_PARTITION_PLATFORM
+ {
+ .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,
+ },
+#endif /* TFM_PARTITION_PLATFORM */
+
+ {
+ .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,
+ },
+
+#ifdef TFM_PARTITION_TEST_CORE
+ {
+ .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,
+ },
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_CORE
+ {
+ .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,
+ },
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
+ {
+ .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,
+ },
+#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+ {
+ .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,
+ },
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+ {
+ .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,
+ },
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_ENABLE_IRQ_TEST
+ {
+ .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,
+ },
+#endif /* TFM_ENABLE_IRQ_TEST */
+
+};
+
+/**************************************************************************/
+/** The platform data of the partition list */
+/**************************************************************************/
+const struct tfm_spm_partition_platform_data_t *platform_data_list[] =
+{
+ NULL,
+
+#ifndef TFM_PSA_API
+ NULL,
+#endif
+
+ NULL,
+
+#ifdef TFM_PARTITION_AUDIT_LOG
+ /* FIXME: Only adding the first mmio region */
+#ifdef AUDIT_UART_REDIRECTION
+ TFM_PERIPHERAL_UART1,
+#else /* AUDIT_UART_REDIRECTION */
+ NULL,
+#endif /* AUDIT_UART_REDIRECTION */
+#endif /* TFM_PARTITION_AUDIT_LOG */
+
+ NULL,
+
+#ifdef TFM_PARTITION_PLATFORM
+ NULL,
+#endif /* TFM_PARTITION_PLATFORM */
+
+ NULL,
+
+#ifdef TFM_PARTITION_TEST_CORE
+ /* FIXME: Only adding the first mmio region */
+ TFM_PERIPHERAL_FPGA_IO,
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_CORE
+ NULL,
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
+ /* FIXME: Only adding the first mmio region */
+ TFM_PERIPHERAL_STD_UART,
+#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+ NULL,
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+ NULL,
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_ENABLE_IRQ_TEST
+ /* FIXME: Only adding the first mmio region */
+ TFM_PERIPHERAL_TIMER0,
+#endif /* TFM_ENABLE_IRQ_TEST */
+
+};
+
+/**************************************************************************/
+/** The memory data of the partition list */
+/**************************************************************************/
+#ifdef TFM_PSA_API
+const struct tfm_spm_partition_memory_data_t memory_data_list[] =
+{
+ {
+ .stack_bottom = PART_REGION_ADDR(ARM_LIB_STACK, $$ZI$$Base),
+ .stack_top = PART_REGION_ADDR(ARM_LIB_STACK, $$ZI$$Limit),
+ .rw_start = PART_REGION_ADDR(ARM_LIB_STACK, $$ZI$$Base),
+ },
+ {
+ .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),
+ },
+
+#ifdef TFM_PARTITION_AUDIT_LOG
+ {
+ .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 /* TFM_PARTITION_AUDIT_LOG */
+
+ {
+ .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),
+ },
+
+#ifdef TFM_PARTITION_PLATFORM
+ {
+ .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 /* TFM_PARTITION_PLATFORM */
+
+ {
+ .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),
+ },
+
+#ifdef TFM_PARTITION_TEST_CORE
+ {
+ .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 /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_CORE
+ {
+ .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 /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
+ {
+ .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 /* TFM_PARTITION_TEST_SECURE_SERVICES */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+ {
+ .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 /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+ {
+ .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 /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_ENABLE_IRQ_TEST
+ {
+ .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 /* TFM_ENABLE_IRQ_TEST */
+
+};
+#endif /* defined(TFM_PSA_API) */
+
+/**************************************************************************/
/** The partition list for the DB */
/**************************************************************************/
-struct spm_partition_desc_t partition_list [] =
+static struct spm_partition_desc_t partition_list [] =
{
- {{0}}, /* placeholder for Non-secure internal partition */
+ {{}}, /* placeholder for Non-secure internal partition */
#ifndef TFM_PSA_API
- {{0}}, /* placeholder for TF-M Core internal partition */
+ {{}}, /* placeholder for TF-M Core internal partition */
#endif /* !ifndefined(TFM_PSA_API) */
/* -----------------------------------------------------------------------*/
/* - 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 */
- {
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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,
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .signal_mask = 0,
- },
-
+ .runtime_data = {},
+ .static_data = NULL,
.platform_data = NULL,
-#ifdef 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),
- },
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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) */
},
/* -----------------------------------------------------------------------*/
@@ -440,89 +789,11 @@
/* -----------------------------------------------------------------------*/
#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 */
- {
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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,
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .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 */
+ .runtime_data = {},
+ .static_data = NULL,
.platform_data = NULL,
-#endif /* AUDIT_UART_REDIRECTION */
-#ifdef 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),
- },
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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 */
@@ -530,83 +801,11 @@
/* - 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 */
- {
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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,
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .signal_mask = 0,
- },
-
+ .runtime_data = {},
+ .static_data = NULL,
.platform_data = NULL,
-#ifdef 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),
- },
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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) */
},
/* -----------------------------------------------------------------------*/
@@ -614,83 +813,11 @@
/* -----------------------------------------------------------------------*/
#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 */
- {
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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,
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .signal_mask = 0,
- },
-
+ .runtime_data = {},
+ .static_data = NULL,
.platform_data = NULL,
-#ifdef 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),
- },
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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 */
@@ -698,83 +825,11 @@
/* - 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 */
- {
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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,
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .signal_mask = 0,
- },
-
+ .runtime_data = {},
+ .static_data = NULL,
.platform_data = NULL,
-#ifdef 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),
- },
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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) */
},
/* -----------------------------------------------------------------------*/
@@ -782,85 +837,11 @@
/* -----------------------------------------------------------------------*/
#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 */
- {
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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,
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .signal_mask = 0,
- },
+ .runtime_data = {},
+ .static_data = NULL,
+ .platform_data = NULL,
- /* platform data */
- /* FIXME: Only adding the first mmio region */
- .platform_data = TFM_PERIPHERAL_FPGA_IO,
-
-#ifdef 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),
- },
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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 */
@@ -869,83 +850,11 @@
/* -----------------------------------------------------------------------*/
#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 */
- {
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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,
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .signal_mask = 0,
- },
-
+ .runtime_data = {},
+ .static_data = NULL,
.platform_data = NULL,
-#ifdef 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),
- },
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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 */
@@ -954,85 +863,11 @@
/* -----------------------------------------------------------------------*/
#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 */
- {
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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,
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .signal_mask = 0,
- },
+ .runtime_data = {},
+ .static_data = NULL,
+ .platform_data = NULL,
- /* platform data */
- /* FIXME: Only adding the first mmio region */
- .platform_data = TFM_PERIPHERAL_STD_UART,
-
-#ifdef 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),
- },
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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 */
@@ -1041,83 +876,11 @@
/* -----------------------------------------------------------------------*/
#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 */
- {
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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,
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .signal_mask = 0,
- },
-
+ .runtime_data = {},
+ .static_data = NULL,
.platform_data = NULL,
-#ifdef 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),
- },
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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 */
@@ -1126,83 +889,11 @@
/* -----------------------------------------------------------------------*/
#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 */
- {
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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,
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .signal_mask = 0,
- },
-
+ .runtime_data = {},
+ .static_data = NULL,
.platform_data = NULL,
-#ifdef 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),
- },
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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 */
@@ -1211,85 +902,11 @@
/* -----------------------------------------------------------------------*/
#ifdef TFM_ENABLE_IRQ_TEST
{
- /* 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 */
- {
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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,
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .signal_mask = 0,
- },
+ .runtime_data = {},
+ .static_data = NULL,
+ .platform_data = NULL,
- /* platform data */
- /* FIXME: Only adding the first mmio region */
- .platform_data = TFM_PERIPHERAL_TIMER0,
-
-#ifdef 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),
- },
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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_ENABLE_IRQ_TEST */
diff --git a/secure_fw/services/tfm_spm_db.inc.template b/secure_fw/services/tfm_spm_db.inc.template
index f647639..f58dd30 100644
--- a/secure_fw/services/tfm_spm_db.inc.template
+++ b/secure_fw/services/tfm_spm_db.inc.template
@@ -32,6 +32,10 @@
/**************************************************************************/
/** Declarations of partition init functions */
/**************************************************************************/
+#ifdef TFM_PSA_API
+extern psa_status_t tfm_nspm_thread_entry(void);
+#endif
+
{% for manifest in manifests %}
{% if manifest.attr.conditional %}
#ifdef {{manifest.attr.conditional}}
@@ -45,6 +49,10 @@
/**************************************************************************/
/** Memory region declarations */
/**************************************************************************/
+#ifdef TFM_PSA_API
+REGION_DECLARE(Image$$, ARM_LIB_STACK, $$ZI$$Base);
+REGION_DECLARE(Image$$, ARM_LIB_STACK, $$ZI$$Limit);
+
{% for manifest in manifests %}
{% if manifest.attr.conditional %}
#ifdef {{manifest.attr.conditional}}
@@ -64,6 +72,8 @@
{% endif %}
{% endfor %}
+#endif /* defined(TFM_PSA_API) */
+
#ifndef TFM_PSA_API
/**************************************************************************/
/** Context stacks for IRQ handling */
@@ -77,6 +87,12 @@
* intr_ctx: Frame pushed when the partition is interrupted
* hndl_ctx: Frame pushed when the partition is handling an interrupt
*/
+static uint32_t ns_interrupt_ctx_stack[
+ sizeof(struct interrupted_ctx_stack_frame_t) / sizeof(uint32_t)];
+
+static uint32_t tfm_core_interrupt_ctx_stack[
+ sizeof(struct interrupted_ctx_stack_frame_t) / sizeof(uint32_t)];
+
{% for manifest in manifests %}
{% if manifest.attr.conditional %}
#ifdef {{manifest.attr.conditional}}
@@ -92,16 +108,158 @@
{% endif %}
{% endfor %}
+
+uint32_t *ctx_stack_list[] =
+{
+ ns_interrupt_ctx_stack,
+ tfm_core_interrupt_ctx_stack,
+{% for manifest in manifests %}
+ {% if manifest.attr.conditional %}
+#ifdef {{manifest.attr.conditional}}
+ {% endif %}
+ ctx_stack_{{manifest.manifest.name}},
+ {% if manifest.attr.conditional %}
+#endif /* {{manifest.attr.conditional}} */
+ {% endif %}
+{% endfor %}
+};
#endif /* !defined(TFM_PSA_API) */
/**************************************************************************/
+/** The static data of the partition list */
+/**************************************************************************/
+const struct spm_partition_static_data_t static_data_list[] =
+{
+ {
+ .partition_id = TFM_SP_NON_SECURE_ID,
+#ifdef TFM_PSA_API
+ .partition_flags = SPM_PART_FLAG_APP_ROT | SPM_PART_FLAG_IPC,
+ .partition_priority = TFM_PRIORITY_LOW,
+ .partition_init = tfm_nspm_thread_entry,
+#else
+ .partition_flags = 0,
+#endif
+ },
+
+#ifndef TFM_PSA_API
+ {
+ .partition_id = TFM_SP_CORE_ID,
+ .partition_flags = SPM_PART_FLAG_APP_ROT | SPM_PART_FLAG_PSA_ROT,
+ },
+#endif
+
+{% for manifest in manifests %}
+ {% if manifest.attr.conditional %}
+#ifdef {{manifest.attr.conditional}}
+ {% endif %}
+ {{'{'}}
+ .partition_id = {{manifest.manifest.name}}_ID,
+ {% if manifest.attr.tfm_partition_ipc %}
+ .partition_flags = SPM_PART_FLAG_IPC
+ {% else %}
+ .partition_flags = 0
+ {% endif %}
+ {% if manifest.manifest.type == "APPLICATION-ROT" %}
+ | SPM_PART_FLAG_APP_ROT
+ {% elif manifest.manifest.type == "PSA-ROT" %}
+ | SPM_PART_FLAG_PSA_ROT | SPM_PART_FLAG_APP_ROT
+ {% else %}
+#error "Unsupported type '{{manifest.manifest.type}}' for partition '{{manifest.manifest.name}}'!"
+ {% endif %}
+ ,
+ .partition_priority = TFM_PRIORITY({{manifest.manifest.priority}}),
+ .partition_init = {{manifest.manifest.entry_point}},
+ {{'},'}}
+ {% if manifest.attr.conditional %}
+#endif /* {{manifest.attr.conditional}} */
+ {% endif %}
+
+{% endfor %}
+};
+
+/**************************************************************************/
+/** The platform data of the partition list */
+/**************************************************************************/
+const struct tfm_spm_partition_platform_data_t *platform_data_list[] =
+{
+ NULL,
+
+#ifndef TFM_PSA_API
+ NULL,
+#endif
+
+{% for manifest in manifests %}
+ {% if manifest.attr.conditional %}
+#ifdef {{manifest.attr.conditional}}
+ {% endif %}
+ {% if manifest.manifest.mmio_regions %}
+ /* FIXME: Only adding the first mmio region */
+ {% for region in manifest.manifest.mmio_regions %}
+ {% if loop.first %}
+ {% if region.conditional %}
+#ifdef {{region.conditional}}
+ {% endif %}
+ {{region.name}},
+ {% if region.conditional %}
+#else /* {{region.conditional}} */
+ NULL,
+#endif /* {{region.conditional}} */
+ {% endif %}
+ {% else %} {# print nothing #} {% endif %}
+ {% endfor %}
+ {% else %}
+ NULL,
+ {% endif %}
+ {% if manifest.attr.conditional %}
+#endif /* {{manifest.attr.conditional}} */
+ {% endif %}
+
+{% endfor %}
+};
+
+/**************************************************************************/
+/** The memory data of the partition list */
+/**************************************************************************/
+#ifdef TFM_PSA_API
+const struct tfm_spm_partition_memory_data_t memory_data_list[] =
+{
+ {
+ .stack_bottom = PART_REGION_ADDR(ARM_LIB_STACK, $$ZI$$Base),
+ .stack_top = PART_REGION_ADDR(ARM_LIB_STACK, $$ZI$$Limit),
+ .rw_start = PART_REGION_ADDR(ARM_LIB_STACK, $$ZI$$Base),
+ },
+{% for manifest in manifests %}
+ {% if manifest.attr.conditional %}
+#ifdef {{manifest.attr.conditional}}
+ {% endif %}
+ {{'{'}}
+ .code_start = PART_REGION_ADDR({{manifest.manifest.name}}, $$Base),
+ .code_limit = PART_REGION_ADDR({{manifest.manifest.name}}, $$Limit),
+ .ro_start = PART_REGION_ADDR({{manifest.manifest.name}}, $$RO$$Base),
+ .ro_limit = PART_REGION_ADDR({{manifest.manifest.name}}, $$RO$$Limit),
+ .rw_start = PART_REGION_ADDR({{manifest.manifest.name}}, _DATA$$RW$$Base),
+ .rw_limit = PART_REGION_ADDR({{manifest.manifest.name}}, _DATA$$RW$$Limit),
+ .zi_start = PART_REGION_ADDR({{manifest.manifest.name}}, _DATA$$ZI$$Base),
+ .zi_limit = PART_REGION_ADDR({{manifest.manifest.name}}, _DATA$$ZI$$Limit),
+ .stack_bottom = PART_REGION_ADDR({{manifest.manifest.name}}, _STACK$$ZI$$Base),
+ .stack_top = PART_REGION_ADDR({{manifest.manifest.name}}, _STACK$$ZI$$Limit),
+ {{'},'}}
+ {% if manifest.attr.conditional %}
+#endif /* {{manifest.attr.conditional}} */
+ {% endif %}
+
+{% endfor %}
+};
+#endif /* defined(TFM_PSA_API) */
+
+/**************************************************************************/
/** The partition list for the DB */
/**************************************************************************/
-struct spm_partition_desc_t partition_list [] =
+static struct spm_partition_desc_t partition_list [] =
{
- {{'{{0}}'}}, /* placeholder for Non-secure internal partition */
+ {{'{{}}'}}, /* placeholder for Non-secure internal partition */
#ifndef TFM_PSA_API
- {{'{{0}}'}}, /* placeholder for TF-M Core internal partition */
+ {{'{{}}'}}, /* placeholder for TF-M Core internal partition */
#endif /* !ifndefined(TFM_PSA_API) */
{% for manifest in manifests %}
@@ -112,111 +270,11 @@
#ifdef {{manifest.attr.conditional}}
{% endif %}
{{'{'}}
- /* Static data */
- {{'{'}}
- .partition_id = {{manifest.manifest.name}}_ID,
- {% if manifest.attr.tfm_partition_ipc %}
- .partition_flags = SPM_PART_FLAG_IPC
- {% else %}
- .partition_flags = 0
- {% endif %}
- {% if manifest.manifest.type == "APPLICATION-ROT" %}
- | SPM_PART_FLAG_APP_ROT
- {% elif manifest.manifest.type == "PSA-ROT" %}
- | SPM_PART_FLAG_PSA_ROT | SPM_PART_FLAG_APP_ROT
- {% else %}
-#error "Unsupported type '{{manifest.manifest.type}}' for partition '{{manifest.manifest.name}}'!"
- {% endif %}
- ,
- .partition_priority = TFM_PRIORITY({{manifest.manifest.priority}}),
- .partition_init = {{manifest.manifest.entry_point}},
- {{'},'}}
-
/* Runtime data */
- {{'{'}}
-#ifndef TFM_PSA_API
- .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,
- .stack_ptr = 0,
- .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_{{manifest.manifest.name}},
-#else /* !defined(TFM_PSA_API) */
- .signal_evnt =
- {
- .magic = 0,
- .owner = NULL,
- },
- .signals = 0,
- .service_list =
- {
- .prev = NULL,
- .next = NULL,
- },
-#endif /* !defined(TFM_PSA_API) */
- .signal_mask = 0,
- {{'},'}}
-
- {% if manifest.manifest.mmio_regions %}
- /* platform data */
- /* FIXME: Only adding the first mmio region */
- {% for region in manifest.manifest.mmio_regions %}
- {% if loop.first %}
- {% if region.conditional %}
-#ifdef {{region.conditional}}
- {% endif %}
- .platform_data = {{region.name}},
- {% if region.conditional %}
-#else /* {{region.conditional}} */
+ .runtime_data = {},
+ .static_data = NULL,
.platform_data = NULL,
-#endif /* {{region.conditional}} */
- {% endif %}
- {% else %} {# print nothing #} {% endif %}
- {% endfor %}
- {% else %}
- .platform_data = NULL,
- {% endif %}
-#ifdef TFM_PSA_API
- /* memory_data */
- .memory_data = {{'{'}}
- .code_start = PART_REGION_ADDR({{manifest.manifest.name}}, $$Base),
- .code_limit = PART_REGION_ADDR({{manifest.manifest.name}}, $$Limit),
- .ro_start = PART_REGION_ADDR({{manifest.manifest.name}}, $$RO$$Base),
- .ro_limit = PART_REGION_ADDR({{manifest.manifest.name}}, $$RO$$Limit),
- .rw_start = PART_REGION_ADDR({{manifest.manifest.name}}, _DATA$$RW$$Base),
- .rw_limit = PART_REGION_ADDR({{manifest.manifest.name}}, _DATA$$RW$$Limit),
- .zi_start = PART_REGION_ADDR({{manifest.manifest.name}}, _DATA$$ZI$$Base),
- .zi_limit = PART_REGION_ADDR({{manifest.manifest.name}}, _DATA$$ZI$$Limit),
- .stack_bottom = PART_REGION_ADDR({{manifest.manifest.name}}, _STACK$$ZI$$Base),
- .stack_top = PART_REGION_ADDR({{manifest.manifest.name}}, _STACK$$ZI$$Limit),
- {{'},'}}
-
- /* sp_thrd */
- .sp_thrd = {
- .pfn = NULL,
- .param = NULL,
- .sp_btm = 0,
- .sp_top = 0,
- .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) */
{{'},'}}
{% if manifest.attr.conditional %}
#endif /* {{manifest.attr.conditional}} */