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