1 /*
2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6 
7 /***********************************************************************************************************************
8  * Includes   <System Includes> , "Project Includes"
9  **********************************************************************************************************************/
10 #include "bsp_api.h"
11 
12 /***********************************************************************************************************************
13  * Macro definitions
14  **********************************************************************************************************************/
15 #if (1 == _RZN_ORDINAL)
16  #if (1 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
17   #define BSP_PRV_MASTER_MPU_REGION_NUM      (8)
18  #elif (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
19   #define BSP_PRV_MASTER_MPU_REGION_NUM      (16)
20  #endif
21  #define BSP_PRV_M_MPU_35BIT_ADDRESS_MASK    (0x700000000UL)
22 
23  #define BSP_PRV_MASTER_MPU_STADD(master,                                                         \
24                                   region)     (((BSP_CFG_MPU ## master ## _STADD ## region) &~    \
25                                                 BSP_PRV_M_MPU_35BIT_ADDRESS_MASK) |               \
26                                                (((BSP_CFG_MPU ## master ## _STADD ## region) &    \
27                                                  BSP_PRV_M_MPU_35BIT_ADDRESS_MASK) >> 28) |       \
28                                                (BSP_CFG_MPU ## master ## _WRITE ## region << 1) | \
29                                                BSP_CFG_MPU ## master ## _READ ## region)
30 
31  #define BSP_PRV_MASTER_MPU_ENDADD(master,                                                     \
32                                    region)    ((BSP_CFG_MPU ## master ## _ENDADD ## region) &~ \
33                                                BSP_PRV_M_MPU_35BIT_ADDRESS_MASK) |             \
34     (((BSP_CFG_MPU ## master ## _ENDADD ## region) &                                           \
35       BSP_PRV_M_MPU_35BIT_ADDRESS_MASK) >> 28)
36 
37 #endif
38 
39 #if (1U < BSP_FEATURE_BSP_CR52_CORE_NUM) || (1U < BSP_FEATURE_BSP_CA55_CORE_NUM)
40  #if !(BSP_CFG_RAM_EXECUTION)
41 
42   #define BSP_PRV_LOADER_TEXT_OFFSET                     (0x1000U)
43   #define BSP_PRV_ATCM_AXIS_CR520_ADDRESS                (0x20000000)
44   #define BSP_PRV_ATCM_AXIS_CR521_ADDRESS                (0x21000000)
45 
46   #define BSP_PRV_IMAGE_INFO_OFFSET                      (0x800)
47   #define BSP_PRV_IMAGE_INFO_BRANCH_INSTRUCTION_CR520    (0xE51FF004)
48   #define BSP_PRV_IMAGE_INFO_BRANCH_INSTRUCTION_CR521    (0xE51FF000)
49   #define BSP_PRV_IMAGE_INFO_BRANCH_ADDRESS              ((uint32_t) ((uintptr_t) BSP_PRV_SECTION_SECONDARY_RAM_START + \
50                                                                       BSP_PRV_LOADER_TEXT_OFFSET))
51   #define BSP_PRV_IMAGE_INFO_NEXT_CORE_ADDRESS           ((uint32_t) ((uintptr_t) BSP_PRV_SECTION_SECONDARY_RAM_START))
52 
53   #if defined(BSP_CFG_CORE_CR52)
54    #if (0 == BSP_CFG_CORE_CR52)
55     #define BSP_PRV_IMAGE_INFO_CPU                       (BSP_PRIV_ASSIGNMENT_CPU_CR52_0)
56 
57    #elif (1 == BSP_CFG_CORE_CR52)
58     #define BSP_PRV_IMAGE_INFO_CPU                       (BSP_PRIV_ASSIGNMENT_CPU_CR52_1)
59 
60    #endif
61   #elif defined(BSP_CFG_CORE_CA55)
62    #if (0 == BSP_CFG_CORE_CA55)
63     #define BSP_PRV_IMAGE_INFO_CPU                       (BSP_PRIV_ASSIGNMENT_CPU_CA55_0)
64 
65    #elif (1 == BSP_CFG_CORE_CA55)
66     #define BSP_PRV_IMAGE_INFO_CPU                       (BSP_PRIV_ASSIGNMENT_CPU_CA55_1)
67 
68    #elif (2 == BSP_CFG_CORE_CA55)
69     #define BSP_PRV_IMAGE_INFO_CPU                       (BSP_PRIV_ASSIGNMENT_CPU_CA55_2)
70 
71    #elif (3 == BSP_CFG_CORE_CA55)
72     #define BSP_PRV_IMAGE_INFO_CPU                       (BSP_PRIV_ASSIGNMENT_CPU_CA55_3)
73 
74    #endif
75   #endif
76  #endif
77 #endif
78 
79 #if defined(__ICCARM__)
80  #if BSP_CFG_C_RUNTIME_INIT
81   #define BSP_PRV_SECTION_LDR_DATA_ROM_ADDRESS                  __section_begin("LDR_DATA_RBLOCK")
82   #define BSP_PRV_SECTION_LDR_DATA_RAM_START                    __section_begin("LDR_DATA_WBLOCK")
83   #define BSP_PRV_SECTION_LDR_DATA_RAM_END                      __section_end("LDR_DATA_WBLOCK")
84 
85   #define BSP_PRV_SECTION_LDR_DATA_BSS_START                    __section_begin("LDR_DATA_ZBLOCK")
86   #define BSP_PRV_SECTION_LDR_DATA_BSS_END                      __section_end("LDR_DATA_ZBLOCK")
87 
88  #endif
89 
90  #if !(BSP_CFG_RAM_EXECUTION)
91   #define BSP_PRV_SECTION_VECTOR_ROM_ADDRESS                    __section_begin("VECTOR_RBLOCK")
92   #define BSP_PRV_SECTION_VECTOR_RAM_START                      __section_begin("VECTOR_WBLOCK")
93   #define BSP_PRV_SECTION_VECTOR_RAM_END                        __section_end("VECTOR_WBLOCK")
94 
95   #define BSP_PRV_SECTION_USER_PRG_ROM_ADDRESS                  __section_begin("USER_PRG_RBLOCK")
96   #define BSP_PRV_SECTION_USER_PRG_RAM_START                    __section_begin("USER_PRG_WBLOCK")
97   #define BSP_PRV_SECTION_USER_PRG_RAM_END                      __section_end("USER_PRG_WBLOCK")
98 
99   #define BSP_PRV_SECTION_USER_DATA_ROM_ADDRESS                 __section_begin("USER_DATA_RBLOCK")
100   #define BSP_PRV_SECTION_USER_DATA_RAM_START                   __section_begin("USER_DATA_WBLOCK")
101   #define BSP_PRV_SECTION_USER_DATA_RAM_END                     __section_end("USER_DATA_WBLOCK")
102 
103   #define BSP_PRV_SECTION_USER_DATA_NONCACHE_ROM_ADDRESS        __section_begin("USER_DATA_NONCACHE_RBLOCK")
104   #define BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_START          __section_begin("USER_DATA_NONCACHE_WBLOCK")
105   #define BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_END            __section_end("USER_DATA_NONCACHE_WBLOCK")
106 
107   #define BSP_PRV_SECTION_DMAC_LINK_MODE_ROM_ADDRESS            __section_begin("DMAC_LINK_MODE_RBLOCK")
108   #define BSP_PRV_SECTION_DMAC_LINK_MODE_RAM_START              __section_begin("DMAC_LINK_MODE_WBLOCK")
109   #define BSP_PRV_SECTION_DMAC_LINK_MODE_RAM_END                __section_end("DMAC_LINK_MODE_WBLOCK")
110 
111   #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_ROM_ADDRESS    __section_begin("SHARED_NONCACHE_BUFFER_RBLOCK")
112   #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_RAM_START      __section_begin("SHARED_NONCACHE_BUFFER_WBLOCK")
113   #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_RAM_END        __section_end("SHARED_NONCACHE_BUFFER_WBLOCK")
114 
115   #define BSP_PRV_SECTION_NONCACHE_BUFFER_ROM_ADDRESS           __section_begin("NONCACHE_BUFFER_RBLOCK")
116   #define BSP_PRV_SECTION_NONCACHE_BUFFER_RAM_START             __section_begin("NONCACHE_BUFFER_WBLOCK")
117   #define BSP_PRV_SECTION_NONCACHE_BUFFER_RAM_END               __section_end("NONCACHE_BUFFER_WBLOCK")
118 
119   #define BSP_PRV_SECTION_LDR_PRG_ROM_ADDRESS                   __section_begin("LDR_PRG_RBLOCK")
120   #define BSP_PRV_SECTION_LDR_PRG_RAM_START                     __section_begin("LDR_PRG_WBLOCK")
121   #define BSP_PRV_SECTION_LDR_PRG_RAM_END                       __section_end("LDR_PRG_WBLOCK")
122 
123   #define BSP_PRV_SECTION_USER_DATA_BSS_START                   __section_begin("USER_DATA_ZBLOCK")
124   #define BSP_PRV_SECTION_USER_DATA_BSS_END                     __section_end("USER_DATA_ZBLOCK")
125 
126   #define BSP_PRV_SECTION_USER_DATA_NONCACHE_BSS_START          __section_begin("USER_DATA_NONCACHE_ZBLOCK")
127   #define BSP_PRV_SECTION_USER_DATA_NONCACHE_BSS_END            __section_end("USER_DATA_NONCACHE_ZBLOCK")
128 
129   #define BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_START              __section_begin("DMAC_LINK_MODE_ZBLOCK")
130   #define BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_END                __section_end("DMAC_LINK_MODE_ZBLOCK")
131 
132   #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_START      __section_begin("SHARED_NONCACHE_BUFFER_ZBLOCK")
133   #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_END        __section_end("SHARED_NONCACHE_BUFFER_ZBLOCK")
134 
135   #define BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_START             __section_begin("NONCACHE_BUFFER_ZBLOCK")
136   #define BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_END               __section_end("NONCACHE_BUFFER_ZBLOCK")
137 
138   #if !(BSP_CFG_C_RUNTIME_INIT)
139    #define BSP_PRV_SECTION_LDR_DATA_ROM_ADDRESS                 __section_begin("LDR_DATA_RBLOCK")
140    #define BSP_PRV_SECTION_LDR_DATA_RAM_START                   __section_begin("LDR_DATA_WBLOCK")
141    #define BSP_PRV_SECTION_LDR_DATA_RAM_END                     __section_end("LDR_DATA_WBLOCK")
142 
143   #endif
144  #endif
145 
146  #if (1U < BSP_FEATURE_BSP_CR52_CORE_NUM) || (1U < BSP_FEATURE_BSP_CA55_CORE_NUM)
147   #define BSP_PRV_SECTION_SECONDARY_ROM_ADDRESS    __section_begin("SECONDARY_RBLOCK")
148   #define BSP_PRV_SECTION_SECONDARY_RAM_START      __section_begin("SECONDARY_WBLOCK")
149   #define BSP_PRV_SECTION_SECONDARY_RAM_END        __section_end("SECONDARY_WBLOCK")
150 
151  #endif
152 
153 #elif defined(__GNUC__)
154  #if BSP_CFG_C_RUNTIME_INIT
155   #define BSP_PRV_SECTION_LDR_DATA_ROM_ADDRESS                  &LOADER_DATA_IMAGE
156   #define BSP_PRV_SECTION_LDR_DATA_RAM_START                    &__loader_data_start
157   #define BSP_PRV_SECTION_LDR_DATA_RAM_END                      &__loader_data_end
158 
159   #define BSP_PRV_SECTION_LDR_DATA_BSS_START                    &__loader_bss_start
160   #define BSP_PRV_SECTION_LDR_DATA_BSS_END                      &__loader_bss_end
161 
162  #endif
163 
164  #if !(BSP_CFG_RAM_EXECUTION)
165   #define BSP_PRV_SECTION_VECTOR_ROM_ADDRESS                    &INTVEC_IMAGE
166   #define BSP_PRV_SECTION_VECTOR_RAM_START                      &_fvector_start
167   #define BSP_PRV_SECTION_VECTOR_RAM_END                        &_fvector_end
168 
169   #define BSP_PRV_SECTION_USER_PRG_ROM_ADDRESS                  &TEXT_IMAGE
170   #define BSP_PRV_SECTION_USER_PRG_RAM_START                    &_text_start
171   #define BSP_PRV_SECTION_USER_PRG_RAM_END                      &_text_end
172 
173   #define BSP_PRV_SECTION_USER_DATA_ROM_ADDRESS                 &DATA_IMAGE
174   #define BSP_PRV_SECTION_USER_DATA_RAM_START                   &_data_start
175   #define BSP_PRV_SECTION_USER_DATA_RAM_END                     &_data_end
176 
177   #define BSP_PRV_SECTION_USER_DATA_NONCACHE_ROM_ADDRESS        &_mdata_noncache
178   #define BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_START          &_data_noncache_start
179   #define BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_END            &_data_noncache_end
180 
181   #define BSP_PRV_SECTION_DMAC_LINK_MODE_ROM_ADDRESS            &_mdmac_link_mode
182   #define BSP_PRV_SECTION_DMAC_LINK_MODE_RAM_START              &_dmac_link_mode_start
183   #define BSP_PRV_SECTION_DMAC_LINK_MODE_RAM_END                &_dmac_link_mode_end
184 
185   #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_ROM_ADDRESS    &_msncbuffer
186   #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_RAM_START      &_sncbuffer_start
187   #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_RAM_END        &_sncbuffer_end
188 
189   #define BSP_PRV_SECTION_NONCACHE_BUFFER_ROM_ADDRESS           &_mncbuffer
190   #define BSP_PRV_SECTION_NONCACHE_BUFFER_RAM_START             &_ncbuffer_start
191   #define BSP_PRV_SECTION_NONCACHE_BUFFER_RAM_END               &_ncbuffer_end
192 
193   #define BSP_PRV_SECTION_LDR_PRG_ROM_ADDRESS                   &LOADER_TEXT_IMAGE
194   #define BSP_PRV_SECTION_LDR_PRG_RAM_START                     &_loader_text_start
195   #define BSP_PRV_SECTION_LDR_PRG_RAM_END                       &_loader_text_end
196 
197   #if !(BSP_CFG_C_RUNTIME_INIT)
198    #define BSP_PRV_SECTION_LDR_DATA_ROM_ADDRESS                 &LOADER_DATA_IMAGE
199    #define BSP_PRV_SECTION_LDR_DATA_RAM_START                   &__loader_data_start
200    #define BSP_PRV_SECTION_LDR_DATA_RAM_END                     &__loader_data_end
201 
202   #endif
203  #endif
204 
205  #if (1U < BSP_FEATURE_BSP_CR52_CORE_NUM) || (1U < BSP_FEATURE_BSP_CA55_CORE_NUM)
206   #define BSP_PRV_SECTION_SECONDARY_ROM_ADDRESS    &SECONDARY_IMAGE
207   #define BSP_PRV_SECTION_SECONDARY_RAM_START      &_secondary_start
208   #define BSP_PRV_SECTION_SECONDARY_RAM_END        &_secondary_end
209 
210  #endif
211 
212  #define BSP_PRV_SECTION_USER_DATA_BSS_START       &__bss_start__
213  #define BSP_PRV_SECTION_USER_DATA_BSS_END         &__bss_end__
214 
215 #endif
216 
217 /***********************************************************************************************************************
218  * Typedef definitions
219  **********************************************************************************************************************/
220 #if (1U < BSP_FEATURE_BSP_CR52_CORE_NUM) || (1U < BSP_FEATURE_BSP_CA55_CORE_NUM)
221 
222 typedef enum e_bsp_assignment_cpu
223 {
224     BSP_PRIV_ASSIGNMENT_CPU_CR52_0 = 0xAC54E000,
225     BSP_PRIV_ASSIGNMENT_CPU_CR52_1 = 0xAC54E001,
226     BSP_PRIV_ASSIGNMENT_CPU_CA55_0 = 0xAC54E002,
227     BSP_PRIV_ASSIGNMENT_CPU_CA55_1 = 0xAC54E003,
228     BSP_PRIV_ASSIGNMENT_CPU_CA55_2 = 0xAC54E004,
229     BSP_PRIV_ASSIGNMENT_CPU_CA55_3 = 0xAC54E005
230 } bsp_assignment_cpu_t;
231 
232 #endif
233 
234 /***********************************************************************************************************************
235  * Exported global variables (to be accessed by other files)
236  **********************************************************************************************************************/
237 
238 /*******************************************************************************************************************//**
239  * @addtogroup BSP_MCU
240  * @{
241  **********************************************************************************************************************/
242 
243 /** System Clock Frequency (Core Clock) */
244 uint32_t SystemCoreClock = 0U;
245 
246 /** @} (end addtogroup BSP_MCU) */
247 
248 #if defined(__ICCARM__)
249  #if BSP_CFG_C_RUNTIME_INIT
250   #pragma section="LDR_DATA_RBLOCK"
251   #pragma section="LDR_DATA_WBLOCK"
252   #pragma section="LDR_DATA_ZBLOCK"
253 
254  #endif
255 
256  #if !(BSP_CFG_RAM_EXECUTION)
257   #pragma section="VECTOR_RBLOCK"
258   #pragma section="VECTOR_WBLOCK"
259 
260   #pragma section="USER_PRG_RBLOCK"
261   #pragma section="USER_PRG_WBLOCK"
262 
263   #pragma section="USER_DATA_RBLOCK"
264   #pragma section="USER_DATA_WBLOCK"
265   #pragma section="USER_DATA_ZBLOCK"
266 
267   #pragma section="USER_DATA_NONCACHE_RBLOCK"
268   #pragma section="USER_DATA_NONCACHE_WBLOCK"
269   #pragma section="USER_DATA_NONCACHE_ZBLOCK"
270 
271   #pragma section="DMAC_LINK_MODE_RBLOCK"
272   #pragma section="DMAC_LINK_MODE_WBLOCK"
273   #pragma section="DMAC_LINK_MODE_ZBLOCK"
274 
275   #pragma section="SHARED_NONCACHE_BUFFER_RBLOCK"
276   #pragma section="SHARED_NONCACHE_BUFFER_WBLOCK"
277   #pragma section="SHARED_NONCACHE_BUFFER_ZBLOCK"
278 
279   #pragma section="NONCACHE_BUFFER_RBLOCK"
280   #pragma section="NONCACHE_BUFFER_WBLOCK"
281   #pragma section="NONCACHE_BUFFER_ZBLOCK"
282 
283   #pragma section="LDR_PRG_RBLOCK"
284   #pragma section="LDR_PRG_WBLOCK"
285 
286   #if !(BSP_CFG_C_RUNTIME_INIT)
287    #pragma section="LDR_DATA_RBLOCK"
288    #pragma section="LDR_DATA_WBLOCK"
289 
290   #endif
291  #endif
292 
293  #pragma section="SECONDARY_RBLOCK"
294  #pragma section="SECONDARY_WBLOCK"
295 
296 #elif defined(__GNUC__)
297  #if BSP_CFG_C_RUNTIME_INIT
298 extern void * LOADER_DATA_IMAGE;
299 extern void * __loader_data_start;
300 extern void * __loader_data_end;
301 
302 extern void * __loader_bss_start;
303 extern void * __loader_bss_end;
304 
305 extern void (* __preinit_array_start[])(void);
306 extern void (* __preinit_array_end[])(void);
307 extern void (* __init_array_start[])(void);
308 extern void (* __init_array_end[])(void);
309 
310  #endif
311 
312  #if !(BSP_CFG_RAM_EXECUTION)
313 extern void * INTVEC_IMAGE;
314 extern void * _fvector_start;
315 extern void * _fvector_end;
316 
317 extern void * TEXT_IMAGE;
318 extern void * _text_start;
319 extern void * _text_end;
320 
321 extern void * DATA_IMAGE;
322 extern void * _data_start;
323 extern void * _data_end;
324 
325 extern void * _mdata_noncache;
326 extern void * _data_noncache_start;
327 extern void * _data_noncache_end;
328 
329 extern void * _mdmac_link_mode;
330 extern void * _dmac_link_mode_start;
331 extern void * _dmac_link_mode_end;
332 
333 extern void * _msncbuffer;
334 extern void * _sncbuffer_start;
335 extern void * _sncbuffer_end;
336 
337 extern void * _mncbuffer;
338 extern void * _ncbuffer_start;
339 extern void * _ncbuffer_end;
340 
341 extern void * LOADER_TEXT_IMAGE;
342 extern void * _loader_text_start;
343 extern void * _loader_text_end;
344 
345   #if !(BSP_CFG_C_RUNTIME_INIT)
346 extern void * LOADER_DATA_IMAGE;
347 extern void * __loader_data_start;
348 extern void * __loader_data_end;
349 
350   #endif
351  #endif
352 
353  #if (1U < BSP_FEATURE_BSP_CR52_CORE_NUM) || (1U < BSP_FEATURE_BSP_CA55_CORE_NUM)
354 extern void * SECONDARY_IMAGE;
355 extern void * _secondary_start;
356 extern void * _secondary_end;
357 
358  #endif
359 
360 extern void * __bss_start__;
361 extern void * __bss_end__;
362 
363 #endif
364 
365 /***********************************************************************************************************************
366  * Exported global functions (to be accessed by other files)
367  **********************************************************************************************************************/
368 #if defined(__ICCARM__)
369  #if BSP_CFG_C_RUNTIME_INIT
370 extern void __iar_data_init3(void);
371 
372  #endif
373 #endif
374 
375 /***********************************************************************************************************************
376  * Private global variables and functions
377  **********************************************************************************************************************/
378 #if (1 == _RZN_ORDINAL)
379  #if (1 == BSP_FEATURE_BSP_MASTER_MPU0_SUPPORTED)
380 const uint32_t g_bsp_master_mpu0_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
381 {
382     {BSP_PRV_MASTER_MPU_STADD(0, 0),  BSP_PRV_MASTER_MPU_ENDADD(0, 0) },
383     {BSP_PRV_MASTER_MPU_STADD(0, 1),  BSP_PRV_MASTER_MPU_ENDADD(0, 1) },
384     {BSP_PRV_MASTER_MPU_STADD(0, 2),  BSP_PRV_MASTER_MPU_ENDADD(0, 2) },
385     {BSP_PRV_MASTER_MPU_STADD(0, 3),  BSP_PRV_MASTER_MPU_ENDADD(0, 3) },
386     {BSP_PRV_MASTER_MPU_STADD(0, 4),  BSP_PRV_MASTER_MPU_ENDADD(0, 4) },
387     {BSP_PRV_MASTER_MPU_STADD(0, 5),  BSP_PRV_MASTER_MPU_ENDADD(0, 5) },
388     {BSP_PRV_MASTER_MPU_STADD(0, 6),  BSP_PRV_MASTER_MPU_ENDADD(0, 6) },
389     {BSP_PRV_MASTER_MPU_STADD(0, 7),  BSP_PRV_MASTER_MPU_ENDADD(0, 7) },
390   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
391     {BSP_PRV_MASTER_MPU_STADD(0, 8),  BSP_PRV_MASTER_MPU_ENDADD(0, 8) },
392     {BSP_PRV_MASTER_MPU_STADD(0, 9),  BSP_PRV_MASTER_MPU_ENDADD(0, 9) },
393     {BSP_PRV_MASTER_MPU_STADD(0, 10), BSP_PRV_MASTER_MPU_ENDADD(0, 10)},
394     {BSP_PRV_MASTER_MPU_STADD(0, 11), BSP_PRV_MASTER_MPU_ENDADD(0, 11)},
395     {BSP_PRV_MASTER_MPU_STADD(0, 12), BSP_PRV_MASTER_MPU_ENDADD(0, 12)},
396     {BSP_PRV_MASTER_MPU_STADD(0, 13), BSP_PRV_MASTER_MPU_ENDADD(0, 13)},
397     {BSP_PRV_MASTER_MPU_STADD(0, 14), BSP_PRV_MASTER_MPU_ENDADD(0, 14)},
398     {BSP_PRV_MASTER_MPU_STADD(0, 15), BSP_PRV_MASTER_MPU_ENDADD(0, 15)},
399   #endif
400 };
401  #endif
402  #if (1 == BSP_FEATURE_BSP_MASTER_MPU1_SUPPORTED)
403 const uint32_t g_bsp_master_mpu1_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
404 {
405     {BSP_PRV_MASTER_MPU_STADD(1, 0),  BSP_PRV_MASTER_MPU_ENDADD(1, 0) },
406     {BSP_PRV_MASTER_MPU_STADD(1, 1),  BSP_PRV_MASTER_MPU_ENDADD(1, 1) },
407     {BSP_PRV_MASTER_MPU_STADD(1, 2),  BSP_PRV_MASTER_MPU_ENDADD(1, 2) },
408     {BSP_PRV_MASTER_MPU_STADD(1, 3),  BSP_PRV_MASTER_MPU_ENDADD(1, 3) },
409     {BSP_PRV_MASTER_MPU_STADD(1, 4),  BSP_PRV_MASTER_MPU_ENDADD(1, 4) },
410     {BSP_PRV_MASTER_MPU_STADD(1, 5),  BSP_PRV_MASTER_MPU_ENDADD(1, 5) },
411     {BSP_PRV_MASTER_MPU_STADD(1, 6),  BSP_PRV_MASTER_MPU_ENDADD(1, 6) },
412     {BSP_PRV_MASTER_MPU_STADD(1, 7),  BSP_PRV_MASTER_MPU_ENDADD(1, 7) },
413   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
414     {BSP_PRV_MASTER_MPU_STADD(1, 8),  BSP_PRV_MASTER_MPU_ENDADD(1, 8) },
415     {BSP_PRV_MASTER_MPU_STADD(1, 9),  BSP_PRV_MASTER_MPU_ENDADD(1, 9) },
416     {BSP_PRV_MASTER_MPU_STADD(1, 10), BSP_PRV_MASTER_MPU_ENDADD(1, 10)},
417     {BSP_PRV_MASTER_MPU_STADD(1, 11), BSP_PRV_MASTER_MPU_ENDADD(1, 11)},
418     {BSP_PRV_MASTER_MPU_STADD(1, 12), BSP_PRV_MASTER_MPU_ENDADD(1, 12)},
419     {BSP_PRV_MASTER_MPU_STADD(1, 13), BSP_PRV_MASTER_MPU_ENDADD(1, 13)},
420     {BSP_PRV_MASTER_MPU_STADD(1, 14), BSP_PRV_MASTER_MPU_ENDADD(1, 14)},
421     {BSP_PRV_MASTER_MPU_STADD(1, 15), BSP_PRV_MASTER_MPU_ENDADD(1, 15)},
422   #endif
423 };
424  #endif
425  #if (1 == BSP_FEATURE_BSP_MASTER_MPU2_SUPPORTED)
426 const uint32_t g_bsp_master_mpu2_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
427 {
428     {BSP_PRV_MASTER_MPU_STADD(2, 0),  BSP_PRV_MASTER_MPU_ENDADD(2, 0) },
429     {BSP_PRV_MASTER_MPU_STADD(2, 1),  BSP_PRV_MASTER_MPU_ENDADD(2, 1) },
430     {BSP_PRV_MASTER_MPU_STADD(2, 2),  BSP_PRV_MASTER_MPU_ENDADD(2, 2) },
431     {BSP_PRV_MASTER_MPU_STADD(2, 3),  BSP_PRV_MASTER_MPU_ENDADD(2, 3) },
432     {BSP_PRV_MASTER_MPU_STADD(2, 4),  BSP_PRV_MASTER_MPU_ENDADD(2, 4) },
433     {BSP_PRV_MASTER_MPU_STADD(2, 5),  BSP_PRV_MASTER_MPU_ENDADD(2, 5) },
434     {BSP_PRV_MASTER_MPU_STADD(2, 6),  BSP_PRV_MASTER_MPU_ENDADD(2, 6) },
435     {BSP_PRV_MASTER_MPU_STADD(2, 7),  BSP_PRV_MASTER_MPU_ENDADD(2, 7) },
436   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
437     {BSP_PRV_MASTER_MPU_STADD(2, 8),  BSP_PRV_MASTER_MPU_ENDADD(2, 8) },
438     {BSP_PRV_MASTER_MPU_STADD(2, 9),  BSP_PRV_MASTER_MPU_ENDADD(2, 9) },
439     {BSP_PRV_MASTER_MPU_STADD(2, 10), BSP_PRV_MASTER_MPU_ENDADD(2, 10)},
440     {BSP_PRV_MASTER_MPU_STADD(2, 11), BSP_PRV_MASTER_MPU_ENDADD(2, 11)},
441     {BSP_PRV_MASTER_MPU_STADD(2, 12), BSP_PRV_MASTER_MPU_ENDADD(2, 12)},
442     {BSP_PRV_MASTER_MPU_STADD(2, 13), BSP_PRV_MASTER_MPU_ENDADD(2, 13)},
443     {BSP_PRV_MASTER_MPU_STADD(2, 14), BSP_PRV_MASTER_MPU_ENDADD(2, 14)},
444     {BSP_PRV_MASTER_MPU_STADD(2, 15), BSP_PRV_MASTER_MPU_ENDADD(2, 15)},
445   #endif
446 };
447  #endif
448  #if (1 == BSP_FEATURE_BSP_MASTER_MPU3_SUPPORTED)
449 const uint32_t g_bsp_master_mpu3_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
450 {
451     {BSP_PRV_MASTER_MPU_STADD(3, 0),  BSP_PRV_MASTER_MPU_ENDADD(3, 0) },
452     {BSP_PRV_MASTER_MPU_STADD(3, 1),  BSP_PRV_MASTER_MPU_ENDADD(3, 1) },
453     {BSP_PRV_MASTER_MPU_STADD(3, 2),  BSP_PRV_MASTER_MPU_ENDADD(3, 2) },
454     {BSP_PRV_MASTER_MPU_STADD(3, 3),  BSP_PRV_MASTER_MPU_ENDADD(3, 3) },
455     {BSP_PRV_MASTER_MPU_STADD(3, 4),  BSP_PRV_MASTER_MPU_ENDADD(3, 4) },
456     {BSP_PRV_MASTER_MPU_STADD(3, 5),  BSP_PRV_MASTER_MPU_ENDADD(3, 5) },
457     {BSP_PRV_MASTER_MPU_STADD(3, 6),  BSP_PRV_MASTER_MPU_ENDADD(3, 6) },
458     {BSP_PRV_MASTER_MPU_STADD(3, 7),  BSP_PRV_MASTER_MPU_ENDADD(3, 7) },
459   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
460     {BSP_PRV_MASTER_MPU_STADD(3, 8),  BSP_PRV_MASTER_MPU_ENDADD(3, 8) },
461     {BSP_PRV_MASTER_MPU_STADD(3, 9),  BSP_PRV_MASTER_MPU_ENDADD(3, 9) },
462     {BSP_PRV_MASTER_MPU_STADD(3, 10), BSP_PRV_MASTER_MPU_ENDADD(3, 10)},
463     {BSP_PRV_MASTER_MPU_STADD(3, 11), BSP_PRV_MASTER_MPU_ENDADD(3, 11)},
464     {BSP_PRV_MASTER_MPU_STADD(3, 12), BSP_PRV_MASTER_MPU_ENDADD(3, 12)},
465     {BSP_PRV_MASTER_MPU_STADD(3, 13), BSP_PRV_MASTER_MPU_ENDADD(3, 13)},
466     {BSP_PRV_MASTER_MPU_STADD(3, 14), BSP_PRV_MASTER_MPU_ENDADD(3, 14)},
467     {BSP_PRV_MASTER_MPU_STADD(3, 15), BSP_PRV_MASTER_MPU_ENDADD(3, 15)},
468   #endif
469 };
470  #endif
471  #if (1 == BSP_FEATURE_BSP_MASTER_MPU4_SUPPORTED)
472 const uint32_t g_bsp_master_mpu4_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
473 {
474     {BSP_PRV_MASTER_MPU_STADD(4, 0),  BSP_PRV_MASTER_MPU_ENDADD(4, 0) },
475     {BSP_PRV_MASTER_MPU_STADD(4, 1),  BSP_PRV_MASTER_MPU_ENDADD(4, 1) },
476     {BSP_PRV_MASTER_MPU_STADD(4, 2),  BSP_PRV_MASTER_MPU_ENDADD(4, 2) },
477     {BSP_PRV_MASTER_MPU_STADD(4, 3),  BSP_PRV_MASTER_MPU_ENDADD(4, 3) },
478     {BSP_PRV_MASTER_MPU_STADD(4, 4),  BSP_PRV_MASTER_MPU_ENDADD(4, 4) },
479     {BSP_PRV_MASTER_MPU_STADD(4, 5),  BSP_PRV_MASTER_MPU_ENDADD(4, 5) },
480     {BSP_PRV_MASTER_MPU_STADD(4, 6),  BSP_PRV_MASTER_MPU_ENDADD(4, 6) },
481     {BSP_PRV_MASTER_MPU_STADD(4, 7),  BSP_PRV_MASTER_MPU_ENDADD(4, 7) },
482   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
483     {BSP_PRV_MASTER_MPU_STADD(4, 8),  BSP_PRV_MASTER_MPU_ENDADD(4, 8) },
484     {BSP_PRV_MASTER_MPU_STADD(4, 9),  BSP_PRV_MASTER_MPU_ENDADD(4, 9) },
485     {BSP_PRV_MASTER_MPU_STADD(4, 10), BSP_PRV_MASTER_MPU_ENDADD(4, 10)},
486     {BSP_PRV_MASTER_MPU_STADD(4, 11), BSP_PRV_MASTER_MPU_ENDADD(4, 11)},
487     {BSP_PRV_MASTER_MPU_STADD(4, 12), BSP_PRV_MASTER_MPU_ENDADD(4, 12)},
488     {BSP_PRV_MASTER_MPU_STADD(4, 13), BSP_PRV_MASTER_MPU_ENDADD(4, 13)},
489     {BSP_PRV_MASTER_MPU_STADD(4, 14), BSP_PRV_MASTER_MPU_ENDADD(4, 14)},
490     {BSP_PRV_MASTER_MPU_STADD(4, 15), BSP_PRV_MASTER_MPU_ENDADD(4, 15)},
491   #endif
492 };
493  #endif
494  #if (1 == BSP_FEATURE_BSP_MASTER_MPU5_SUPPORTED)
495 const uint32_t g_bsp_master_mpu5_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
496 {
497     {BSP_PRV_MASTER_MPU_STADD(5, 0),  BSP_PRV_MASTER_MPU_ENDADD(5, 0) },
498     {BSP_PRV_MASTER_MPU_STADD(5, 1),  BSP_PRV_MASTER_MPU_ENDADD(5, 1) },
499     {BSP_PRV_MASTER_MPU_STADD(5, 2),  BSP_PRV_MASTER_MPU_ENDADD(5, 2) },
500     {BSP_PRV_MASTER_MPU_STADD(5, 3),  BSP_PRV_MASTER_MPU_ENDADD(5, 3) },
501     {BSP_PRV_MASTER_MPU_STADD(5, 4),  BSP_PRV_MASTER_MPU_ENDADD(5, 4) },
502     {BSP_PRV_MASTER_MPU_STADD(5, 5),  BSP_PRV_MASTER_MPU_ENDADD(5, 5) },
503     {BSP_PRV_MASTER_MPU_STADD(5, 6),  BSP_PRV_MASTER_MPU_ENDADD(5, 6) },
504     {BSP_PRV_MASTER_MPU_STADD(5, 7),  BSP_PRV_MASTER_MPU_ENDADD(5, 7) },
505   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
506     {BSP_PRV_MASTER_MPU_STADD(5, 8),  BSP_PRV_MASTER_MPU_ENDADD(5, 8) },
507     {BSP_PRV_MASTER_MPU_STADD(5, 9),  BSP_PRV_MASTER_MPU_ENDADD(5, 9) },
508     {BSP_PRV_MASTER_MPU_STADD(5, 10), BSP_PRV_MASTER_MPU_ENDADD(5, 10)},
509     {BSP_PRV_MASTER_MPU_STADD(5, 11), BSP_PRV_MASTER_MPU_ENDADD(5, 11)},
510     {BSP_PRV_MASTER_MPU_STADD(5, 12), BSP_PRV_MASTER_MPU_ENDADD(5, 12)},
511     {BSP_PRV_MASTER_MPU_STADD(5, 13), BSP_PRV_MASTER_MPU_ENDADD(5, 13)},
512     {BSP_PRV_MASTER_MPU_STADD(5, 14), BSP_PRV_MASTER_MPU_ENDADD(5, 14)},
513     {BSP_PRV_MASTER_MPU_STADD(5, 15), BSP_PRV_MASTER_MPU_ENDADD(5, 15)},
514   #endif
515 };
516  #endif
517  #if (1 == BSP_FEATURE_BSP_MASTER_MPU6_SUPPORTED)
518 const uint32_t g_bsp_master_mpu6_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
519 {
520     {BSP_PRV_MASTER_MPU_STADD(6, 0),  BSP_PRV_MASTER_MPU_ENDADD(6, 0) },
521     {BSP_PRV_MASTER_MPU_STADD(6, 1),  BSP_PRV_MASTER_MPU_ENDADD(6, 1) },
522     {BSP_PRV_MASTER_MPU_STADD(6, 2),  BSP_PRV_MASTER_MPU_ENDADD(6, 2) },
523     {BSP_PRV_MASTER_MPU_STADD(6, 3),  BSP_PRV_MASTER_MPU_ENDADD(6, 3) },
524     {BSP_PRV_MASTER_MPU_STADD(6, 4),  BSP_PRV_MASTER_MPU_ENDADD(6, 4) },
525     {BSP_PRV_MASTER_MPU_STADD(6, 5),  BSP_PRV_MASTER_MPU_ENDADD(6, 5) },
526     {BSP_PRV_MASTER_MPU_STADD(6, 6),  BSP_PRV_MASTER_MPU_ENDADD(6, 6) },
527     {BSP_PRV_MASTER_MPU_STADD(6, 7),  BSP_PRV_MASTER_MPU_ENDADD(6, 7) },
528   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
529     {BSP_PRV_MASTER_MPU_STADD(6, 8),  BSP_PRV_MASTER_MPU_ENDADD(6, 8) },
530     {BSP_PRV_MASTER_MPU_STADD(6, 9),  BSP_PRV_MASTER_MPU_ENDADD(6, 9) },
531     {BSP_PRV_MASTER_MPU_STADD(6, 10), BSP_PRV_MASTER_MPU_ENDADD(6, 10)},
532     {BSP_PRV_MASTER_MPU_STADD(6, 11), BSP_PRV_MASTER_MPU_ENDADD(6, 11)},
533     {BSP_PRV_MASTER_MPU_STADD(6, 12), BSP_PRV_MASTER_MPU_ENDADD(6, 12)},
534     {BSP_PRV_MASTER_MPU_STADD(6, 13), BSP_PRV_MASTER_MPU_ENDADD(6, 13)},
535     {BSP_PRV_MASTER_MPU_STADD(6, 14), BSP_PRV_MASTER_MPU_ENDADD(6, 14)},
536     {BSP_PRV_MASTER_MPU_STADD(6, 15), BSP_PRV_MASTER_MPU_ENDADD(6, 15)},
537   #endif
538 };
539  #endif
540  #if (1 == BSP_FEATURE_BSP_MASTER_MPU7_SUPPORTED)
541 const uint32_t g_bsp_master_mpu7_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
542 {
543     {BSP_PRV_MASTER_MPU_STADD(7, 0),  BSP_PRV_MASTER_MPU_ENDADD(7, 0) },
544     {BSP_PRV_MASTER_MPU_STADD(7, 1),  BSP_PRV_MASTER_MPU_ENDADD(7, 1) },
545     {BSP_PRV_MASTER_MPU_STADD(7, 2),  BSP_PRV_MASTER_MPU_ENDADD(7, 2) },
546     {BSP_PRV_MASTER_MPU_STADD(7, 3),  BSP_PRV_MASTER_MPU_ENDADD(7, 3) },
547     {BSP_PRV_MASTER_MPU_STADD(7, 4),  BSP_PRV_MASTER_MPU_ENDADD(7, 4) },
548     {BSP_PRV_MASTER_MPU_STADD(7, 5),  BSP_PRV_MASTER_MPU_ENDADD(7, 5) },
549     {BSP_PRV_MASTER_MPU_STADD(7, 6),  BSP_PRV_MASTER_MPU_ENDADD(7, 6) },
550     {BSP_PRV_MASTER_MPU_STADD(7, 7),  BSP_PRV_MASTER_MPU_ENDADD(7, 7) },
551   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
552     {BSP_PRV_MASTER_MPU_STADD(7, 8),  BSP_PRV_MASTER_MPU_ENDADD(7, 8) },
553     {BSP_PRV_MASTER_MPU_STADD(7, 9),  BSP_PRV_MASTER_MPU_ENDADD(7, 9) },
554     {BSP_PRV_MASTER_MPU_STADD(7, 10), BSP_PRV_MASTER_MPU_ENDADD(7, 10)},
555     {BSP_PRV_MASTER_MPU_STADD(7, 11), BSP_PRV_MASTER_MPU_ENDADD(7, 11)},
556     {BSP_PRV_MASTER_MPU_STADD(7, 12), BSP_PRV_MASTER_MPU_ENDADD(7, 12)},
557     {BSP_PRV_MASTER_MPU_STADD(7, 13), BSP_PRV_MASTER_MPU_ENDADD(7, 13)},
558     {BSP_PRV_MASTER_MPU_STADD(7, 14), BSP_PRV_MASTER_MPU_ENDADD(7, 14)},
559     {BSP_PRV_MASTER_MPU_STADD(7, 15), BSP_PRV_MASTER_MPU_ENDADD(7, 15)},
560   #endif
561 };
562  #endif
563  #if (1 == BSP_FEATURE_BSP_MASTER_MPU8_SUPPORTED)
564 const uint32_t g_bsp_master_mpu8_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
565 {
566     {BSP_PRV_MASTER_MPU_STADD(8, 0),  BSP_PRV_MASTER_MPU_ENDADD(8, 0) },
567     {BSP_PRV_MASTER_MPU_STADD(8, 1),  BSP_PRV_MASTER_MPU_ENDADD(8, 1) },
568     {BSP_PRV_MASTER_MPU_STADD(8, 2),  BSP_PRV_MASTER_MPU_ENDADD(8, 2) },
569     {BSP_PRV_MASTER_MPU_STADD(8, 3),  BSP_PRV_MASTER_MPU_ENDADD(8, 3) },
570     {BSP_PRV_MASTER_MPU_STADD(8, 4),  BSP_PRV_MASTER_MPU_ENDADD(8, 4) },
571     {BSP_PRV_MASTER_MPU_STADD(8, 5),  BSP_PRV_MASTER_MPU_ENDADD(8, 5) },
572     {BSP_PRV_MASTER_MPU_STADD(8, 6),  BSP_PRV_MASTER_MPU_ENDADD(8, 6) },
573     {BSP_PRV_MASTER_MPU_STADD(8, 7),  BSP_PRV_MASTER_MPU_ENDADD(8, 7) },
574   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
575     {BSP_PRV_MASTER_MPU_STADD(8, 8),  BSP_PRV_MASTER_MPU_ENDADD(8, 8) },
576     {BSP_PRV_MASTER_MPU_STADD(8, 9),  BSP_PRV_MASTER_MPU_ENDADD(8, 9) },
577     {BSP_PRV_MASTER_MPU_STADD(8, 10), BSP_PRV_MASTER_MPU_ENDADD(8, 10)},
578     {BSP_PRV_MASTER_MPU_STADD(8, 11), BSP_PRV_MASTER_MPU_ENDADD(8, 11)},
579     {BSP_PRV_MASTER_MPU_STADD(8, 12), BSP_PRV_MASTER_MPU_ENDADD(8, 12)},
580     {BSP_PRV_MASTER_MPU_STADD(8, 13), BSP_PRV_MASTER_MPU_ENDADD(8, 13)},
581     {BSP_PRV_MASTER_MPU_STADD(8, 14), BSP_PRV_MASTER_MPU_ENDADD(8, 14)},
582     {BSP_PRV_MASTER_MPU_STADD(8, 15), BSP_PRV_MASTER_MPU_ENDADD(8, 15)},
583   #endif
584 };
585  #endif
586  #if (1 == BSP_FEATURE_BSP_MASTER_MPU9_SUPPORTED)
587 const uint32_t g_bsp_master_mpu9_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
588 {
589     {BSP_PRV_MASTER_MPU_STADD(9, 0),  BSP_PRV_MASTER_MPU_ENDADD(9, 0) },
590     {BSP_PRV_MASTER_MPU_STADD(9, 1),  BSP_PRV_MASTER_MPU_ENDADD(9, 1) },
591     {BSP_PRV_MASTER_MPU_STADD(9, 2),  BSP_PRV_MASTER_MPU_ENDADD(9, 2) },
592     {BSP_PRV_MASTER_MPU_STADD(9, 3),  BSP_PRV_MASTER_MPU_ENDADD(9, 3) },
593     {BSP_PRV_MASTER_MPU_STADD(9, 4),  BSP_PRV_MASTER_MPU_ENDADD(9, 4) },
594     {BSP_PRV_MASTER_MPU_STADD(9, 5),  BSP_PRV_MASTER_MPU_ENDADD(9, 5) },
595     {BSP_PRV_MASTER_MPU_STADD(9, 6),  BSP_PRV_MASTER_MPU_ENDADD(9, 6) },
596     {BSP_PRV_MASTER_MPU_STADD(9, 7),  BSP_PRV_MASTER_MPU_ENDADD(9, 7) },
597   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
598     {BSP_PRV_MASTER_MPU_STADD(9, 8),  BSP_PRV_MASTER_MPU_ENDADD(9, 8) },
599     {BSP_PRV_MASTER_MPU_STADD(9, 9),  BSP_PRV_MASTER_MPU_ENDADD(9, 9) },
600     {BSP_PRV_MASTER_MPU_STADD(9, 10), BSP_PRV_MASTER_MPU_ENDADD(9, 10)},
601     {BSP_PRV_MASTER_MPU_STADD(9, 11), BSP_PRV_MASTER_MPU_ENDADD(9, 11)},
602     {BSP_PRV_MASTER_MPU_STADD(9, 12), BSP_PRV_MASTER_MPU_ENDADD(9, 12)},
603     {BSP_PRV_MASTER_MPU_STADD(9, 13), BSP_PRV_MASTER_MPU_ENDADD(9, 13)},
604     {BSP_PRV_MASTER_MPU_STADD(9, 14), BSP_PRV_MASTER_MPU_ENDADD(9, 14)},
605     {BSP_PRV_MASTER_MPU_STADD(9, 15), BSP_PRV_MASTER_MPU_ENDADD(9, 15)},
606   #endif
607 };
608  #endif
609  #if (1 == BSP_FEATURE_BSP_MASTER_MPU10_SUPPORTED)
610 const uint32_t g_bsp_master_mpu10_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
611 {
612     {BSP_PRV_MASTER_MPU_STADD(10, 0),  BSP_PRV_MASTER_MPU_ENDADD(10, 0) },
613     {BSP_PRV_MASTER_MPU_STADD(10, 1),  BSP_PRV_MASTER_MPU_ENDADD(10, 1) },
614     {BSP_PRV_MASTER_MPU_STADD(10, 2),  BSP_PRV_MASTER_MPU_ENDADD(10, 2) },
615     {BSP_PRV_MASTER_MPU_STADD(10, 3),  BSP_PRV_MASTER_MPU_ENDADD(10, 3) },
616     {BSP_PRV_MASTER_MPU_STADD(10, 4),  BSP_PRV_MASTER_MPU_ENDADD(10, 4) },
617     {BSP_PRV_MASTER_MPU_STADD(10, 5),  BSP_PRV_MASTER_MPU_ENDADD(10, 5) },
618     {BSP_PRV_MASTER_MPU_STADD(10, 6),  BSP_PRV_MASTER_MPU_ENDADD(10, 6) },
619     {BSP_PRV_MASTER_MPU_STADD(10, 7),  BSP_PRV_MASTER_MPU_ENDADD(10, 7) },
620   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
621     {BSP_PRV_MASTER_MPU_STADD(10, 8),  BSP_PRV_MASTER_MPU_ENDADD(10, 8) },
622     {BSP_PRV_MASTER_MPU_STADD(10, 9),  BSP_PRV_MASTER_MPU_ENDADD(10, 9) },
623     {BSP_PRV_MASTER_MPU_STADD(10, 10), BSP_PRV_MASTER_MPU_ENDADD(10, 10)},
624     {BSP_PRV_MASTER_MPU_STADD(10, 11), BSP_PRV_MASTER_MPU_ENDADD(10, 11)},
625     {BSP_PRV_MASTER_MPU_STADD(10, 12), BSP_PRV_MASTER_MPU_ENDADD(10, 12)},
626     {BSP_PRV_MASTER_MPU_STADD(10, 13), BSP_PRV_MASTER_MPU_ENDADD(10, 13)},
627     {BSP_PRV_MASTER_MPU_STADD(10, 14), BSP_PRV_MASTER_MPU_ENDADD(10, 14)},
628     {BSP_PRV_MASTER_MPU_STADD(10, 15), BSP_PRV_MASTER_MPU_ENDADD(10, 15)},
629   #endif
630 };
631  #endif
632  #if (1 == BSP_FEATURE_BSP_MASTER_MPU11_SUPPORTED)
633 const uint32_t g_bsp_master_mpu11_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
634 {
635     {BSP_PRV_MASTER_MPU_STADD(11, 0),  BSP_PRV_MASTER_MPU_ENDADD(11, 0) },
636     {BSP_PRV_MASTER_MPU_STADD(11, 1),  BSP_PRV_MASTER_MPU_ENDADD(11, 1) },
637     {BSP_PRV_MASTER_MPU_STADD(11, 2),  BSP_PRV_MASTER_MPU_ENDADD(11, 2) },
638     {BSP_PRV_MASTER_MPU_STADD(11, 3),  BSP_PRV_MASTER_MPU_ENDADD(11, 3) },
639     {BSP_PRV_MASTER_MPU_STADD(11, 4),  BSP_PRV_MASTER_MPU_ENDADD(11, 4) },
640     {BSP_PRV_MASTER_MPU_STADD(11, 5),  BSP_PRV_MASTER_MPU_ENDADD(11, 5) },
641     {BSP_PRV_MASTER_MPU_STADD(11, 6),  BSP_PRV_MASTER_MPU_ENDADD(11, 6) },
642     {BSP_PRV_MASTER_MPU_STADD(11, 7),  BSP_PRV_MASTER_MPU_ENDADD(11, 7) },
643   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
644     {BSP_PRV_MASTER_MPU_STADD(11, 8),  BSP_PRV_MASTER_MPU_ENDADD(11, 8) },
645     {BSP_PRV_MASTER_MPU_STADD(11, 9),  BSP_PRV_MASTER_MPU_ENDADD(11, 9) },
646     {BSP_PRV_MASTER_MPU_STADD(11, 10), BSP_PRV_MASTER_MPU_ENDADD(11, 10)},
647     {BSP_PRV_MASTER_MPU_STADD(11, 11), BSP_PRV_MASTER_MPU_ENDADD(11, 11)},
648     {BSP_PRV_MASTER_MPU_STADD(11, 12), BSP_PRV_MASTER_MPU_ENDADD(11, 12)},
649     {BSP_PRV_MASTER_MPU_STADD(11, 13), BSP_PRV_MASTER_MPU_ENDADD(11, 13)},
650     {BSP_PRV_MASTER_MPU_STADD(11, 14), BSP_PRV_MASTER_MPU_ENDADD(11, 14)},
651     {BSP_PRV_MASTER_MPU_STADD(11, 15), BSP_PRV_MASTER_MPU_ENDADD(11, 15)},
652   #endif
653 };
654  #endif
655  #if (1 == BSP_FEATURE_BSP_MASTER_MPU12_SUPPORTED)
656 const uint32_t g_bsp_master_mpu12_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
657 {
658     {BSP_PRV_MASTER_MPU_STADD(12, 0),  BSP_PRV_MASTER_MPU_ENDADD(12, 0) },
659     {BSP_PRV_MASTER_MPU_STADD(12, 1),  BSP_PRV_MASTER_MPU_ENDADD(12, 1) },
660     {BSP_PRV_MASTER_MPU_STADD(12, 2),  BSP_PRV_MASTER_MPU_ENDADD(12, 2) },
661     {BSP_PRV_MASTER_MPU_STADD(12, 3),  BSP_PRV_MASTER_MPU_ENDADD(12, 3) },
662     {BSP_PRV_MASTER_MPU_STADD(12, 4),  BSP_PRV_MASTER_MPU_ENDADD(12, 4) },
663     {BSP_PRV_MASTER_MPU_STADD(12, 5),  BSP_PRV_MASTER_MPU_ENDADD(12, 5) },
664     {BSP_PRV_MASTER_MPU_STADD(12, 6),  BSP_PRV_MASTER_MPU_ENDADD(12, 6) },
665     {BSP_PRV_MASTER_MPU_STADD(12, 7),  BSP_PRV_MASTER_MPU_ENDADD(12, 7) },
666   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
667     {BSP_PRV_MASTER_MPU_STADD(12, 8),  BSP_PRV_MASTER_MPU_ENDADD(12, 8) },
668     {BSP_PRV_MASTER_MPU_STADD(12, 9),  BSP_PRV_MASTER_MPU_ENDADD(12, 9) },
669     {BSP_PRV_MASTER_MPU_STADD(12, 10), BSP_PRV_MASTER_MPU_ENDADD(12, 10)},
670     {BSP_PRV_MASTER_MPU_STADD(12, 11), BSP_PRV_MASTER_MPU_ENDADD(12, 11)},
671     {BSP_PRV_MASTER_MPU_STADD(12, 12), BSP_PRV_MASTER_MPU_ENDADD(12, 12)},
672     {BSP_PRV_MASTER_MPU_STADD(12, 13), BSP_PRV_MASTER_MPU_ENDADD(12, 13)},
673     {BSP_PRV_MASTER_MPU_STADD(12, 14), BSP_PRV_MASTER_MPU_ENDADD(12, 14)},
674     {BSP_PRV_MASTER_MPU_STADD(12, 15), BSP_PRV_MASTER_MPU_ENDADD(12, 15)},
675   #endif
676 };
677  #endif
678  #if (1 == BSP_FEATURE_BSP_MASTER_MPU13_SUPPORTED)
679 const uint32_t g_bsp_master_mpu13_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
680 {
681     {BSP_PRV_MASTER_MPU_STADD(13, 0),  BSP_PRV_MASTER_MPU_ENDADD(13, 0) },
682     {BSP_PRV_MASTER_MPU_STADD(13, 1),  BSP_PRV_MASTER_MPU_ENDADD(13, 1) },
683     {BSP_PRV_MASTER_MPU_STADD(13, 2),  BSP_PRV_MASTER_MPU_ENDADD(13, 2) },
684     {BSP_PRV_MASTER_MPU_STADD(13, 3),  BSP_PRV_MASTER_MPU_ENDADD(13, 3) },
685     {BSP_PRV_MASTER_MPU_STADD(13, 4),  BSP_PRV_MASTER_MPU_ENDADD(13, 4) },
686     {BSP_PRV_MASTER_MPU_STADD(13, 5),  BSP_PRV_MASTER_MPU_ENDADD(13, 5) },
687     {BSP_PRV_MASTER_MPU_STADD(13, 6),  BSP_PRV_MASTER_MPU_ENDADD(13, 6) },
688     {BSP_PRV_MASTER_MPU_STADD(13, 7),  BSP_PRV_MASTER_MPU_ENDADD(13, 7) },
689   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
690     {BSP_PRV_MASTER_MPU_STADD(13, 8),  BSP_PRV_MASTER_MPU_ENDADD(13, 8) },
691     {BSP_PRV_MASTER_MPU_STADD(13, 9),  BSP_PRV_MASTER_MPU_ENDADD(13, 9) },
692     {BSP_PRV_MASTER_MPU_STADD(13, 10), BSP_PRV_MASTER_MPU_ENDADD(13, 10)},
693     {BSP_PRV_MASTER_MPU_STADD(13, 11), BSP_PRV_MASTER_MPU_ENDADD(13, 11)},
694     {BSP_PRV_MASTER_MPU_STADD(13, 12), BSP_PRV_MASTER_MPU_ENDADD(13, 12)},
695     {BSP_PRV_MASTER_MPU_STADD(13, 13), BSP_PRV_MASTER_MPU_ENDADD(13, 13)},
696     {BSP_PRV_MASTER_MPU_STADD(13, 14), BSP_PRV_MASTER_MPU_ENDADD(13, 14)},
697     {BSP_PRV_MASTER_MPU_STADD(13, 15), BSP_PRV_MASTER_MPU_ENDADD(13, 15)},
698   #endif
699 };
700  #endif
701  #if (1 == BSP_FEATURE_BSP_MASTER_MPU14_SUPPORTED)
702 const uint32_t g_bsp_master_mpu14_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
703 {
704     {BSP_PRV_MASTER_MPU_STADD(14, 0),  BSP_PRV_MASTER_MPU_ENDADD(14, 0) },
705     {BSP_PRV_MASTER_MPU_STADD(14, 1),  BSP_PRV_MASTER_MPU_ENDADD(14, 1) },
706     {BSP_PRV_MASTER_MPU_STADD(14, 2),  BSP_PRV_MASTER_MPU_ENDADD(14, 2) },
707     {BSP_PRV_MASTER_MPU_STADD(14, 3),  BSP_PRV_MASTER_MPU_ENDADD(14, 3) },
708     {BSP_PRV_MASTER_MPU_STADD(14, 4),  BSP_PRV_MASTER_MPU_ENDADD(14, 4) },
709     {BSP_PRV_MASTER_MPU_STADD(14, 5),  BSP_PRV_MASTER_MPU_ENDADD(14, 5) },
710     {BSP_PRV_MASTER_MPU_STADD(14, 6),  BSP_PRV_MASTER_MPU_ENDADD(14, 6) },
711     {BSP_PRV_MASTER_MPU_STADD(14, 7),  BSP_PRV_MASTER_MPU_ENDADD(14, 7) },
712   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
713     {BSP_PRV_MASTER_MPU_STADD(14, 8),  BSP_PRV_MASTER_MPU_ENDADD(14, 8) },
714     {BSP_PRV_MASTER_MPU_STADD(14, 9),  BSP_PRV_MASTER_MPU_ENDADD(14, 9) },
715     {BSP_PRV_MASTER_MPU_STADD(14, 10), BSP_PRV_MASTER_MPU_ENDADD(14, 10)},
716     {BSP_PRV_MASTER_MPU_STADD(14, 11), BSP_PRV_MASTER_MPU_ENDADD(14, 11)},
717     {BSP_PRV_MASTER_MPU_STADD(14, 12), BSP_PRV_MASTER_MPU_ENDADD(14, 12)},
718     {BSP_PRV_MASTER_MPU_STADD(14, 13), BSP_PRV_MASTER_MPU_ENDADD(14, 13)},
719     {BSP_PRV_MASTER_MPU_STADD(14, 14), BSP_PRV_MASTER_MPU_ENDADD(14, 14)},
720     {BSP_PRV_MASTER_MPU_STADD(14, 15), BSP_PRV_MASTER_MPU_ENDADD(14, 15)},
721   #endif
722 };
723  #endif
724  #if (1 == BSP_FEATURE_BSP_MASTER_MPU15_SUPPORTED)
725 const uint32_t g_bsp_master_mpu15_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] =
726 {
727     {BSP_PRV_MASTER_MPU_STADD(15, 0),  BSP_PRV_MASTER_MPU_ENDADD(15, 0) },
728     {BSP_PRV_MASTER_MPU_STADD(15, 1),  BSP_PRV_MASTER_MPU_ENDADD(15, 1) },
729     {BSP_PRV_MASTER_MPU_STADD(15, 2),  BSP_PRV_MASTER_MPU_ENDADD(15, 2) },
730     {BSP_PRV_MASTER_MPU_STADD(15, 3),  BSP_PRV_MASTER_MPU_ENDADD(15, 3) },
731     {BSP_PRV_MASTER_MPU_STADD(15, 4),  BSP_PRV_MASTER_MPU_ENDADD(15, 4) },
732     {BSP_PRV_MASTER_MPU_STADD(15, 5),  BSP_PRV_MASTER_MPU_ENDADD(15, 5) },
733     {BSP_PRV_MASTER_MPU_STADD(15, 6),  BSP_PRV_MASTER_MPU_ENDADD(15, 6) },
734     {BSP_PRV_MASTER_MPU_STADD(15, 7),  BSP_PRV_MASTER_MPU_ENDADD(15, 7) },
735   #if (2 == BSP_FEATURE_BSP_MASTER_MPU_REGION_TYPE)
736     {BSP_PRV_MASTER_MPU_STADD(15, 8),  BSP_PRV_MASTER_MPU_ENDADD(15, 8) },
737     {BSP_PRV_MASTER_MPU_STADD(15, 9),  BSP_PRV_MASTER_MPU_ENDADD(15, 9) },
738     {BSP_PRV_MASTER_MPU_STADD(15, 10), BSP_PRV_MASTER_MPU_ENDADD(15, 10)},
739     {BSP_PRV_MASTER_MPU_STADD(15, 11), BSP_PRV_MASTER_MPU_ENDADD(15, 11)},
740     {BSP_PRV_MASTER_MPU_STADD(15, 12), BSP_PRV_MASTER_MPU_ENDADD(15, 12)},
741     {BSP_PRV_MASTER_MPU_STADD(15, 13), BSP_PRV_MASTER_MPU_ENDADD(15, 13)},
742     {BSP_PRV_MASTER_MPU_STADD(15, 14), BSP_PRV_MASTER_MPU_ENDADD(15, 14)},
743     {BSP_PRV_MASTER_MPU_STADD(15, 15), BSP_PRV_MASTER_MPU_ENDADD(15, 15)},
744   #endif
745 };
746  #endif
747 #endif
748 
749 #if (1U < BSP_FEATURE_BSP_CR52_CORE_NUM) || (1U < BSP_FEATURE_BSP_CA55_CORE_NUM)
750  #if !(BSP_CFG_RAM_EXECUTION)
751   #if (1 != _RZN_ORDINAL)
752 uint32_t g_bsp_image_info_cpu BSP_PLACE_IN_SECTION(".image_info") = BSP_PRV_IMAGE_INFO_CPU;
753 
754   #endif
755  #endif
756 
757  #if defined(__ICCARM__)
758   #if (1 == _RZN_ORDINAL)
759    #if defined(BSP_CFG_CORE_CR52)
760 BSP_DONT_REMOVE const void * __ddsc_ATCM_END BSP_PLACE_IN_SECTION(".ddsc_atcm_end");
761 BSP_DONT_REMOVE const void * __ddsc_BTCM_END BSP_PLACE_IN_SECTION(".ddsc_btcm_end");
762 
763    #else
764 BSP_DONT_REMOVE const void * __ddsc_SYSTEM_RAM_END BSP_PLACE_IN_SECTION(".ddsc_system_ram_end");
765 
766    #endif
767 
768    #if BSP_CFG_XSPI0_X1_BOOT || BSP_CFG_XSPI0_X8_BOOT
769 BSP_DONT_REMOVE const void * __ddsc_xSPI0_CS0_SPACE_END BSP_PLACE_IN_SECTION(".ddsc_xspi0_cs0_space_end");
770 
771    #elif BSP_CFG_XSPI1_X1_BOOT
772 BSP_DONT_REMOVE const void * __ddsc_xSPI1_CS0_SPACE_END BSP_PLACE_IN_SECTION(".ddsc_xspi1_cs0_space_end");
773 
774    #elif BSP_CFG_16BIT_NOR_BOOT || BSP_CFG_32BIT_NOR_BOOT
775 BSP_DONT_REMOVE const void * __ddsc_CS0_SPACE_END BSP_PLACE_IN_SECTION(".ddsc_cs0_space_end");
776 
777    #endif
778 
779   #else
780 BSP_DONT_REMOVE const void * __ddsc_SYSTEM_RAM_END BSP_PLACE_IN_SECTION(".ddsc_system_ram_end");
781 
782   #endif
783  #endif
784 #endif
785 
786 #if defined(__ICCARM__)
787 
788 void R_BSP_WarmStart(bsp_warm_start_event_t event);
789 
790  #pragma weak R_BSP_WarmStart
791 
792 #elif defined(__GNUC__) || defined(__ARMCC_VERSION)
793 
794 void R_BSP_WarmStart(bsp_warm_start_event_t event) __attribute__((weak));
795 
796 #endif
797 
798 #if BSP_CFG_C_RUNTIME_INIT
799 void bsp_loader_data_init(void);
800 void bsp_loader_bss_init(void);
801 void bsp_static_constructor_init(void);
802 
803 #endif
804 
805 void bsp_copy_multibyte(uintptr_t * src, uintptr_t * dst, uintptr_t bytesize);
806 void bsp_bss_init_multibyte(uintptr_t * src, uintptr_t bytesize);
807 
808 #if !(BSP_CFG_RAM_EXECUTION)
809 void bsp_application_bss_init(void);
810 void bsp_copy_to_ram(void);
811 
812  #if (1U < BSP_FEATURE_BSP_CR52_CORE_NUM) || (1U < BSP_FEATURE_BSP_CA55_CORE_NUM)
813 void bsp_cpu_reset_release(void);
814 
815  #endif
816 #endif
817 
818 #if (1 == _RZN_ORDINAL)
819 void bsp_master_mpu_init(void);
820 void bsp_global_system_counter_init(void);
821 
822 #endif
823 
824 #if defined(BSP_CFG_CORE_CR52)
825  #if (BSP_FEATURE_TFU_SUPPORTED & BSP_CFG_USE_TFU_MATHLIB)
826 void bsp_tfu_init(void);
827 
828  #endif
829 #endif
830 
831 #if !BSP_CFG_PORT_PROTECT
832 void bsp_release_port_protect(void);
833 
834 #endif
835 
836 #if (1 == _RZN_ORDINAL)
837 
838 /*******************************************************************************************************************//**
839  * Initialize the Master-MPU settings.
840  **********************************************************************************************************************/
bsp_master_mpu_init(void)841 void bsp_master_mpu_init (void)
842 {
843     /* Disable register protection for Master-MPU related registers. */
844     R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_SYSTEM);
845 
846     for (uint8_t region_num = 0; region_num < BSP_PRV_MASTER_MPU_REGION_NUM; region_num++)
847     {
848  #if (1 == BSP_FEATURE_BSP_MASTER_MPU0_SUPPORTED)
849         R_MPU0->RGN[region_num].STADD  = g_bsp_master_mpu0_cfg[region_num][0];
850         R_MPU0->RGN[region_num].ENDADD = g_bsp_master_mpu0_cfg[region_num][1];
851  #endif
852  #if (1 == BSP_FEATURE_BSP_MASTER_MPU1_SUPPORTED)
853         R_MPU1->RGN[region_num].STADD  = g_bsp_master_mpu1_cfg[region_num][0];
854         R_MPU1->RGN[region_num].ENDADD = g_bsp_master_mpu1_cfg[region_num][1];
855  #endif
856  #if (1 == BSP_FEATURE_BSP_MASTER_MPU2_SUPPORTED)
857         R_MPU2->RGN[region_num].STADD  = g_bsp_master_mpu2_cfg[region_num][0];
858         R_MPU2->RGN[region_num].ENDADD = g_bsp_master_mpu2_cfg[region_num][1];
859  #endif
860  #if (1 == BSP_FEATURE_BSP_MASTER_MPU3_SUPPORTED)
861         R_MPU3->RGN[region_num].STADD  = g_bsp_master_mpu3_cfg[region_num][0];
862         R_MPU3->RGN[region_num].ENDADD = g_bsp_master_mpu3_cfg[region_num][1];
863  #endif
864  #if (1 == BSP_FEATURE_BSP_MASTER_MPU4_SUPPORTED)
865         R_MPU4->RGN[region_num].STADD  = g_bsp_master_mpu4_cfg[region_num][0];
866         R_MPU4->RGN[region_num].ENDADD = g_bsp_master_mpu4_cfg[region_num][1];
867  #endif
868  #if (1 == BSP_FEATURE_BSP_MASTER_MPU5_SUPPORTED)
869         R_MPU5->RGN[region_num].STADD  = g_bsp_master_mpu5_cfg[region_num][0];
870         R_MPU5->RGN[region_num].ENDADD = g_bsp_master_mpu5_cfg[region_num][1];
871  #endif
872  #if (1 == BSP_FEATURE_BSP_MASTER_MPU6_SUPPORTED)
873         R_MPU6->RGN[region_num].STADD  = g_bsp_master_mpu6_cfg[region_num][0];
874         R_MPU6->RGN[region_num].ENDADD = g_bsp_master_mpu6_cfg[region_num][1];
875  #endif
876  #if (1 == BSP_FEATURE_BSP_MASTER_MPU7_SUPPORTED)
877         R_MPU7->RGN[region_num].STADD  = g_bsp_master_mpu7_cfg[region_num][0];
878         R_MPU7->RGN[region_num].ENDADD = g_bsp_master_mpu7_cfg[region_num][1];
879  #endif
880  #if (1 == BSP_FEATURE_BSP_MASTER_MPU8_SUPPORTED)
881         R_MPU8->RGN[region_num].STADD  = g_bsp_master_mpu8_cfg[region_num][0];
882         R_MPU8->RGN[region_num].ENDADD = g_bsp_master_mpu8_cfg[region_num][1];
883  #endif
884  #if (1 == BSP_FEATURE_BSP_MASTER_MPU9_SUPPORTED)
885         R_MPU9->RGN[region_num].STADD  = g_bsp_master_mpu9_cfg[region_num][0];
886         R_MPU9->RGN[region_num].ENDADD = g_bsp_master_mpu9_cfg[region_num][1];
887  #endif
888  #if (1 == BSP_FEATURE_BSP_MASTER_MPU10_SUPPORTED)
889         R_MPU10->RGN[region_num].STADD  = g_bsp_master_mpu10_cfg[region_num][0];
890         R_MPU10->RGN[region_num].ENDADD = g_bsp_master_mpu10_cfg[region_num][1];
891  #endif
892  #if (1 == BSP_FEATURE_BSP_MASTER_MPU11_SUPPORTED)
893         R_MPU11->RGN[region_num].STADD  = g_bsp_master_mpu11_cfg[region_num][0];
894         R_MPU11->RGN[region_num].ENDADD = g_bsp_master_mpu11_cfg[region_num][1];
895  #endif
896  #if (1 == BSP_FEATURE_BSP_MASTER_MPU12_SUPPORTED)
897         R_MPU12->RGN[region_num].STADD  = g_bsp_master_mpu12_cfg[region_num][0];
898         R_MPU12->RGN[region_num].ENDADD = g_bsp_master_mpu12_cfg[region_num][1];
899  #endif
900  #if (1 == BSP_FEATURE_BSP_MASTER_MPU13_SUPPORTED)
901         R_MPU13->RGN[region_num].STADD  = g_bsp_master_mpu13_cfg[region_num][0];
902         R_MPU13->RGN[region_num].ENDADD = g_bsp_master_mpu13_cfg[region_num][1];
903  #endif
904  #if (1 == BSP_FEATURE_BSP_MASTER_MPU14_SUPPORTED)
905         R_MPU14->RGN[region_num].STADD  = g_bsp_master_mpu14_cfg[region_num][0];
906         R_MPU14->RGN[region_num].ENDADD = g_bsp_master_mpu14_cfg[region_num][1];
907  #endif
908  #if (1 == BSP_FEATURE_BSP_MASTER_MPU15_SUPPORTED)
909         R_MPU15->RGN[region_num].STADD  = g_bsp_master_mpu15_cfg[region_num][0];
910         R_MPU15->RGN[region_num].ENDADD = g_bsp_master_mpu15_cfg[region_num][1];
911  #endif
912     }
913 
914     /* Enable register protection for Master-MPU related registers. */
915     R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_SYSTEM);
916 }
917 
918 /*******************************************************************************************************************//**
919  * Initialize global system counter. The counter is enabled and is incrementing.
920  **********************************************************************************************************************/
bsp_global_system_counter_init(void)921 void bsp_global_system_counter_init (void)
922 {
923     /* Initialize registers related the global system counter. */
924     R_GSC->CNTCR  &= (uint32_t) (~R_GSC_CNTCR_EN_Msk);
925     R_GSC->CNTFID0 = BSP_GLOBAL_SYSTEM_COUNTER_CLOCK_HZ;
926     R_GSC->CNTCVL  = 0;
927     R_GSC->CNTCVU  = 0;
928     R_GSC->CNTCR  |= R_GSC_CNTCR_EN_Msk;
929 }
930 
931 #endif
932 
933 /*******************************************************************************************************************//**
934  * @addtogroup BSP_MCU
935  * @{
936  **********************************************************************************************************************/
937 
938 /*******************************************************************************************************************//**
939  * This function is called at various points during the startup process.
940  * This function is declared as a weak symbol higher up in this file because it is meant to be overridden by a user
941  * implemented version. One of the main uses for this function is to call functional safety code during the startup
942  * process. To use this function just copy this function into your own code and modify it to meet your needs.
943  *
944  * @param[in]  event    Where the code currently is in the start up process
945  *
946  * @note All programs that are executed when a BSP_WARM_START_RESET, or BSP_WARM_START_POST_CLOCK event occurs
947  *       must be placed in the LOADER section(BTCM for CR52 core, SystemRAM for CA55 core).
948  *       These events occur before the copy of the application program in the startup code is executed,
949  *       so the application program is on ROM and cannot be executed at that time.
950  *       The FSP linker script specifies that the .warm_start section be placed in the LOADER section.
951  *       Adding a section specification to the definition of a function or
952  *       variable makes it easier to place it in the LOADER section.
953  **********************************************************************************************************************/
R_BSP_WarmStart(bsp_warm_start_event_t event)954 void R_BSP_WarmStart (bsp_warm_start_event_t event)
955 {
956     if (BSP_WARM_START_RESET == event)
957     {
958         /* C runtime environment has not been setup so you cannot use globals. System clocks are not setup. */
959     }
960 
961     if (BSP_WARM_START_POST_CLOCK == event)
962     {
963         /* C runtime environment has not been setup so you cannot use globals. Clocks have been initialized. */
964     }
965     else if (BSP_WARM_START_POST_C == event)
966     {
967         /* C runtime environment, system clocks, and pins are all setup. */
968     }
969     else
970     {
971         /* Do nothing */
972     }
973 }
974 
975 /** @} (end addtogroup BSP_MCU) */
976 
977 #if BSP_CFG_C_RUNTIME_INIT
978 
979 /*******************************************************************************************************************//**
980  * Copy the loader data block from external Flash to internal RAM.
981  **********************************************************************************************************************/
bsp_loader_data_init(void)982 void bsp_loader_data_init (void)
983 {
984  #if (1 == _RZN_ORDINAL) && !(BSP_CFG_RAM_EXECUTION)
985 
986     /* Define destination/source address pointer and block size */
987     uintptr_t * src;
988     uintptr_t * dst;
989     uintptr_t   size;
990 
991     /* Copy loader data block */
992     src  = (uintptr_t *) BSP_PRV_SECTION_LDR_DATA_ROM_ADDRESS;
993     dst  = (uintptr_t *) BSP_PRV_SECTION_LDR_DATA_RAM_START;
994     size = (uintptr_t) BSP_PRV_SECTION_LDR_DATA_RAM_END - (uintptr_t) BSP_PRV_SECTION_LDR_DATA_RAM_START;
995     bsp_copy_multibyte(src, dst, size);
996  #endif
997 }
998 
999 /*******************************************************************************************************************//**
1000  * Clear the loader bss block in internal RAM.
1001  **********************************************************************************************************************/
bsp_loader_bss_init(void)1002 void bsp_loader_bss_init (void)
1003 {
1004     /* Define source address pointer and block size */
1005     uintptr_t * src;
1006     uintptr_t   size;
1007 
1008     /* Clear loader bss block. */
1009     src  = (uintptr_t *) BSP_PRV_SECTION_LDR_DATA_BSS_START;
1010     size = (uintptr_t) BSP_PRV_SECTION_LDR_DATA_BSS_END - (uintptr_t) BSP_PRV_SECTION_LDR_DATA_BSS_START;
1011     bsp_bss_init_multibyte(src, size);
1012 
1013  #if BSP_CFG_RAM_EXECUTION
1014   #if defined(__ICCARM__)
1015 
1016     /* Initialize the application data and clear the application bss.
1017      * This code is for RAM Execution. If you want to boot with ROM,
1018      * enable app_copy and app_bss_init, and disable this code.
1019      * Also need to change icf file. */
1020     __iar_data_init3();
1021   #elif defined(__GNUC__)
1022 
1023     /* Clear application bss block. */
1024     src  = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_BSS_START;
1025     size = (uintptr_t) BSP_PRV_SECTION_USER_DATA_BSS_END - (uintptr_t) BSP_PRV_SECTION_USER_DATA_BSS_START;
1026     bsp_bss_init_multibyte(src, size);
1027   #endif
1028  #endif
1029 }
1030 
1031 #endif
1032 
1033 /*******************************************************************************************************************//**
1034  * Copy the memory block from Source address to Destination address by the multi byte unit.
1035  **********************************************************************************************************************/
bsp_copy_multibyte(uintptr_t * src,uintptr_t * dst,uintptr_t bytesize)1036 void bsp_copy_multibyte (uintptr_t * src, uintptr_t * dst, uintptr_t bytesize)
1037 {
1038     uintptr_t i;
1039     uintptr_t cnt;
1040 
1041     uintptr_t bytesize_mod;
1042     uint8_t * src_single_byte;
1043     uint8_t * dst_single_byte;
1044 
1045     if (0 != bytesize)
1046     {
1047         /* Copy Count in multi byte unit */
1048         cnt = bytesize / sizeof(uintptr_t);
1049 
1050         for (i = 0; i < cnt; i++)
1051         {
1052             *dst++ = *src++;
1053         }
1054 
1055         /* Copy Count in single byte unit */
1056         bytesize_mod = bytesize % sizeof(uintptr_t);
1057 
1058         if (0 != bytesize_mod)
1059         {
1060             src_single_byte = (uint8_t *) src;
1061             dst_single_byte = (uint8_t *) dst;
1062 
1063             for (i = 0; i < bytesize_mod; i++)
1064             {
1065                 *dst_single_byte++ = *src_single_byte++;
1066             }
1067         }
1068         else
1069         {
1070             /* Do nothing */
1071         }
1072 
1073         /* Ensuring data-changing */
1074         __asm volatile ("DSB SY");
1075     }
1076     else
1077     {
1078         /* Do nothing */
1079     }
1080 }
1081 
1082 /*******************************************************************************************************************//**
1083  * Clear the bss block by the multi byte unit.
1084  **********************************************************************************************************************/
bsp_bss_init_multibyte(uintptr_t * src,uintptr_t bytesize)1085 void bsp_bss_init_multibyte (uintptr_t * src, uintptr_t bytesize)
1086 {
1087     uintptr_t i;
1088     uintptr_t cnt;
1089     uintptr_t zero = 0;
1090 
1091     uintptr_t bytesize_mod;
1092     uint8_t * src_single_byte;
1093     uint8_t   zero_single_byte = 0;
1094 
1095     if (0 != bytesize)
1096     {
1097         /* Clear Count in multi byte unit */
1098         cnt = bytesize / sizeof(uintptr_t);
1099 
1100         for (i = 0; i < cnt; i++)
1101         {
1102             *src++ = zero;
1103         }
1104 
1105         /* Clear Count in single byte unit */
1106         bytesize_mod = bytesize % sizeof(uintptr_t);
1107 
1108         if (0 != bytesize_mod)
1109         {
1110             src_single_byte = (uint8_t *) src;
1111 
1112             for (i = 0; i < bytesize_mod; i++)
1113             {
1114                 *src_single_byte++ = zero_single_byte;
1115             }
1116         }
1117         else
1118         {
1119             /* Do nothing */
1120         }
1121 
1122         /* Ensuring data-changing */
1123         __asm volatile ("DSB SY");
1124     }
1125     else
1126     {
1127         /* Do nothing */
1128     }
1129 }
1130 
1131 #if !(BSP_CFG_RAM_EXECUTION)
1132 
1133 /*******************************************************************************************************************//**
1134  * Clear the application bss block in internal RAM.
1135  **********************************************************************************************************************/
bsp_application_bss_init(void)1136 void bsp_application_bss_init (void)
1137 {
1138     /* Define source address pointer and block size */
1139     uintptr_t * src;
1140     uintptr_t   size;
1141 
1142     /* Clear application bss block. */
1143     src  = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_BSS_START;
1144     size = (uintptr_t) BSP_PRV_SECTION_USER_DATA_BSS_END - (uintptr_t) BSP_PRV_SECTION_USER_DATA_BSS_START;
1145     bsp_bss_init_multibyte(src, size);
1146 
1147  #if defined(__ICCARM__)
1148 
1149     /* Clear user data_noncache block. */
1150     src  = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_NONCACHE_BSS_START;
1151     size = (uintptr_t) BSP_PRV_SECTION_USER_DATA_NONCACHE_BSS_END -
1152            (uintptr_t) BSP_PRV_SECTION_USER_DATA_NONCACHE_BSS_START;
1153     bsp_bss_init_multibyte(src, size);
1154 
1155     /* Clear DMAC link mode data block. */
1156     src  = (uintptr_t *) BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_START;
1157     size = (uintptr_t) BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_END -
1158            (uintptr_t) BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_START;
1159     bsp_bss_init_multibyte(src, size);
1160 
1161   #if (1 == _RZN_ORDINAL)
1162 
1163     /* Clear shared non-cache buffer block. */
1164     src  = (uintptr_t *) BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_START;
1165     size = (uintptr_t) BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_END -
1166            (uintptr_t) BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_START;
1167     bsp_bss_init_multibyte(src, size);
1168   #endif
1169 
1170     /* Clear non-cache buffer block. */
1171     src  = (uintptr_t *) BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_START;
1172     size = (uintptr_t) BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_END -
1173            (uintptr_t) BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_START;
1174     bsp_bss_init_multibyte(src, size);
1175  #endif
1176 }
1177 
1178 /*******************************************************************************************************************//**
1179  * Copy the application program block from external Flash to internal RAM.
1180  * In the case of multi-core operation, copies each section (vector, loader(program/data), user(program/data)) of
1181  * the secondary core (or later).
1182  **********************************************************************************************************************/
bsp_copy_to_ram(void)1183 void bsp_copy_to_ram (void)
1184 {
1185     /* Define destination/source address pointer and block size */
1186  #if (1 == _RZN_ORDINAL) || defined(__ICCARM__)
1187     uintptr_t * src;
1188     uintptr_t * dst;
1189  #endif
1190 
1191     uintptr_t size;
1192 
1193  #if (1 == _RZN_ORDINAL)
1194 
1195     /* Copy exception vector block */
1196     src  = (uintptr_t *) BSP_PRV_SECTION_VECTOR_ROM_ADDRESS;
1197     dst  = (uintptr_t *) BSP_PRV_SECTION_VECTOR_RAM_START;
1198     size = (uintptr_t) BSP_PRV_SECTION_VECTOR_RAM_END - (uintptr_t) BSP_PRV_SECTION_VECTOR_RAM_START;
1199     bsp_copy_multibyte(src, dst, size);
1200 
1201     /* Copy user program block */
1202     src  = (uintptr_t *) BSP_PRV_SECTION_USER_PRG_ROM_ADDRESS;
1203     dst  = (uintptr_t *) BSP_PRV_SECTION_USER_PRG_RAM_START;
1204     size = (uintptr_t) BSP_PRV_SECTION_USER_PRG_RAM_END - (uintptr_t) BSP_PRV_SECTION_USER_PRG_RAM_START;
1205     bsp_copy_multibyte(src, dst, size);
1206 
1207     /* Copy user data block */
1208     src  = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_ROM_ADDRESS;
1209     dst  = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_RAM_START;
1210     size = (uintptr_t) BSP_PRV_SECTION_USER_DATA_RAM_END - (uintptr_t) BSP_PRV_SECTION_USER_DATA_RAM_START;
1211     bsp_copy_multibyte(src, dst, size);
1212 
1213     /* Copy shared non-cache buffer block. */
1214     src  = (uintptr_t *) BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_ROM_ADDRESS;
1215     dst  = (uintptr_t *) BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_RAM_START;
1216     size = (uintptr_t) BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_RAM_END -
1217            (uintptr_t) BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_RAM_START;
1218     bsp_copy_multibyte(src, dst, size);
1219  #endif
1220  #if (1 == _RZN_ORDINAL) || defined(__ICCARM__)
1221 
1222     /* Copy user data_noncache block */
1223     src  = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_NONCACHE_ROM_ADDRESS;
1224     dst  = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_START;
1225     size = (uintptr_t) BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_END -
1226            (uintptr_t) BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_START;
1227     bsp_copy_multibyte(src, dst, size);
1228 
1229     /* Copy DMAC link mode data block. */
1230     src  = (uintptr_t *) BSP_PRV_SECTION_DMAC_LINK_MODE_ROM_ADDRESS;
1231     dst  = (uintptr_t *) BSP_PRV_SECTION_DMAC_LINK_MODE_RAM_START;
1232     size = (uintptr_t) BSP_PRV_SECTION_DMAC_LINK_MODE_RAM_END -
1233            (uintptr_t) BSP_PRV_SECTION_DMAC_LINK_MODE_RAM_START;
1234     bsp_copy_multibyte(src, dst, size);
1235 
1236     /* Copy non-cache buffer block. */
1237     src  = (uintptr_t *) BSP_PRV_SECTION_NONCACHE_BUFFER_ROM_ADDRESS;
1238     dst  = (uintptr_t *) BSP_PRV_SECTION_NONCACHE_BUFFER_RAM_START;
1239     size = (uintptr_t) BSP_PRV_SECTION_NONCACHE_BUFFER_RAM_END -
1240            (uintptr_t) BSP_PRV_SECTION_NONCACHE_BUFFER_RAM_START;
1241     bsp_copy_multibyte(src, dst, size);
1242  #endif
1243  #if (1U < BSP_FEATURE_BSP_CR52_CORE_NUM) || (1U < BSP_FEATURE_BSP_CA55_CORE_NUM)
1244   #if (1 == _RZN_ORDINAL)
1245 
1246     /* Copy secondary core application */
1247     src  = (uintptr_t *) BSP_PRV_SECTION_SECONDARY_ROM_ADDRESS;
1248     dst  = (uintptr_t *) BSP_PRV_SECTION_SECONDARY_RAM_START;
1249     size = (uintptr_t) BSP_PRV_SECTION_SECONDARY_RAM_END -
1250            (uintptr_t) BSP_PRV_SECTION_SECONDARY_RAM_START;
1251 
1252    #if (1U <= BSP_FEATURE_BSP_CA55_CORE_NUM)
1253     if ((0 == R_SYSC_NS->RSTSR0_b.SWR0F) && (0 == R_SYSC_NS->RSTSR0_b.SWR550) && (0 == R_SYSC_NS->RSTSR0_b.SWR55C))
1254    #else
1255     if (0 == R_SYSC_NS->RSTSR0_b.SWR0F)
1256    #endif
1257     {
1258         bsp_copy_multibyte(src, dst, size);
1259     }
1260     else
1261     {
1262         size = 0;
1263     }
1264   #else
1265     size = (uintptr_t) BSP_PRV_SECTION_SECONDARY_RAM_END -
1266            (uintptr_t) BSP_PRV_SECTION_SECONDARY_RAM_START;
1267   #endif
1268 
1269     if (0 != size)
1270     {
1271         bsp_cpu_reset_release();
1272     }
1273  #endif
1274 }
1275 
1276  #if (1U < BSP_FEATURE_BSP_CR52_CORE_NUM) || (1U < BSP_FEATURE_BSP_CA55_CORE_NUM)
1277 
1278 /*******************************************************************************************************************//**
1279  * Reset release each CPU
1280  **********************************************************************************************************************/
bsp_cpu_reset_release(void)1281 void bsp_cpu_reset_release (void)
1282 {
1283     uint32_t image_info_cpu;
1284 
1285   #if (1 == BSP_FEATURE_BSP_HAS_CR52_CPU1_TCM)
1286     uint32_t * dst;
1287   #endif
1288 
1289     R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_LPC_RESET);
1290     R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_SYSTEM);
1291 
1292     image_info_cpu = *(uint32_t *) (BSP_PRV_IMAGE_INFO_NEXT_CORE_ADDRESS + BSP_PRV_IMAGE_INFO_OFFSET);
1293 
1294     switch (image_info_cpu)
1295     {
1296         case BSP_PRIV_ASSIGNMENT_CPU_CR52_0:
1297         {
1298   #if (1 == BSP_FEATURE_BSP_HAS_CR52_CPU1_TCM)
1299             R_BSP_CacheCleanAll();
1300 
1301             dst    = (uint32_t *) BSP_PRV_ATCM_AXIS_CR520_ADDRESS;
1302             *dst++ = BSP_PRV_IMAGE_INFO_BRANCH_INSTRUCTION_CR520;
1303             __asm volatile ("DSB SY");
1304             *dst++ = BSP_PRV_IMAGE_INFO_BRANCH_ADDRESS;
1305             __asm volatile ("DSB SY");
1306 
1307             R_BSP_CPUResetAutoRelease(BSP_RESET_CR52_0);
1308   #endif
1309 
1310             break;
1311         }
1312 
1313         case BSP_PRIV_ASSIGNMENT_CPU_CR52_1:
1314         {
1315   #if (0 == BSP_FEATURE_BSP_HAS_CR52_CPU1_TCM)
1316 
1317             /* Release CR52_CPU1 reset state. */
1318             R_BSP_CPUResetRelease(BSP_RESET_CR52_1);
1319   #elif (1 == BSP_FEATURE_BSP_HAS_CR52_CPU1_TCM)
1320             R_BSP_CacheCleanAll();
1321 
1322             R_BSP_MODULE_START(FSP_IP_CR52, 1U);
1323 
1324             /* Release CR52_CPU1 reset state. */
1325             R_BSP_CPUResetRelease(BSP_RESET_CR52_1);
1326 
1327             /* Release from the slave stop state */
1328             R_SSC->SSTPCR7 = (uint32_t) ((uintptr_t) (R_SSC->SSTPCR7 & ~R_SSC_SSTPCR7_AXIS1_REQ_Msk));
1329 
1330             /* Polling ACK bit in SSTPCR */
1331             FSP_HARDWARE_REGISTER_WAIT(R_SSC->SSTPCR7_b.AXIS1_ACK, 0);
1332 
1333    #if defined(BSP_CFG_CORE_CR52)
1334             __asm volatile (
1335                 "    MOVS   r1, #0                    \n"
1336                 "    MOVS   r2, %[dst_cpu1]           \n"
1337                 "    MOVS   r0, %[inst]               \n"
1338                 "    STRD   r0, r1, [r2]              \n"
1339                 "    DSB SY                           \n"
1340                 "    MOVS   r0, %[addr]               \n"
1341                 "    STRD   r0, r1, [r2, #8]          \n"
1342                 "    DSB SY                           \n"
1343                 ::[inst] "r" (BSP_PRV_IMAGE_INFO_BRANCH_INSTRUCTION_CR521),
1344                 [addr] "r" (BSP_PRV_IMAGE_INFO_BRANCH_ADDRESS),
1345                 [dst_cpu1] "r" (BSP_PRV_ATCM_AXIS_CR521_ADDRESS) : "memory", "r0", "r1", "r2");
1346    #elif defined(BSP_CFG_CORE_CA55)
1347             uint64_t * dst_cpu1 = (uint64_t *) BSP_PRV_ATCM_AXIS_CR521_ADDRESS;
1348             *dst_cpu1++ = BSP_PRV_IMAGE_INFO_BRANCH_INSTRUCTION_CR521;
1349             __asm volatile ("DSB SY");
1350             *dst_cpu1++ = BSP_PRV_IMAGE_INFO_BRANCH_ADDRESS;
1351             __asm volatile ("DSB SY");
1352    #endif
1353 
1354             R_TCMAW->CPU1HALT = 0x00000000;
1355   #endif
1356 
1357             break;
1358         }
1359 
1360   #if (1U < BSP_FEATURE_BSP_CA55_CORE_NUM)
1361         case BSP_PRIV_ASSIGNMENT_CPU_CA55_0:
1362         {
1363             R_CA55->RVBA[0].L = (uint32_t) (BSP_PRV_IMAGE_INFO_NEXT_CORE_ADDRESS + BSP_PRV_LOADER_TEXT_OFFSET);
1364 
1365             R_BSP_MODULE_START(FSP_IP_CA55, 0U);
1366 
1367             R_BSP_CPUResetRelease(BSP_RESET_CA55_CLUSTER);
1368             R_BSP_CacheCleanAll();
1369             R_BSP_CPUResetRelease(BSP_RESET_CA55_0);
1370             R_BSP_CacheCleanAll();
1371 
1372             break;
1373         }
1374 
1375         case BSP_PRIV_ASSIGNMENT_CPU_CA55_1:
1376         {
1377             R_CA55->RVBA[1].L = (uint32_t) (BSP_PRV_IMAGE_INFO_NEXT_CORE_ADDRESS + BSP_PRV_LOADER_TEXT_OFFSET);
1378 
1379             R_BSP_MODULE_START(FSP_IP_CA55, 1U);
1380 
1381             R_BSP_CPUResetRelease(BSP_RESET_CA55_CLUSTER);
1382             R_BSP_CacheCleanAll();
1383             R_BSP_CPUResetRelease(BSP_RESET_CA55_1);
1384             R_BSP_CacheCleanAll();
1385 
1386             break;
1387         }
1388 
1389         case BSP_PRIV_ASSIGNMENT_CPU_CA55_2:
1390         {
1391             R_CA55->RVBA[2].L = (uint32_t) (BSP_PRV_IMAGE_INFO_NEXT_CORE_ADDRESS + BSP_PRV_LOADER_TEXT_OFFSET);
1392 
1393             R_BSP_MODULE_START(FSP_IP_CA55, 2U);
1394 
1395             R_BSP_CPUResetRelease(BSP_RESET_CA55_CLUSTER);
1396             R_BSP_CacheCleanAll();
1397             R_BSP_CPUResetRelease(BSP_RESET_CA55_2);
1398             R_BSP_CacheCleanAll();
1399 
1400             break;
1401         }
1402 
1403         case BSP_PRIV_ASSIGNMENT_CPU_CA55_3:
1404         {
1405             R_CA55->RVBA[3].L = (uint32_t) (BSP_PRV_IMAGE_INFO_NEXT_CORE_ADDRESS + BSP_PRV_LOADER_TEXT_OFFSET);
1406 
1407             R_BSP_MODULE_START(FSP_IP_CA55, 3U);
1408 
1409             R_BSP_CPUResetRelease(BSP_RESET_CA55_CLUSTER);
1410             R_BSP_CacheCleanAll();
1411             R_BSP_CPUResetRelease(BSP_RESET_CA55_3);
1412             R_BSP_CacheCleanAll();
1413 
1414             break;
1415         }
1416   #endif
1417 
1418         default:
1419         {
1420             break;
1421         }
1422     }
1423 
1424     R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_SYSTEM);
1425     R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_LPC_RESET);
1426 }
1427 
1428  #endif
1429 #endif
1430 
1431 #if defined(BSP_CFG_CORE_CR52)
1432  #if (BSP_FEATURE_TFU_SUPPORTED & BSP_CFG_USE_TFU_MATHLIB)
bsp_tfu_init(void)1433 void bsp_tfu_init (void)
1434 {
1435     R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_LPC_RESET);
1436   #if (1 != BSP_FEATURE_TFU_UNIT_NUMBER)
1437     R_BSP_MODULE_START(FSP_IP_TFU, 0U);
1438   #else
1439     R_BSP_MODULE_START(FSP_IP_TFU, 1U);
1440   #endif
1441     R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_LPC_RESET);
1442 
1443   #if 2 == BSP_FEATURE_TFU_VERSION
1444    #if (1 == BSP_FEATURE_TFU_UNIT)
1445     #if (1 == _RZN_ORDINAL)
1446     R_TFU->FXSCIOC_b.IUF = BSP_CFG_TFU_FIXED_POINT_SINCOS_INPUT_SETTING;
1447     R_TFU->FXSCIOC_b.OF  = BSP_CFG_TFU_FIXED_POINT_SINCOS_OUTPUT_SETTING;
1448     R_TFU->FXATIOC_b.OUF = BSP_CFG_TFU_FIXED_POINT_ARCTAN_OUTPUT_SETTING;
1449     #endif
1450    #else
1451     #if (0 == BSP_FEATURE_TFU_UNIT_NUMBER)
1452     R_TFU0->FXSCIOC_b.IUF = BSP_CFG_TFU_FIXED_POINT_SINCOS_INPUT_SETTING;
1453     R_TFU0->FXSCIOC_b.OF  = BSP_CFG_TFU_FIXED_POINT_SINCOS_OUTPUT_SETTING;
1454     R_TFU0->FXATIOC_b.OUF = BSP_CFG_TFU_FIXED_POINT_ARCTAN_OUTPUT_SETTING;
1455     #else
1456     R_TFU1->FXSCIOC_b.IUF = BSP_CFG_TFU_FIXED_POINT_SINCOS_INPUT_SETTING;
1457     R_TFU1->FXSCIOC_b.OF  = BSP_CFG_TFU_FIXED_POINT_SINCOS_OUTPUT_SETTING;
1458     R_TFU1->FXATIOC_b.OUF = BSP_CFG_TFU_FIXED_POINT_ARCTAN_OUTPUT_SETTING;
1459     #endif
1460    #endif
1461   #endif
1462 }
1463 
1464  #endif
1465 #endif
1466 
1467 #if !BSP_CFG_PORT_PROTECT
bsp_release_port_protect(void)1468 void bsp_release_port_protect (void)
1469 {
1470     /** When writing to the PRCR register the upper 8-bits must be the correct key. Set lower bits to 0 to
1471      * disable writes. */
1472     R_RWP_NS->PRCRN = ((R_RWP_NS->PRCRN | BSP_IO_PRV_PRCR_KEY) | BSP_IO_REG_PROTECT_GPIO);
1473     R_RWP_S->PRCRS  = ((R_RWP_S->PRCRS | BSP_IO_PRV_PRCR_KEY) | BSP_IO_REG_PROTECT_GPIO);
1474 }
1475 
1476 #endif
1477 
1478 /*******************************************************************************************************************//**
1479  * Initialize static constructors.
1480  **********************************************************************************************************************/
1481 #if BSP_CFG_C_RUNTIME_INIT
bsp_static_constructor_init(void)1482 void bsp_static_constructor_init (void)
1483 {
1484  #if defined(__ICCARM__)
1485   #if !(BSP_CFG_RAM_EXECUTION)
1486 
1487     /* In the case of ROM boot, initialization of static constructors is performed by __iar_data_init3(). */
1488     __iar_data_init3();
1489   #endif
1490  #elif defined(__GNUC__)
1491     intptr_t count;
1492     intptr_t i;
1493 
1494     count = __preinit_array_end - __preinit_array_start;
1495     for (i = 0; i < count; i++)
1496     {
1497         __preinit_array_start[i]();
1498     }
1499 
1500     count = __init_array_end - __init_array_start;
1501     for (i = 0; i < count; i++)
1502     {
1503         __init_array_start[i]();
1504     }
1505  #endif
1506 }
1507 
1508 #endif
1509