1 /* 2 * SPDX-License-Identifier: BSD-3-Clause 3 * SPDX-FileCopyrightText: Copyright The TrustedFirmware-M Contributors 4 * 5 */ 6 7 #ifndef __REGION_DEFS_H__ 8 #define __REGION_DEFS_H__ 9 10 #ifdef NO_U_MODIFIER 11 #define _u(x) x 12 #endif 13 14 #include "flash_layout.h" 15 #include "hardware/regs/addressmap.h" /* Coming from SDK */ 16 17 #define BL2_HEAP_SIZE (0x0001000) 18 #define BL2_MSP_STACK_SIZE (0x0001800) 19 20 #ifdef ENABLE_HEAP 21 #define S_HEAP_SIZE (0x0000200) 22 #endif 23 24 #define S_MSP_STACK_SIZE (0x0000800) 25 #define S_PSP_STACK_SIZE (0x0000800) 26 27 #define NS_HEAP_SIZE (0x0001000) 28 #define NS_STACK_SIZE (0x0001000) 29 30 #ifdef BL2 31 #ifndef LINK_TO_SECONDARY_PARTITION 32 #define S_IMAGE_PRIMARY_PARTITION_OFFSET (FLASH_AREA_0_OFFSET) 33 #define S_IMAGE_SECONDARY_PARTITION_OFFSET (FLASH_AREA_2_OFFSET) 34 #else 35 #define S_IMAGE_PRIMARY_PARTITION_OFFSET (FLASH_AREA_2_OFFSET) 36 #define S_IMAGE_SECONDARY_PARTITION_OFFSET (FLASH_AREA_0_OFFSET) 37 #endif /* !LINK_TO_SECONDARY_PARTITION */ 38 #else 39 #define S_IMAGE_PRIMARY_PARTITION_OFFSET (0x0) 40 #endif /* BL2 */ 41 42 #ifndef LINK_TO_SECONDARY_PARTITION 43 #define NS_IMAGE_PRIMARY_PARTITION_OFFSET (FLASH_AREA_0_OFFSET \ 44 + FLASH_S_PARTITION_SIZE) 45 #else 46 #define NS_IMAGE_PRIMARY_PARTITION_OFFSET (FLASH_AREA_2_OFFSET \ 47 + FLASH_S_PARTITION_SIZE) 48 #endif /* !LINK_TO_SECONDARY_PARTITION */ 49 50 /* IMAGE_CODE_SIZE is the space available for the software binary image. 51 * It is less than the FLASH_S_PARTITION_SIZE + FLASH_NS_PARTITION_SIZE 52 * because we reserve space for the image header and trailer introduced 53 * by the bootloader. 54 */ 55 #if (!defined(MCUBOOT_IMAGE_NUMBER) || (MCUBOOT_IMAGE_NUMBER == 1)) && \ 56 (NS_IMAGE_PRIMARY_PARTITION_OFFSET > S_IMAGE_PRIMARY_PARTITION_OFFSET) 57 /* If secure image and nonsecure image are concatenated, and nonsecure image 58 * locates at the higher memory range, then the secure image does not need 59 * the trailer area. 60 */ 61 #define IMAGE_S_CODE_SIZE \ 62 (FLASH_S_PARTITION_SIZE - BL2_HEADER_SIZE) 63 #else 64 #define IMAGE_S_CODE_SIZE \ 65 (FLASH_S_PARTITION_SIZE - BL2_HEADER_SIZE - BL2_TRAILER_SIZE) 66 #endif 67 68 #define IMAGE_NS_CODE_SIZE \ 69 (FLASH_NS_PARTITION_SIZE - BL2_HEADER_SIZE - BL2_TRAILER_SIZE) 70 71 /* Secure regions */ 72 #define S_IMAGE_PRIMARY_AREA_OFFSET \ 73 (S_IMAGE_PRIMARY_PARTITION_OFFSET + BL2_HEADER_SIZE) 74 /* Secure Code stored in Flash */ 75 #define S_CODE_START ((XIP_BASE) + (S_IMAGE_PRIMARY_AREA_OFFSET)) 76 #define S_CODE_SIZE (IMAGE_S_CODE_SIZE) 77 #define S_CODE_LIMIT (S_CODE_START + S_CODE_SIZE - 1) 78 79 #define S_DATA_OVERALL_SIZE (0x30000) /* 192 KB */ 80 81 /* Secure Data stored in SRAM0-3 */ 82 #define S_DATA_START (SRAM0_BASE) 83 #define S_DATA_SIZE (S_DATA_OVERALL_SIZE) 84 #define S_DATA_LIMIT (S_DATA_START + S_DATA_SIZE - 1) 85 86 /* Size of vector table: 52 + 16 entry -> 0x110 bytes */ 87 /* Not defined, reason: TFM_VECTORS contain default handler implementations as 88 well, which increases the standard size, resulting a failed check in linker 89 script */ 90 //#define S_CODE_VECTOR_TABLE_SIZE (0x110) 91 /* This is used instead of the above */ 92 #define NS_VECTOR_ALLOCATED_SIZE 0x124 93 94 /* Non-secure regions */ 95 #define NS_IMAGE_PRIMARY_AREA_OFFSET \ 96 (NS_IMAGE_PRIMARY_PARTITION_OFFSET + BL2_HEADER_SIZE) 97 /* Non-Secure Code stored in Code SRAM memory */ 98 #define NS_CODE_START ((XIP_BASE) + (NS_IMAGE_PRIMARY_AREA_OFFSET)) 99 #define NS_CODE_SIZE (IMAGE_NS_CODE_SIZE) 100 #define NS_CODE_LIMIT (NS_CODE_START + NS_CODE_SIZE - 1) 101 102 /* Entry point of Core1 */ 103 #define NS_CODE_CORE1_START (NS_CODE_START + NS_VECTOR_ALLOCATED_SIZE) 104 105 #define NS_DATA_OVERALL_SIZE (0x40000) 106 107 /* Non-Secure Data stored in ISRAM0+ISRAM1 */ 108 #define NS_DATA_START (SRAM4_BASE) 109 #define NS_DATA_SIZE (NS_DATA_OVERALL_SIZE) 110 #define NS_DATA_LIMIT (NS_DATA_START + NS_DATA_SIZE - 1) 111 112 /* NS partition information is used for SAU configuration */ 113 #define NS_PARTITION_START \ 114 ((XIP_BASE) + (NS_IMAGE_PRIMARY_PARTITION_OFFSET)) 115 #define NS_PARTITION_SIZE (FLASH_NS_PARTITION_SIZE) 116 117 /* Secondary partition for new images in case of firmware upgrade */ 118 #define SECONDARY_PARTITION_START \ 119 ((XIP_BASE) + (S_IMAGE_SECONDARY_PARTITION_OFFSET)) 120 #define SECONDARY_PARTITION_SIZE (FLASH_S_PARTITION_SIZE + \ 121 FLASH_NS_PARTITION_SIZE) 122 123 #ifdef BL2 124 /* Bootloader regions */ 125 #define BL2_CODE_START (XIP_BASE) 126 #define BL2_CODE_SIZE (FLASH_AREA_BL2_SIZE) 127 #define BL2_CODE_LIMIT (BL2_CODE_START + BL2_CODE_SIZE - 1) 128 129 /* Bootloader uses same memory as for secure image */ 130 #define BL2_DATA_START (S_DATA_START) 131 #define BL2_DATA_SIZE (S_DATA_SIZE) 132 #define BL2_DATA_LIMIT (BL2_DATA_START + BL2_DATA_SIZE - 1) 133 #endif /* BL2 */ 134 135 /* Shared data area between bootloader and runtime firmware. 136 * Shared data area is allocated at the beginning of the RAM, it is overlapping 137 * with TF-M Secure code's MSP stack 138 */ 139 #define BOOT_TFM_SHARED_DATA_BASE S_DATA_START 140 #define BOOT_TFM_SHARED_DATA_SIZE (0x400) 141 #define BOOT_TFM_SHARED_DATA_LIMIT (BOOT_TFM_SHARED_DATA_BASE + \ 142 BOOT_TFM_SHARED_DATA_SIZE - 1) 143 144 #define PROVISIONING_BUNDLE_CODE_START (NS_DATA_START) 145 #define PROVISIONING_BUNDLE_CODE_SIZE (PROVISIONING_CODE_PADDED_SIZE) 146 /* The max size of the values(keys, seeds) that are going to be provisioned 147 * into the OTP. */ 148 #define PROVISIONING_BUNDLE_VALUES_START (PROVISIONING_BUNDLE_CODE_START + PROVISIONING_BUNDLE_CODE_SIZE) 149 #define PROVISIONING_BUNDLE_VALUES_SIZE (PROVISIONING_VALUES_PADDED_SIZE) 150 #define PROVISIONING_BUNDLE_DATA_START (PROVISIONING_BUNDLE_VALUES_START + \ 151 PROVISIONING_BUNDLE_VALUES_SIZE) 152 #define PROVISIONING_BUNDLE_DATA_SIZE (PROVISIONING_DATA_PADDED_SIZE) 153 154 #define PROVISIONING_BUNDLE_START (XIP_BASE + FLASH_OTP_NV_COUNTERS_AREA_OFFSET + FLASH_OTP_NV_COUNTERS_AREA_SIZE) 155 #define PROVISIONING_BUNDLE_MAGIC (0x18) 156 157 #if ((PROVISIONING_BUNDLE_START + PROVISIONING_BUNDLE_CODE_SIZE + PROVISIONING_BUNDLE_VALUES_SIZE + \ 158 PROVISIONING_BUNDLE_DATA_SIZE + PROVISIONING_BUNDLE_MAGIC) > XIP_BASE + FLASH_TOTAL_SIZE) 159 #error "Out of flash memory!" 160 #endif 161 162 /* Enable scratch regions for pico-rp2350 */ 163 #define __ENABLE_SCRATCH__ 164 165 #define SCRATCH_X_START (BL2_DATA_START + BL2_DATA_SIZE) 166 #define SCRATCH_X_SIZE 0x1000 167 #define SCRATCH_Y_START (SCRATCH_X_START + SCRATCH_X_SIZE) 168 #define SCRATCH_Y_SIZE 0x1000 169 170 #endif /* __REGION_DEFS_H__ */ 171