mbed-os5 only for TYBLE16
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
components/TARGET_PSA/TARGET_TFM/COMPONENT_SPE/secure_fw/spm/spm_db.h@1:9db0e321a9f4, 2019-12-31 (annotated)
- Committer:
- kenjiArai
- Date:
- Tue Dec 31 06:02:27 2019 +0000
- Revision:
- 1:9db0e321a9f4
- Parent:
- 0:5b88d5760320
updated based on mbed-os5.15.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:5b88d5760320 | 1 | /* |
kenjiArai | 0:5b88d5760320 | 2 | * Copyright (c) 2017-2019, Arm Limited. All rights reserved. |
kenjiArai | 0:5b88d5760320 | 3 | * |
kenjiArai | 0:5b88d5760320 | 4 | * SPDX-License-Identifier: BSD-3-Clause |
kenjiArai | 0:5b88d5760320 | 5 | * |
kenjiArai | 0:5b88d5760320 | 6 | */ |
kenjiArai | 0:5b88d5760320 | 7 | |
kenjiArai | 0:5b88d5760320 | 8 | #ifndef __SPM_DB_H__ |
kenjiArai | 0:5b88d5760320 | 9 | #define __SPM_DB_H__ |
kenjiArai | 0:5b88d5760320 | 10 | |
kenjiArai | 0:5b88d5760320 | 11 | |
kenjiArai | 0:5b88d5760320 | 12 | #ifdef TFM_PSA_API |
kenjiArai | 0:5b88d5760320 | 13 | #include "tfm_thread.h" |
kenjiArai | 0:5b88d5760320 | 14 | #endif |
kenjiArai | 0:5b88d5760320 | 15 | |
kenjiArai | 0:5b88d5760320 | 16 | struct spm_partition_desc_t; |
kenjiArai | 0:5b88d5760320 | 17 | struct spm_partition_db_t; |
kenjiArai | 0:5b88d5760320 | 18 | |
kenjiArai | 0:5b88d5760320 | 19 | typedef psa_status_t(*sp_init_function)(void); |
kenjiArai | 0:5b88d5760320 | 20 | |
kenjiArai | 0:5b88d5760320 | 21 | #define TFM_PARTITION_TYPE_APP "APPLICATION-ROT" |
kenjiArai | 0:5b88d5760320 | 22 | #define TFM_PARTITION_TYPE_PSA "PSA-ROT" |
kenjiArai | 0:5b88d5760320 | 23 | |
kenjiArai | 0:5b88d5760320 | 24 | #ifdef TFM_PSA_API |
kenjiArai | 0:5b88d5760320 | 25 | enum tfm_partition_priority { |
kenjiArai | 0:5b88d5760320 | 26 | TFM_PRIORITY_LOW = THRD_PRIOR_LOWEST, |
kenjiArai | 0:5b88d5760320 | 27 | TFM_PRIORITY_NORMAL = THRD_PRIOR_MEDIUM, |
kenjiArai | 0:5b88d5760320 | 28 | TFM_PRIORITY_HIGH = THRD_PRIOR_HIGHEST, |
kenjiArai | 0:5b88d5760320 | 29 | }; |
kenjiArai | 0:5b88d5760320 | 30 | #else |
kenjiArai | 0:5b88d5760320 | 31 | enum tfm_partition_priority { |
kenjiArai | 0:5b88d5760320 | 32 | TFM_PRIORITY_LOW = 0xFF, |
kenjiArai | 0:5b88d5760320 | 33 | TFM_PRIORITY_NORMAL = 0x7F, |
kenjiArai | 0:5b88d5760320 | 34 | TFM_PRIORITY_HIGH = 0, |
kenjiArai | 0:5b88d5760320 | 35 | }; |
kenjiArai | 0:5b88d5760320 | 36 | #endif |
kenjiArai | 0:5b88d5760320 | 37 | |
kenjiArai | 0:5b88d5760320 | 38 | #define TFM_PRIORITY(LEVEL) TFM_PRIORITY_##LEVEL |
kenjiArai | 0:5b88d5760320 | 39 | |
kenjiArai | 0:5b88d5760320 | 40 | /** |
kenjiArai | 0:5b88d5760320 | 41 | * Holds the fields of the partition DB used by the SPM code. The values of |
kenjiArai | 0:5b88d5760320 | 42 | * these fields are calculated at compile time, and set during initialisation |
kenjiArai | 0:5b88d5760320 | 43 | * phase. |
kenjiArai | 0:5b88d5760320 | 44 | */ |
kenjiArai | 0:5b88d5760320 | 45 | struct spm_partition_static_data_t { |
kenjiArai | 0:5b88d5760320 | 46 | uint32_t partition_id; |
kenjiArai | 0:5b88d5760320 | 47 | uint32_t partition_flags; |
kenjiArai | 0:5b88d5760320 | 48 | uint32_t partition_priority; |
kenjiArai | 0:5b88d5760320 | 49 | sp_init_function partition_init; |
kenjiArai | 0:5b88d5760320 | 50 | }; |
kenjiArai | 0:5b88d5760320 | 51 | |
kenjiArai | 0:5b88d5760320 | 52 | /** |
kenjiArai | 0:5b88d5760320 | 53 | * Holds the fields that define a partition for SPM. The fields are further |
kenjiArai | 0:5b88d5760320 | 54 | * divided to structures, to keep the related fields close to each other. |
kenjiArai | 0:5b88d5760320 | 55 | */ |
kenjiArai | 0:5b88d5760320 | 56 | struct spm_partition_desc_t { |
kenjiArai | 0:5b88d5760320 | 57 | struct spm_partition_static_data_t static_data; |
kenjiArai | 0:5b88d5760320 | 58 | struct spm_partition_runtime_data_t runtime_data; |
kenjiArai | 0:5b88d5760320 | 59 | struct tfm_spm_partition_platform_data_t *platform_data; |
kenjiArai | 0:5b88d5760320 | 60 | #if (TFM_LVL != 1) || defined(TFM_PSA_API) |
kenjiArai | 0:5b88d5760320 | 61 | struct tfm_spm_partition_memory_data_t memory_data; |
kenjiArai | 0:5b88d5760320 | 62 | #endif |
kenjiArai | 0:5b88d5760320 | 63 | #ifdef TFM_PSA_API |
kenjiArai | 0:5b88d5760320 | 64 | struct tfm_thrd_ctx sp_thrd; |
kenjiArai | 0:5b88d5760320 | 65 | #endif |
kenjiArai | 0:5b88d5760320 | 66 | }; |
kenjiArai | 0:5b88d5760320 | 67 | |
kenjiArai | 0:5b88d5760320 | 68 | /* Macros to pick linker symbols and allow to form the partition data base */ |
kenjiArai | 0:5b88d5760320 | 69 | #define REGION(a, b, c) a##b##c |
kenjiArai | 0:5b88d5760320 | 70 | #define REGION_NAME(a, b, c) REGION(a, b, c) |
kenjiArai | 0:5b88d5760320 | 71 | /* Changed from #if (TFM_LVL == 1) && !defined(TFM_PSA_API) to #if (TFM_LVL == 1) to avoid linker error. |
kenjiArai | 0:5b88d5760320 | 72 | TF-M build autogenerates region details (code, ro, rw, zi and stack ) using linker scripts. We do not |
kenjiArai | 0:5b88d5760320 | 73 | hve that in mbed-os build yet. |
kenjiArai | 0:5b88d5760320 | 74 | */ |
kenjiArai | 0:5b88d5760320 | 75 | #if (TFM_LVL == 1) |
kenjiArai | 0:5b88d5760320 | 76 | #define REGION_DECLARE(a, b, c) |
kenjiArai | 0:5b88d5760320 | 77 | #else |
kenjiArai | 0:5b88d5760320 | 78 | #define REGION_DECLARE(a, b, c) extern uint32_t REGION_NAME(a, b, c) |
kenjiArai | 0:5b88d5760320 | 79 | #define PART_REGION_ADDR(partition, region) \ |
kenjiArai | 0:5b88d5760320 | 80 | (uint32_t)®ION_NAME(Image$$, partition, region) |
kenjiArai | 0:5b88d5760320 | 81 | #endif |
kenjiArai | 0:5b88d5760320 | 82 | |
kenjiArai | 0:5b88d5760320 | 83 | #endif /* __SPM_DB_H__ */ |