123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986 |
- #! armclang -mcpu=cortex-m4 --target=arm-arm-none-eabi -E -x c -I.
- #include "memory_regions.scat"
- ; This scatter-file places the vector table, application code, data, stacks and heap at suitable addresses in the memory map.
- #define ROM_REGISTERS_START 0x400
- ; Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image.
- ; #define XIP_SECONDARY_SLOT_IMAGE 1
- #ifdef FLASH_BOOTLOADER_LENGTH
- #define BL_FLASH_IMAGE_START (FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH : \
- FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH)
- #define BL_FLASH_IMAGE_END (BL_FLASH_IMAGE_START + FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH)
- #define BL_XIP_SECONDARY_FLASH_IMAGE_START (FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH)
- #define BL_XIP_SECONDARY_FLASH_IMAGE_END (BL_XIP_SECONDARY_FLASH_IMAGE_START + FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH)
- #define BL_FLASH_NS_START (FLASH_APPLICATION_NS_LENGTH == 0 ? BL_FLASH_IMAGE_END : \
- BL_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH)
- #define BL_FLASH_NSC_START (FLASH_APPLICATION_NS_LENGTH == 0 ? BL_FLASH_IMAGE_END : \
- BL_FLASH_NS_START - FLASH_APPLICATION_NSC_LENGTH)
- #define BL_FLASH_NS_IMAGE_START (FLASH_APPLICATION_NS_LENGTH == 0 ? BL_FLASH_IMAGE_END : \
- BL_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2)
- #define BL_RAM_NS_START (FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH : \
- RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH)
- #define BL_RAM_NSC_START (FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH : \
- BL_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH)
- #define BLN_FLASH_IMAGE_START (BL_FLASH_NS_IMAGE_START)
- #define BLN_FLASH_IMAGE_END (FLASH_APPLICATION_NS_LENGTH == 0 ? BL_FLASH_IMAGE_END : \
- BL_FLASH_NS_IMAGE_START + FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2)
- #define FLASH_ORIGIN FLASH_START
- #define LIMITED_FLASH_LENGTH FLASH_BOOTLOADER_LENGTH
- #elif defined FLASH_IMAGE_START
- #if defined XIP_SECONDARY_SLOT_IMAGE
- #define FLASH_ORIGIN (XIP_SECONDARY_SLOT_IMAGE == 1 ? XIP_SECONDARY_FLASH_IMAGE_START : FLASH_IMAGE_START)
- #else
- #define FLASH_ORIGIN FLASH_IMAGE_START
- #endif
- #ifdef FLASH_NS_START
- #define LIMITED_FLASH_LENGTH FLASH_NS_START - FLASH_IMAGE_START
- #else
- #define LIMITED_FLASH_LENGTH FLASH_IMAGE_END - FLASH_IMAGE_START
- #endif
- #else
- #define FLASH_ORIGIN FLASH_START
- #define LIMITED_FLASH_LENGTH FLASH_LENGTH
- #endif
- ; If a flat project has defined RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM.
- #if !defined(PROJECT_NONSECURE) && defined(RAM_NS_BUFFER_LENGTH)
- #define __RESERVE_NS_RAM (1)
- ; Allocate required RAM and align to 32K boundary
- #define RAM_NS_BUFFER_START ((RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH) AND 0xFFFFFFE0)
- #else
- #define __RESERVE_NS_RAM (0)
- #endif
- #ifndef FLASH_S_START
- #define FLASH_S_START 0
- #endif
- #ifndef RAM_S_START
- #define RAM_S_START RAM_START
- #endif
- #ifndef DATA_FLASH_S_START
- #define DATA_FLASH_S_START DATA_FLASH_START
- #endif
- #ifndef OPTION_SETTING_DATA_FLASH_S_START
- #define OPTION_SETTING_DATA_FLASH_S_START 0
- #endif
- #ifndef OPTION_SETTING_DATA_FLASH_S_LENGTH
- #define OPTION_SETTING_DATA_FLASH_S_LENGTH 0
- #endif
- #if __RESERVE_NS_RAM
- #ifndef RAM_NSC_START
- #define RAM_NSC_START RAM_NS_BUFFER_START AND 0xFFFFE000
- #endif
- #ifndef RAM_NS_START
- #define RAM_NS_START RAM_NS_BUFFER_START AND 0xFFFFE000
- #endif
- #ifndef DATA_FLASH_NS_START
- #define DATA_FLASH_NS_START DATA_FLASH_START + DATA_FLASH_LENGTH
- #endif
- #ifndef FLASH_NSC_START
- #define FLASH_NSC_START FLASH_ORIGIN + LIMITED_FLASH_LENGTH
- #endif
- #ifndef FLASH_NS_START
- #define FLASH_NS_START FLASH_ORIGIN + LIMITED_FLASH_LENGTH
- #endif
- #else
- #ifndef RAM_NSC_START
- #ifdef PROJECT_SECURE
- #define RAM_NSC_START +0 ALIGN 1024
- #else
- #define RAM_NSC_START RAM_START + RAM_LENGTH
- #endif
- #endif
- #ifndef RAM_NS_START
- #ifdef PROJECT_SECURE
- #define RAM_NS_START +0 ALIGN 8192
- #else
- #define RAM_NS_START RAM_START + RAM_LENGTH
- #endif
- #endif
- #ifndef DATA_FLASH_NS_START
- #define DATA_FLASH_NS_START +0 ALIGN 1024
- #endif
- #ifndef FLASH_NSC_START
- #define FLASH_NSC_START (AlignExpr(ImageLength(LOAD_REGION_FLASH) + ImageBase(LOAD_REGION_FLASH), 1024))
- #endif
- #ifndef FLASH_NS_START
- #define FLASH_NS_START AlignExpr(+0, 32768)
- #endif
- #endif
- #ifndef QSPI_FLASH_S_START
- #define QSPI_FLASH_S_START QSPI_FLASH_START
- #endif
- #ifndef QSPI_FLASH_NS_START
- #define QSPI_FLASH_NS_START +0
- #endif
- #ifndef OSPI_DEVICE_0_S_START
- #define OSPI_DEVICE_0_S_START OSPI_DEVICE_0_START
- #endif
- #ifndef OSPI_DEVICE_0_NS_START
- #define OSPI_DEVICE_0_NS_START +0
- #endif
- #ifndef OSPI_DEVICE_1_S_START
- #define OSPI_DEVICE_1_S_START OSPI_DEVICE_1_START
- #endif
- #ifndef OSPI_DEVICE_1_NS_START
- #define OSPI_DEVICE_1_NS_START +0
- #endif
- #ifndef SDRAM_S_START
- #define SDRAM_S_START SDRAM_START
- #endif
- #ifndef SDRAM_NS_START
- #define SDRAM_NS_START +0
- #endif
- #ifdef QSPI_FLASH_SIZE
- #define QSPI_FLASH_PRV_LENGTH QSPI_FLASH_SIZE
- #else
- #define QSPI_FLASH_PRV_LENGTH QSPI_FLASH_LENGTH
- #endif
- #ifdef OSPI_DEVICE_0_SIZE
- #define OSPI_DEVICE_0_PRV_LENGTH OSPI_DEVICE_0_SIZE
- #else
- #define OSPI_DEVICE_0_PRV_LENGTH OSPI_DEVICE_0_LENGTH
- #endif
- #ifdef OSPI_DEVICE_1_SIZE
- #define OSPI_DEVICE_1_PRV_LENGTH OSPI_DEVICE_1_SIZE
- #else
- #define OSPI_DEVICE_1_PRV_LENGTH OSPI_DEVICE_1_LENGTH
- #endif
- #ifdef PROJECT_NONSECURE
- #define OPTION_SETTING_START_NS (OPTION_SETTING_START)
- #else
- #define OPTION_SETTING_START_NS (OPTION_SETTING_START + 0x80)
- #endif
- #define ID_CODE_OVERLAP ((ID_CODE_START > OPTION_SETTING_START) && (ID_CODE_START < OPTION_SETTING_START + OPTION_SETTING_LENGTH))
- LOAD_REGION_FLASH FLASH_ORIGIN ALIGN 0x80 LIMITED_FLASH_LENGTH
- {
- __tz_FLASH_S +0 EMPTY 0
- {
- }
- VECTORS +0 FIXED PADVALUE 0xFFFFFFFF ; maximum of 256 exceptions (256*4 bytes == 0x400)
- {
- *(.fixed_vectors, +FIRST)
- *(.application_vectors)
- }
- #if (OPTION_SETTING_LENGTH == 0) && (FLASH_ORIGIN == FLASH_START)
- /* MCUs with the OPTION_SETTING region do not use the ROM registers at 0x400. */
- VECTORS_FILL +0 FIXED FILL 0xFFFFFFFF (0x400 - ImageLength(VECTORS))
- {
- }
- ROM_REGISTERS FLASH_START+0x400 FIXED PADVALUE 0xFFFFFFFF
- {
- bsp_rom_registers.o (.rom_registers)
- }
- ROM_REGISTERS_FILL +0 FIXED FILL 0xFFFFFFFF (0x100 - ImageLength(ROM_REGISTERS))
- {
- }
- #endif
- MCUBOOT_SCE9_KEY +0 FIXED
- {
- *(.mcuboot_sce9_key)
- }
- INIT_ARRAY +0 FIXED
- {
- *(.init_array)
- }
- USB_DESC_FS +0 FIXED
- {
- *(.usb_device_desc_fs*)
- *(.usb_config_desc_fs*)
- *(.usb_interface_desc_fs*)
- }
- RO_CODE_DATA +0 FIXED
- {
- *(.text*,.rodata*,.constdata*)
- .ANY(+RO)
- }
- __tz_RAM_S RAM_S_START EMPTY 0
- {
- }
- DTC_VECTOR_TABLE RAM_START UNINIT NOCOMPRESS RAM_LENGTH
- {
- ; If DTC is used, put the DTC vector table at the start of SRAM.
- ; This avoids memory holes due to 1K alignment required by it.
- *(.bss.fsp_dtc_vector_table)
- }
- DATA +0 NOCOMPRESS
- {
- ; Do not use *(.data*) because it will place data meant for .data_flash in this section.
- *(.data.*)
- *(.data)
- *(.code_in_ram)
- #if !__RESERVE_NS_RAM
- *(.ns_buffer*)
- #endif
- .ANY(+RW)
- }
- BSS +0 NOCOMPRESS
- {
- *(+ZI)
- }
- NOINIT +0 UNINIT NOCOMPRESS
- {
- *(.bss.noinit)
- }
- NOCACHE +0 UNINIT NOCOMPRESS ALIGN 32
- {
- *(.bss.nocache)
- }
- ; The required minimum ending alignment is a 32 byte boundary for Armv8-M MPU requirements.
- ; There is no way to control the ending alignment of NOCACHE, so this dedicated section acts as padding and as the true execution section limit of NOCACHE.
- NOCACHE_PAD (ImageLimit(NOCACHE)) EMPTY NOCOMPRESS (AlignExpr(ImageLength(NOCACHE), 32) - ImageLength(NOCACHE))
- {
- }
- ARM_LIB_HEAP +0 ALIGN 8 UNINIT NOCOMPRESS
- {
- *(.bss.heap)
- }
- ; ARM_LIB_STACK is not used in FSP, but it must be in the scatter file to avoid a linker error
- ARM_LIB_STACK +0 ALIGN 8 UNINIT NOCOMPRESS EMPTY 0
- {
- }
- STACK +0 ALIGN 8 UNINIT NOCOMPRESS
- {
- *(.bss.stack)
- *(.bss.stack.thread)
- }
- /* This is the end of RAM used in the application. */
- RAM_END +0 EMPTY 4
- {
- }
- __RAM_NSC_START RAM_NSC_START EMPTY 0
- {
- }
- __tz_RAM_N RAM_NS_START EMPTY 0
- {
- }
- ; Support for OctaRAM
- OSPI_DEVICE_0_NO_LOAD OSPI_DEVICE_0_START UNINIT NOCOMPRESS
- {
- *(.ospi_device_0_no_load*)
- }
- ; Support for OctaRAM
- OSPI_DEVICE_1_NO_LOAD OSPI_DEVICE_1_START UNINIT NOCOMPRESS
- {
- *(.ospi_device_1_no_load*)
- }
- #ifdef FLASH_BOOTLOADER_LENGTH
- __bl_FLASH_IMAGE_START BL_FLASH_IMAGE_START OVERLAY UNINIT 4
- {
- *(.bl_boundary.bl_flash_image_start)
- }
- __bl_XIP_SECONDARY_FLASH_IMAGE_START BL_XIP_SECONDARY_FLASH_IMAGE_START OVERLAY UNINIT 4
- {
- *(.bl_boundary.bl_xip_secondary_flash_image_start)
- }
- #if FLASH_APPLICATION_NS_LENGTH == 0
- __bl_FLASH_IMAGE_END BL_FLASH_IMAGE_END OVERLAY UNINIT 4
- {
- *(.bl_boundary.bl_flash_image_end)
- }
- __bl_XIP_SECONDARY_FLASH_IMAGE_END BL_XIP_SECONDARY_FLASH_IMAGE_END OVERLAY UNINIT 4
- {
- *(.bl_boundary.bl_xip_secondary_flash_image_end)
- }
- #else
- __bl_FLASH_NS_START BL_FLASH_NS_START OVERLAY UNINIT 4
- {
- *(.bl_boundary.bl_flash_ns_start)
- }
- __bl_FLASH_NSC_START BL_FLASH_NSC_START OVERLAY UNINIT 4
- {
- *(.bl_boundary.bl_flash_nsc_start)
- }
- __bl_FLASH_NS_IMAGE_START BL_FLASH_NS_IMAGE_START OVERLAY UNINIT 4
- {
- *(.bl_boundary.bl_flash_ns_image_start)
- }
- __bln_FLASH_IMAGE_START BLN_FLASH_IMAGE_START OVERLAY UNINIT 4
- {
- *(.bl_boundary.bln_flash_image_start)
- }
- __bln_FLASH_IMAGE_END BLN_FLASH_IMAGE_END OVERLAY UNINIT 4
- {
- *(.bl_boundary.bln_flash_image_end)
- }
- __bl_RAM_NS_START BL_RAM_NS_START OVERLAY UNINIT 4
- {
- *(.bl_boundary.bl_ram_ns_start)
- }
- __bl_RAM_NSC_START BL_RAM_NSC_START OVERLAY UNINIT 4
- {
- *(.bl_boundary.bl_ram_nsc_start)
- }
- #endif
- #endif
- #if __RESERVE_NS_RAM
- RAM_NS_BUFFER RAM_NS_BUFFER_START
- {
- *(.ns_buffer*)
- }
- #endif
- RAM_LIMIT RAM_START + RAM_LENGTH EMPTY 4
- {
- }
- #if ITCM_LENGTH > 0
- ; ALIGN will align both the load address and execution address.
- ; The required minimum execution address alignment is an 8 byte boundary for ECC compatibility.
- ; Aligning instead to a 16 byte boundary meets the above requirement and also aligns the load address to FCACHE2 for RA8 to optimize copying.
- __tz_ITCM_S ITCM_START ALIGN 16 EMPTY 0
- {
- }
- ITCM_DATA +0 NOCOMPRESS ITCM_LENGTH
- {
- *(.itcm_data*)
- }
- ; The required minimum ending alignment is an 8 byte boundary for ECC compatibility.
- ; There is no way to control the ending alignment of ITCM_DATA, so this dedicated section acts as padding and as the true load and execution section limit of ITCM_DATA.
- ; "Load Addr" will show "-" in the map file making it seem as if no padding is actually in the binary, but "Load base:" will show otherwise.
- ITCM_PAD (ImageLimit(ITCM_DATA)) FILL 0 NOCOMPRESS (AlignExpr(ImageLength(ITCM_DATA), 8) - ImageLength(ITCM_DATA))
- {
- }
- #ifndef ITCM_NS_START
- #define ITCM_NS_START AlignExpr(+0, 8192)
- #endif
- __tz_ITCM_N ITCM_NS_START ALIGN 8 EMPTY 0
- {
- }
- ScatterAssert((ITCM_START AND 0xF) == 0)
- ScatterAssert((ITCM_LENGTH AND 0x7) == 0)
- ScatterAssert(((LoadLength(ITCM_DATA) + LoadLength(ITCM_PAD)) AND 0x7) == 0)
- ScatterAssert(LoadLimit(ITCM_DATA) == LoadBase(ITCM_PAD))
- ScatterAssert(ImageLimit(ITCM_DATA) == ImageBase(ITCM_PAD))
- #endif
- #if DTCM_LENGTH > 0
- ; ALIGN will align both the load address and execution address.
- ; The required minimum execution address alignment is an 8 byte boundary for ECC compatibility.
- ; Aligning instead to a 16 byte boundary meets the above requirement and also aligns the load address to FCACHE2 for RA8 to optimize copying.
- __tz_DTCM_S DTCM_START ALIGN 16 EMPTY 0
- {
- }
- DTCM_DATA +0 NOCOMPRESS DTCM_LENGTH
- {
- *(.dtcm_data*)
- }
- ; The required minimum ending alignment is an 8 byte boundary for ECC compatibility.
- ; There is no way to control the ending alignment of DTCM_DATA, so this dedicated section acts as padding and as the true load and execution section limit of DTCM_DATA.
- ; "Load Addr" will show "-" in the map file making it seem as if no padding is actually in the binary, but "Load base:" will show otherwise.
- DTCM_PAD (ImageLimit(DTCM_DATA)) FILL 0 NOCOMPRESS (AlignExpr(ImageLength(DTCM_DATA), 8) - ImageLength(DTCM_DATA))
- {
- }
- DTCM_BSS (ImageLimit(DTCM_PAD)) UNINIT NOCOMPRESS (DTCM_LENGTH - ImageLength(DTCM_DATA) - ImageLength(DTCM_PAD))
- {
- ; .bss prefix is required for AC6 to not create a load image data for this section.
- ; Only .bss prefixed sections can be ZI.
- ; Only ZI sections with UNINIT can be uninitialized.
- *(.bss.dtcm_bss)
- }
- ; The required minimum ending alignment is an 8 byte boundary for ECC compatibility.
- ; There is no way to control the ending alignment of DTCM_BSS, so this dedicated section acts as padding and as the true execution section limit of DTCM_BSS.
- DTCM_BSS_PAD (ImageLimit(DTCM_BSS)) EMPTY NOCOMPRESS (AlignExpr(ImageLength(DTCM_BSS), 8) - ImageLength(DTCM_BSS))
- {
- }
- #ifndef DTCM_NS_START
- #define DTCM_NS_START AlignExpr(+0, 8192)
- #endif
- __tz_DTCM_N DTCM_NS_START ALIGN 8 EMPTY 0
- {
- }
- ScatterAssert((DTCM_START AND 0xF) == 0)
- ScatterAssert((DTCM_LENGTH AND 0x7) == 0)
- ScatterAssert(((LoadLength(DTCM_DATA) + LoadLength(DTCM_PAD)) AND 0x7) == 0)
- ScatterAssert(((ImageLength(DTCM_BSS) + ImageLength(DTCM_BSS_PAD)) AND 0x7) == 0)
- ScatterAssert(LoadLimit(DTCM_DATA) == LoadBase(DTCM_PAD))
- ScatterAssert(LoadLimit(DTCM_PAD) == LoadBase(DTCM_BSS))
- ScatterAssert(LoadLimit(DTCM_BSS) == LoadBase(DTCM_BSS_PAD))
- ScatterAssert(ImageLimit(DTCM_DATA) == ImageBase(DTCM_PAD))
- ScatterAssert(ImageLimit(DTCM_PAD) == ImageBase(DTCM_BSS))
- ScatterAssert(ImageLimit(DTCM_BSS) == ImageBase(DTCM_BSS_PAD))
- #endif
- }
- LOAD_REGION_NSC_FLASH FLASH_NSC_START
- {
- __FLASH_NSC_START FLASH_NSC_START EMPTY 0
- {
- }
- EXEC_NSCR FLASH_NSC_START FIXED
- {
- *(Veneer$$CMSE)
- }
- __tz_FLASH_N FLASH_NS_START EMPTY 0
- {
- }
- }
- #if ID_CODE_OVERLAP == 0
- #if ID_CODE_LENGTH != 0
- LOAD_REGION_ID_CODE ID_CODE_START ID_CODE_LENGTH
- {
- __tz_ID_CODE_S ID_CODE_START EMPTY 0
- {
- }
- ; Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE
- ; memory region between TrustZone projects.
- __tz_ID_CODE_N +0 EMPTY 0
- {
- }
- ID_CODE +0 FIXED
- {
- *(.id_code*)
- }
- }
- #else
- LOAD_REGION_ID_CODE ID_CODE_START 4
- {
- __tz_ID_CODE_S ID_CODE_START EMPTY 0
- {
- }
- __tz_ID_CODE_N +0 EMPTY 0
- {
- }
- }
- #endif
- #endif
- #if OPTION_SETTING_LENGTH != 0
- LOAD_REGION_OPTION_SETTING OPTION_SETTING_START OPTION_SETTING_LENGTH
- {
- __tz_OPTION_SETTING_S OPTION_SETTING_START EMPTY 0
- {
- }
- #ifndef PROJECT_NONSECURE
- OFS0 OPTION_SETTING_START + 0 FIXED
- {
- *(.option_setting_ofs0)
- }
- UNUSED_0 (ImageBase(OFS0)+ImageLength(OFS0)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x04 - (ImageBase(OFS0)+ImageLength(OFS0)))
- {
- }
- OFS2 OPTION_SETTING_START + 0x04 FIXED
- {
- *(.option_setting_ofs2)
- }
- UNUSED_1 (ImageBase(OFS2)+ImageLength(OFS2)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x10 - (ImageBase(OFS2)+ImageLength(OFS2)))
- {
- }
- DUALSEL OPTION_SETTING_START + 0x10 FIXED
- {
- *(.option_setting_dualsel)
- }
- #if ID_CODE_OVERLAP == 0
- UNUSED_2 (ImageBase(DUALSEL)+ImageLength(DUALSEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x34 - (ImageBase(DUALSEL)+ImageLength(DUALSEL)))
- {
- }
- #else
- UNUSED_BEFORE_ID_CODE (ImageBase(DUALSEL)+ImageLength(DUALSEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x20 - (ImageBase(DUALSEL)+ImageLength(DUALSEL)))
- {
- }
- __tz_ID_CODE_S ID_CODE_START EMPTY 0
- {
- }
- ; Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE
- ; memory region between TrustZone projects.
- __tz_ID_CODE_N +0 EMPTY 0
- {
- }
- ID_CODE ID_CODE_START FIXED
- {
- *(.id_code*)
- }
- UNUSED_AFTER_ID_CODE (ID_CODE_START + ID_CODE_LENGTH) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x34 - (ID_CODE_START + ID_CODE_LENGTH) )
- {
- }
- #endif
- SAS OPTION_SETTING_START + 0x34 FIXED
- {
- *(.option_setting_sas)
- }
- UNUSED_3 (ImageBase(SAS)+ImageLength(SAS)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x80 - (ImageBase(SAS)+ImageLength(SAS)))
- {
- }
- __tz_OPTION_SETTING_N OPTION_SETTING_START_NS EMPTY 0
- {
- }
- #else
- __tz_OPTION_SETTING_N OPTION_SETTING_START EMPTY 0
- {
- }
- OFS1 OPTION_SETTING_START FIXED
- {
- *(.option_setting_ofs1)
- }
- UNUSED_4 (ImageBase(OFS1)+ImageLength(OFS1)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1) + 0x04 - (ImageBase(OFS1)+ImageLength(OFS1)))
- {
- }
- OFS3 OPTION_SETTING_START + 0x04 FIXED
- {
- *(.option_setting_ofs3)
- }
- UNUSED_5 (ImageBase(OFS3)+ImageLength(OFS3)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1) + 0x10 - (ImageBase(OFS3)+ImageLength(OFS3)))
- {
- }
- BANKSEL OPTION_SETTING_START + 0x10 FIXED
- {
- *(.option_setting_banksel)
- }
- UNUSED_6 (ImageBase(BANKSEL)+ImageLength(BANKSEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1) + 0x40 - (ImageBase(BANKSEL)+ImageLength(BANKSEL)))
- {
- }
- BPS OPTION_SETTING_START + 0x40 FIXED
- {
- *(.option_setting_bps0)
- *(.option_setting_bps1)
- *(.option_setting_bps2)
- *(.option_setting_bps3)
- }
- UNUSED_7 (ImageBase(BPS)+ImageLength(BPS)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1) + 0x60 - (ImageBase(BPS)+ImageLength(BPS)))
- {
- }
- PBPS OPTION_SETTING_START + 0x60 FIXED
- {
- *(.option_setting_pbps0)
- *(.option_setting_pbps1)
- *(.option_setting_pbps2)
- *(.option_setting_pbps3)
- }
- UNUSED_8 (ImageBase(PBPS)+ImageLength(PBPS)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1) + 0x80 - (ImageBase(PBPS)+ImageLength(PBPS)))
- {
- }
- #endif
- }
- #if OPTION_SETTING_S_LENGTH != 0
- LOAD_REGION_OPTION_SETTING_S OPTION_SETTING_S_START OPTION_SETTING_S_LENGTH
- {
- __tz_OPTION_SETTING_S_S OPTION_SETTING_S_START EMPTY 0
- {
- }
- #ifndef PROJECT_NONSECURE
- OFS1_SEC OPTION_SETTING_S_START + 0 FIXED
- {
- *(.option_setting_ofs1_sec)
- }
- UNUSED_7 (ImageBase(OFS1_SEC)+ImageLength(OFS1_SEC)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x04 - (ImageBase(OFS1_SEC)+ImageLength(OFS1_SEC)))
- {
- }
- OFS3_SEC OPTION_SETTING_S_START + 0x04 FIXED
- {
- *(.option_setting_ofs3_sec)
- }
- UNUSED_8 (ImageBase(OFS3_SEC)+ImageLength(OFS3_SEC)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x10 - (ImageBase(OFS3_SEC)+ImageLength(OFS3_SEC)))
- {
- }
- BANKSEL_SEC OPTION_SETTING_S_START + 0x10 FIXED
- {
- *(.option_setting_banksel_sec)
- }
- UNUSED_9 (ImageBase(BANKSEL_SEC)+ImageLength(BANKSEL_SEC)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x40 - (ImageBase(BANKSEL_SEC)+ImageLength(BANKSEL_SEC)))
- {
- }
- BPS_SEC OPTION_SETTING_S_START + 0x40 FIXED
- {
- *(.option_setting_bps_sec0)
- *(.option_setting_bps_sec1)
- *(.option_setting_bps_sec2)
- *(.option_setting_bps_sec3)
- }
- UNUSED_10 (ImageBase(BPS_SEC)+ImageLength(BPS_SEC)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x60 - (ImageBase(BPS_SEC)+ImageLength(BPS_SEC)))
- {
- }
- PBPS_SEC OPTION_SETTING_S_START + 0x60 FIXED
- {
- *(.option_setting_pbps_sec0)
- *(.option_setting_pbps_sec1)
- *(.option_setting_pbps_sec2)
- *(.option_setting_pbps_sec3)
- }
- UNUSED_11 (ImageBase(PBPS_SEC)+ImageLength(PBPS_SEC)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x80 - (ImageBase(PBPS_SEC)+ImageLength(PBPS_SEC)))
- {
- }
- OFS1_SEL OPTION_SETTING_S_START + 0x80 FIXED
- {
- *(.option_setting_ofs1_sel)
- }
- UNUSED_12 (ImageBase(OFS1_SEL)+ImageLength(OFS1_SEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x84 - (ImageBase(OFS1_SEL)+ImageLength(OFS1_SEL)))
- {
- }
- OFS3_SEL OPTION_SETTING_S_START + 0x84 FIXED
- {
- *(.option_setting_ofs3_sel)
- }
- UNUSED_13 (ImageBase(OFS3_SEL)+ImageLength(OFS3_SEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x90 - (ImageBase(OFS3_SEL)+ImageLength(OFS3_SEL)))
- {
- }
- BANKSEL_SEL OPTION_SETTING_S_START + 0x90 FIXED
- {
- *(.option_setting_banksel_sel)
- }
- UNUSED_14 (ImageBase(BANKSEL_SEL)+ImageLength(BANKSEL_SEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0xC0 - (ImageBase(BANKSEL_SEL)+ImageLength(BANKSEL_SEL)))
- {
- }
- BPS_SEL OPTION_SETTING_S_START + 0xC0 FIXED
- {
- *(.option_setting_bps_sel0)
- *(.option_setting_bps_sel1)
- *(.option_setting_bps_sel2)
- *(.option_setting_bps_sel3)
- }
- UNUSED_15 (ImageBase(BPS_SEL)+ImageLength(BPS_SEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x100 - (ImageBase(BPS_SEL)+ImageLength(BPS_SEL)))
- {
- }
- #endif
- __tz_OPTION_SETTING_S_N +0 EMPTY 0
- {
- }
- }
- #endif
- #endif
- #if OPTION_SETTING_DATA_FLASH_S_LENGTH != 0
- LOAD_REGION_OPTION_SETTING_DATA_FLASH_S OPTION_SETTING_DATA_FLASH_S_START OPTION_SETTING_DATA_FLASH_S_LENGTH
- {
- __tz_OPTION_SETTING_DATA_FLASH_S_S OPTION_SETTING_DATA_FLASH_S_START EMPTY 0
- {
- }
- #ifndef PROJECT_NONSECURE
- FSBLCTRL0 OPTION_SETTING_DATA_FLASH_S_START + 0x0 FIXED
- {
- *(.option_setting_data_flash_fsblctrl0)
- }
- UNUSED_16 (ImageBase(FSBLCTRL0)+ImageLength(FSBLCTRL0)) FIXED FILL 0xFFFFFFFF (ImageBase(FSBLCTRL0) + 0x04 - (ImageBase(FSBLCTRL0)+ImageLength(FSBLCTRL0)))
- {
- }
- FSBLCTRL1 OPTION_SETTING_DATA_FLASH_S_START + 0x04 FIXED
- {
- *(.option_setting_data_flash_fsblctrl1)
- }
- UNUSED_17 (ImageBase(FSBLCTRL1)+ImageLength(FSBLCTRL1)) FIXED FILL 0xFFFFFFFF (ImageBase(FSBLCTRL0) + 0x08 - (ImageBase(FSBLCTRL1)+ImageLength(FSBLCTRL1)))
- {
- }
- FSBLCTRL2 OPTION_SETTING_DATA_FLASH_S_START + 0x08 FIXED
- {
- *(.option_setting_data_flash_fsblctrl2)
- }
- UNUSED_18 (ImageBase(FSBLCTRL2)+ImageLength(FSBLCTRL2)) FIXED FILL 0xFFFFFFFF (ImageBase(FSBLCTRL0) + 0x0C - (ImageBase(FSBLCTRL2)+ImageLength(FSBLCTRL2)))
- {
- }
- SACC0 OPTION_SETTING_DATA_FLASH_S_START + 0x0C FIXED
- {
- *(.option_setting_data_flash_sacc0)
- }
- UNUSED_19 (ImageBase(SACC0)+ImageLength(SACC0)) FIXED FILL 0xFFFFFFFF (ImageBase(FSBLCTRL0) + 0x010 - (ImageBase(SACC0)+ImageLength(SACC0)))
- {
- }
- SACC1 OPTION_SETTING_DATA_FLASH_S_START + 0x10 FIXED
- {
- *(.option_setting_data_flash_sacc1)
- }
- UNUSED_20 (ImageBase(SACC1)+ImageLength(SACC1)) FIXED FILL 0xFFFFFFFF (ImageBase(FSBLCTRL0) + 0x14 - (ImageBase(SACC1)+ImageLength(SACC1)))
- {
- }
- SAMR OPTION_SETTING_DATA_FLASH_S_START + 0x14 FIXED
- {
- *(.option_setting_data_flash_samr)
- }
- UNUSED_21 (ImageBase(SAMR)+ImageLength(SAMR)) FIXED FILL 0xFFFFFFFF (ImageBase(FSBLCTRL0) + 0x2E0 - (ImageBase(SAMR)+ImageLength(SAMR)))
- {
- }
- HOEMRTPK OPTION_SETTING_DATA_FLASH_S_START + 0x2E0 FIXED
- {
- *(.option_setting_data_flash_hoemrtpk)
- }
- UNUSED_22 (ImageBase(HOEMRTPK)+ImageLength(HOEMRTPK)) FIXED FILL 0xFFFFFFFF (ImageBase(FSBLCTRL0) + 0x300 - (ImageBase(HOEMRTPK)+ImageLength(HOEMRTPK)))
- {
- }
- #endif
- __tz_OPTION_SETTING_DATA_FLASH_S_N +0 EMPTY 0
- {
- }
- }
- #endif
- LOAD_REGION_DATA_FLASH DATA_FLASH_START DATA_FLASH_LENGTH
- {
- __tz_DATA_FLASH_S DATA_FLASH_S_START EMPTY 0
- {
- }
- DATA_FLASH +0
- {
- *(.data_flash*)
- }
- __tz_DATA_FLASH_N DATA_FLASH_NS_START EMPTY 0
- {
- }
- }
- LOAD_REGION_QSPI_FLASH QSPI_FLASH_START QSPI_FLASH_PRV_LENGTH
- {
- __tz_QSPI_FLASH_S QSPI_FLASH_S_START EMPTY 0
- {
- }
- QSPI_FLASH +0 FIXED
- {
- *(.qspi_flash*)
- *(.code_in_qspi*)
- }
- __tz_QSPI_FLASH_N QSPI_FLASH_NS_START EMPTY 0
- {
- }
- }
- LOAD_REGION_OSPI_DEVICE_0 OSPI_DEVICE_0_START OSPI_DEVICE_0_PRV_LENGTH
- {
- __tz_OSPI_DEVICE_0_S OSPI_DEVICE_0_S_START EMPTY 0
- {
- }
- OSPI_DEVICE_0 +0 FIXED
- {
- *(.ospi_device_0*)
- *(.code_in_ospi_device_0*)
- }
- __tz_OSPI_DEVICE_0_N OSPI_DEVICE_0_NS_START EMPTY 0
- {
- }
- }
- LOAD_REGION_OSPI_DEVICE_1 OSPI_DEVICE_1_START OSPI_DEVICE_1_PRV_LENGTH
- {
- __tz_OSPI_DEVICE_1_S OSPI_DEVICE_1_S_START EMPTY 0
- {
- }
- OSPI_DEVICE_1 +0 FIXED
- {
- *(.ospi_device_1*)
- *(.code_in_ospi_device_1*)
- }
- __tz_OSPI_DEVICE_1_N OSPI_DEVICE_1_NS_START EMPTY 0
- {
- }
- }
- LOAD_REGION_SDRAM SDRAM_START SDRAM_LENGTH
- {
- __tz_SDRAM_S SDRAM_S_START EMPTY 0
- {
- }
- SDRAM +0 FIXED
- {
- *(.sdram*)
- *(.frame*)
- }
- NOCACHE_SDRAM +0 UNINIT NOCOMPRESS ALIGN 32
- {
- *(.bss.nocache_sdram)
- }
- ; The required minimum ending alignment is a 32 byte boundary for Armv8-M MPU requirements.
- ; There is no way to control the ending alignment of NOCACHE_SDRAM, so this dedicated section acts as padding and as the true execution section limit of NOCACHE_SDRAM.
- NOCACHE_SDRAM_PAD (ImageLimit(NOCACHE_SDRAM)) EMPTY NOCOMPRESS (AlignExpr(ImageLength(NOCACHE_SDRAM), 32) - ImageLength(NOCACHE_SDRAM))
- {
- }
- __tz_SDRAM_N SDRAM_NS_START EMPTY 0
- {
- }
- }
|