| /* |
| * MT7933 CM33 Memory Map |
| */ |
| |
| HIDDEN(__STACK_SIZE = 0x1000); |
| HIDDEN(__SYSRAM_OFFSET = 0x0); |
| |
| OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") |
| OUTPUT_ARCH(arm) |
| |
| /* Entry Point */ |
| ENTRY(Reset_Handler) |
| |
| /* Memory Spaces Definitions: 16MB flash */ |
| MEMORY |
| { |
| ROM_BL(rx) : ORIGIN = 0x18000000, LENGTH = 64K |
| ROM_RBL(rx) : ORIGIN = 0x18010000, LENGTH = 8K |
| ROM_TFM(rx) : ORIGIN = 0x18012000, LENGTH = 200K |
| ROM_RTOS(rx) : ORIGIN = 0x18044000, LENGTH = 2092K |
| /* |
| Reserved : LENGTH = 228 K, 152 K For TFM |
| Free For Customer : LENGTH = 500 K |
| */ |
| ROM_FOTA(r) : ORIGIN = 0x18305000, LENGTH = 3968K |
| ROM_NVDM(rx) : ORIGIN = 0x186E5000, LENGTH = 64K |
| ROM_LOG(rx) : ORIGIN = 0x186F5000, LENGTH = 64K |
| ROM_BT(rx) : ORIGIN = 0x18705000, LENGTH = 304K |
| /* |
| Reserved For FW : LENGTH = 40 K |
| */ |
| ROM_WIFI_PWRTBL(rx): ORIGIN = 0x1875B000, LENGTH = 20K |
| ROM_WIFI_EXT(rx) : ORIGIN = 0x18760000, LENGTH = 636K |
| ROM_BUFFER_BIN(rx): ORIGIN = 0x187FF000, LENGTH = 4K |
| |
| TCM(rwx) : ORIGIN = 0x0010C000, LENGTH = 20K |
| RAM_WFFW(rwx) : ORIGIN = 0xA0000000, LENGTH = 312K |
| RAM(rwx) : ORIGIN = 0xA004E000, LENGTH = 3272K |
| RAM_TFM(rwx) : ORIGIN = 0xA0380000, LENGTH = 512K |
| SYSRAM(rwx) : ORIGIN = 0x80000000, LENGTH = 992K |
| /* |
| Reserved : LENGTH = 32K |
| */ |
| |
| VROM(rx) : ORIGIN = 0x18000000, LENGTH = 4096K |
| VRAM_WFFW(rwx) : ORIGIN = 0x10000000, LENGTH = 312K |
| VRAM(rwx) : ORIGIN = 0x1004E000, LENGTH = 3272K |
| VRAM_TFM(rwx) : ORIGIN = 0x10380000, LENGTH = 512K |
| VSYSRAM(rwx) : ORIGIN = 0x08000000, LENGTH = 992K |
| /* |
| Reserved : LENGTH = 32K |
| */ |
| } |
| |
| /**************************************************************************** |
| * |
| * FORWARD DECLARATIONS - SECTION SYMBOLS @ FLASH PHYSICAL ADDRESS |
| * |
| ****************************************************************************/ |
| |
| |
| _rom_bl_start = ORIGIN(ROM_BL) - ORIGIN(ROM_BL); |
| _rom_bl_length = LENGTH(ROM_BL); |
| _rom_rbl_start = ORIGIN(ROM_RBL) - ORIGIN(ROM_BL); |
| _rom_rbl_length = LENGTH(ROM_RBL); |
| _rom_tfm_start = ORIGIN(ROM_TFM) - ORIGIN(ROM_BL); |
| _rom_tfm_length = LENGTH(ROM_TFM); |
| _rom_rtos_start = ORIGIN(ROM_RTOS) - ORIGIN(ROM_BL); |
| _rom_rtos_length = LENGTH(ROM_RTOS); |
| _rom_fota_start = ORIGIN(ROM_FOTA) - ORIGIN(ROM_BL); |
| _rom_fota_length = LENGTH(ROM_FOTA); |
| _rom_wifi_patch_start = 0;/*ORIGIN(ROM_WIFI_PATCH) - ORIGIN(ROM_BL);*/ |
| _rom_wifi_patch_length = 0;/*LENGTH(ROM_WIFI_PATCH);*/ |
| _rom_wifi_start = 0;/*ORIGIN(ROM_WIFI) - ORIGIN(ROM_BL);*/ |
| _rom_wifi_length = 0;/*LENGTH(ROM_WIFI);*/ |
| _rom_wifi_ext_start = ORIGIN(ROM_WIFI_EXT) - ORIGIN(ROM_BL); |
| _rom_wifi_ext_length = LENGTH(ROM_WIFI_EXT); |
| _rom_wifi_pwrtbl_start = ORIGIN(ROM_WIFI_PWRTBL) - ORIGIN(ROM_BL); |
| _rom_wifi_pwrtbl_length = LENGTH(ROM_WIFI_PWRTBL); |
| _rom_buffer_bin_start = ORIGIN(ROM_BUFFER_BIN) - ORIGIN(ROM_BL); |
| _rom_buffer_bin_length = LENGTH(ROM_BUFFER_BIN); |
| _rom_bt_start = ORIGIN(ROM_BT) - ORIGIN(ROM_BL); |
| _rom_bt_length = LENGTH(ROM_BT); |
| _rom_nvdm_start = ORIGIN(ROM_NVDM) - ORIGIN(ROM_BL); |
| _rom_nvdm_length = LENGTH(ROM_NVDM); |
| _rom_log_start = ORIGIN(ROM_LOG) - ORIGIN(ROM_BL); |
| _rom_log_length = LENGTH(ROM_LOG); |
| |
| |
| /**************************************************************************** |
| * |
| * FORWARD DECLARATIONS - SECTION SYMBOLS @ MEMORY BUS ADDRESS |
| * |
| ****************************************************************************/ |
| |
| _xip_bl_addr = ORIGIN(ROM_BL); |
| _xip_rbl_addr = ORIGIN(ROM_RBL); |
| _xip_tfm_addr = ORIGIN(ROM_TFM); |
| _xip_rtos_addr = ORIGIN(ROM_RTOS); |
| _xip_nvdm_start = ORIGIN(ROM_NVDM); |
| _xip_log_start = ORIGIN(ROM_LOG); |
| _xip_bt_start = ORIGIN(ROM_BT); |
| |
| _sysram_start = ORIGIN(SYSRAM); |
| _sysram_length = LENGTH(SYSRAM); |
| _ram_start = ORIGIN(RAM); |
| _ram_length = LENGTH(RAM); |
| _ram_wifi_ext_start = ORIGIN(RAM_WFFW); |
| _ram_wifi_ext_length = LENGTH(RAM_WFFW); |
| _vram_start = ORIGIN(VRAM); |
| _vram_length = LENGTH(VRAM); |
| _vsysram_start = ORIGIN(VSYSRAM); |
| _vsysram_length = LENGTH(VSYSRAM); |
| _tcm_start = ORIGIN(TCM); |
| _tcm_length = LENGTH(TCM); |
| |
| /* Highest address of the stack */ |
| _stack_end = ORIGIN(TCM) + LENGTH(TCM); /* end of TCM */ |
| |
| /* stack start */ |
| _stack_start = _stack_end - __STACK_SIZE; |
| |
| /* SYSRAM Region0 Offset for BROM */ |
| _region0_offset = 0x13000 ; |
| |
| SECTIONS |
| { |
| . = ORIGIN(ROM_RTOS); |
| .text ALIGN(4): |
| { |
| _text_start = .; |
| KEEP(*(.vectorsTop)) |
| KEEP(*(.vectors)) |
| /* *(.text*) */ |
| *(EXCLUDE_FILE(*/iperf_task.o *sockets*.o *netbuf*.o *pbuf*.o */mem.o *api_lib*.o */def.o *api_msg*.o *sys_arch*.o *ip4*.o *ip4_addr*.o *udp*.o *inet_chksum*.o *tcp_out*.o *tcp*.o */netif.o */ethernet.o *etharp*.o */lwip_cli.o *portasm*.o *event_groups*.o */heap_ext.o */queue.o */tasks.o *list*.o *os_port_callback*.o */port.o *timers*.o *hal_nvic*.o *libc_nano*.a:*memset*.o *libc_nano*.a:*memcpy*.o *libminisupp.a:*mem*.o) .text*) |
| KEEP(*(.init)) |
| KEEP(*(.fini)) |
| *crtbegin.o(.ctors) |
| *crtbegin?.o(.ctors) |
| *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) |
| *(SORT(.ctors.*)) |
| *(.ctors) |
| *crtbegin.o(.dtors) |
| *crtbegin?.o(.dtors) |
| *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) |
| *(SORT(.dtors.*)) |
| *(.dtors) |
| *(.rodata*) |
| *(.rom_rtos) |
| KEEP(*(.eh_frame*)) |
| . = ALIGN(4); |
| _text_end = .; |
| } > ROM_RTOS AT> ROM_RTOS |
| |
| .ARM.extab : |
| { |
| *(.ARM.extab* .gnu.linkonce.armextab.*) |
| } > ROM_RTOS AT> ROM_RTOS |
| |
| __exidx_start = .; |
| .ARM.exidx : |
| { |
| *(.ARM.exidx* .gnu.linkonce.armexidx.*) |
| } > ROM_RTOS AT> ROM_RTOS |
| __exidx_end = .; |
| |
| . = ALIGN(32); |
| _sysram_code_load = LOADADDR(.sysram_text); |
| .sysram_text ORIGIN(VSYSRAM)+_region0_offset : |
| { |
| _sysram_code_start = .; |
| *(.sysram_code) |
| *(.text*) |
| *(.sysram_rodata) |
| . = ALIGN(4); |
| _sysram_code_end = .; |
| } > VSYSRAM AT> ROM_RTOS |
| |
| . = ALIGN(4); |
| _sysram_data_load = LOADADDR(.cached_sysram_data); |
| .cached_sysram_data : |
| { |
| _sysram_data_start = .; |
| *(vtable) |
| *(.data) |
| *(.data.*) |
| *(.sysram_rwdata) |
| . = ALIGN(4); |
| PROVIDE_HIDDEN (__preinit_array_start = .); |
| KEEP(*(.preinit_array)) |
| PROVIDE_HIDDEN (__preinit_array_end = .); |
| |
| . = ALIGN(4); |
| PROVIDE_HIDDEN (__init_array_start = .); |
| KEEP(*(SORT(.init_array.*))) |
| KEEP(*(.init_array)) |
| PROVIDE_HIDDEN (__init_array_end = .); |
| |
| . = ALIGN(4); |
| PROVIDE_HIDDEN (__fini_array_start = .); |
| KEEP(*(SORT(.fini_array.*))) |
| KEEP(*(.fini_array)) |
| PROVIDE_HIDDEN (__fini_array_end = .); |
| KEEP(*(.jcr*)) |
| . = ALIGN(4); |
| _sysram_data_end = .; |
| } > VSYSRAM AT> ROM_RTOS |
| |
| . = ALIGN(4); |
| .bss (NOLOAD) : |
| { |
| _sysram_bss_start = .; |
| *(.bss) |
| *(.bss.*) |
| *(COMMON) |
| *(.sysram_zidata) |
| *(.sysram_swla_zidata) |
| . = ALIGN(4); |
| _sysram_bss_end = .; |
| } > VSYSRAM AT> ROM_RTOS |
| |
| |
| . = ALIGN(32); |
| _noncached_sysram_code_load = LOADADDR(.noncached_sysram_text); |
| . = . + ORIGIN(SYSRAM) - ORIGIN(VSYSRAM); |
| .noncached_sysram_text . : |
| { |
| _noncached_sysram_code_start = .; |
| *(.noncached_sysram_code) |
| *(.noncached_sysram_rodata) |
| . = ALIGN(4); |
| _noncached_sysram_code_end = .; |
| } > SYSRAM AT> ROM_RTOS |
| |
| . = ALIGN(4); |
| _noncached_sysram_data_load = LOADADDR(.noncached_sysram_data); |
| .noncached_sysram_data . : |
| { |
| _noncached_sysram_data_start = .; |
| *(.noncached_sysram_rwdata) |
| *(.secure_settings_section) |
| . = ALIGN(4); |
| _noncached_sysram_data_end = .; |
| } > SYSRAM AT> ROM_RTOS |
| |
| . = ALIGN(4); |
| .noncached_sysram_bss . (NOLOAD) : |
| { |
| _noncached_sysram_bss_start = .; |
| *(.noncached_sysram_zidata) |
| . = ALIGN(4); |
| _noncached_sysram_bss_end = .; |
| } > SYSRAM AT> ROM_RTOS |
| |
| . = ALIGN(32); |
| .wffw_code (NOLOAD) : |
| { |
| *(.wf_firmware_emi_code) |
| . = ALIGN(4); |
| } > RAM_WFFW AT> ROM_RTOS |
| |
| . = ALIGN(32); |
| _ram_code_load = LOADADDR(.cached_ram_text); |
| .cached_ram_text : |
| { |
| _ram_code_start = .; |
| *(.ram_code) |
| *(.ram_rodata) |
| . = ALIGN(4); |
| _ram_code_end = .; |
| } > VRAM AT> ROM_RTOS |
| |
| . = ALIGN(4); |
| _ram_data_load = LOADADDR(.cached_ram_data); |
| .cached_ram_data : |
| { |
| _ram_data_start = .; |
| *(.ram_rwdata) |
| . = ALIGN(4); |
| _ram_data_end = .; |
| } > VRAM AT> ROM_RTOS |
| |
| . = ALIGN(4); |
| _ram_bss_load = LOADADDR(.cached_ram_bss); |
| .cached_ram_bss (NOLOAD) : |
| { |
| _ram_bss_start = .; |
| *(.ram_zidata) |
| . = ALIGN(4); |
| _ram_bss_end = .; |
| } > VRAM AT> ROM_RTOS |
| |
| . = ALIGN(32); |
| _noncached_ram_code_load = LOADADDR(.noncached_ram_text); |
| . = . + ORIGIN(RAM) - ORIGIN(VRAM); |
| .noncached_ram_text . : |
| { |
| _noncached_ram_code_start = .; |
| *(.noncached_ram_code) |
| *(.noncached_ram_rodata) |
| . = ALIGN(4); |
| _noncached_ram_code_end = .; |
| } > RAM AT> ROM_RTOS |
| |
| . = ALIGN(4); |
| _noncached_ram_data_load = LOADADDR(.noncached_ram_data); |
| .noncached_ram_data . : |
| { |
| _noncached_ram_data_start = .; |
| *(.noncached_ram_rwdata) |
| . = ALIGN(4); |
| _noncached_ram_data_end = .; |
| } > RAM AT> ROM_RTOS |
| |
| . = ALIGN(4); |
| _noncached_ram_bss_load = LOADADDR(.noncached_ram_bss); |
| .noncached_ram_bss . (NOLOAD) : |
| { |
| _noncached_ram_bss_start = .; |
| *(.noncached_ram_zidata) |
| . = ALIGN(4); |
| _noncached_ram_bss_end = .; |
| } > RAM AT> ROM_RTOS |
| |
| |
| . = ALIGN(4); |
| _tcm_code_load = LOADADDR(.tcm_text); |
| .tcm_text : |
| { |
| _tcm_code_start = .; |
| *(.tcm_code) |
| *(.tcm_rodata) |
| . = ALIGN(4); |
| _tcm_code_end = .; |
| }> TCM AT> ROM_RTOS |
| |
| . = ALIGN(4); |
| _tcm_data_load = LOADADDR(.tcm_data); |
| .tcm_data : |
| { |
| _tcm_data_start = .; |
| . = ALIGN(4); |
| *(.tcm_rwdata) |
| . = ALIGN(4); |
| _tcm_data_end = .; |
| }> TCM AT> ROM_RTOS |
| |
| . = ALIGN(4); |
| .tcm_bss (NOLOAD) : |
| { |
| _tcm_bss_start = .; |
| *(.tcm_zidata) |
| . = ALIGN(4); |
| *(.tcm_wakeup_info) |
| . = ALIGN(4); |
| _tcm_bss_end = .; |
| }> TCM AT> ROM_RTOS |
| |
| |
| __end__ = .; |
| |
| .mcuboot_tlv_rsvd (NOLOAD) : |
| { |
| /* reserve 512 bytes for imgtool.py TLVs */ |
| . = . + 512 ; |
| } > ROM_RTOS AT> ROM_RTOS |
| |
| .stack (ORIGIN(TCM) + LENGTH(TCM) - __STACK_SIZE) (COPY) : |
| { |
| . = ALIGN(4); |
| __StackLimit = .; |
| PROVIDE ( end = . ); |
| PROVIDE ( _end = . ); |
| . = . + __STACK_SIZE; |
| . = ALIGN(4); |
| __StackTop = .; |
| } > TCM |
| |
| PROVIDE(__stack = __StackTop); |
| |
| ASSERT(__StackLimit >= __end__, "region TCM overflowed with stack") |
| } |
| |
| |
| |