mbed-os5 only for TYBLE16
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
components/TARGET_PSA/TARGET_TFM/COMPONENT_SPE/bl2/include/tfm_boot_status.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) 2018-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 __TFM_BOOT_STATUS_H__ |
kenjiArai | 0:5b88d5760320 | 9 | #define __TFM_BOOT_STATUS_H__ |
kenjiArai | 0:5b88d5760320 | 10 | |
kenjiArai | 0:5b88d5760320 | 11 | #include <stdint.h> |
kenjiArai | 0:5b88d5760320 | 12 | #include <stddef.h> |
kenjiArai | 0:5b88d5760320 | 13 | |
kenjiArai | 0:5b88d5760320 | 14 | |
kenjiArai | 0:5b88d5760320 | 15 | #ifdef __cplusplus |
kenjiArai | 0:5b88d5760320 | 16 | extern "C" { |
kenjiArai | 0:5b88d5760320 | 17 | #endif |
kenjiArai | 0:5b88d5760320 | 18 | |
kenjiArai | 0:5b88d5760320 | 19 | /* Major numbers (4 bit) to identify |
kenjiArai | 0:5b88d5760320 | 20 | * the consumer of shared data in runtime SW |
kenjiArai | 0:5b88d5760320 | 21 | */ |
kenjiArai | 0:5b88d5760320 | 22 | #define TLV_MAJOR_CORE 0x0 |
kenjiArai | 0:5b88d5760320 | 23 | #define TLV_MAJOR_IAS 0x1 |
kenjiArai | 0:5b88d5760320 | 24 | |
kenjiArai | 0:5b88d5760320 | 25 | /** |
kenjiArai | 0:5b88d5760320 | 26 | * The shared data between boot loader and runtime SW is TLV encoded. The |
kenjiArai | 0:5b88d5760320 | 27 | * shared data is stored in a well known location in secure memory and this is |
kenjiArai | 0:5b88d5760320 | 28 | * a contract between boot loader and runtime SW. |
kenjiArai | 0:5b88d5760320 | 29 | * |
kenjiArai | 0:5b88d5760320 | 30 | * The structure of shared data must be the following: |
kenjiArai | 0:5b88d5760320 | 31 | * - At the beginning there must be a header: struct shared_data_tlv_header |
kenjiArai | 0:5b88d5760320 | 32 | * This contains a magic number and a size field which covers the entire |
kenjiArai | 0:5b88d5760320 | 33 | * size of the shared data area including this header. |
kenjiArai | 0:5b88d5760320 | 34 | * - After the header there come the entries which are composed from an entry |
kenjiArai | 0:5b88d5760320 | 35 | * header structure: struct shared_data_tlv_entry and the data. In the entry |
kenjiArai | 0:5b88d5760320 | 36 | * header is a type field (tly_type) which identify the consumer of the |
kenjiArai | 0:5b88d5760320 | 37 | * entry in the runtime SW and specify the subtype of that data item. There |
kenjiArai | 0:5b88d5760320 | 38 | * is a size field (tlv_len) which covers the size of the entry header and |
kenjiArai | 0:5b88d5760320 | 39 | * the data. After this structure comes the actual data. |
kenjiArai | 0:5b88d5760320 | 40 | * - Arbitrary number and size of data entry can be in the shared memory area. |
kenjiArai | 0:5b88d5760320 | 41 | * |
kenjiArai | 0:5b88d5760320 | 42 | * This table gives of overview about the tlv_type field in the entry header. |
kenjiArai | 0:5b88d5760320 | 43 | * The tlv_type always composed from a major and minor number. Major number |
kenjiArai | 0:5b88d5760320 | 44 | * identifies the addressee in runtime SW, who should process the data entry. |
kenjiArai | 0:5b88d5760320 | 45 | * Minor number used to encode more info about the data entry. The actual |
kenjiArai | 0:5b88d5760320 | 46 | * definition of minor number could change per major number. In case of boot |
kenjiArai | 0:5b88d5760320 | 47 | * status data, which is going to be processed by initial attestation service |
kenjiArai | 0:5b88d5760320 | 48 | * the minor number is split further to two part: sw_module and claim. The |
kenjiArai | 0:5b88d5760320 | 49 | * sw_module identifies the SW component in the system which the data item |
kenjiArai | 0:5b88d5760320 | 50 | * belongs to and the claim part identifies the exact type of the data. |
kenjiArai | 0:5b88d5760320 | 51 | * |
kenjiArai | 0:5b88d5760320 | 52 | * |---------------------------------------| |
kenjiArai | 0:5b88d5760320 | 53 | * | tlv_type (16) | |
kenjiArai | 0:5b88d5760320 | 54 | * |---------------------------------------| |
kenjiArai | 0:5b88d5760320 | 55 | * | tlv_major(4)| tlv_minor(12) | |
kenjiArai | 0:5b88d5760320 | 56 | * |---------------------------------------| |
kenjiArai | 0:5b88d5760320 | 57 | * | MAJOR_IAS | sw_module(6) | claim(6) | |
kenjiArai | 0:5b88d5760320 | 58 | * |---------------------------------------| |
kenjiArai | 0:5b88d5760320 | 59 | * | MAJOR_CORE | TBD | |
kenjiArai | 0:5b88d5760320 | 60 | * |---------------------------------------| |
kenjiArai | 0:5b88d5760320 | 61 | */ |
kenjiArai | 0:5b88d5760320 | 62 | |
kenjiArai | 0:5b88d5760320 | 63 | /* Initial attestation: SW components / SW modules |
kenjiArai | 0:5b88d5760320 | 64 | * This list is intended to be adjusted per device. It contains more SW |
kenjiArai | 0:5b88d5760320 | 65 | * components than currently available in TF-M project. It serves as an example, |
kenjiArai | 0:5b88d5760320 | 66 | * what kind of SW components might be available. |
kenjiArai | 0:5b88d5760320 | 67 | */ |
kenjiArai | 0:5b88d5760320 | 68 | #define SW_GENERAL 0x00 |
kenjiArai | 0:5b88d5760320 | 69 | #define SW_BL2 0x01 |
kenjiArai | 0:5b88d5760320 | 70 | #define SW_PROT 0x02 |
kenjiArai | 0:5b88d5760320 | 71 | #define SW_AROT 0x03 |
kenjiArai | 0:5b88d5760320 | 72 | #define SW_SPE 0x04 |
kenjiArai | 0:5b88d5760320 | 73 | #define SW_NSPE 0x05 |
kenjiArai | 0:5b88d5760320 | 74 | #define SW_S_NS 0x06 |
kenjiArai | 0:5b88d5760320 | 75 | #define SW_MAX 0x07 |
kenjiArai | 0:5b88d5760320 | 76 | |
kenjiArai | 0:5b88d5760320 | 77 | /* Initial attestation: Claim per SW components / SW modules */ |
kenjiArai | 0:5b88d5760320 | 78 | /* Bits: 0-2 */ |
kenjiArai | 0:5b88d5760320 | 79 | #define SW_VERSION 0x00 |
kenjiArai | 0:5b88d5760320 | 80 | #define SW_SIGNER_ID 0x01 |
kenjiArai | 0:5b88d5760320 | 81 | #define SW_EPOCH 0x02 |
kenjiArai | 0:5b88d5760320 | 82 | #define SW_TYPE 0x03 |
kenjiArai | 0:5b88d5760320 | 83 | /* Bits: 3-5 */ |
kenjiArai | 0:5b88d5760320 | 84 | #define SW_MEASURE_VALUE 0x08 |
kenjiArai | 0:5b88d5760320 | 85 | #define SW_MEASURE_TYPE 0x09 |
kenjiArai | 0:5b88d5760320 | 86 | |
kenjiArai | 0:5b88d5760320 | 87 | /* Initial attestation: General claim does not belong any particular SW |
kenjiArai | 0:5b88d5760320 | 88 | * component. But they might be part of the boot status. |
kenjiArai | 0:5b88d5760320 | 89 | */ |
kenjiArai | 0:5b88d5760320 | 90 | #define BOOT_SEED 0x00 |
kenjiArai | 0:5b88d5760320 | 91 | #define HW_VERSION 0x01 |
kenjiArai | 0:5b88d5760320 | 92 | #define SECURITY_LIFECYCLE 0x02 |
kenjiArai | 0:5b88d5760320 | 93 | |
kenjiArai | 0:5b88d5760320 | 94 | /* Minor numbers (12 bit) to identify attestation service related data */ |
kenjiArai | 0:5b88d5760320 | 95 | #define TLV_MINOR_IAS_BOOT_SEED ((SW_GENERAL << 6) | BOOT_SEED) |
kenjiArai | 0:5b88d5760320 | 96 | #define TLV_MINOR_IAS_HW_VERSION ((SW_GENERAL << 6) | HW_VERSION) |
kenjiArai | 0:5b88d5760320 | 97 | #define TLV_MINOR_IAS_SLC ((SW_GENERAL << 6) | SECURITY_LIFECYCLE) |
kenjiArai | 0:5b88d5760320 | 98 | |
kenjiArai | 0:5b88d5760320 | 99 | /* Bootloader - It can be more stage */ |
kenjiArai | 0:5b88d5760320 | 100 | #define TLV_MINOR_IAS_BL2_MEASURE_VALUE ((SW_BL2 << 6) | SW_MEASURE_VALUE) |
kenjiArai | 0:5b88d5760320 | 101 | #define TLV_MINOR_IAS_BL2_MEASURE_TYPE ((SW_BL2 << 6) | SW_MEASURE_TYPE) |
kenjiArai | 0:5b88d5760320 | 102 | #define TLV_MINOR_IAS_BL2_VERSION ((SW_BL2 << 6) | SW_VERSION) |
kenjiArai | 0:5b88d5760320 | 103 | #define TLV_MINOR_IAS_BL2_SIGNER_ID ((SW_BL2 << 6) | SW_SIGNER_ID) |
kenjiArai | 0:5b88d5760320 | 104 | #define TLV_MINOR_IAS_BL2_EPOCH ((SW_BL2 << 6) | SW_EPOCH) |
kenjiArai | 0:5b88d5760320 | 105 | #define TLV_MINOR_IAS_BL2_TYPE ((SW_BL2 << 6) | SW_TYPE) |
kenjiArai | 0:5b88d5760320 | 106 | |
kenjiArai | 0:5b88d5760320 | 107 | /* PROT: PSA Root of Trust */ |
kenjiArai | 0:5b88d5760320 | 108 | #define TLV_MINOR_IAS_PROT_MEASURE_VALUE ((SW_PROT << 6) | SW_MEASURE_VALUE) |
kenjiArai | 0:5b88d5760320 | 109 | #define TLV_MINOR_IAS_PROT_MEASURE_TYPE ((SW_PROT << 6) | SW_MEASURE_TYPE) |
kenjiArai | 0:5b88d5760320 | 110 | #define TLV_MINOR_IAS_PROT_VERSION ((SW_PROT << 6) | SW_VERSION) |
kenjiArai | 0:5b88d5760320 | 111 | #define TLV_MINOR_IAS_PROT_SIGNER_ID ((SW_PROT << 6) | SW_SIGNER_ID) |
kenjiArai | 0:5b88d5760320 | 112 | #define TLV_MINOR_IAS_PROT_EPOCH ((SW_PROT << 6) | SW_EPOCH) |
kenjiArai | 0:5b88d5760320 | 113 | #define TLV_MINOR_IAS_PROT_TYPE ((SW_PROT << 6) | SW_TYPE) |
kenjiArai | 0:5b88d5760320 | 114 | |
kenjiArai | 0:5b88d5760320 | 115 | /* AROT: Application Root of Trust */ |
kenjiArai | 0:5b88d5760320 | 116 | #define TLV_MINOR_IAS_AROT_MEASURE_VALUE ((SW_AROT << 6) | SW_MEASURE_VALUE) |
kenjiArai | 0:5b88d5760320 | 117 | #define TLV_MINOR_IAS_AROT_MEASURE_TYPE ((SW_AROT << 6) | SW_MEASURE_TYPE) |
kenjiArai | 0:5b88d5760320 | 118 | #define TLV_MINOR_IAS_AROT_VERSION ((SW_AROT << 6) | SW_VERSION) |
kenjiArai | 0:5b88d5760320 | 119 | #define TLV_MINOR_IAS_AROT_SIGNER_ID ((SW_AROT << 6) | SW_SIGNER_ID) |
kenjiArai | 0:5b88d5760320 | 120 | #define TLV_MINOR_IAS_AROT_EPOCH ((SW_AROT << 6) | SW_EPOCH) |
kenjiArai | 0:5b88d5760320 | 121 | #define TLV_MINOR_IAS_AROT_TYPE ((SW_AROT << 6) | SW_TYPE) |
kenjiArai | 0:5b88d5760320 | 122 | |
kenjiArai | 0:5b88d5760320 | 123 | /* Non-secure processing environment - single non-secure image */ |
kenjiArai | 0:5b88d5760320 | 124 | #define TLV_MINOR_IAS_NSPE_MEASURE_VALUE ((SW_NSPE << 6) | SW_MEASURE_VALUE) |
kenjiArai | 0:5b88d5760320 | 125 | #define TLV_MINOR_IAS_NSPE_MEASURE_TYPE ((SW_NSPE << 6) | SW_MEASURE_TYPE) |
kenjiArai | 0:5b88d5760320 | 126 | #define TLV_MINOR_IAS_NSPE_VERSION ((SW_NSPE << 6) | SW_VERSION) |
kenjiArai | 0:5b88d5760320 | 127 | #define TLV_MINOR_IAS_NSPE_SIGNER_ID ((SW_NSPE << 6) | SW_SIGNER_ID) |
kenjiArai | 0:5b88d5760320 | 128 | #define TLV_MINOR_IAS_NSPE_EPOCH ((SW_NSPE << 6) | SW_EPOCH) |
kenjiArai | 0:5b88d5760320 | 129 | #define TLV_MINOR_IAS_NSPE_TYPE ((SW_NSPE << 6) | SW_TYPE) |
kenjiArai | 0:5b88d5760320 | 130 | |
kenjiArai | 0:5b88d5760320 | 131 | /* Secure processing environment (ARoT + PRoT) - single secure image */ |
kenjiArai | 0:5b88d5760320 | 132 | #define TLV_MINOR_IAS_SPE_MEASURE_VALUE ((SW_SPE << 6) | SW_MEASURE_VALUE) |
kenjiArai | 0:5b88d5760320 | 133 | #define TLV_MINOR_IAS_SPE_MEASURE_TYPE ((SW_SPE << 6) | SW_MEASURE_TYPE) |
kenjiArai | 0:5b88d5760320 | 134 | #define TLV_MINOR_IAS_SPE_VERSION ((SW_SPE << 6) | SW_VERSION) |
kenjiArai | 0:5b88d5760320 | 135 | #define TLV_MINOR_IAS_SPE_SIGNER_ID ((SW_SPE << 6) | SW_SIGNER_ID) |
kenjiArai | 0:5b88d5760320 | 136 | #define TLV_MINOR_IAS_SPE_EPOCH ((SW_SPE << 6) | SW_EPOCH) |
kenjiArai | 0:5b88d5760320 | 137 | #define TLV_MINOR_IAS_SPE_TYPE ((SW_SPE << 6) | SW_TYPE) |
kenjiArai | 0:5b88d5760320 | 138 | |
kenjiArai | 0:5b88d5760320 | 139 | /* SPE + NSPE - combined secure and non-secure image */ |
kenjiArai | 0:5b88d5760320 | 140 | #define TLV_MINOR_IAS_S_NS_MEASURE_VALUE ((SW_S_NS << 6) | SW_MEASURE_VALUE) |
kenjiArai | 0:5b88d5760320 | 141 | #define TLV_MINOR_IAS_S_NS_MEASURE_TYPE ((SW_S_NS << 6) | SW_MEASURE_TYPE) |
kenjiArai | 0:5b88d5760320 | 142 | #define TLV_MINOR_IAS_S_NS_VERSION ((SW_S_NS << 6) | SW_VERSION) |
kenjiArai | 0:5b88d5760320 | 143 | #define TLV_MINOR_IAS_S_NS_SIGNER_ID ((SW_S_NS << 6) | SW_SIGNER_ID) |
kenjiArai | 0:5b88d5760320 | 144 | #define TLV_MINOR_IAS_S_NS_EPOCH ((SW_S_NS << 6) | SW_EPOCH) |
kenjiArai | 0:5b88d5760320 | 145 | #define TLV_MINOR_IAS_S_NS_TYPE ((SW_S_NS << 6) | SW_TYPE) |
kenjiArai | 0:5b88d5760320 | 146 | |
kenjiArai | 0:5b88d5760320 | 147 | /* General macros to handle TLV type */ |
kenjiArai | 0:5b88d5760320 | 148 | #define MAJOR_MASK 0xF /* 4 bit */ |
kenjiArai | 0:5b88d5760320 | 149 | #define MAJOR_POS 12 /* 12 bit */ |
kenjiArai | 0:5b88d5760320 | 150 | #define MINOR_MASK 0xFFF /* 12 bit */ |
kenjiArai | 0:5b88d5760320 | 151 | |
kenjiArai | 0:5b88d5760320 | 152 | #define SET_TLV_TYPE(major, minor) \ |
kenjiArai | 0:5b88d5760320 | 153 | ((((major) & MAJOR_MASK) << MAJOR_POS) | ((minor) & MINOR_MASK)) |
kenjiArai | 0:5b88d5760320 | 154 | #define GET_MAJOR(tlv_type) ((tlv_type) >> MAJOR_POS) |
kenjiArai | 0:5b88d5760320 | 155 | #define GET_MINOR(tlv_type) ((tlv_type) & MINOR_MASK) |
kenjiArai | 0:5b88d5760320 | 156 | |
kenjiArai | 0:5b88d5760320 | 157 | /* Initial attestation specific macros */ |
kenjiArai | 0:5b88d5760320 | 158 | #define MODULE_POS 6 /* 6 bit */ |
kenjiArai | 0:5b88d5760320 | 159 | #define CLAIM_MASK 0x3F /* 6 bit */ |
kenjiArai | 0:5b88d5760320 | 160 | #define MEASUREMENT_CLAIM_POS 3 /* 3 bit */ |
kenjiArai | 0:5b88d5760320 | 161 | |
kenjiArai | 0:5b88d5760320 | 162 | #define GET_IAS_MODULE(tlv_type) (GET_MINOR(tlv_type) >> MODULE_POS) |
kenjiArai | 0:5b88d5760320 | 163 | #define GET_IAS_CLAIM(tlv_type) (GET_MINOR(tlv_type) & CLAIM_MASK) |
kenjiArai | 0:5b88d5760320 | 164 | #define SET_IAS_MINOR(sw_module, claim) (((sw_module) << 6) | (claim)) |
kenjiArai | 0:5b88d5760320 | 165 | |
kenjiArai | 0:5b88d5760320 | 166 | #define GET_IAS_MEASUREMENT_CLAIM(ias_claim) ((ias_claim) >> \ |
kenjiArai | 0:5b88d5760320 | 167 | MEASUREMENT_CLAIM_POS) |
kenjiArai | 0:5b88d5760320 | 168 | |
kenjiArai | 0:5b88d5760320 | 169 | /* Magic value which marks the beginning of shared data area in memory */ |
kenjiArai | 0:5b88d5760320 | 170 | #define SHARED_DATA_TLV_INFO_MAGIC 0x2016 |
kenjiArai | 0:5b88d5760320 | 171 | |
kenjiArai | 0:5b88d5760320 | 172 | /** |
kenjiArai | 0:5b88d5760320 | 173 | * Shared data TLV header. All fields in little endian. |
kenjiArai | 0:5b88d5760320 | 174 | * |
kenjiArai | 0:5b88d5760320 | 175 | * ----------------------------------- |
kenjiArai | 0:5b88d5760320 | 176 | * | tlv_magic(16) | tlv_tot_len(16) | |
kenjiArai | 0:5b88d5760320 | 177 | * ----------------------------------- |
kenjiArai | 0:5b88d5760320 | 178 | */ |
kenjiArai | 0:5b88d5760320 | 179 | struct shared_data_tlv_header { |
kenjiArai | 0:5b88d5760320 | 180 | uint16_t tlv_magic; |
kenjiArai | 0:5b88d5760320 | 181 | uint16_t tlv_tot_len; /* size of whole TLV area (including this header) */ |
kenjiArai | 0:5b88d5760320 | 182 | }; |
kenjiArai | 0:5b88d5760320 | 183 | |
kenjiArai | 0:5b88d5760320 | 184 | #define SHARED_DATA_HEADER_SIZE sizeof(struct shared_data_tlv_header) |
kenjiArai | 0:5b88d5760320 | 185 | |
kenjiArai | 0:5b88d5760320 | 186 | /** |
kenjiArai | 0:5b88d5760320 | 187 | * Shared data TLV entry header format. All fields in little endian. |
kenjiArai | 0:5b88d5760320 | 188 | * |
kenjiArai | 0:5b88d5760320 | 189 | * ------------------------------- |
kenjiArai | 0:5b88d5760320 | 190 | * | tlv_type(16) | tlv_len(16) | |
kenjiArai | 0:5b88d5760320 | 191 | * ------------------------------- |
kenjiArai | 0:5b88d5760320 | 192 | * | Raw data | |
kenjiArai | 0:5b88d5760320 | 193 | * ------------------------------- |
kenjiArai | 0:5b88d5760320 | 194 | */ |
kenjiArai | 0:5b88d5760320 | 195 | struct shared_data_tlv_entry { |
kenjiArai | 0:5b88d5760320 | 196 | uint16_t tlv_type; |
kenjiArai | 0:5b88d5760320 | 197 | uint16_t tlv_len; /* size of single TLV entry (including this header). */ |
kenjiArai | 0:5b88d5760320 | 198 | }; |
kenjiArai | 0:5b88d5760320 | 199 | |
kenjiArai | 0:5b88d5760320 | 200 | /** |
kenjiArai | 0:5b88d5760320 | 201 | * \struct tfm_boot_data |
kenjiArai | 0:5b88d5760320 | 202 | * |
kenjiArai | 0:5b88d5760320 | 203 | * \brief Store the data for the runtime SW |
kenjiArai | 0:5b88d5760320 | 204 | */ |
kenjiArai | 0:5b88d5760320 | 205 | struct tfm_boot_data { |
kenjiArai | 0:5b88d5760320 | 206 | struct shared_data_tlv_header header; |
kenjiArai | 0:5b88d5760320 | 207 | uint8_t data[]; |
kenjiArai | 0:5b88d5760320 | 208 | }; |
kenjiArai | 0:5b88d5760320 | 209 | |
kenjiArai | 0:5b88d5760320 | 210 | #define SHARED_DATA_ENTRY_HEADER_SIZE sizeof(struct shared_data_tlv_entry) |
kenjiArai | 0:5b88d5760320 | 211 | #define SHARED_DATA_ENTRY_SIZE(size) (size + SHARED_DATA_ENTRY_HEADER_SIZE) |
kenjiArai | 0:5b88d5760320 | 212 | |
kenjiArai | 0:5b88d5760320 | 213 | #ifdef __cplusplus |
kenjiArai | 0:5b88d5760320 | 214 | } |
kenjiArai | 0:5b88d5760320 | 215 | #endif |
kenjiArai | 0:5b88d5760320 | 216 | |
kenjiArai | 0:5b88d5760320 | 217 | #endif /* __TFM_BOOT_STATUS_H__ */ |