diff options
Diffstat (limited to 'secure_fw/partitions/partition_static_info.template')
-rw-r--r-- | secure_fw/partitions/partition_static_info.template | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/secure_fw/partitions/partition_static_info.template b/secure_fw/partitions/partition_static_info.template new file mode 100644 index 0000000000..e3a3a2b1f3 --- /dev/null +++ b/secure_fw/partitions/partition_static_info.template @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2021, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +{{utilities.donotedit_warning}} + +#include <stdint.h> +#include <stddef.h> +#include "region.h" +#include "load/partition_static_load.h" +#include "load/partition_defs.h" +#include "load/service_defs.h" +#include "tfm_peripherals_def.h" +#include "psa_manifest/pid.h" +#include "psa_manifest/sid.h" +#include "psa_manifest/{{file_name}}.h" + +{% set counter = namespace(dep_counter=0, service_counter=0) %} +{% if manifest.dependencies %} + {% for dep in manifest.dependencies %} + {% set counter.dep_counter = counter.dep_counter + 1 %} + {% endfor %} +{% endif %} +{% if manifest.services %} + {% for service in manifest.services %} + {% set counter.service_counter = counter.service_counter + 1 %} + {% endfor %} +{% endif %} +#define {{"%-55s"|format(manifest.name|upper + "_NDEPS")}} ({{"%d"|format(counter.dep_counter)}}) +#define {{"%-55s"|format(manifest.name|upper + "_NSERVS")}} ({{"%d"|format(counter.service_counter)}}) + +/* Memory region declaration */ +#if TFM_LVL == 3 +REGION_DECLARE(Image$$, PT_{{manifest.name}}_PRIVATE, _DATA_START$$Base); +REGION_DECLARE(Image$$, PT_{{manifest.name}}_PRIVATE, _DATA_END$$Base); +#endif +extern uint8_t {{manifest.name|lower}}_stack[]; + +/* Entrypoint function declaration */ +extern void {{manifest.entry_point}}(void); + +{% if manifest.mmio_regions %} +/* Platform data declaration */ +const struct platform_data_t *platform_data_list_{{manifest.name|lower}}[] = +{ + {% for region in manifest.mmio_regions %} + {% if region.conditional %} +#ifdef {{region.conditional}} + {% endif %} + {{region.name}}, + {% if region.conditional %} +#endif + {% endif %} + {% endfor %} + NULL +}; +{% endif %} + +/* partition static info type definition */ +struct partition_{{manifest.name|lower}}_static_info_t { + /* common length data */ + struct partition_static_info_t cmn_info; + /* per-partition variable length data */ + uintptr_t stack_pos; + uintptr_t heap_pos; +{% if manifest.dependencies %} + uint32_t deps[{{(manifest.name|upper + "_NDEPS")}}]; +{% endif %} +{% if manifest.services %} + struct service_static_info_t services[{{(manifest.name|upper + "_NSERVS")}}]; +{% endif %} +} __attribute__((aligned(4))); + +/* Partition static, deps, service static data. Put to a dedicated section. */ +const struct partition_{{manifest.name|lower}}_static_info_t {{manifest.name|lower}}_static + __attribute__((used, section(".partition_info"))) = { + .cmn_info = { +{% if manifest.psa_framework_version == 1.0 %} + .psa_ff_ver = 0x0100 | PARTITION_INFO_MAGIC, +{% elif manifest.psa_framework_version == 1.1 %} + .psa_ff_ver = 0x0101 | PARTITION_INFO_MAGIC, +{% else %} +#error "Unsupported ff version '{{manifest.psa_framework_version}}' for partition '{{manifest.name}}'!" +{% endif %} + .pid = {{manifest.name}}, + .flags = 0 +{% if manifest.psa_framework_version == 1.0 and attr.tfm_partition_ipc is sameas true %} + | SPM_PART_FLAG_IPC +{% elif manifest.psa_framework_version == 1.1 and manifest.model == "IPC" %} + | SPM_PART_FLAG_IPC +{% endif %} +{% if manifest.type == "PSA-ROT" %} + | SPM_PART_FLAG_PSA_ROT +{% elif manifest.type != "APPLICATION-ROT" %} +#error "Unsupported type '{{manifest.type}}' for partition '{{manifest.name}}'!" +{% endif %} + | PARTITION_PRI_{{manifest.priority}}, + .entry = ENTRY_TO_POSITION({{manifest.entry_point}}), + .stack_size = {{manifest.stack_size}}, + .heap_size = 0, + .ndeps = {{(manifest.name|upper + "_NDEPS")}}, + .nservices = {{(manifest.name|upper + "_NSERVS")}}, +{% if manifest.mmio_regions %} + .plat_cookie = PTR_TO_POSITION(platform_data_list_{{manifest.name|lower}}), +{% else %} + .plat_cookie = 0, +{% endif %} +#if TFM_LVL == 3 + .mems = { + .start = PART_REGION_ADDR(PT_{{manifest.name}}_PRIVATE, _DATA_START$$Base), + .limit = PART_REGION_ADDR(PT_{{manifest.name}}_PRIVATE, _DATA_END$$Base), + }, +#endif + }, + .stack_pos = PTR_TO_POSITION({{manifest.name|lower}}_stack), + .heap_pos = 0, +{% if manifest.dependencies %} + .deps = { + {% for dep in manifest.dependencies %} + {{dep}}_SID, + {% endfor %} + }, +{% endif %} +{% if manifest.services %} + .services = { + {% for service in manifest.services %} + { + .name_strid = STRING_PTR_TO_STRID("{{service.name}}"), + .signal = {{service.name}}_SIGNAL, + .sid = {{service.sid}}, + .flags = 0 + {% if service.non_secure_clients is sameas true %} + | SERVICE_FLAG_NS_ACCESSIBLE + {% endif %} + {% if manifest.psa_framework_version > 1.0 and service.connection_based is sameas false %} + | SERVICE_FLAG_STATELESS + {% endif %} + {% if service.version_policy %} + | TFM_VERSION_POLICY_{{service.version_policy}}, + {% else %} + | TFM_VERSION_POLICY_STRICT, + {% endif %} + {% if service.version %} + .version = {{service.version}}, + {% else %} + .version = 1, + {% endif %} + }, + {% endfor %} + }, +{% endif %} +}; |