SmartSnippets DA1459x SDK
sections_da1459x.ld.h
1 /*
2  * Copyright (C) 2020-2023 Renesas Electronics Corporation and/or its affiliates.
3  * All rights reserved. Confidential Information.
4  *
5  * This software ("Software") is supplied by Renesas Electronics Corporation and/or its
6  * affiliates ("Renesas"). Renesas grants you a personal, non-exclusive, non-transferable,
7  * revocable, non-sub-licensable right and license to use the Software, solely if used in
8  * or together with Renesas products. You may make copies of this Software, provided this
9  * copyright notice and disclaimer ("Notice") is included in all such copies. Renesas
10  * reserves the right to change or discontinue the Software at any time without notice.
11  *
12  * THE SOFTWARE IS PROVIDED "AS IS". RENESAS DISCLAIMS ALL WARRANTIES OF ANY KIND,
13  * WHETHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
14  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. TO THE
15  * MAXIMUM EXTENT PERMITTED UNDER LAW, IN NO EVENT SHALL RENESAS BE LIABLE FOR ANY DIRECT,
16  * INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING FROM, OUT OF OR IN
17  * CONNECTION WITH THE SOFTWARE, EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY OF
18  * SUCH DAMAGES. USE OF THIS SOFTWARE MAY BE SUBJECT TO TERMS AND CONDITIONS CONTAINED IN
19  * AN ADDITIONAL AGREEMENT BETWEEN YOU AND RENESAS. IN CASE OF CONFLICT BETWEEN THE TERMS
20  * OF THIS NOTICE AND ANY SUCH ADDITIONAL LICENSE AGREEMENT, THE TERMS OF THE AGREEMENT
21  * SHALL TAKE PRECEDENCE. BY CONTINUING TO USE THIS SOFTWARE, YOU AGREE TO THE TERMS OF
22  * THIS NOTICE.IF YOU DO NOT AGREE TO THESE TERMS, YOU ARE NOT PERMITTED TO USE THIS
23  * SOFTWARE.
24  */
25 /* Linker script to place sections and symbol values. Should be used together
26  * with other linker script that defines memory regions ROM and RAM.
27  * It references following symbols, which must be defined in code:
28  * Reset_Handler : Entry of reset handler
29  *
30  * It defines following symbols, which code can use without definition:
31  * __exidx_start
32  * __exidx_end
33  * __copy_table_start__
34  * __copy_table_end__
35  * __zero_table_start__
36  * __zero_table_end__
37  * __etext
38  * __data_start__
39  * __preinit_array_start
40  * __preinit_array_end
41  * __init_array_start
42  * __init_array_end
43  * __fini_array_start
44  * __fini_array_end
45  * __data_end__
46  * __bss_start__
47  * __bss_end__
48  * __end__
49  * end
50  * __HeapBase
51  * __HeapLimit
52  * __StackLimit
53  * __StackTop
54  * __stack
55  * __Vectors_End
56  * __Vectors_Size
57  */
58 
59 /* Library configurations */
60 GROUP(libgcc.a libc.a libm.a libnosys.a)
61 
62 #if (dg_configEXEC_MODE == MODE_IS_CACHED)
63 #define IMG_FW_IVT_OFFSET (0x400)
64 #define RETENTION_RAM_INIT_SIZE (__retention_ram_init_end__ - __retention_ram_init_start__)
65 #define NON_RETENTION_RAM_INIT_SIZE (__non_retention_ram_init_end__ - __non_retention_ram_init_start__)
66 #else
67 /* CODE and RAM are merged into a single RAM section */
68 #define ROM RAM
69 #endif
70 
71 #if ( dg_configUSE_SEGGER_FLASH_LOADER == 1 )
72 #define CS_OFFSET 0x1000
73 #if (dg_configCODE_LOCATION == NON_VOLATILE_IS_EMBEDDED_FLASH)
74 /* Could be anything. Recommended by Open_Flashloader wiki
75  * to use the real address of the non volatile device. Should it be changed,
76  * the segger_flash_loader project needs to be modified accordingly.
77  */
78 #define LOAD_ADDRESS_OFFSET 0x31000000
79 #define PROD_HEAD_OFFSET 0x800
80 #elif (dg_configCODE_LOCATION == NON_VOLATILE_IS_QSPI_FLASH)
81 #define LOAD_ADDRESS_OFFSET 0x32000000
82 #define PROD_HEAD_OFFSET 0x1000
83 #else
84 #error "Flash Loader does not support other code location."
85 #endif
86 #if (dg_configCODE_LOCATION == NON_VOLATILE_IS_EMBEDDED_FLASH)
87 #define IMG_FW_BASE_OFFSET 0x2000
88 #elif (dg_configCODE_LOCATION == NON_VOLATILE_IS_QSPI_FLASH)
89 #define IMG_FW_BASE_OFFSET 0x3000
90 #endif /* dg_configCODE_LOCATION */
91 #define IMG_FW_BASE_ADDRESS (IMG_FW_BASE_OFFSET + LOAD_ADDRESS_OFFSET)
92 #define IMG_FW_IVT_BASE_ADDRESS (IMG_FW_BASE_OFFSET + IMG_FW_IVT_OFFSET + LOAD_ADDRESS_OFFSET)
93 #else
94 #define IMG_FW_IVT_BASE_ADDRESS 0x0
95 #endif /* dg_configUSE_SEGGER_FLASH_LOADER */
96 
97 ENTRY(Reset_Handler)
98 
99 SECTIONS
100 {
101  .init_text :
102 #if ( dg_configUSE_SEGGER_FLASH_LOADER == 1 )
103  AT (IMG_FW_IVT_BASE_ADDRESS)
104 #endif /* dg_configUSE_SEGGER_FLASH_LOADER */
105  {
106  KEEP(*(.isr_vector))
107  /* Interrupt vector remmaping overhead */
108  . = 0x200;
109  __Vectors_End = .;
110  __Vectors_Size = __Vectors_End - __isr_vector;
111 
112  KEEP(*(__external_application_parameters__))
113 
114  . = ALIGN(4);
115 
116  *(text_reset*)
117  } > ROM
118 
119  .text :
120  {
121  /* Optimize the code of specific libgcc files by executing them
122  * from the .retention_ram_init section. */
123  *(EXCLUDE_FILE(*libnosys.a:sbrk.o
124  *libgcc.a:_aeabi_uldivmod.o
125  *libgcc.a:_muldi3.o
126  *libgcc.a:_dvmd_tls.o
127  *libgcc.a:bpabi.o
128  *libgcc.a:_udivdi3.o
129  *libgcc.a:_clzdi2.o
130  *libgcc.a:_clzsi2.o) .text*)
131 
132  . = ALIGN(4);
133 
134 #ifdef CONFIG_USE_BLE
135 #if (dg_configEXEC_MODE != MODE_IS_CACHED)
136  . = ALIGN(0x100); /* Code region should start at 256 bytes boundary */
137  cmi_fw_dst_addr = .;
138 #endif
139 
140  /*
141  * Section used to store the CMAC FW.
142  * Code should copy this FW to address 'cmi_fw_dst_addr' and
143  * configure the memory controller accordingly.
144  */
145  __cmi_fw_area_start = .;
146  KEEP(*(.cmi_fw_area*))
147  __cmi_fw_area_end = .;
148 
149 #if (dg_configEXEC_MODE != MODE_IS_CACHED)
150  __cmi_section_start__ = .;
151 
152  . = ALIGN(4); /* Data region should start at 4-bytes boundary */
153 
154  /*
155  * Create space for CMAC data
156  */
157  KEEP(*(.cmi_data_area*))
158 
159  . = ALIGN(4); /* CMI_END_REG does not exist in DA1459x, so there is no alignment requirement */
160 
161  __cmi_section_end__ = . - 1;
162 
163  KEEP(*(.cmi_data_ext_area*))
164 #endif
165 #endif /* CONFIG_USE_BLE */
166 
167  . = ALIGN(4);
168  __start_adapter_init_section = .;
169  KEEP(*(adapter_init_section))
170  __stop_adapter_init_section = .;
171 
172  . = ALIGN(4);
173  __start_bus_init_section = .;
174  KEEP(*(bus_init_section))
175  __stop_bus_init_section = .;
176 
177  . = ALIGN(4);
178  __start_device_init_section = .;
179  KEEP(*(device_init_section))
180  __stop_device_init_section = .;
181 
182  KEEP(*(.init))
183  KEEP(*(.fini))
184 
185  /* .ctors */
186  *crtbegin.o(.ctors)
187  *crtbegin?.o(.ctors)
188  *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
189  *(SORT(.ctors.*))
190  *(.ctors)
191 
192  /* .dtors */
193  *crtbegin.o(.dtors)
194  *crtbegin?.o(.dtors)
195  *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
196  *(SORT(.dtors.*))
197  *(.dtors)
198 
199  . = ALIGN(4);
200  /* preinit data */
201  PROVIDE_HIDDEN (__preinit_array_start = .);
202  KEEP(*(.preinit_array))
203  PROVIDE_HIDDEN (__preinit_array_end = .);
204 
205  . = ALIGN(4);
206  /* init data */
207  PROVIDE_HIDDEN (__init_array_start = .);
208  KEEP(*(SORT(.init_array.*)))
209  KEEP(*(.init_array))
210  PROVIDE_HIDDEN (__init_array_end = .);
211 
212  . = ALIGN(4);
213  /* finit data */
214  PROVIDE_HIDDEN (__fini_array_start = .);
215  KEEP(*(SORT(.fini_array.*)))
216  KEEP(*(.fini_array))
217  PROVIDE_HIDDEN (__fini_array_end = .);
218 
219  *(.rodata*)
220 
221  KEEP(*(.eh_frame*))
222  } > ROM
223 
224  .ARM.extab :
225  {
226  *(.ARM.extab* .gnu.linkonce.armextab.*)
227  } > ROM
228 
229  __exidx_start = .;
230  .ARM.exidx :
231  {
232  *(.ARM.exidx* .gnu.linkonce.armexidx.*)
233  } > ROM
234  __exidx_end = .;
235 
236  /* To copy multiple ROM to RAM sections,
237  * uncomment .copy.table section and,
238  * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
239 
240  .copy.table :
241  {
242  . = ALIGN(4);
243  __copy_table_start__ = .;
244 #if (dg_configEXEC_MODE == MODE_IS_CACHED)
245  LONG (__etext)
246  LONG (__retention_ram_init_start__)
247  LONG (RETENTION_RAM_INIT_SIZE)
248 
249  LONG (__etext + (RETENTION_RAM_INIT_SIZE))
250  LONG (__non_retention_ram_init_start__)
251  LONG (NON_RETENTION_RAM_INIT_SIZE)
252 #endif
253  __copy_table_end__ = .;
254  } > ROM
255 
256 
257  /* To clear multiple BSS sections,
258  * uncomment .zero.table section and,
259  * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
260 
261  .zero.table :
262  {
263  . = ALIGN(4);
264  __zero_table_start__ = .;
265  LONG (__retention_ram_zi_start__)
266  LONG (__retention_ram_zi_end__ - __retention_ram_zi_start__)
267 #ifdef CONFIG_USE_BLE
268  LONG (__cmi_section_retained_zi_start__)
269  LONG (__cmi_section_retained_zi_end__ - __cmi_section_retained_zi_start__)
270 #endif /* CONFIG_USE_BLE */
271  __zero_table_end__ = .;
272  } > ROM
273 
274  __etext = .;
275 
276  /*
277  * Retention ram that should not be initialized during startup.
278  * On QSPI cached images, it should be at a fixed RAM address for both
279  * the bootloader and the application, so that the bootloader will not alter
280  * those data due to conflicts between its .data/.bss sections with application's
281  * .retention_ram_uninit section.
282  * - On QSPI images it is relocated to the first RAM address after IVT_AREA_OVERHEAD
283  * with fixed size of dg_configRETAINED_UNINIT_SECTION_SIZE bytes.
284  * - On RAM images the section is not located at a fixed location.
285  */
286  .retention_ram_uninit (NOLOAD) :
287  {
288  __retention_ram_uninit_start__ = .;
289 #if (dg_configEXEC_MODE == MODE_IS_CACHED)
290  ASSERT( . == ORIGIN(RAM), ".retention_ram_uninit section moved!");
291 #endif /* (dg_configEXEC_MODE == MODE_IS_CACHED) */
292  KEEP(*(nmi_info))
293  KEEP(*(hard_fault_info))
294  KEEP(*(retention_mem_uninit))
295 
296  ASSERT( . <= __retention_ram_uninit_start__ + dg_configRETAINED_UNINIT_SECTION_SIZE,
297  "retention_ram_uninit section overflowed! Increase dg_configRETAINED_UNINIT_SECTION_SIZE.");
298 
299  . = __retention_ram_uninit_start__ + dg_configRETAINED_UNINIT_SECTION_SIZE;
300  __retention_ram_uninit_end__ = .;
301  } > RAM
302 
303  /*
304  * Initialized retention RAM
305  */
306 #if (dg_configEXEC_MODE == MODE_IS_CACHED)
307  .retention_ram_init : AT (IMG_FW_IVT_BASE_ADDRESS +__etext)
308 #else
309  /*
310  * No need to add this to the copy table,
311  * copy will be done by the debugger.
312  */
313  .retention_ram_init :
314 #endif
315  {
316  __retention_ram_init_start__ = .;
317  . = ALIGN(4); /* Required by copy table */
318 
319  /*
320  * Retained .text sections moved to RAM that need to be initialized
321  */
322 #if (dg_configEXEC_MODE == MODE_IS_CACHED)
323  /* Retained code exists only in QSPI projects */
324  *(text_retained)
325 #endif
326  /* Make the '.text' section of specific libgcc files retained, to
327  * optimize perfomance */
328  *libnosys.a:sbrk.o (.text*)
329  *libgcc.a:_aeabi_uldivmod.o (.text*)
330  *libgcc.a:_muldi3.o (.text*)
331  *libgcc.a:_dvmd_tls.o (.text*)
332  *libgcc.a:bpabi.o (.text*)
333  *libgcc.a:_udivdi3.o (.text*)
334  *libgcc.a:_clzdi2.o (.text*)
335  *libgcc.a:_clzsi2.o (.text*)
336 
337  /*
338  * Retained .data sections that need to be initialized
339  */
340 
341  /* Retained data */
342  *(privileged_data_init)
343  *(.retention)
344 
345  *(vtable)
346 
347  *(retention_mem_init)
348  *(retention_mem_const)
349 
350 #if (dg_configEXEC_MODE == MODE_IS_CACHED)
351  *libg_nano.a:* (.data*)
352  *libnosys.a:* (.data*)
353  *libgcc.a:* (.data*)
354  *libble_stack_da1459x.a:* (.data*)
355  *crtbegin.o (.data*)
356 #else /* dg_configEXEC_MODE */
357  *(.data*)
358 #endif /* dg_configEXEC_MODE */
359 
360  KEEP(*(.jcr*))
361  . = ALIGN(4); /* Required by copy table */
362  /* All data end */
363  __retention_ram_init_end__ = .;
364  } > RAM
365 
366  /*
367  * Zero-initialized retention RAM
368  */
369  .retention_ram_zi (NOLOAD) :
370  {
371  __retention_ram_zi_start__ = .;
372 
373  *(privileged_data_zi)
374  *(retention_mem_zi)
375 
376  *libg_nano.a:* (.bss*)
377  *libnosys.a:* (.bss*)
378  *libgcc.a:* (.bss*)
379  *libble_stack_da1459x.a:* (.bss*)
380  *crtbegin.o (.bss*)
381 
382  *(os_heap)
383 
384  __HeapBase = .;
385  __end__ = .;
386  end = __end__;
387  KEEP(*(.heap*))
388  __HeapLimit = .;
389 
390  __retention_ram_zi_end__ = .;
391  } > RAM
392 
393  .stack_section (NOLOAD) :
394  {
395  /* Advance the address to avoid output section discarding */
396  . = . + 1;
397  /* 8-byte alignment guaranteed by vector_table_da1459x.S, also put here for
398  * clarity. */
399  . = ALIGN(8);
400  __StackLimit = .;
401  KEEP(*(.stack*))
402  . = ALIGN(8);
403  __StackTop = .;
404  /* Provide __StackTop to newlib by defining __stack externally. SP will be
405  * set when executing __START. If not provided, SP will be set to the default
406  * newlib nano value (0x80000) */
407  PROVIDE(__stack = __StackTop);
408  } > RAM
409 
410 
411 #ifdef CONFIG_USE_BLE
412 #if (dg_configEXEC_MODE == MODE_IS_CACHED)
413  /*
414  * CMAC interface section
415  */
416  .cmi_section (NOLOAD) :
417  {
418  __cmi_section_start__ = .;
419 
420  . = ALIGN(0x100); /* Code region should start at 1Kb boundary */
421 
422  /*
423  * The actual CMAC code (copied from '.cmi_fw_area')
424  * will be running here.
425  */
426  cmi_fw_dst_addr = .;
427 
428  /*
429  * Create space to copy/expand the CMAC image to.
430  */
431  . += (__cmi_fw_area_end - __cmi_fw_area_start);
432 
433  . = ALIGN(4); /* Data region should start at 4-bytes boundary */
434 
435  /*
436  * Create space for CMAC data
437  */
438  KEEP(*(.cmi_data_area*))
439 
440  . = ALIGN(4); /* CMI_END_REG does not exist in DA1459x, so there is no alignment requirement */
441 
442  __cmi_section_end__ = . - 1;
443  KEEP(*(.cmi_data_ext_area*))
444  } > RAM
445 #endif /* (dg_configEXEC_MODE == MODE_IS_CACHED) */
446  .cmi_section_retained_zi (NOLOAD) :
447  {
448  __cmi_section_retained_zi_start__ = .;
449  *(retention_mem_cmi_zi)
450  __cmi_section_retained_zi_end__ = .;
451  } > RAM
452 #endif /* CONFIG_USE_BLE */
453 
454  __non_retention_ram_start__ = .;
455 
456  /*
457  * Initialized RAM area that does not need to be retained during sleep.
458  * On RAM projects, they are located in the .retention_ram_init section
459  * for better memory handling.
460  */
461 #if (dg_configEXEC_MODE == MODE_IS_CACHED)
462  .non_retention_ram_init : AT (IMG_FW_IVT_BASE_ADDRESS + __etext + (RETENTION_RAM_INIT_SIZE))
463  {
464  __non_retention_ram_init_start__ = .;
465  . = ALIGN(4); /* Required by copy table */
466  *(EXCLUDE_FILE(*libg_nano.a:* *libnosys.a:* *libgcc.a:* *libble_stack_da1459x.a:* *crtbegin.o) .data*)
467 
468  . = ALIGN(4); /* Required by copy table */
469  __non_retention_ram_init_end__ = .;
470  } > RAM
471 #endif /* (dg_configEXEC_MODE == MODE_IS_CACHED) */
472 
473  /*
474  * Note that region [__bss_start__, __bss_end__] will be also zeroed by newlib nano,
475  * during execution of __START.
476  */
477  .bss :
478  {
479  . = ALIGN(4);
480  __bss_start__ = .;
481 
482  *(EXCLUDE_FILE(*libg_nano.a:* *libnosys.a:* *libgcc.a:* *libble_stack_da1459x.a:* *crtbegin.o) .bss*)
483 
484  *(COMMON)
485  . = ALIGN(4);
486  __bss_end__ = .;
487  } > RAM
488 
489  __non_retention_ram_end__ = .;
490 
491  __unused_ram_start__ = . + 1;
492 
493 #if ( dg_configUSE_SEGGER_FLASH_LOADER == 1 )
494  /* The CS_OFFSET region is reserved for CS and keys. */
495  .cs_and_keys :
496  AT (LOAD_ADDRESS_OFFSET)
497  {
498  /* By default the booter searches the default product header address at the start
499  * of eFlash. Add a CS part to override the default address.
500  */
501  LONG(0xA5A5A5A5)
502  LONG(0x60000000 | CS_OFFSET)
503 #if (defined(CONFIG_USE_BLE) && (dg_configSUOTA_SUPPORT == 0))
504  /* TCS values for 256Kb Flash region size */
505  LONG(0x1A0C0044)
506  LONG(0x00A09005)
507 
508  /* Fill the reserved region with a dummy value. */
509  FILL(0xFFFFFFFF)
510 
511  . += CS_OFFSET - 16 - 1;
512 #else
513  /* Fill the reserved region with a dummy value. */
514  FILL(0xFFFFFFFF)
515  . += CS_OFFSET - 8 - 1;
516 #endif /* ((DEVICE_FPGA) && defined(CONFIG_USE_BLE) && (dg_configSUOTA_SUPPORT == 0)) */
517 
518  BYTE(0xFF)
519  } > ROM
520 
521  .prod_head :
522  AT (CS_OFFSET + LOAD_ADDRESS_OFFSET)
523 
524  SUBALIGN(1)
525  {
526  SHORT(0x7050) // 'Pp' flag
527  LONG(IMG_FW_BASE_OFFSET) // active image pointer
528  LONG(IMG_FW_BASE_OFFSET) // update image pointer
529 #if (dg_configCODE_LOCATION == NON_VOLATILE_IS_QSPI_FLASH)
530  KEEP(*(__product_header_primary__))
531 #elif (dg_configCODE_LOCATION == NON_VOLATILE_IS_EMBEDDED_FLASH)
532  LONG(0xFFFFFFFF) // busrtcmdA
533  LONG(0xFFFFFFFF) // busrtcmdB
534  SHORT(0x11AA) // Flash config section
535  SHORT(0x0000) // Flash config length
536  SHORT(0x3E66) // CRC
537 
538 #endif /* dg_configCODE_LOCATION */
539  . = PROD_HEAD_OFFSET;
540  } > ROM = 0xFFFFFFFF
541 
542  .prod_head_backup :
543  AT (CS_OFFSET + PROD_HEAD_OFFSET + LOAD_ADDRESS_OFFSET)
544 
545  SUBALIGN(1)
546  {
547  SHORT(0x7050) // 'Pp' flag
548  LONG(IMG_FW_BASE_OFFSET) // active image pointer
549  LONG(IMG_FW_BASE_OFFSET) // update image pointer
550 #if (dg_configCODE_LOCATION == NON_VOLATILE_IS_QSPI_FLASH)
551  KEEP(*(__product_header_backup__))
552 #elif (dg_configCODE_LOCATION == NON_VOLATILE_IS_EMBEDDED_FLASH)
553  LONG(0xFFFFFFFF) // busrtcmdA
554  LONG(0xFFFFFFFF) // busrtcmdB
555  SHORT(0x11AA) // Flash config section
556  SHORT(0x0000) // Flash config length
557  SHORT(0x3E66) // CRC
558 
559 #endif /* dg_configCODE_LOCATION */
560  . = PROD_HEAD_OFFSET;
561  } > ROM = 0xFFFFFFFF
562 
563  .img_head :
564  AT (IMG_FW_BASE_ADDRESS)
565  {
566  SHORT(0x7151) // 'Qq' flag
567  LONG(SIZEOF(.text))
568  LONG(0x00000000) // crc, doesn't matter
569  LONG(0x00000000) // version, doesn't matter
570  LONG(0x00000000) // version, doesn't matter
571  LONG(0x00000000) // version, doesn't matter
572  LONG(0x00000000) // version, doesn't matter
573  LONG(0x00000000) // timestamp, doesn't matter
574  LONG(IMG_FW_IVT_OFFSET) // IVT pointer
575  SHORT(0x22AA) // Security section type
576  SHORT(0x0000) //Security section length
577  SHORT(0x44AA) // Device admin type
578  SHORT(0x0000) // Device admin length
579  . = IMG_FW_IVT_OFFSET;
580  } > ROM = 0xFFFFFFFF
581 #endif /* dg_configUSE_SEGGER_FLASH_LOADER */
582 
583 #if (dg_configEXEC_MODE == MODE_IS_CACHED)
584  /* Make sure that the initialized data fits in flash. Make sure that image header also
585  * fits in MAX_IMAGE_SIZE.
586  */
587 #if (dg_configCODE_LOCATION == NON_VOLATILE_IS_QSPI_FLASH)
588 
589  ASSERT(__etext + RETENTION_RAM_INIT_SIZE + NON_RETENTION_RAM_INIT_SIZE + IMG_FW_IVT_OFFSET <
590  ORIGIN(ROM) + dg_configQSPI_MAX_IMAGE_SIZE, "ROM space overflowed")
591 #else
592  ASSERT(__etext + RETENTION_RAM_INIT_SIZE + NON_RETENTION_RAM_INIT_SIZE + IMG_FW_IVT_OFFSET <
593  ORIGIN(ROM) + dg_configEFLASH_MAX_IMAGE_SIZE, "ROM space overflowed")
594 #endif
595 
596 #endif
597 }
dg_configRETAINED_UNINIT_SECTION_SIZE
#define dg_configRETAINED_UNINIT_SECTION_SIZE
Size of the RETAINED_RAM_UNINIT section, in bytes.
Definition: bsp_memory_defaults_da1459x.h:100
dg_configEXEC_MODE
#define dg_configEXEC_MODE
Code execution mode.
Definition: bsp_defaults.h:255
dg_configEFLASH_MAX_IMAGE_SIZE
#define dg_configEFLASH_MAX_IMAGE_SIZE
Maximum size (in bytes) of image in the EFLASH.
Definition: bsp_memory_defaults_da1459x.h:166
dg_configQSPI_MAX_IMAGE_SIZE
#define dg_configQSPI_MAX_IMAGE_SIZE
Maximum size (in bytes) of image in the QSPI flash.
Definition: bsp_memory_defaults_da1459x.h:124