SPM: Change partition platform data binding
- Rename the long name 'tfm_spm_partition_platform_data_t'
to 'platform_data_t'.
- Platform data list is now part of partition static data.
- Update related init logic related to this name and position
change.
Change-Id: I1676f35b53f9c3074a70ab4fb68673a347bd422f
Signed-off-by: Ken Liu <Ken.Liu@arm.com>
diff --git a/secure_fw/spm/cmsis_func/include/spm_func.h b/secure_fw/spm/cmsis_func/include/spm_func.h
index a70da00..1ffe943 100644
--- a/secure_fw/spm/cmsis_func/include/spm_func.h
+++ b/secure_fw/spm/cmsis_func/include/spm_func.h
@@ -119,7 +119,7 @@
struct spm_partition_runtime_data_t runtime_data;
const struct spm_partition_static_data_t *static_data;
/** A list of platform_data pointers */
- const struct tfm_spm_partition_platform_data_t **platform_data_list;
+ const struct platform_data_t **platform_data_list;
};
struct spm_partition_db_t {
diff --git a/secure_fw/spm/cmsis_func/spm_func.c b/secure_fw/spm/cmsis_func/spm_func.c
index c1bd5c2..72ec0ff 100644
--- a/secure_fw/spm/cmsis_func/spm_func.c
+++ b/secure_fw/spm/cmsis_func/spm_func.c
@@ -1222,7 +1222,7 @@
int32_t args[4] = {0};
int32_t fail_cnt = 0;
uint32_t idx;
- const struct tfm_spm_partition_platform_data_t **platform_data_p;
+ const struct platform_data_t **platform_data_p;
/* Call the init function for each partition */
for (idx = 0; idx < g_spm_partition_db.partition_count; ++idx) {
diff --git a/secure_fw/spm/cmsis_func/tfm_spm_db_func.inc.template b/secure_fw/spm/cmsis_func/tfm_spm_db_func.inc.template
index f60b9e4..9044249 100644
--- a/secure_fw/spm/cmsis_func/tfm_spm_db_func.inc.template
+++ b/secure_fw/spm/cmsis_func/tfm_spm_db_func.inc.template
@@ -179,7 +179,7 @@
{% if partition.attr.conditional %}
#ifdef {{partition.attr.conditional}}
{% endif %}
-const struct tfm_spm_partition_platform_data_t *
+const struct platform_data_t *
platform_data_list_{{partition.manifest.name}}[] =
{
{% for region in partition.manifest.mmio_regions %}
@@ -199,7 +199,7 @@
{% endif %}
{% endfor %}
-const struct tfm_spm_partition_platform_data_t **platform_data_list_list[] =
+const struct platform_data_t **platform_data_list_list[] =
{
NULL,
NULL,
diff --git a/secure_fw/spm/cmsis_psa/spm_ipc.c b/secure_fw/spm/cmsis_psa/spm_ipc.c
index 983d5d4..177268c 100644
--- a/secure_fw/spm/cmsis_psa/spm_ipc.c
+++ b/secure_fw/spm/cmsis_psa/spm_ipc.c
@@ -640,7 +640,7 @@
uint32_t i, j, num;
struct partition_t *partition;
struct tfm_core_thread_t *pth, *p_ns_entry_thread = NULL;
- const struct tfm_spm_partition_platform_data_t **platform_data_p;
+ const struct platform_data_t **platform_data_p;
tfm_pool_init(conn_handle_pool,
POOL_BUFFER_SIZE(conn_handle_pool),
@@ -666,7 +666,8 @@
continue;
}
- platform_data_p = partition->platform_data_list;
+ platform_data_p =
+ (const struct platform_data_t **)partition->p_static->platform_data;
if (platform_data_p != NULL) {
while ((*platform_data_p) != NULL) {
if (tfm_spm_hal_configure_default_isolation(i,
@@ -1016,8 +1017,6 @@
for (i = 0; i < g_spm_partition_db.partition_count; i++) {
g_spm_partition_db.partitions[i].p_static = &static_data_list[i];
- g_spm_partition_db.partitions[i].platform_data_list =
- platform_data_list_list[i];
g_spm_partition_db.partitions[i].memory_data = &memory_data_list[i];
}
g_spm_partition_db.is_init = 1;
diff --git a/secure_fw/spm/cmsis_psa/spm_ipc.h b/secure_fw/spm/cmsis_psa/spm_ipc.h
index 303c543..8d23c52 100644
--- a/secure_fw/spm/cmsis_psa/spm_ipc.h
+++ b/secure_fw/spm/cmsis_psa/spm_ipc.h
@@ -92,6 +92,7 @@
size_t stack_size; /* Stack size of the partition */
uintptr_t heap_base_addr; /* Heap base of the partition */
size_t heap_size; /* Heap size of the partition */
+ uintptr_t platform_data; /* Platform specific data */
uint32_t ndeps; /* Numbers of depended services */
uint32_t *deps; /* Pointer to dependency arrays */
};
@@ -112,7 +113,6 @@
uint32_t signals_waiting;
uint32_t signals_asserted;
/** A list of platform_data pointers */
- const struct tfm_spm_partition_platform_data_t **platform_data_list;
const struct tfm_spm_partition_memory_data_t *memory_data;
};
diff --git a/secure_fw/spm/cmsis_psa/tfm_spm_db_ipc.inc.template b/secure_fw/spm/cmsis_psa/tfm_spm_db_ipc.inc.template
index 4d36797..59c5168 100644
--- a/secure_fw/spm/cmsis_psa/tfm_spm_db_ipc.inc.template
+++ b/secure_fw/spm/cmsis_psa/tfm_spm_db_ipc.inc.template
@@ -95,6 +95,36 @@
{% endif %}
{% endfor %}
+
+/**************************************************************************/
+/** The platform data of the partition list */
+/**************************************************************************/
+{% for partition in partitions %}
+ {% if partition.manifest.mmio_regions %}
+ {% if partition.attr.conditional %}
+#ifdef {{partition.attr.conditional}}
+ {% endif %}
+const struct platform_data_t *
+ platform_data_list_{{partition.manifest.name}}[] =
+{
+ {% for region in partition.manifest.mmio_regions %}
+ {% if region.conditional %}
+#ifdef {{region.conditional}}
+ {% endif %}
+ {{region.name}},
+ {% if region.conditional %}
+#endif /* {{region.conditional}} */
+ {% endif %}
+ {% endfor %}
+ NULL
+};
+ {% if partition.attr.conditional %}
+#endif /* {{partition.attr.conditional}} */
+ {% endif %}
+
+ {% endif %}
+{% endfor %}
+
/**************************************************************************/
/** The static data of the partition list */
/**************************************************************************/
@@ -142,6 +172,11 @@
.entry = {{partition.manifest.entry_point}},
.stack_base_addr = 0,
.stack_size = 0,
+ {% if partition.manifest.mmio_regions %}
+ .platform_data = (uintptr_t)platform_data_list_{{partition.manifest.name}},
+ {% else %}{# if partition.manifest.mmio_regions #}
+ .platform_data = 0,
+ {% endif %}{# if partition.manifest.mmio_regions #}
.ndeps = {{partition.manifest.dependencies | length()}},
{% if partition.manifest.dependencies %}
.deps = dependencies_{{partition.manifest.name}},
@@ -157,54 +192,6 @@
};
/**************************************************************************/
-/** The platform data of the partition list */
-/**************************************************************************/
-{% for partition in partitions %}
- {% if partition.manifest.mmio_regions %}
- {% if partition.attr.conditional %}
-#ifdef {{partition.attr.conditional}}
- {% endif %}
-const struct tfm_spm_partition_platform_data_t *
- platform_data_list_{{partition.manifest.name}}[] =
-{
- {% for region in partition.manifest.mmio_regions %}
- {% if region.conditional %}
-#ifdef {{region.conditional}}
- {% endif %}
- {{region.name}},
- {% if region.conditional %}
-#endif /* {{region.conditional}} */
- {% endif %}
- {% endfor %}
- NULL
-};
- {% if partition.attr.conditional %}
-#endif /* {{partition.attr.conditional}} */
- {% endif %}
-
- {% endif %}
-{% endfor %}
-const struct tfm_spm_partition_platform_data_t **platform_data_list_list[] =
-{
- NULL,
-
-{% for partition in partitions %}
- {% if partition.attr.conditional %}
-#ifdef {{partition.attr.conditional}}
- {% endif %}
- {% if partition.manifest.mmio_regions %}
- platform_data_list_{{partition.manifest.name}},
- {% else %}{# if partition.manifest.mmio_regions #}
- NULL,
- {% endif %}{# if partition.manifest.mmio_regions #}
- {% if partition.attr.conditional %}
-#endif /* {{partition.attr.conditional}} */
- {% endif %}
-
-{% endfor %}
-};
-
-/**************************************************************************/
/** The memory data of the partition list */
/**************************************************************************/
const struct tfm_spm_partition_memory_data_t memory_data_list[] =