1 /* 2 * Copyright (c) 2018 Arm Limited. All rights reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef __FLASH_LAYOUT_H__ 18 #define __FLASH_LAYOUT_H__ 19 20 /* This header file is included from linker scatter file as well, where only a 21 * limited C constructs are allowed. Therefore it is not possible to include 22 * here the platform_retarget.h to access flash related defines. To resolve this 23 * some of the values are redefined here with different names, these are marked 24 * with comment. 25 */ 26 27 /* Flash layout (internal flash) on stm32h573i_dk with BL2 (multiple image boot) uses ovewrite method: 28 * 29 * 0x0000_0000 BL2 - MCUBoot (128 KB) 30 * 0x0002_0000 OTP / NV counters area (32 KB) 31 * 0x0002_8000 Secure Storage Area (16 KB) 32 * 0x0002_c000 Internal Trusted Storage Area (32 KB) 33 * 0x0003_4000 Secure image primary slot (256 KB) 34 * 0x0007_4000 Non-secure image primary slot (640 KB) 35 * 0x0011_4000 Secure image secondary slot (256 KB) 36 * 0x0015_4000 Non-secure image secondary slot (640 KB) 37 * 38 ** Flash layout (internal flash) on stm32h573i_dk with BL2 (multiple image boot): 39 * 40 * 0x0000_0000 BL2 - MCUBoot (128 KB) 41 * 0x0002_0000 SCRATCH (32 KB) 42 * 0x0002_8000 OTP / NV counters area (32 KB) 43 * 0x0003_2000 Secure Storage Area (16 KB) 44 * 0x0003_6000 Internal Trusted Storage (32 KB) 45 * 0x0003_e000 Secure image primary slot (256 KB) 46 * 0x0007_e000 Non-secure image primary slot (640 KB) 47 * 0x0014_c000 Secure image secondary slot (256 KB) 48 * 0x0017_a000 Non-secure image secondary slot (640 KB) 49 */ 50 /* TFM Partition configuration : begin */ 51 52 #define TFM_PARTITION_APP_ROT /* comment to remove APP_ROT partition */ 53 54 /*#define TFM_PARTITION_FIRMWARE_UPDATE*/ /* comment to remove TFM_PARTITION_FIRMWARE_UPDATE */ 55 56 /* TFM Partition configuration : end */ 57 58 /* Flash layout configuration : begin */ 59 #define MCUBOOT_OVERWRITE_ONLY /* Defined: the FW installation uses ovewrite method. 60 UnDefined: The FW installation uses whatever mode 61 is configured through the MCUBOOT_UPGRADE_STRATEGY 62 config item in config.cmake. FixMe: MCUboot should 63 be configured in a single place, i.e. config.cmake 64 to avoid clashes */ 65 66 /*#define MCUBOOT_PRIMARY_ONLY*/ /* Defined: No secondary (download) slot(s), 67 only primary slot(s) for each image. 68 Undefined: Primary and secondary slot(s) for each image. */ 69 70 /*#define MCUBOOT_EXT_LOADER*/ /* Defined: Add external local loader application. 71 To enter it, press user button at reset. 72 Undefined: No external local loader application. */ 73 #if defined (MCUBOOT_EXT_LOADER) 74 #define MCUBOOT_EXT_LOADER_CUSTOM /* Defined: Use UART loader in user flash. */ 75 #endif 76 77 #define MCUBOOT_APP_IMAGE_NUMBER 2 /* 1: S and NS application binaries are assembled in one single image. 78 2: Two separated images for S and NS application binaries. */ 79 80 #define MCUBOOT_S_DATA_IMAGE_NUMBER 0 /* 1: S data image for S application. 81 0: No S data image. */ 82 83 #define MCUBOOT_NS_DATA_IMAGE_NUMBER 0 /* 1: NS data image for NS application. 84 0: No NS data image. */ 85 86 /* Flash layout configuration : end */ 87 88 89 /* Total number of images */ 90 #ifndef MCUBOOT_IMAGE_NUMBER 91 #define MCUBOOT_IMAGE_NUMBER 2 /* (MCUBOOT_APP_IMAGE_NUMBER + MCUBOOT_S_DATA_IMAGE_NUMBER + MCUBOOT_NS_DATA_IMAGE_NUMBER)*/ 92 #endif 93 94 /* Use image hash reference to reduce boot time (signature check bypass) */ 95 #define MCUBOOT_USE_HASH_REF 96 97 /* control configuration */ 98 #if (defined(MCUBOOT_PRIMARY_ONLY) || defined(MCUBOOT_OVERWRITE_ONLY)) && defined(TFM_PARTITION_FIRMWARE_UPDATE) 99 #error "Config not supported: TFM_PARTITION_FIRMWARE_UPDATE is activated only in swap mode" 100 #endif 101 #if defined(MCUBOOT_PRIMARY_ONLY) && !defined(MCUBOOT_OVERWRITE_ONLY) 102 #error "Config not supported: When MCUBOOT_PRIMARY_ONLY is enabled, MCUBOOT_OVERWRITE_ONLY is required." 103 #endif /* defined(MCUBOOT_PRIMARY_ONLY) */ 104 105 /* The size of a partition. This should be large enough to contain a S or NS 106 * sw binary. Each FLASH_AREA_IMAGE contains two partitions. See Flash layout 107 * above. 108 */ 109 #define LOADER_FLASH_DEV_NAME TFM_Driver_FLASH0 110 111 /* Flash layout info for BL2 bootloader */ 112 #define FLASH_AREA_IMAGE_SECTOR_SIZE (0x2000) /* 8 KB */ 113 #define FLASH_AREA_WRP_GROUP_SIZE (0x8000) /* 32 KB */ 114 #define FLASH_B_SIZE (0x100000) /* 1 MBytes*/ 115 #define FLASH_TOTAL_SIZE (FLASH_B_SIZE+FLASH_B_SIZE) /* 2 MBytes */ 116 #define FLASH_BASE_ADDRESS (0x0c000000) /* same as FLASH0_BASE_S */ 117 118 /* Flash area IDs */ 119 #define FLASH_AREA_0_ID (1) 120 #if (MCUBOOT_APP_IMAGE_NUMBER == 2) 121 #define FLASH_AREA_1_ID (2) 122 #endif /* MCUBOOT_APP_IMAGE_NUMBER == 2 */ 123 #if !defined(MCUBOOT_PRIMARY_ONLY) 124 #define FLASH_AREA_2_ID (3) 125 #if (MCUBOOT_APP_IMAGE_NUMBER == 2) 126 #define FLASH_AREA_3_ID (4) 127 #endif /* MCUBOOT_APP_IMAGE_NUMBER == 2 */ 128 #endif /* MCUBOOT_PRIMARY_ONLY */ 129 #if (MCUBOOT_S_DATA_IMAGE_NUMBER == 1) 130 #define FLASH_AREA_4_ID (5) 131 #endif /* MCUBOOT_S_DATA_IMAGE_NUMBER == 1 */ 132 #if (MCUBOOT_NS_DATA_IMAGE_NUMBER == 1) 133 #define FLASH_AREA_5_ID (6) 134 #endif /* MCUBOOT_NS_DATA_IMAGE_NUMBER == 1 */ 135 #if !defined(MCUBOOT_PRIMARY_ONLY) 136 #if (MCUBOOT_S_DATA_IMAGE_NUMBER == 1) 137 #define FLASH_AREA_6_ID (7) 138 #endif /* MCUBOOT_S_DATA_IMAGE_NUMBER == 1 */ 139 #if (MCUBOOT_NS_DATA_IMAGE_NUMBER == 1) 140 #define FLASH_AREA_7_ID (8) 141 #endif /* MCUBOOT_NS_DATA_IMAGE_NUMBER == 1 */ 142 #define FLASH_AREA_SCRATCH_ID (9) 143 #endif /* MCUBOOT_PRIMARY_ONLY */ 144 145 /* Offset and size definitions of the flash partitions that are handled by the 146 * bootloader. The image swapping is done between IMAGE_0 and IMAGE_1, SCRATCH 147 * is used as a temporary storage during image swapping. 148 */ 149 150 /* Area for downloading bl2 image */ 151 #define FLASH_AREA_BL2_BIN_OFFSET (0x0) 152 /* area for BL2 code protected by hdp */ 153 #define FLASH_AREA_BL2_OFFSET (0x0) 154 #if defined(EXTERNAL_FLASH) 155 #define FLASH_AREA_BL2_SIZE (0xF800) 156 #else 157 #define FLASH_AREA_BL2_SIZE (0x20000) 158 #endif /* EXTERNAL_FLASH */ 159 /* HDP area end at this address */ 160 #define FLASH_BL2_HDP_END (FLASH_AREA_BL2_OFFSET+FLASH_AREA_BL2_SIZE-1) 161 162 /* area for BL2 code not protected by hdp */ 163 #define FLASH_AREA_BL2_NOHDP_OFFSET (FLASH_AREA_BL2_OFFSET+FLASH_AREA_BL2_SIZE) 164 #if defined(EXTERNAL_FLASH) 165 #define FLASH_AREA_BL2_NOHDP_SIZE (0x1800) 166 #else 167 #define FLASH_AREA_BL2_NOHDP_SIZE (FLASH_AREA_IMAGE_SECTOR_SIZE) 168 #endif /* EXTERNAL_FLASH */ 169 170 171 /* scratch area */ 172 #if defined(FLASH_AREA_SCRATCH_ID) 173 #define FLASH_AREA_SCRATCH_DEVICE_ID (FLASH_DEVICE_ID - FLASH_DEVICE_ID) 174 #define FLASH_AREA_SCRATCH_OFFSET (FLASH_AREA_BL2_NOHDP_OFFSET + FLASH_AREA_BL2_NOHDP_SIZE) 175 #if defined(MCUBOOT_OVERWRITE_ONLY) 176 #define FLASH_AREA_SCRATCH_SIZE (0x0000) /* Not used in MCUBOOT_OVERWRITE_ONLY mode */ 177 #else 178 #define FLASH_AREA_SCRATCH_SIZE (0x8000) /* 32 KB */ 179 #endif 180 #endif 181 182 /* area for bl2 anti roll back counter */ 183 #define FLASH_BL2_NVCNT_AREA_OFFSET (FLASH_AREA_SCRATCH_OFFSET + FLASH_AREA_SCRATCH_SIZE) 184 #define FLASH_BL2_NVCNT_AREA_SIZE (FLASH_AREA_IMAGE_SECTOR_SIZE+FLASH_AREA_IMAGE_SECTOR_SIZE) 185 186 /* Non Volatile Counters definitions */ 187 #define FLASH_NV_COUNTERS_AREA_OFFSET (FLASH_BL2_NVCNT_AREA_OFFSET+FLASH_BL2_NVCNT_AREA_SIZE) 188 #define FLASH_NV_COUNTERS_AREA_SIZE (FLASH_AREA_IMAGE_SECTOR_SIZE+FLASH_AREA_IMAGE_SECTOR_SIZE) 189 190 /* OTP / Non Volatile Counters definitions */ 191 #define FLASH_OTP_NV_COUNTERS_SECTOR_SIZE (FLASH_AREA_IMAGE_SECTOR_SIZE) 192 #if defined(EXTERNAL_FLASH) 193 #define FLASH_OTP_NV_COUNTERS_AREA_OFFSET (FLASH_NV_COUNTERS_AREA_OFFSET + \ 194 FLASH_NV_COUNTERS_AREA_SIZE) 195 #else 196 /* fix me with overwrite scratch is not required */ 197 #define FLASH_OTP_NV_COUNTERS_AREA_OFFSET (FLASH_NV_COUNTERS_AREA_OFFSET + \ 198 FLASH_NV_COUNTERS_AREA_SIZE) 199 #endif /* defined(EXTERNAL_FLASH) */ 200 201 #define FLASH_OTP_NV_COUNTERS_AREA_SIZE (FLASH_OTP_NV_COUNTERS_SECTOR_SIZE + \ 202 FLASH_OTP_NV_COUNTERS_SECTOR_SIZE) 203 /* Secure Storage (PS) Service definitions */ 204 #define FLASH_PS_AREA_SIZE (FLASH_AREA_IMAGE_SECTOR_SIZE+FLASH_AREA_IMAGE_SECTOR_SIZE) 205 #define FLASH_PS_AREA_OFFSET (FLASH_OTP_NV_COUNTERS_AREA_OFFSET + \ 206 FLASH_OTP_NV_COUNTERS_AREA_SIZE) 207 208 /* Internal Trusted Storage (ITS) Service definitions */ 209 #define FLASH_ITS_AREA_OFFSET (FLASH_PS_AREA_OFFSET+FLASH_PS_AREA_SIZE) 210 #define FLASH_ITS_AREA_SIZE (FLASH_AREA_IMAGE_SECTOR_SIZE+FLASH_AREA_IMAGE_SECTOR_SIZE+FLASH_AREA_IMAGE_SECTOR_SIZE+FLASH_AREA_IMAGE_SECTOR_SIZE) /* 8 KB */ 211 212 #define FLASH_S_PARTITION_SIZE (0x40000) /* 256 KB for S partition */ 213 #if !defined(MCUBOOT_PRIMARY_ONLY) 214 #define FLASH_NS_PARTITION_SIZE (0xA0000) /* 640 KB for NS partition */ 215 #else 216 #define FLASH_NS_PARTITION_SIZE (0x28000) /* 160 MB for NS partition */ 217 218 #endif /* MCUBOOT_PRIMARY_ONLY */ 219 #define FLASH_PARTITION_SIZE (FLASH_S_PARTITION_SIZE+FLASH_NS_PARTITION_SIZE) 220 221 #if (MCUBOOT_APP_IMAGE_NUMBER == 2) 222 #define FLASH_MAX_APP_PARTITION_SIZE ((FLASH_S_PARTITION_SIZE > \ 223 FLASH_NS_PARTITION_SIZE) ? \ 224 FLASH_S_PARTITION_SIZE : \ 225 FLASH_NS_PARTITION_SIZE) 226 #else 227 #define FLASH_MAX_APP_PARTITION_SIZE FLASH_PARTITION_SIZE 228 #endif /* (MCUBOOT_APP_IMAGE_NUMBER == 2) */ 229 #if (MCUBOOT_S_DATA_IMAGE_NUMBER == 1) 230 #define FLASH_S_DATA_PARTITION_SIZE (FLASH_AREA_IMAGE_SECTOR_SIZE) 231 #else 232 #define FLASH_S_DATA_PARTITION_SIZE (0x0) 233 #endif /* (MCUBOOT_S_DATA_IMAGE_NUMBER == 1) */ 234 #if (MCUBOOT_NS_DATA_IMAGE_NUMBER == 1) 235 #define FLASH_NS_DATA_PARTITION_SIZE (FLASH_AREA_IMAGE_SECTOR_SIZE+FLASH_AREA_IMAGE_SECTOR_SIZE+FLASH_AREA_IMAGE_SECTOR_SIZE+FLASH_AREA_IMAGE_SECTOR_SIZE) 236 #else 237 #define FLASH_NS_DATA_PARTITION_SIZE (0x0) 238 #endif /* (MCUBOOT_NS_DATA_IMAGE_NUMBER == 1) */ 239 240 #define FLASH_MAX_DATA_PARTITION_SIZE ((FLASH_S_DATA_PARTITION_SIZE > \ 241 FLASH_NS_DATA_PARTITION_SIZE) ? \ 242 FLASH_S_DATA_PARTITION_SIZE : \ 243 FLASH_NS_DATA_PARTITION_SIZE) 244 #define FLASH_MAX_PARTITION_SIZE ((FLASH_MAX_APP_PARTITION_SIZE > \ 245 FLASH_MAX_DATA_PARTITION_SIZE) ? \ 246 FLASH_MAX_APP_PARTITION_SIZE : \ 247 FLASH_MAX_DATA_PARTITION_SIZE) 248 249 /* BL2 flash areas */ 250 #define FLASH_AREA_BEGIN_OFFSET (FLASH_ITS_AREA_OFFSET + FLASH_ITS_AREA_SIZE) 251 252 #define FLASH_AREAS_DEVICE_ID (FLASH_DEVICE_ID - FLASH_DEVICE_ID) 253 254 /* Secure data image primary slot */ 255 #if defined (FLASH_AREA_4_ID) 256 #define FLASH_AREA_4_DEVICE_ID (FLASH_AREAS_DEVICE_ID) 257 #define FLASH_AREA_4_OFFSET (FLASH_AREA_BEGIN_OFFSET) 258 #define FLASH_AREA_4_SIZE (FLASH_S_DATA_PARTITION_SIZE) 259 /* Control Secure data image primary slot */ 260 #if (FLASH_AREA_4_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 261 #error "FLASH_AREA_4_OFFSET not aligned on FLASH_AREA_IMAGE_SECTOR_SIZE" 262 #endif /* (FLASH_AREA_4_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 */ 263 #else /* FLASH_AREA_4_ID */ 264 #define FLASH_AREA_4_OFFSET (0x0) 265 #define FLASH_AREA_4_SIZE (0x0) 266 #endif /* FLASH_AREA_4_ID */ 267 268 /* Secure app image primary slot */ 269 #if defined(FLASH_AREA_0_ID) 270 #define FLASH_AREA_0_DEVICE_ID (FLASH_AREAS_DEVICE_ID) 271 #define FLASH_AREA_0_OFFSET (FLASH_AREA_BEGIN_OFFSET + FLASH_AREA_4_SIZE) 272 #if (MCUBOOT_APP_IMAGE_NUMBER == 2) 273 #define FLASH_AREA_0_SIZE (FLASH_S_PARTITION_SIZE) 274 #else 275 #define FLASH_AREA_0_SIZE (FLASH_PARTITION_SIZE) 276 #endif /* (MCUBOOT_APP_IMAGE_NUMBER == 2) */ 277 /* Control Secure app image primary slot */ 278 #if (FLASH_AREA_0_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 279 #error "FLASH_AREA_0_OFFSET not aligned on FLASH_AREA_IMAGE_SECTOR_SIZE" 280 #endif /* (FLASH_AREA_0_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 */ 281 #else /* FLASH_AREA_0_ID */ 282 #define FLASH_AREA_0_OFFSET (0x0) 283 #define FLASH_AREA_0_SIZE (0x0) 284 #endif /* FLASH_AREA_0_ID */ 285 286 /* Non-secure app image primary slot */ 287 #if defined(FLASH_AREA_1_ID) 288 #define FLASH_AREA_1_DEVICE_ID (FLASH_AREAS_DEVICE_ID) 289 #define FLASH_AREA_1_OFFSET (FLASH_AREA_BEGIN_OFFSET + FLASH_AREA_4_SIZE + \ 290 FLASH_AREA_0_SIZE) 291 #define FLASH_AREA_1_SIZE (FLASH_NS_PARTITION_SIZE) 292 /* Control Non-secure app image primary slot */ 293 #if (FLASH_AREA_1_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 294 #error "FLASH_AREA_1_OFFSET not aligned on FLASH_AREA_IMAGE_SECTOR_SIZE" 295 #endif /* (FLASH_AREA_1_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 */ 296 #else /* FLASH_AREA_1_ID */ 297 #define FLASH_AREA_1_OFFSET (0x0) 298 #define FLASH_AREA_1_SIZE (0x0) 299 #endif /* FLASH_AREA_1_ID */ 300 301 /* Non-secure data image primary slot */ 302 #if defined(FLASH_AREA_5_ID) 303 #define FLASH_AREA_5_DEVICE_ID (FLASH_AREAS_DEVICE_ID) 304 #define FLASH_AREA_5_OFFSET (FLASH_AREA_BEGIN_OFFSET + FLASH_AREA_4_SIZE + \ 305 FLASH_AREA_0_SIZE + FLASH_AREA_1_SIZE) 306 #define FLASH_AREA_5_SIZE (FLASH_NS_DATA_PARTITION_SIZE) 307 /* Control Non-secure data image primary slot */ 308 #if (FLASH_AREA_5_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 309 #error "FLASH_AREA_5_OFFSET not aligned on FLASH_AREA_IMAGE_SECTOR_SIZE" 310 #endif /* (FLASH_AREA_5_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 */ 311 #else /* FLASH_AREA_5_ID */ 312 #define FLASH_AREA_5_OFFSET (0x0) 313 #define FLASH_AREA_5_SIZE (0x0) 314 #endif /* FLASH_AREA_5_ID */ 315 316 317 318 /* Secure app image secondary slot */ 319 #if defined(FLASH_AREA_2_ID) 320 #define FLASH_AREA_2_DEVICE_ID (FLASH_AREAS_DEVICE_ID) 321 #define FLASH_AREA_2_OFFSET (FLASH_AREA_BEGIN_OFFSET + FLASH_AREA_4_SIZE + \ 322 FLASH_AREA_0_SIZE + FLASH_AREA_1_SIZE + \ 323 FLASH_AREA_5_SIZE) 324 #if (MCUBOOT_APP_IMAGE_NUMBER == 2) 325 #define FLASH_AREA_2_SIZE (FLASH_S_PARTITION_SIZE) 326 #else 327 #define FLASH_AREA_2_SIZE (FLASH_PARTITION_SIZE) 328 #endif /* (MCUBOOT_APP_IMAGE_NUMBER == 2) */ 329 /* Control Secure app image secondary slot */ 330 #if (FLASH_AREA_2_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 331 #error "FLASH_AREA_2_OFFSET not aligned on FLASH_AREA_IMAGE_SECTOR_SIZE" 332 #endif /* (FLASH_AREA_2_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 */ 333 #else /* FLASH_AREA_2_ID */ 334 #define FLASH_AREA_2_OFFSET (0x0) 335 #define FLASH_AREA_2_SIZE (0x0) 336 #endif /* FLASH_AREA_2_ID */ 337 338 /* Non-secure app image secondary slot */ 339 #if defined(FLASH_AREA_3_ID) 340 #define FLASH_AREA_3_DEVICE_ID (FLASH_AREAS_DEVICE_ID) 341 #define FLASH_AREA_3_OFFSET (FLASH_AREA_BEGIN_OFFSET + FLASH_AREA_4_SIZE + \ 342 FLASH_AREA_0_SIZE + FLASH_AREA_1_SIZE + \ 343 FLASH_AREA_5_SIZE + FLASH_AREA_2_SIZE) 344 #define FLASH_AREA_3_SIZE (FLASH_NS_PARTITION_SIZE) 345 /* Control Non-Secure app image secondary slot */ 346 #if (FLASH_AREA_3_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 347 #error "FLASH_AREA_3_OFFSET not aligned on FLASH_AREA_IMAGE_SECTOR_SIZE" 348 #endif /* (FLASH_AREA_3_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 */ 349 #else /* FLASH_AREA_3_ID */ 350 #define FLASH_AREA_3_OFFSET (0x0) 351 #define FLASH_AREA_3_SIZE (0x0) 352 #endif /* FLASH_AREA_3_ID */ 353 354 355 /* Secure data image secondary slot */ 356 #if defined(FLASH_AREA_6_ID) 357 #define FLASH_AREA_6_DEVICE_ID (FLASH_AREAS_DEVICE_ID) 358 #define FLASH_AREA_6_OFFSET (FLASH_AREA_BEGIN_OFFSET + FLASH_AREA_4_SIZE + \ 359 FLASH_AREA_0_SIZE + FLASH_AREA_1_SIZE + \ 360 FLASH_AREA_5_SIZE + FLASH_AREA_2_SIZE + \ 361 FLASH_AREA_3_SIZE) 362 #define FLASH_AREA_6_SIZE (FLASH_S_DATA_PARTITION_SIZE) 363 /* Control Secure data image secondary slot */ 364 #if (FLASH_AREA_6_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 365 #error "FLASH_AREA_6_OFFSET not aligned on FLASH_AREA_IMAGE_SECTOR_SIZE" 366 #endif /* (FLASH_AREA_6_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 */ 367 #else /* FLASH_AREA_6_ID */ 368 #define FLASH_AREA_6_OFFSET (0x0) 369 #define FLASH_AREA_6_SIZE (0x0) 370 #endif /* FLASH_AREA_6_ID */ 371 372 /* Non-Secure data image secondary slot */ 373 #if defined(FLASH_AREA_7_ID) 374 #define FLASH_AREA_7_DEVICE_ID (FLASH_AREAS_DEVICE_ID) 375 #define FLASH_AREA_7_OFFSET (FLASH_AREA_BEGIN_OFFSET + FLASH_AREA_4_SIZE + \ 376 FLASH_AREA_0_SIZE + FLASH_AREA_1_SIZE + \ 377 FLASH_AREA_5_SIZE + FLASH_AREA_2_SIZE + \ 378 FLASH_AREA_3_SIZE + FLASH_AREA_6_SIZE) 379 #define FLASH_AREA_7_SIZE (FLASH_NS_DATA_PARTITION_SIZE) 380 /* Control Non-Secure data image secondary slot */ 381 #if (FLASH_AREA_7_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 382 #error "FLASH_AREA_7_OFFSET not aligned on FLASH_AREA_IMAGE_SECTOR_SIZE" 383 #endif /* (FLASH_AREA_7_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 */ 384 #else /* FLASH_AREA_7_ID */ 385 #define FLASH_AREA_7_OFFSET (0x0) 386 #define FLASH_AREA_7_SIZE (0x0) 387 #endif /* FLASH_AREA_7_ID */ 388 389 /* flash areas end offset */ 390 /*#define FLASH_AREA_END_OFFSET (FLASH_AREA_BEGIN_OFFSET + FLASH_AREA_4_SIZE + \ 391 FLASH_AREA_0_SIZE + FLASH_AREA_1_SIZE + \ 392 FLASH_AREA_5_SIZE + FLASH_AREA_2_SIZE + \ 393 FLASH_AREA_3_SIZE + FLASH_AREA_6_SIZE + \ 394 FLASH_AREA_7_SIZE)*/ 395 /* Make all flash executable for user app following loader2 */ 396 #define FLASH_AREA_END_OFFSET 0x00200000 397 398 /* Control flash area end */ 399 #if (FLASH_AREA_END_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 400 #error "FLASH_AREA_END_OFFSET not aligned on FLASH_AREA_IMAGE_SECTOR_SIZE" 401 #endif /* (FLASH_AREA_END_OFFSET % FLASH_AREA_IMAGE_SECTOR_SIZE) != 0 */ 402 403 /* 404 * The maximum number of status entries supported by the bootloader. 405 */ 406 #define MCUBOOT_STATUS_MAX_ENTRIES ((FLASH_MAX_PARTITION_SIZE) / \ 407 FLASH_AREA_SCRATCH_SIZE) 408 /* Maximum number of image sectors supported by the bootloader. */ 409 #define MCUBOOT_MAX_IMG_SECTORS ((FLASH_MAX_PARTITION_SIZE) / \ 410 FLASH_AREA_IMAGE_SECTOR_SIZE) 411 #define SECURE_IMAGE_OFFSET (0x0) 412 #define SECURE_IMAGE_MAX_SIZE FLASH_S_PARTITION_SIZE 413 414 #define NON_SECURE_IMAGE_OFFSET (SECURE_IMAGE_OFFSET + SECURE_IMAGE_MAX_SIZE) 415 #define NON_SECURE_IMAGE_MAX_SIZE FLASH_NS_PARTITION_SIZE 416 417 418 /* Flash device name used by BL2 and NV Counter 419 * Name is defined in flash driver file: low_level_flash.c 420 */ 421 #if !defined(MCUBOOT_OVERWRITE_ONLY) && (MCUBOOT_APP_IMAGE_NUMBER == 2) 422 /* Flash Driver Used to Confirm Secure App Image */ 423 #define FLASH_PRIMARY_SECURE_DEV_NAME TFM_Driver_FLASH0 424 #endif /* !defined(MCUBOOT_OVERWRITE_ONLY) && (MCUBOOT_APP_IMAGE_NUMBER == 2) */ 425 /* Flash Driver Used to Confirm NonSecure App Image or MCUBOOT_APP_IMAGE_NUMBER = 1 */ 426 #define FLASH_PRIMARY_NONSECURE_DEV_NAME TFM_Driver_FLASH0 427 #if !defined(MCUBOOT_OVERWRITE_ONLY) && (MCUBOOT_S_DATA_IMAGE_NUMBER == 1) 428 /* Flash Driver Used to Confirm Secure Data Image */ 429 #define FLASH_PRIMARY_DATA_SECURE_DEV_NAME TFM_Driver_FLASH0 430 #endif /* !defined(MCUBOOT_OVERWRITE_ONLY) && (MCUBOOT_S_DATA_IMAGE_NUMBER == 1) */ 431 #if !defined(MCUBOOT_OVERWRITE_ONLY) && (MCUBOOT_NS_DATA_IMAGE_NUMBER == 1) 432 /* Flash Driver Used to Confirm NonSecure Data Image */ 433 #define FLASH_PRIMARY_DATA_NONSECURE_DEV_NAME TFM_Driver_FLASH0 434 #endif /* !defined(MCUBOOT_OVERWRITE_ONLY) && (MCUBOOT_S_DATA_IMAGE_NUMBER == 1) */ 435 436 #define TFM_NV_COUNTERS_FLASH_DEV TFM_Driver_FLASH0 437 #define FLASH_DEV_NAME TFM_Driver_FLASH0 438 #define TFM_HAL_FLASH_PROGRAM_UNIT (0x10) 439 /* Protected Storage (PS) Service definitions 440 * Note: Further documentation of these definitions can be found in the 441 * TF-M PS Integration Guide. 442 */ 443 #define TFM_HAL_PS_FLASH_DRIVER TFM_Driver_FLASH0 444 445 /* In this target the CMSIS driver requires only the offset from the base 446 * address instead of the full memory address. 447 */ 448 #define PS_SECTOR_SIZE FLASH_AREA_IMAGE_SECTOR_SIZE 449 /* The sectors must be in consecutive memory location */ 450 #define PS_NBR_OF_SECTORS (FLASH_PS_AREA_SIZE / PS_SECTOR_SIZE) 451 /* The maximum asset size to be stored in the ITS area */ 452 #define ITS_SECTOR_SIZE FLASH_AREA_IMAGE_SECTOR_SIZE 453 /* The sectors must be in consecutive memory location */ 454 #define ITS_NBR_OF_SECTORS (FLASH_ITS_AREA_SIZE / ITS_SECTOR_SIZE) 455 456 /* Base address of dedicated flash area for PS */ 457 #define TFM_HAL_PS_FLASH_AREA_ADDR FLASH_PS_AREA_OFFSET 458 /* Size of dedicated flash area for PS */ 459 #define TFM_HAL_PS_FLASH_AREA_SIZE FLASH_PS_AREA_SIZE 460 #define PS_RAM_FS_SIZE TFM_HAL_PS_FLASH_AREA_SIZE 461 /* Number of physical erase sectors per logical FS block */ 462 #define TFM_HAL_PS_SECTORS_PER_BLOCK (1) 463 /* Smallest flash programmable unit in bytes */ 464 #define TFM_HAL_PS_PROGRAM_UNIT (0x10) 465 466 /* Internal Trusted Storage (ITS) Service definitions 467 * Note: Further documentation of these definitions can be found in the 468 * TF-M ITS Integration Guide. 469 */ 470 #define TFM_HAL_ITS_FLASH_DRIVER TFM_Driver_FLASH0 471 472 /* In this target the CMSIS driver requires only the offset from the base 473 * address instead of the full memory address. 474 */ 475 /* Base address of dedicated flash area for ITS */ 476 #define TFM_HAL_ITS_FLASH_AREA_ADDR FLASH_ITS_AREA_OFFSET 477 /* Size of dedicated flash area for ITS */ 478 #define TFM_HAL_ITS_FLASH_AREA_SIZE FLASH_ITS_AREA_SIZE 479 #define ITS_RAM_FS_SIZE TFM_HAL_ITS_FLASH_AREA_SIZE 480 /* Number of physical erase sectors per logical FS block */ 481 #define TFM_HAL_ITS_SECTORS_PER_BLOCK (1) 482 /* Smallest flash programmable unit in bytes */ 483 #define TFM_HAL_ITS_PROGRAM_UNIT (0x10) 484 485 486 /* NV Counters definitions */ 487 #define TFM_NV_COUNTERS_AREA_ADDR FLASH_NV_COUNTERS_AREA_OFFSET 488 #define TFM_NV_COUNTERS_AREA_SIZE (0x20)/* 32 Bytes */ 489 #define TFM_NV_COUNTERS_SECTOR_ADDR FLASH_NV_COUNTERS_AREA_OFFSET 490 #define TFM_NV_COUNTERS_SECTOR_SIZE FLASH_AREA_IMAGE_SECTOR_SIZE 491 492 /* OTP / NV counter definitions */ 493 #define TFM_OTP_NV_COUNTERS_AREA_SIZE (FLASH_OTP_NV_COUNTERS_AREA_SIZE / 2) 494 #define TFM_OTP_NV_COUNTERS_AREA_ADDR FLASH_OTP_NV_COUNTERS_AREA_OFFSET 495 #define TFM_OTP_NV_COUNTERS_SECTOR_SIZE FLASH_OTP_NV_COUNTERS_SECTOR_SIZE 496 #define TFM_OTP_NV_COUNTERS_BACKUP_AREA_ADDR (TFM_OTP_NV_COUNTERS_AREA_ADDR + \ 497 TFM_OTP_NV_COUNTERS_AREA_SIZE) 498 499 /* BL2 NV Counters definitions */ 500 #define BL2_NV_COUNTERS_AREA_ADDR FLASH_BL2_NVCNT_AREA_OFFSET 501 #define BL2_NV_COUNTERS_AREA_SIZE FLASH_BL2_NVCNT_AREA_SIZE 502 503 /* FIXME: not valid today */ 504 #define BL2_S_RAM_ALIAS_BASE (0x30000000) 505 #define BL2_NS_RAM_ALIAS_BASE (0x20000000) 506 507 /* This area in SRAM 2 is updated BL2 and can be lock to avoid any changes */ 508 #define BOOT_TFM_SHARED_DATA_SIZE (0x400) 509 #define BOOT_TFM_SHARED_DATA_BASE (0x3004fc00) 510 511 /* OBK */ 512 #define OBK_HDPL0_OFFSET (0x00U) /* First OBkey Hdpl 0 */ 513 #define OBK_HDPL0_END (0xFFU) /* Last OBKey Hdpl 0 */ 514 #define OBK_HDPL1_OFFSET (0x100U) /* First OBkey Hdpl 1 */ 515 #define OBK_HDPL1_END (0x8FFU) /* Last OBKey Hdpl 1 */ 516 #define OBK_HDPL2_OFFSET (0x900U) /* First OBkey Hdpl 2 */ 517 #define OBK_HDPL2_END (0xBFFU) /* Last OBKey Hdpl 2 */ 518 #define OBK_HDPL3_OFFSET (0xC00U) /* First OBkey Hdpl 3 */ 519 #define OBK_HDPL3_END (0x1FFFU) /* Last OBKey Hdpl 3 */ 520 521 /* Engi bits */ 522 #define ENGI_BASE_NS (0x08FFF800U) 523 #define ENGI_SIZE (0x40U) 524 525 /* Systeme Flash description */ 526 #define RSS_LIB_BASE (0x0FF94000U) 527 #define RSS_LIB_SIZE (0x2000U) 528 #define BOOTLOADER_BASE_NS (0x0BF97000U) 529 #define BOOTLOADER_SIZE (0x9400U) 530 #define STM32_DESCRIPTOR_BASE_NS_3 (0x0BF9FB00U) 531 #define STM32_DESCRIPTOR_BASE_NS_2 (0x0BF9FD00U) 532 #define STM32_DESCRIPTOR_BASE_NS_1 (0x0BF9FE00U) 533 #define RSSLIB_PFUNC_3 (0x0BF9FB68UL) 534 #define RSSLIB_PFUNC_2 (0x0BF9FD68UL) 535 #define RSSLIB_PFUNC_1 (0x0BF9FE68UL) 536 #define STM32_DESCRIPTOR_SIZE (0x100U) 537 #define STM32_DESCRIPTOR_BASE_NS (STM32_DESCRIPTOR_BASE_NS_3) /* use for mpu region the lowest address*/ 538 #define STM32_DESCRIPTOR_END_NS (STM32_DESCRIPTOR_BASE_NS_1 + STM32_DESCRIPTOR_SIZE -1) /* to cover all descriptors */ 539 540 #endif /* __FLASH_LAYOUT_H__ */ 541