blob: 0ed6b74099b710f75d1b1326383dd7d70394ff81 [file] [log] [blame]
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 */
__RAM_START = 0x4200C000;
__RAM_END = 0x4200C000 + 256K - __EM_SIZE; /* leave 8K left for BLE */
__RAM_TCM_LEN = (16K + 16K + 48K + 64K + 64K - 16K - 16K);
__RAM_WIFI_LEN = (__RAM_END - __RAM_START - __RAM_TCM_LEN);
MEMORY
{
rom (rxai!w) : ORIGIN = 0x21015000, LENGTH = 44K
flash (rxai!w) : ORIGIN = 0x23000000, LENGTH = 4M
/* ram_tcm (wxa) : ORIGIN = 0x4200C000, LENGTH = (16K + 16K + 48K + 64K + 64K + 8K - __EM_SIZE) put itcm with dtam and also OCRAM*/
/* ram_wifi (wxa) : ORIGIN = 0x42042000 - __EM_SIZE, LENGTH = (8K + 104K - 64K - 8K) leave 8K left for BLE*/
ram_tcm (wxa) : ORIGIN = __RAM_START, LENGTH = __RAM_TCM_LEN
ram_wifi (wxa) : ORIGIN = __RAM_START + __RAM_TCM_LEN, LENGTH = __RAM_WIFI_LEN
}
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 :
{
*(.text.unlikely .text.unlikely.*)
*(.text.startup .text.startup.*)
*(.text .text.*)
*(.gnu.linkonce.t.*)
} > flash
.rodata :
{
*(.rdata)
*(.rodata .rodata.*)
*(.sdata2.*)
/* static cli cmds */
. = ALIGN(4);
_bl_static_cli_cmds_start = .;
KEEP(*(.static_cli_cmds))
*(.static_cli_cmds)
_bl_static_cli_cmds_end = .;
/* CI cmds */
. = ALIGN(4);
KEEP(*(.ctest))
/* static fw attribute entry */
. = ALIGN(4);
_bl_static_fw_cfg_entry_start = .;
KEEP(*(.wifi.cfg.entry))
_bl_static_fw_cfg_entry_end = .;
/* static blog code1 */
. = ALIGN(4);
_bl_static_blogcomponent_code_start = .;
KEEP(SORT(*)(.static_blogcomponent_code*))
*(.static_blogcomponent_code*)
_bl_static_blogcomponent_code_end = .;
/* static blog code2 */
. = ALIGN(4);
_bl_static_blogfile_code_start = .;
KEEP(SORT(*)(.static_blogfile_code*))
*(.static_blogfile_code*)
_bl_static_blogfile_code_end = .;
/* static blog code3 */
. = ALIGN(4);
_bl_static_blogpri_code_start = .;
KEEP(SORT(*)(.static_blogpri_code*))
*(.static_blogpri_code*)
_bl_static_blogpri_code_end = .;
*(.gnu.linkonce.r.*)
/*Framework table section, use ALIGN here to avoid fill section*/
. = ALIGN(4);
_rom_framework_audio_device_start = .;
KEEP(*(.framework.audio_device))
_rom_framework_audio_device_end = .;
} > flash
.preinit_array :
{
. = ALIGN(4);
__preinit_array_start = .;
KEEP (*(.preinit_array))
__preinit_array_end = .;
} > flash
.init_array :
{
. = ALIGN(4);
__init_array_start = .;
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*)))
KEEP (*(.init_array))
__init_array_end = .;
} > 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 :
{
/*always put freetos under global_pointer with the following order. No change!*/
PROVIDE( __global_pointer_head$ = . );
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.*)
. = ALIGN(8);
*(._k_queue.static.*)
*(._k_sem.static.*)
*(._k_mutex.static.*)
_bt_gatt_service_static_list_start = .;
KEEP(*(SORT_BY_NAME("._bt_gatt_service_static.static.*")))
_bt_gatt_service_static_list_end = .;
_bt_l2cap_fixed_chan_list_start = .;
KEEP(*(SORT_BY_NAME("._bt_l2cap_fixed_chan.static.*")))
_bt_l2cap_fixed_chan_list_end = .;
/* For BFLB Coredump */
_coredump_binary_id_start = . - ADDR(.data) + LOADADDR(.data);
KEEP(*(.coredump_binary_id))
} > ram_tcm AT > flash
.boot2 (NOLOAD) :
{
PROVIDE ( __boot2_pt_addr_start = . );
*(.bss.boot2_partition_table)
PROVIDE ( __boot2_pt_addr_end = . );
PROVIDE ( __boot2_flashCfg_start = . );
*(.bss.boot2_flashCfg)
PROVIDE ( __boot2_flashCfg_end = . );
} > ram_tcm
.bss (NOLOAD) :
{
PROVIDE( __bss_start = ADDR(.bss) );
PROVIDE( __bss_end = ADDR(.bss) + SIZEOF(.bss) );
*(.sbss*)
*(.gnu.linkonce.sb.*)
*(.bss .bss.*)
*(.gnu.linkonce.b.*)
*(COMMON)
} > ram_tcm
.stack (NOLOAD) :
{
PROVIDE ( _sp_base = . );
. = ALIGN(16);
. = . + __stack_size;
PROVIDE( _sp_main = . );
__freertos_irq_stack_top = .;
}
PROVIDE( _heap_start = . );
PROVIDE( _heap_size = ORIGIN(ram_tcm) + LENGTH(ram_tcm) - _heap_start );
/*SYMOBOL used in code*/
PROVIDE( _ld_bl_static_cli_cmds_start = _bl_static_cli_cmds_start );
PROVIDE( _ld_bl_static_cli_cmds_end = _bl_static_cli_cmds_end );
/*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 );
/* blog */
PROVIDE( _ld_bl_static_blogcomponent_code_start = _bl_static_blogcomponent_code_start );
PROVIDE( _ld_bl_static_blogcomponent_code_end = _bl_static_blogcomponent_code_end );
PROVIDE( _ld_bl_static_blogfile_code_start = _bl_static_blogfile_code_start );
PROVIDE( _ld_bl_static_blogfile_code_end = _bl_static_blogfile_code_end );
PROVIDE( _ld_bl_static_blogpri_code_start = _bl_static_blogpri_code_start );
PROVIDE( _ld_bl_static_blogpri_code_end = _bl_static_blogpri_code_end );
PROVIDE( _ld_ram_size0 = LENGTH(flash) );
PROVIDE( _ld_ram_addr0 = ORIGIN(flash) );
PROVIDE( _ld_ram_size1 = LENGTH(ram_tcm) );
PROVIDE( _ld_ram_addr1 = ORIGIN(ram_tcm) );
PROVIDE( _ld_ram_size2 = LENGTH(ram_wifi) );
PROVIDE( _ld_ram_addr2 = ORIGIN(ram_wifi) );
/*BOOT2 sections*/
PROVIDE ( __boot2_pt_addr_src = BOOT2_PT_ADDR );
PROVIDE ( __boot2_flashCfg_src = BOOT2_FLASHCFG_ADDR );
PROVIDE(__LD_CONFIG_EM_SEL = __EM_SIZE);
PROVIDE( _ld_symbol_rom_framework_audio_device_start = _rom_framework_audio_device_start);
PROVIDE( _ld_symbol_rom_framework_audio_device_end = _rom_framework_audio_device_end);
}