04e40182ad
Although almost all board support allocating idle stack after ebss, bl602 have a different memory layout for idle stack. To unify them, make idle stack allocated from ebss for bl602. Signed-off-by: Inochi Amaoto <inochiama@outlook.com>
191 lines
4.3 KiB
Plaintext
191 lines
4.3 KiB
Plaintext
OUTPUT_ARCH( "riscv" )
|
|
|
|
ENTRY( bl602_start )
|
|
|
|
__EM_SIZE = DEFINED(ble_controller_init) ? 8K : 0K;
|
|
__RFTLV_SIZE_OFFSET = 1K;
|
|
__RFTLV_SIZE_HOLE = 2K;
|
|
__RFTLV_HEAD1_H = (0x46524C42); /* BLRF */
|
|
__RFTLV_HEAD1_L = (0x41524150); /* PAPA */
|
|
|
|
MEMORY
|
|
{
|
|
rom (rxai!w) : ORIGIN = 0x21015000, LENGTH = 44K
|
|
flash (rxai!w) : ORIGIN = 0x23000000, LENGTH = 4M
|
|
ram_tcm (wxa) : ORIGIN = 0x42010000, LENGTH = (32K + 48K + 64K - 16K) /* itcm_32 + dtcm_48 + ocram_64 */
|
|
ram_wifi (wxa) : ORIGIN = 0x42030000, LENGTH = (112K - 8K) /* 8K left for em */
|
|
}
|
|
|
|
SECTIONS
|
|
{
|
|
/* __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; */
|
|
BOOT2_PT_ADDR = 0x42049C00;
|
|
BOOT2_FLASHCFG_ADDR = 0x42049c18;
|
|
|
|
.init :
|
|
{
|
|
KEEP (*(SORT_NONE(.init)))
|
|
} > flash
|
|
|
|
/* value for rftlv */
|
|
|
|
.rftlv.tool :
|
|
{
|
|
. = ORIGIN(flash) + __RFTLV_SIZE_OFFSET;
|
|
PROVIDE( _ld_symbol_rftlv_address = . );
|
|
LONG(__RFTLV_HEAD1_H);
|
|
LONG(__RFTLV_HEAD1_L);
|
|
. = ORIGIN(flash) + __RFTLV_SIZE_OFFSET + __RFTLV_SIZE_HOLE;
|
|
} > flash
|
|
|
|
.text :
|
|
{
|
|
PROVIDE(_stext = .);
|
|
*(.text.unlikely .text.unlikely.*)
|
|
*(.text.startup .text.startup.*)
|
|
*(.text .text.*)
|
|
*(.gnu.linkonce.t.*)
|
|
PROVIDE(_etext = .);
|
|
} > flash
|
|
|
|
.rodata :
|
|
{
|
|
*(.rdata)
|
|
*(.rodata .rodata.*)
|
|
*(.sdata2.*)
|
|
|
|
/* static fw attribute entry */
|
|
. = ALIGN(4);
|
|
_bl_static_fw_cfg_entry_start = .;
|
|
KEEP(*(.wifi.cfg.entry))
|
|
_bl_static_fw_cfg_entry_end = .;
|
|
|
|
*(.gnu.linkonce.r.*)
|
|
} > flash
|
|
|
|
.preinit_array :
|
|
{
|
|
. = ALIGN(4);
|
|
__preinit_array_start = .;
|
|
KEEP (*(.preinit_array))
|
|
__preinit_array_end = .;
|
|
} > flash
|
|
|
|
.init_array :
|
|
{
|
|
. = ALIGN(4);
|
|
__init_array_start = .;
|
|
_sinit = .;
|
|
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*)))
|
|
KEEP (*(.init_array))
|
|
__init_array_end = .;
|
|
_einit = .;
|
|
} > flash
|
|
|
|
.tdata :
|
|
{
|
|
_stdata = ABSOLUTE(.);
|
|
*(.tdata .tdata.* .gnu.linkonce.td.*);
|
|
_etdata = ABSOLUTE(.);
|
|
} > flash
|
|
|
|
.tbss :
|
|
{
|
|
_stbss = ABSOLUTE(.);
|
|
*(.tbss .tbss.* .gnu.linkonce.tb.* .tcommon);
|
|
_etbss = ABSOLUTE(.);
|
|
} > flash
|
|
|
|
/*put wifibss in the first place*/
|
|
.wifibss (NOLOAD) :
|
|
{
|
|
PROVIDE( __wifi_bss_start = ADDR(.wifibss) );
|
|
PROVIDE( __wifi_bss_end = ADDR(.wifibss) + SIZEOF(.wifibss) );
|
|
*ipc_shared.o(COMMON)
|
|
*sdu_shared.o(COMMON)
|
|
*hal_desc.o(COMMON)
|
|
*txl_buffer_shared.o(COMMON)
|
|
*txl_frame_shared.o(COMMON)
|
|
*scan_shared.o(COMMON)
|
|
*scanu_shared.o(COMMON)
|
|
*mfp_bip.o(COMMON)
|
|
*me_mic.o(COMMON)
|
|
*bl_sta_mgmt_others.o(COMMON)
|
|
*bl_pmk_mgmt.o(COMMON)
|
|
*bl_pmk_mgmt_internal.o(COMMON)
|
|
*libwifi_drv.a:bl_utils.o(COMMON)
|
|
*libwifi_drv.a:bl_utils.o(.bss*)
|
|
*(.wifi_ram*)
|
|
. = ALIGN(16);
|
|
} > ram_wifi
|
|
|
|
PROVIDE( _heap_wifi_start = . );
|
|
PROVIDE( _heap_wifi_size = ORIGIN(ram_wifi) + LENGTH(ram_wifi) - _heap_wifi_start );
|
|
|
|
.romdata :
|
|
{
|
|
PROVIDE( __global_pointer$ = . + 0x7F0 );
|
|
. = . + 0x498;
|
|
} > ram_tcm AT > flash
|
|
|
|
.data :
|
|
{
|
|
PROVIDE( _data_load = LOADADDR(.data) );
|
|
PROVIDE( _data_run = ADDR(.data) );
|
|
PROVIDE( _data_run_end = ADDR(.data) + SIZEOF(.data));
|
|
|
|
*(.tcm_code)
|
|
*(.tcm_const)
|
|
*(.sclock_rlt_code)
|
|
*(.sclock_rlt_const)
|
|
*(.data .data.*)
|
|
*(.gnu.linkonce.d.*)
|
|
|
|
*(.sdata .sdata.*)
|
|
*(.gnu.linkonce.s.*)
|
|
|
|
. = ALIGN(8);
|
|
*(.srodata.cst16)
|
|
*(.srodata.cst8)
|
|
*(.srodata.cst4)
|
|
*(.srodata.cst2)
|
|
*(.srodata .srodata.*)
|
|
|
|
} > ram_tcm AT > flash
|
|
|
|
.boot2 (NOLOAD) :
|
|
{
|
|
PROVIDE ( __boot2_pt_addr_start = . );
|
|
*(.bss.g_boot2_partition_table)
|
|
PROVIDE ( __boot2_pt_addr_end = . );
|
|
|
|
PROVIDE ( __boot2_flash_cfg_start = . );
|
|
*(.bss.g_bl602_romflash_cfg)
|
|
PROVIDE ( __boot2_flash_cfg_end = . );
|
|
} > ram_tcm
|
|
|
|
.bss (NOLOAD) :
|
|
{
|
|
PROVIDE( _sbss = ADDR(.bss) );
|
|
|
|
*(.sbss*)
|
|
*(.gnu.linkonce.sb.*)
|
|
*(.bss .bss.*)
|
|
*(.gnu.linkonce.b.*)
|
|
*(COMMON)
|
|
. = ALIGN(32);
|
|
_ebss = ABSOLUTE(.);
|
|
} > ram_tcm
|
|
|
|
/* Heap end used in code */
|
|
PROVIDE(__heap_end = ORIGIN(ram_tcm) + LENGTH(ram_tcm));
|
|
|
|
/*CFG FW used in code*/
|
|
PROVIDE( _ld_bl_static_cfg_entry_start = _bl_static_fw_cfg_entry_start );
|
|
PROVIDE( _ld_bl_static_cfg_entry_end = _bl_static_fw_cfg_entry_end );
|
|
|
|
/*BOOT2 sections*/
|
|
PROVIDE ( __boot2_pt_addr_src = BOOT2_PT_ADDR );
|
|
PROVIDE ( __boot2_flash_cfg_src = BOOT2_FLASHCFG_ADDR );
|
|
}
|