Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 1 | ################################### |
| 2 | Details for the platform/ext folder |
| 3 | ################################### |
| 4 | This folder has code that has been imported from other projects. This means the |
| 5 | files in this folder and subfolders have Apache 2.0 license which is different |
| 6 | to BSD 3.0 license applied to the parent TF-M project. |
| 7 | |
| 8 | .. Note:: |
| 9 | This folder is strictly Apache 2.0 with the exception of cmake files. |
| 10 | Maintainers should be consulted if this needs to be revisited. |
| 11 | |
| 12 | *********** |
| 13 | Sub-folders |
| 14 | *********** |
| 15 | |
Raef Coles | a8d87df | 2020-10-30 13:53:42 +0000 | [diff] [blame] | 16 | accelerator |
| 17 | =========== |
| 18 | This folder contains cmake and code files to interact cryptographic |
| 19 | accelerators. |
| 20 | |
| 21 | In order to use a cryptographic accelerator, a platform must set |
| 22 | ``CRYPTO_HW_ACCELERATOR_TYPE`` in preload.cmake. This option maps directly to |
| 23 | the subdirectories of the accelerator directory. Currently the only available |
| 24 | accelerator is the CryptoCell ``cc312``. |
| 25 | |
| 26 | A minimal API is exposed to interact with accelerators, the details of this api |
| 27 | are in ``accelerator/interface/crypto_hw.h``. Implementation of the API is |
| 28 | inside the subdirectory of the individual accelerator. |
| 29 | |
| 30 | To configure a cryptographic accelerator at build time, two cmake options can be |
| 31 | specified. |
| 32 | |
| 33 | - ``CRYPTO_HW_ACCELERATOR`` |
| 34 | - ``ON`` All possible mbedtls cryptographic operations will be offloaded to |
| 35 | the accelerator. This mode is required for |
| 36 | ``CRYPTO_HW_ACCELERATOR_OTP_STATE`` to have an effect. |
| 37 | - ``OFF`` The cryptographic accelerator will be ignored and software |
| 38 | cryptography will be used. |
| 39 | |
| 40 | - ``CRYPTO_HW_ACCELERATOR_OTP_STATE`` |
| 41 | - ``DISABLED`` The HW accelerator will not use any data from its onboard OTP |
| 42 | (One Time Programmable) memory. |
| 43 | - ``PROVISIONING`` This special mode is used to program cryptographic |
| 44 | material into the OTP memory. When the flag is set TF-M will not boot, but |
| 45 | will instead program the hardware unique key, the root of trust private key |
| 46 | and the attestation private key into the OTP memory. |
| 47 | - ``ENABLED`` The HW accelerator will use the previously programmed data as |
| 48 | the hardware unique key, the root of trust private key and the attestation |
| 49 | private key. |
| 50 | |
| 51 | .. Warning:: |
| 52 | |
| 53 | Provisioning **can not** be reversed, and data in the OTP memory **can not** |
| 54 | be changed once set. |
| 55 | |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 56 | cmsis |
| 57 | ===== |
| 58 | This folder contains core and compiler specific header files imported from the |
| 59 | ``CMSIS_5`` project. |
| 60 | |
| 61 | common |
| 62 | ====== |
Raef Coles | a657a9c | 2019-10-24 14:36:43 +0100 | [diff] [blame] | 63 | |
| 64 | armclang and gcc |
| 65 | ---------------- |
| 66 | These contain the linker scripts used to configure the memory regions in TF-M |
| 67 | regions. |
| 68 | |
Jamie Fox | c320228 | 2019-12-13 17:12:16 +0000 | [diff] [blame] | 69 | template |
| 70 | -------- |
| 71 | This directory contains platform-independent dummy implementations of the |
| 72 | interfaces in ``platform/include``. These implementations can be built directly |
| 73 | for initial testing of a platform port, or used as a basic template for a real |
| 74 | implementation for a particular target. They **must not** be used in production |
| 75 | systems. |
| 76 | |
Raef Coles | a8d87df | 2020-10-30 13:53:42 +0000 | [diff] [blame] | 77 | driver |
| 78 | ====== |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 79 | This folder contains the headers with CMSIS compliant driver definitions that |
| 80 | that TF-M project expects a target to provide. |
| 81 | |
| 82 | target_cfg.h |
| 83 | ------------ |
| 84 | This file is expected to define the following macros respectively. |
| 85 | |
| 86 | - ``TFM_DRIVER_STDIO`` - This macro should expand to a structure of type |
| 87 | ``ARM_DRIVER_USART``. TFM redirects its standard input and output to this |
| 88 | instance of USART. |
| 89 | - ``NS_DRIVER_STDIO`` - This macro should expand to a structure of type |
| 90 | ``ARM_DRIVER_USART``. Non-Secure application redirects its standard input and |
| 91 | output to this instance of USART. |
| 92 | |
| 93 | target |
| 94 | ====== |
Raef Coles | a8d87df | 2020-10-30 13:53:42 +0000 | [diff] [blame] | 95 | This folder contains the files for individual target. For a buildable target, |
| 96 | the directory path from the ``target`` directory to its ``CMakeLists.txt`` file |
| 97 | is the argument that would be given to ``-DTFM_PLATFORM=``. |
| 98 | |
| 99 | The standard directory structure is as follows: |
| 100 | |
| 101 | - target |
| 102 | - <Vendor name> |
| 103 | - common |
| 104 | - <buildable target 1> |
| 105 | - <buildable target 2> |
| 106 | - <buildable target 3> |
| 107 | |
| 108 | Each buildable target must contain the cmake files mandated in the section |
| 109 | below. |
| 110 | |
| 111 | The ``common`` directory is not required, but can be used to contain code that |
| 112 | is used by multiple targets. |
| 113 | |
| 114 | There must not be any directories inside the vendor directory that is not either |
| 115 | the ``common`` directory or a buildable platform, to avoid confusion about what |
| 116 | directories are a valid ``TFM_PLATFORM``. |
| 117 | |
| 118 | Buildable target required cmake files |
| 119 | ------------------------------------- |
| 120 | |
| 121 | A buildable target must provide 3 mandatory cmake files. These files must all be |
| 122 | placed in the root of the buildable target directory. |
| 123 | |
| 124 | preload.cmake |
| 125 | ^^^^^^^^^^^^^ |
| 126 | |
| 127 | This file contains variable definitions that relate to the underlying hardware |
| 128 | of the target. |
| 129 | |
| 130 | - ``TFM_SYSTEM_PROCESSOR``: The processor used by the target. The format is that |
| 131 | same as the format used in the ``-mcpu=`` argument of GNUARM or ARMCLANG. The |
| 132 | special ``+modifier`` syntax must not be used. |
| 133 | |
| 134 | - ``TFM_SYSTEM_ARCHITECTURE``: The architecture used by the target. The format is |
| 135 | that same as the format used in the ``-march=`` argument of GNUARM or ARMCLANG. |
| 136 | The special ``+modifier`` syntax must not be used. |
| 137 | |
| 138 | - ``TFM_SYSTEM_DSP``: Whether the target has the DSP feature of the given |
| 139 | ``TFM_SYSTEM_PROCESSOR`` |
| 140 | - ``CRYPTO_HW_ACCELERATOR_TYPE``: The type of cryptographic accelerator the |
| 141 | target has, if it has one. This maps exactly to the subdirectories of |
| 142 | ``platform/ext/accelerator`` |
| 143 | |
| 144 | Other than these particular cmake variables, it is permissible for the |
| 145 | ``preload.cmake`` file to contain ``add_definitions`` statements, in order for |
| 146 | set compile definitions that are global for the hardware. This is commonly used |
| 147 | to select a particular set of code from a vendor SDK. |
| 148 | |
| 149 | It is not permissible to contains code other than the above in a |
| 150 | ``preload.cmake`` file, any general cmake code should be placed in |
| 151 | ``CMakeLists.txt`` and any configuration options should be contained in |
| 152 | ``config.cmake`` |
| 153 | |
| 154 | config.cmake |
| 155 | ^^^^^^^^^^^^ |
| 156 | |
| 157 | This file collects platform-specific overrides to the configuration options. |
| 158 | This should only contain cmake options that are included in |
| 159 | ``config_default.cmake``. These options should be set as ``CACHE`` variables, as |
| 160 | they are in ``config_default.cmake``. |
| 161 | |
| 162 | CMakeLists.txt |
| 163 | ^^^^^^^^^^^^^^ |
| 164 | |
| 165 | This file should contain all other required cmake code for the platform. This |
| 166 | primarily consists of the following: |
| 167 | |
| 168 | - Adding an include directory to the target ``platform_region_defs``, which |
| 169 | contains the headers ``flash_layout.h`` and ``region_defs.h`` |
| 170 | |
| 171 | - Adding startup and scatter files to the ``tfm_s``, ``tfm_ns`` and ``bl2`` |
| 172 | targets. |
| 173 | |
| 174 | - linking ``CMSIS_5_tfm_ns`` to the correct version of the CMSIS RTX libraries, |
| 175 | as defined in ``lib/ext/CMSIS_5/CMakeLists.txt`` |
| 176 | |
| 177 | - Adding required source files, include directories and compile definitions to |
| 178 | the ``platform_s``, ``platform_ns`` and ``platform_bl2`` targets. |
| 179 | |
| 180 | preload_ns.cmake |
| 181 | ^^^^^^^^^^^^^^^^ |
| 182 | |
| 183 | This optional 4th cmake file is required only if the target is utilising |
| 184 | ``TFM_MULTI_CORE_TOPOLOGY``. This file has the same format as ``preload.cmake``, |
| 185 | but instead details the hardware of the NS core that is **not** running the main |
| 186 | TF-M secure code. |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 187 | |
| 188 | Flash layout header file |
| 189 | ------------------------ |
| 190 | Target must provide a header file, called ``flash_layout.h``, which defines the |
| 191 | information explained in the follow subsections. The defines must be named |
| 192 | as they are in the subsections. |
| 193 | |
| 194 | BL2 bootloader |
| 195 | ^^^^^^^^^^^^^^ |
| 196 | The BL2 bootloader requires the following definitions: |
| 197 | |
| 198 | - ``FLASH_BASE_ADDRESS`` - Defines the first valid address in the flash. |
| 199 | - ``FLASH_AREA_BL2_OFFSET`` - Defines the offset from the flash base address |
| 200 | where the BL2 - MCUBOOT area starts. |
| 201 | - ``FLASH_AREA_BL2_SIZE`` - Defines the size of the BL2 area. |
David Vincze | bb20798 | 2019-08-21 15:13:04 +0200 | [diff] [blame] | 202 | - ``FLASH_AREA_SCRATCH_OFFSET`` - Defines the offset from the flash base |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 203 | address where the scratch area starts, which is used during image swapping. |
David Vincze | bb20798 | 2019-08-21 15:13:04 +0200 | [diff] [blame] | 204 | - ``FLASH_AREA_SCRATCH_SIZE`` - Defines the size of the scratch area. The |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 205 | minimal size must be as the biggest sector size in the flash. |
| 206 | - ``FLASH_DEV_NAME`` - Specifies the flash device used by BL2. |
| 207 | |
David Vincze | bb20798 | 2019-08-21 15:13:04 +0200 | [diff] [blame] | 208 | The BL2 requires further definitions depending on the number of images, the |
| 209 | meaning of these macros are also slightly different: |
| 210 | |
| 211 | - Required definitions in case of 1 image (S and NS images are concatenated |
| 212 | and handled together as one binary blob): |
| 213 | |
| 214 | - ``FLASH_AREA_0_OFFSET`` - Defines the offset from the flash base address |
| 215 | where the primary image area starts, which hosts the active firmware |
| 216 | image. |
| 217 | - ``FLASH_AREA_0_SIZE`` - Defines the size of the primary image area. |
| 218 | - ``FLASH_AREA_2_OFFSET`` - Defines the offset from the flash base address |
| 219 | where the secondary image area starts, which is a placeholder for new |
| 220 | firmware images. |
| 221 | - ``FLASH_AREA_2_SIZE`` - Defines the size of the secondary image area. |
| 222 | |
| 223 | - Required definitions in case of 2 images (S and NS images are handled and |
| 224 | updated separately): |
| 225 | |
| 226 | - ``FLASH_AREA_0_OFFSET`` - Defines the offset from the flash base address |
| 227 | where the primary image areas start, which host the active firmware |
| 228 | images. It is also the offset of the primary (active) secure image area. |
| 229 | - ``FLASH_AREA_0_SIZE`` - Defines the size of the primary secure image area. |
| 230 | - ``FLASH_AREA_1_OFFSET`` - Defines the offset from the flash base address |
| 231 | where the primary (active) non-secure image area starts. |
| 232 | - ``FLASH_AREA_1_SIZE`` - Defines the size of the primary non-secure image |
| 233 | area. |
| 234 | - ``FLASH_AREA_2_OFFSET`` - Defines the offset from the flash base address |
| 235 | where the secondary image areas start, which are placeholders for new |
| 236 | firmware images. It is also the offset of the secondary secure image area. |
| 237 | - ``FLASH_AREA_2_SIZE`` - Defines the size of the secondary secure image |
| 238 | area. |
| 239 | - ``FLASH_AREA_3_OFFSET`` - Defines the offset from the flash base address |
| 240 | where the secondary non-secure image area starts. |
| 241 | - ``FLASH_AREA_3_SIZE`` - Defines the size of the secondary non-secure image |
| 242 | area. |
| 243 | |
| 244 | The table below shows a fraction of the flash layout in case of 2 and 1 |
| 245 | updatable images with the related flash areas that hold the firmware images: |
| 246 | |
| 247 | +-----------------------+--------------------+-----------------------+-----------------------------+ |
| 248 | | Image number: 2 | Image number: 1 | |
| 249 | +=======================+====================+=======================+=============================+ |
| 250 | | **Flash area** | **Content** | **Flash area** | **Content** | |
| 251 | +-----------------------+--------------------+-----------------------+-----------------------------+ |
| 252 | | FLASH_AREA_0 | | Secure image | FLASH_AREA_0 | | Secure + Non-secure image | |
| 253 | | | | primary slot | | | primary slot | |
| 254 | +-----------------------+--------------------+-----------------------+ + |
| 255 | | FLASH_AREA_1 | | Non-secure image | | | |
| 256 | | | | primary slot | | | |
| 257 | +-----------------------+--------------------+-----------------------+-----------------------------+ |
| 258 | | FLASH_AREA_2 | | Secure image | FLASH_AREA_2 | | Secure + Non-secure image | |
| 259 | | | | secondary slot | | | secondary slot | |
| 260 | +-----------------------+--------------------+-----------------------+ + |
| 261 | | FLASH_AREA_3 | | Non-secure image | | | |
| 262 | | | | secondary slot | | | |
| 263 | +-----------------------+--------------------+-----------------------+-----------------------------+ |
| 264 | | FLASH_AREA_SCRATCH | Scratch area | FLASH_AREA_SCRATCH | Scratch area | |
| 265 | +-----------------------+--------------------+-----------------------+-----------------------------+ |
| 266 | |
Raef Coles | a495259 | 2019-10-01 11:43:18 +0100 | [diff] [blame] | 267 | - ``IMAGE_EXECUTABLE_RAM_START`` - Defines the start of the region to which |
| 268 | images are allowed to be loaded. Only used if ``MCUBOOT_UPGRADE_STRATEGY`` is |
Tamas Ban | f4023f3 | 2020-09-16 11:02:52 +0100 | [diff] [blame] | 269 | configured to be ``RAM_LOAD``. |
Raef Coles | a495259 | 2019-10-01 11:43:18 +0100 | [diff] [blame] | 270 | |
| 271 | - ``IMAGE_EXECUTABLE_RAM_SIZE`` - Defines the size of the region to which images |
| 272 | are allowed to be loaded. Only used if ``MCUBOOT_UPGRADE_STRATEGY`` is |
Tamas Ban | f4023f3 | 2020-09-16 11:02:52 +0100 | [diff] [blame] | 273 | configured to be ``RAM_LOAD``. |
Raef Coles | a495259 | 2019-10-01 11:43:18 +0100 | [diff] [blame] | 274 | |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 275 | Assemble tool |
| 276 | ^^^^^^^^^^^^^ |
Sverteczky, Marcell | 79ae915 | 2019-06-06 15:00:11 +0200 | [diff] [blame] | 277 | The ``assemble.py`` tool is used to concatenate secure and non-secure binary |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 278 | to a single binary blob. It requires the following definitions: |
| 279 | |
| 280 | - ``SECURE_IMAGE_OFFSET`` - Defines the offset from the single binary blob base |
| 281 | address, where the secure image starts. |
| 282 | - ``SECURE_IMAGE_MAX_SIZE`` - Defines the maximum size of the secure image area. |
| 283 | - ``NON_SECURE_IMAGE_OFFSET`` - Defines the offset from the single binary blob |
| 284 | base address, where the non-secure image starts. |
| 285 | - ``NON_SECURE_IMAGE_MAX_SIZE`` - Defines the maximum size of the non-secure |
| 286 | image area. |
| 287 | |
Sverteczky, Marcell | 79ae915 | 2019-06-06 15:00:11 +0200 | [diff] [blame] | 288 | Image tool |
| 289 | ^^^^^^^^^^^^^ |
| 290 | The ``imgtool.py`` tool is used to handle the tasks related to signing the |
David Vincze | d8fbe0e | 2019-08-12 15:58:57 +0200 | [diff] [blame] | 291 | binary. It requires the following definition: |
Sverteczky, Marcell | 79ae915 | 2019-06-06 15:00:11 +0200 | [diff] [blame] | 292 | |
Raef Coles | a495259 | 2019-10-01 11:43:18 +0100 | [diff] [blame] | 293 | - ``IMAGE_LOAD_ADDRESS`` - Defines the address to where the image is loaded and |
| 294 | is executed from. Only used if ``MCUBOOT_UPGRADE_STRATEGY`` is configured to |
Tamas Ban | f4023f3 | 2020-09-16 11:02:52 +0100 | [diff] [blame] | 295 | be ``RAM_LOAD``. |
Sverteczky, Marcell | 79ae915 | 2019-06-06 15:00:11 +0200 | [diff] [blame] | 296 | |
Kevin Peng | c6d7450 | 2020-03-04 16:55:37 +0800 | [diff] [blame] | 297 | Protected Storage (PS) Service definitions |
| 298 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 299 | The PS service requires the following definitions: |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 300 | |
Kevin Peng | c6d7450 | 2020-03-04 16:55:37 +0800 | [diff] [blame] | 301 | - ``PS_FLASH_AREA_ADDR`` - Defines the flash address where the protected storage |
Jamie Fox | dd3de95 | 2019-11-25 17:45:40 +0000 | [diff] [blame] | 302 | area starts. |
Kevin Peng | c6d7450 | 2020-03-04 16:55:37 +0800 | [diff] [blame] | 303 | - ``PS_FLASH_AREA_SIZE`` - Defines the size of the dedicated flash area |
| 304 | for protected storage in bytes. |
| 305 | - ``PS_SECTOR_SIZE`` - Defines the size of the external flash sectors (the |
Jamie Fox | dd3de95 | 2019-11-25 17:45:40 +0000 | [diff] [blame] | 306 | smallest erasable unit) in bytes. |
Kevin Peng | c6d7450 | 2020-03-04 16:55:37 +0800 | [diff] [blame] | 307 | - ``PS_SECTORS_PER_BLOCK`` - Defines the number of contiguous PS_SECTOR_SIZE |
Jamie Fox | dd3de95 | 2019-11-25 17:45:40 +0000 | [diff] [blame] | 308 | to form a logical block in the filesystem. |
Kevin Peng | c6d7450 | 2020-03-04 16:55:37 +0800 | [diff] [blame] | 309 | - ``PS_FLASH_DEV_NAME`` - Specifies the flash device used by PS to store the |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 310 | data. |
Kevin Peng | c6d7450 | 2020-03-04 16:55:37 +0800 | [diff] [blame] | 311 | - ``PS_FLASH_PROGRAM_UNIT`` - Defines the smallest flash programmable unit in |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 312 | bytes. |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 313 | |
| 314 | .. Note:: |
| 315 | |
| 316 | The sectors must be consecutive. |
Chris Brand | c47d710 | 2020-02-20 11:12:18 -0800 | [diff] [blame] | 317 | The platform may implement ``tfm_hal_ps_fs_info()`` as an alternative |
| 318 | to defining ``PS_FLASH_AREA_ADDR`` and ``PS_FLASH_AREA_SIZE``. |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 319 | |
TudorCretu | ba8a3fa | 2019-07-22 10:05:12 +0100 | [diff] [blame] | 320 | Internal Trusted Storage (ITS) Service definitions |
| 321 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 322 | The ITS service requires the following definitions: |
| 323 | |
Jamie Fox | dd3de95 | 2019-11-25 17:45:40 +0000 | [diff] [blame] | 324 | - ``ITS_FLASH_AREA_ADDR`` - Defines the flash address where the internal trusted |
| 325 | storage area starts. |
| 326 | - ``ITS_FLASH_AREA_SIZE`` - Defines the size of the dedicated flash area for |
| 327 | internal trusted storage in bytes. |
| 328 | - ``ITS_SECTOR_SIZE`` - Defines the size of the internal flash sectors (the |
| 329 | smallest erasable unit) in bytes. |
David Hu | 74977d2 | 2019-10-22 10:26:03 +0800 | [diff] [blame] | 330 | - ``ITS_SECTORS_PER_BLOCK`` - Defines the number of contiguous ITS_SECTOR_SIZE |
Jamie Fox | dd3de95 | 2019-11-25 17:45:40 +0000 | [diff] [blame] | 331 | to form a logical block in the filesystem. |
TudorCretu | ba8a3fa | 2019-07-22 10:05:12 +0100 | [diff] [blame] | 332 | - ``ITS_FLASH_DEV_NAME`` - Specifies the internal flash device used by ITS to |
| 333 | store the data. |
| 334 | - ``ITS_FLASH_PROGRAM_UNIT`` - Defines the smallest flash programmable unit in |
| 335 | bytes. |
TudorCretu | ba8a3fa | 2019-07-22 10:05:12 +0100 | [diff] [blame] | 336 | |
| 337 | .. Note:: |
| 338 | |
| 339 | The sectors must be consecutive. |
Chris Brand | c47d710 | 2020-02-20 11:12:18 -0800 | [diff] [blame] | 340 | The platform may implement ``tfm_hal_its_fs_info()`` as an alternative |
| 341 | to defining ``ITS_FLASH_AREA_ADDR`` and ``ITS_FLASH_AREA_SIZE``. |
TudorCretu | ba8a3fa | 2019-07-22 10:05:12 +0100 | [diff] [blame] | 342 | |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 343 | *************************************** |
| 344 | Expose target support for HW components |
| 345 | *************************************** |
| 346 | Services may require HW components to be supported by the target to enable some |
Kevin Peng | c6d7450 | 2020-03-04 16:55:37 +0800 | [diff] [blame] | 347 | features (e.g. PS service with rollback protection, etc). The following |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 348 | definitions need to be set in the .cmake file if the target has the following |
| 349 | HW components: |
| 350 | |
| 351 | - ``TARGET_NV_COUNTERS_ENABLE`` - Specifies that the target has non-volatile |
| 352 | (NV) counters. |
| 353 | |
| 354 | -------------- |
| 355 | |
Jamie Fox | dd3de95 | 2019-11-25 17:45:40 +0000 | [diff] [blame] | 356 | *Copyright (c) 2017-2020, Arm Limited. All rights reserved.* |
Chris Brand | c47d710 | 2020-02-20 11:12:18 -0800 | [diff] [blame] | 357 | *Copyright (c) 2020, Cypress Semiconductor Corporation. All rights reserved.* |