807 lines
15 KiB
C
807 lines
15 KiB
C
|
|
// *INDENT-OFF*
|
|||
|
|
#include "app_config.h"
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
| updata |
|
|||
|
|
|_______________|
|
|||
|
|
| ram1 |
|
|||
|
|
|_______________|
|
|||
|
|
| TLB |
|
|||
|
|
|_______________|
|
|||
|
|
| isr base | (HW fixed)
|
|||
|
|
|_______________|
|
|||
|
|
| ram0 |
|
|||
|
|
|_______________|
|
|||
|
|
| DCACHE |
|
|||
|
|
|_______________|
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
RAM1_LIMIT_L = 0x2C000;
|
|||
|
|
RAM1_LIMIT_H = 0x30000;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/********************************************/
|
|||
|
|
/* 0x2FF80 ~ 0x30000 */
|
|||
|
|
/********************************************/
|
|||
|
|
UPDATA_SIZE = 0x80;
|
|||
|
|
UPDATA_BEG = RAM1_LIMIT_H - UPDATA_SIZE;
|
|||
|
|
|
|||
|
|
RAM1_BEGIN = RAM1_LIMIT_L;
|
|||
|
|
RAM1_END = RAM1_LIMIT_H - UPDATA_SIZE;
|
|||
|
|
RAM1_SIZE = RAM1_END - RAM1_BEGIN;
|
|||
|
|
|
|||
|
|
|
|||
|
|
#ifdef CONFIG_PSRAM_ENABLE
|
|||
|
|
RAM_LIMIT_L = 0x04000;
|
|||
|
|
#else
|
|||
|
|
RAM_LIMIT_L = 0x00000;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
RAM_LIMIT_H = 0x2C000;
|
|||
|
|
/********************************************/
|
|||
|
|
/* 0x2BF00 ~ 0x2C000 */
|
|||
|
|
/********************************************/
|
|||
|
|
/* ISR_BASE = _IRQ_MEM_ADDR; */
|
|||
|
|
ISR_SIZE = 0x100;
|
|||
|
|
ISR_BASE = RAM_LIMIT_H - ISR_SIZE;
|
|||
|
|
|
|||
|
|
/********************************************/
|
|||
|
|
/* 0x00000 ~ 0x2BF00 */
|
|||
|
|
/********************************************/
|
|||
|
|
RAM_BEGIN = RAM_LIMIT_L;
|
|||
|
|
RAM_END = RAM_LIMIT_H - ISR_SIZE;
|
|||
|
|
RAM_SIZE = RAM_END - RAM_BEGIN;
|
|||
|
|
|
|||
|
|
|
|||
|
|
BANK_SIZE = 5*1024;
|
|||
|
|
|
|||
|
|
|
|||
|
|
PSRAM_BEG = 0x800000;
|
|||
|
|
PSRAM_SIZE = 2M;
|
|||
|
|
|
|||
|
|
|
|||
|
|
CODE_BEG = 0X1E000C0;
|
|||
|
|
|
|||
|
|
UPDATA_BREDR_BASE_BEG = 0xF9000;
|
|||
|
|
|
|||
|
|
#if MIC_EFFECT_EQ_EN
|
|||
|
|
MIC_EFFECT_EQ_SECTION = 8;
|
|||
|
|
#else
|
|||
|
|
MIC_EFFECT_EQ_SECTION = 3;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if (EQ_SECTION_MAX > 10)
|
|||
|
|
EQ_SECTION_NUM = EQ_SECTION_MAX+MIC_EFFECT_EQ_SECTION;
|
|||
|
|
#else
|
|||
|
|
EQ_SECTION_NUM = 10+MIC_EFFECT_EQ_SECTION;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
MEMORY
|
|||
|
|
{
|
|||
|
|
psram(rwx) : ORIGIN = PSRAM_BEG , LENGTH = PSRAM_SIZE
|
|||
|
|
#if (USE_SDFILE_NEW)
|
|||
|
|
code0(rx) : ORIGIN = 0x1E00100, LENGTH = CONFIG_FLASH_SIZE
|
|||
|
|
#else
|
|||
|
|
code0(rx) : ORIGIN = 0x1E00000, LENGTH = CONFIG_FLASH_SIZE
|
|||
|
|
#endif
|
|||
|
|
ram0(rwx) : ORIGIN = RAM_BEGIN , LENGTH = RAM_SIZE
|
|||
|
|
ram1(rwx) : ORIGIN = RAM1_BEGIN , LENGTH = RAM1_SIZE
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#include "maskrom_stubs.ld"
|
|||
|
|
|
|||
|
|
EXTERN(
|
|||
|
|
_start
|
|||
|
|
#include "sdk_used_list.c"
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
ENTRY(_start)
|
|||
|
|
|
|||
|
|
EXTERN(
|
|||
|
|
lib_update_version
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
SECTIONS
|
|||
|
|
{
|
|||
|
|
/********************************************/
|
|||
|
|
. =ORIGIN(psram);
|
|||
|
|
.psram_text ALIGN(4):
|
|||
|
|
{
|
|||
|
|
#ifdef CONFIG_PSRAM_ENABLE
|
|||
|
|
*(.text*)
|
|||
|
|
*(.LOG_TAG_CONST*)
|
|||
|
|
*(.rodata*)
|
|||
|
|
#endif
|
|||
|
|
} > psram
|
|||
|
|
|
|||
|
|
.psram ALIGN(32):
|
|||
|
|
{
|
|||
|
|
#ifdef CONFIG_PSRAM_ENABLE
|
|||
|
|
*(.bss)
|
|||
|
|
*(COMMON)
|
|||
|
|
#endif
|
|||
|
|
} > psram
|
|||
|
|
|
|||
|
|
. = ORIGIN(code0);
|
|||
|
|
.text ALIGN(4):
|
|||
|
|
{
|
|||
|
|
text_code_begin = .;
|
|||
|
|
|
|||
|
|
PROVIDE(text_rodata_begin = .);
|
|||
|
|
|
|||
|
|
*(.startup.text)
|
|||
|
|
|
|||
|
|
bank_stub_start = .;
|
|||
|
|
*(.bank.stub.*)
|
|||
|
|
bank_stub_size = . - bank_stub_start;
|
|||
|
|
|
|||
|
|
*(.aac_const)
|
|||
|
|
*(.aac_code)
|
|||
|
|
|
|||
|
|
*(.alac_const)
|
|||
|
|
*(.alac_code)
|
|||
|
|
*(.alac_dec_code)
|
|||
|
|
|
|||
|
|
*(.bt_aac_dec_eng_const)
|
|||
|
|
*(.bt_aac_dec_eng_code)
|
|||
|
|
*(.bt_aac_dec_core_code)
|
|||
|
|
*(.bt_aac_dec_core_sparse_code)
|
|||
|
|
|
|||
|
|
*(.dts_dec_const)
|
|||
|
|
|
|||
|
|
#if (!TCFG_LED7_RUN_RAM)
|
|||
|
|
*(.gpio_ram)
|
|||
|
|
*(.LED_code)
|
|||
|
|
*(.LED_const)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
#if (!TCFG_CODE_RUN_RAM_FM_MODE)
|
|||
|
|
*(.usr_timer_const)
|
|||
|
|
*(.usr_timer_code)
|
|||
|
|
*(.timer_const)
|
|||
|
|
*(.timer_code)
|
|||
|
|
*(.cbuf_const)
|
|||
|
|
*(.cbuf_code)
|
|||
|
|
*(.fm_data_code)
|
|||
|
|
*(.fm_data_const)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#endif
|
|||
|
|
*(.cvsd_const)
|
|||
|
|
*(.cvsd_code)
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
gsensor_dev_begin = .;
|
|||
|
|
KEEP(*(.gsensor_dev))
|
|||
|
|
gsensor_dev_end = .;
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
hrsensor_dev_begin = .;
|
|||
|
|
KEEP(*(.hrsensor_dev))
|
|||
|
|
hrsensor_dev_end = .;
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
fm_dev_begin = .;
|
|||
|
|
KEEP(*(.fm_dev))
|
|||
|
|
fm_dev_end = .;
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
fm_emitter_dev_begin = .;
|
|||
|
|
KEEP(*(.fm_emitter_dev))
|
|||
|
|
fm_emitter_dev_end = .;
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
tool_interface_begin = .;
|
|||
|
|
KEEP(*(.tool_interface))
|
|||
|
|
tool_interface_end = .;
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
cmd_interface_begin = .;
|
|||
|
|
KEEP(*(.eff_cmd))
|
|||
|
|
cmd_interface_end = .;
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
|
|||
|
|
/* . = ALIGN(4); */
|
|||
|
|
/* storage_device_begin = .; */
|
|||
|
|
/* KEEP(*(.storage_device)) */
|
|||
|
|
/* storage_device_end = .; */
|
|||
|
|
|
|||
|
|
/* . = ALIGN(4); */
|
|||
|
|
/* ui_main_begin = .; */
|
|||
|
|
/* KEEP(*(.ui_main)) */
|
|||
|
|
/* ui_main_end = .; */
|
|||
|
|
/* . = ALIGN(4); */
|
|||
|
|
|
|||
|
|
chargeIc_dev_begin = .;
|
|||
|
|
KEEP(*(.chargeIc_dev))
|
|||
|
|
chargeIc_dev_end = .;
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
|
|||
|
|
/********maskrom arithmetic ****/
|
|||
|
|
*(.opcore_table_maskrom)
|
|||
|
|
*(.bfilt_table_maskroom)
|
|||
|
|
*(.opcore_maskrom)
|
|||
|
|
*(.bfilt_code)
|
|||
|
|
*(.bfilt_const)
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#include "btctrler/btctler_lib_text.ld"
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#include "btstack/btstack_lib_text.ld"
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#include "system/system_lib_text.ld"
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#include "ui/ui/ui.ld"
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#include "media/cpu/br23/media_lib_text.ld"
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
update_target_begin = .;
|
|||
|
|
PROVIDE(update_target_begin = .);
|
|||
|
|
KEEP(*(.update_target))
|
|||
|
|
update_target_end = .;
|
|||
|
|
PROVIDE(update_target_end = .);
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
|
|||
|
|
*(.text*)
|
|||
|
|
*(.LOG_TAG_CONST*)
|
|||
|
|
*(.rodata*)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
|
|||
|
|
__VERSION_BEGIN = .;
|
|||
|
|
KEEP(*(.version))
|
|||
|
|
__VERSION_END = .;
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
|
|||
|
|
text_code_end = .;
|
|||
|
|
|
|||
|
|
} >code0
|
|||
|
|
|
|||
|
|
|
|||
|
|
. = ORIGIN(ram0);
|
|||
|
|
|
|||
|
|
_data_code_begin = . ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
#ifdef CONFIG_CODE_BANK_ENABLE
|
|||
|
|
|
|||
|
|
bank_code_run_addr = .;
|
|||
|
|
|
|||
|
|
OVERLAY : AT(0x300000) SUBALIGN(4)
|
|||
|
|
{
|
|||
|
|
.overlay_bank0
|
|||
|
|
{
|
|||
|
|
*(.bank.code.0*)
|
|||
|
|
*(.bank.const.0*)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
}
|
|||
|
|
.overlay_bank1
|
|||
|
|
{
|
|||
|
|
*(.bank.code.1*)
|
|||
|
|
*(.bank.const.1*)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
}
|
|||
|
|
.overlay_bank2
|
|||
|
|
{
|
|||
|
|
*(.bank.code.2*)
|
|||
|
|
*(.bank.const.2*)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
}
|
|||
|
|
.overlay_bank3
|
|||
|
|
{
|
|||
|
|
*(.bank.code.3*)
|
|||
|
|
*(.bank.const.3*)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
}
|
|||
|
|
} > ram0
|
|||
|
|
bank_code_run_end_addr = .;
|
|||
|
|
|
|||
|
|
common_code_run_addr = bank_code_run_addr + BANK_SIZE;
|
|||
|
|
ASSERT(bank_code_run_end_addr <= common_code_run_addr, "bank overflow!")
|
|||
|
|
|
|||
|
|
. = common_code_run_addr;
|
|||
|
|
|
|||
|
|
.common ALIGN(4):
|
|||
|
|
{
|
|||
|
|
*(.common*)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
} > ram0
|
|||
|
|
#else
|
|||
|
|
|
|||
|
|
bank_code_run_addr = .;
|
|||
|
|
common_code_run_addr = .;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//cpu start
|
|||
|
|
.data ALIGN(4):
|
|||
|
|
{
|
|||
|
|
/// 放在data 里面的code 必须放在这个位置保护起来
|
|||
|
|
|
|||
|
|
*(.data_magic)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
|
|||
|
|
*(.flushinv_icache)
|
|||
|
|
*(.volatile_ram_code)
|
|||
|
|
*(.os_critical_code)
|
|||
|
|
*(.chargebox_code)
|
|||
|
|
|
|||
|
|
*(.os_code)
|
|||
|
|
*(.os_const)
|
|||
|
|
|
|||
|
|
|
|||
|
|
*(.ui_ram)
|
|||
|
|
|
|||
|
|
*(.fat_data_code)
|
|||
|
|
#if (TCFG_LED7_RUN_RAM)
|
|||
|
|
*(.gpio_ram)
|
|||
|
|
*(.LED_code)
|
|||
|
|
*(.LED_const)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if (TCFG_CODE_RUN_RAM_FM_MODE)
|
|||
|
|
*(.usr_timer_const)
|
|||
|
|
*(.usr_timer_code)
|
|||
|
|
*(.timer_const)
|
|||
|
|
*(.timer_code)
|
|||
|
|
*(.cbuf_const)
|
|||
|
|
*(.cbuf_code)
|
|||
|
|
*(.fm_data_code)
|
|||
|
|
*(.fm_data_const)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if TCFG_FM_INSIDE_ENABLE
|
|||
|
|
*(.fm_code)
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#include "media/cpu/br23/media_lib_data_text.ld"
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
|
|||
|
|
_data_code_end = . ;
|
|||
|
|
|
|||
|
|
_cpu_store_begin = . ;
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
*(.data*)
|
|||
|
|
|
|||
|
|
*(.cvsd_data)
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
dec_board_param_mem_begin = .;
|
|||
|
|
KEEP(*(.dec_board_param_mem))
|
|||
|
|
dec_board_param_mem_end = .;
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
*(.sbc_eng_code)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
|
|||
|
|
. = ALIGN(32);
|
|||
|
|
#include "btstack/btstack_lib_data.ld"
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#include "btctrler/btctler_lib_data.ld"
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#include "system/system_lib_data.ld"
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
#include "media/cpu/br23/media_lib_data.ld"
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
|
|||
|
|
} > ram0
|
|||
|
|
|
|||
|
|
.irq_stack ALIGN(32) :
|
|||
|
|
{
|
|||
|
|
*(.stack_magic)
|
|||
|
|
_cpu0_sstack_begin = .;
|
|||
|
|
PROVIDE(cpu0_sstack_begin = .);
|
|||
|
|
*(.stack)
|
|||
|
|
_cpu0_sstack_end = .;
|
|||
|
|
PROVIDE(cpu0_sstack_end = .);
|
|||
|
|
_stack_end = . ;
|
|||
|
|
*(.stack_magic0)
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
*(.boot_info)
|
|||
|
|
|
|||
|
|
} > ram0
|
|||
|
|
|
|||
|
|
.bss ALIGN(32) :
|
|||
|
|
{
|
|||
|
|
*(.usb_h_dma) //由于usb有个bug,会导致dma写的数据超出预设的buf,最长可能写超1k,为了避免死机,所以usb dma buffer后面放一些其他模块的buff来避免死机
|
|||
|
|
*(.usb_ep0)
|
|||
|
|
*(.dec_mix_buff)
|
|||
|
|
*(.sd0_var)
|
|||
|
|
*(.sd1_var)
|
|||
|
|
*(.dac_buff)
|
|||
|
|
|
|||
|
|
*(.bss)
|
|||
|
|
*(COMMON)
|
|||
|
|
*(.cvsd_bss)
|
|||
|
|
|
|||
|
|
*(.volatile_ram)
|
|||
|
|
#include "btctrler/btctler_lib_bss.ld"
|
|||
|
|
#include "btstack/btstack_lib_bss.ld"
|
|||
|
|
#include "system/system_lib_bss.ld"
|
|||
|
|
#include "media/cpu/br23/media_lib_bss.ld"
|
|||
|
|
|
|||
|
|
. = (( . + 31) / 32 * 32);
|
|||
|
|
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
|
|||
|
|
#if TCFG_USB_CDC_BACKGROUND_RUN
|
|||
|
|
*(.usb_cdc_dma)
|
|||
|
|
*(.usb_config_var)
|
|||
|
|
*(.cdc_var)
|
|||
|
|
. = ALIGN(32);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
} > ram0
|
|||
|
|
//cpu end
|
|||
|
|
_cpu_store_end = . ;
|
|||
|
|
|
|||
|
|
_prp_store_begin = . ;
|
|||
|
|
.prp_bss ALIGN(32) :
|
|||
|
|
{
|
|||
|
|
//bt
|
|||
|
|
//
|
|||
|
|
//sbc
|
|||
|
|
//
|
|||
|
|
//audio
|
|||
|
|
. = (( . + 31) / 32 * 32);
|
|||
|
|
} > ram0
|
|||
|
|
_prp_store_end = . ;
|
|||
|
|
|
|||
|
|
.bss ALIGN(32) :
|
|||
|
|
{
|
|||
|
|
NVRAM_DATA_START = .;
|
|||
|
|
*(.non_volatile_ram)
|
|||
|
|
NVRAM_DATA_SIZE = ABSOLUTE(. - NVRAM_DATA_START);
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
NVRAM_END = .;
|
|||
|
|
_nv_pre_begin = . ;
|
|||
|
|
|
|||
|
|
*(.src_filt)
|
|||
|
|
*(.src_dma)
|
|||
|
|
. = ALIGN(4);
|
|||
|
|
|
|||
|
|
} > ram0
|
|||
|
|
|
|||
|
|
overlay_begin = .;
|
|||
|
|
OVERLAY : NOCROSSREFS AT(0x200000) SUBALIGN(4)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
.overlay_aec
|
|||
|
|
{
|
|||
|
|
LONG(0xFFFFFFFF);
|
|||
|
|
/* *(.aec_bss_id) */
|
|||
|
|
o_aec_end = .;
|
|||
|
|
|
|||
|
|
*(.aec_mem)
|
|||
|
|
*(.msbc_enc)
|
|||
|
|
}
|
|||
|
|
.overlay_mp3
|
|||
|
|
{
|
|||
|
|
#ifdef CONFIG_MP3_WMA_LIB_SPECIAL
|
|||
|
|
*(.mp3_decstream_const)
|
|||
|
|
*(.mp3_decstream_code)
|
|||
|
|
*(.mp3_decstream_sparse_code)
|
|||
|
|
*(.mp3_decstream_sparse_const)
|
|||
|
|
|
|||
|
|
*(.mp3_dec_sparse_code)
|
|||
|
|
*(.mp3_dec_sparse_const)
|
|||
|
|
|
|||
|
|
*(.mp3_dec_code)
|
|||
|
|
*(.mp3_dec_const)
|
|||
|
|
/* *(.mp3_dec_data) */
|
|||
|
|
/* *(.mp3_dec_bss) */
|
|||
|
|
|
|||
|
|
/* *(.mp3_bss) */
|
|||
|
|
/* *(.mp3_data) */
|
|||
|
|
*(.mp3_const)
|
|||
|
|
*(.mp3_code)
|
|||
|
|
#endif
|
|||
|
|
LONG(0xFFFFFFFF);
|
|||
|
|
/* *(.mp3_bss_id) */
|
|||
|
|
o_mp3_end = .;
|
|||
|
|
|
|||
|
|
*(.mp3_mem)
|
|||
|
|
*(.mp3_ctrl_mem)
|
|||
|
|
*(.mp3pick_mem)
|
|||
|
|
*(.mp3pick_ctrl_mem)
|
|||
|
|
}
|
|||
|
|
.overlay_wma
|
|||
|
|
{
|
|||
|
|
#ifdef CONFIG_MP3_WMA_LIB_SPECIAL
|
|||
|
|
*(.wma_code)
|
|||
|
|
*(.wma_const)
|
|||
|
|
*(.wma_dec_code)
|
|||
|
|
*(.wma_dec_const)
|
|||
|
|
/* *(.wma_dec_data) */
|
|||
|
|
/* *(.wma_dec_bss) */
|
|||
|
|
|
|||
|
|
/* *(.wma_bss) */
|
|||
|
|
/* *(.wma_data) */
|
|||
|
|
#endif
|
|||
|
|
LONG(0xFFFFFFFF);
|
|||
|
|
/* *(.wma_bss_id) */
|
|||
|
|
o_wma_end = .;
|
|||
|
|
|
|||
|
|
*(.wma_mem)
|
|||
|
|
*(.wma_ctrl_mem)
|
|||
|
|
*(.wmapick_mem)
|
|||
|
|
*(.wmapick_ctrl_mem)
|
|||
|
|
}
|
|||
|
|
.overlay_wav
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
LONG(0xFFFFFFFF);
|
|||
|
|
/* *(.wav_bss_id) */
|
|||
|
|
|
|||
|
|
*(.wav_bss)
|
|||
|
|
*(.wav_dec_bss)
|
|||
|
|
*(.wav_mem)
|
|||
|
|
*(.wav_ctrl_mem)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.overlay_ape
|
|||
|
|
{
|
|||
|
|
*(.ape_mem)
|
|||
|
|
*(.ape_ctrl_mem)
|
|||
|
|
|
|||
|
|
*(.ape_dec_sparse_code)
|
|||
|
|
*(.ape_dec_sparse_const)
|
|||
|
|
|
|||
|
|
*(.ape_dec_code)
|
|||
|
|
*(.ape_dec_const)
|
|||
|
|
*(.ape_dec_data)
|
|||
|
|
*(.ape_dec_bss)
|
|||
|
|
|
|||
|
|
LONG(0xFFFFFFFF);
|
|||
|
|
/* *(.ape_bss_id) */
|
|||
|
|
|
|||
|
|
*(.ape_bss)
|
|||
|
|
*(.ape_data)
|
|||
|
|
*(.ape_const)
|
|||
|
|
*(.ape_code)
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
.overlay_flac
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
LONG(0xFFFFFFFF);
|
|||
|
|
/* *(.flac_bss_id) */
|
|||
|
|
|
|||
|
|
*(.flac_mem)
|
|||
|
|
*(.flac_ctrl_mem)
|
|||
|
|
*(.flac_dec_bss)
|
|||
|
|
*(.flac_bss)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.overlay_m4a
|
|||
|
|
{
|
|||
|
|
*(.m4a_dec_code)
|
|||
|
|
*(.m4a_dec_ff_const)
|
|||
|
|
*(.m4a_dec_const)
|
|||
|
|
*(.m4a_dec_data)
|
|||
|
|
|
|||
|
|
*(.m4a_data)
|
|||
|
|
*(.m4a_const)
|
|||
|
|
*(.m4a_code)
|
|||
|
|
*(.m4apick_mem)
|
|||
|
|
*(.m4apick_ctrl_mem)
|
|||
|
|
|
|||
|
|
LONG(0xFFFFFFFF);
|
|||
|
|
/* *(.m4a_bss_id) */
|
|||
|
|
|
|||
|
|
*(.m4a_mem)
|
|||
|
|
*(.m4a_ctrl_mem)
|
|||
|
|
*(.m4a_dec_bss)
|
|||
|
|
*(.m4a_bss)
|
|||
|
|
*(.aac_ctrl_mem)
|
|||
|
|
*(.aac_bss)
|
|||
|
|
|
|||
|
|
*(.alac_ctrl_mem)
|
|||
|
|
*(.alac_bss)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
.overlay_amr
|
|||
|
|
{
|
|||
|
|
*(.amr_dec_sparse_code)
|
|||
|
|
*(.amr_dec_sparse_const)
|
|||
|
|
*(.amr_dec_code)
|
|||
|
|
|
|||
|
|
*(.amr_dec_data)
|
|||
|
|
|
|||
|
|
LONG(0xFFFFFFFF);
|
|||
|
|
/* *(.amr_bss_id) */
|
|||
|
|
|
|||
|
|
*(.amr_mem)
|
|||
|
|
*(.amr_ctrl_mem)
|
|||
|
|
*(.amr_dec_bss)
|
|||
|
|
}
|
|||
|
|
.overlay_dts
|
|||
|
|
{
|
|||
|
|
*(.dts_dec_code)
|
|||
|
|
*(.dts_dec_data)
|
|||
|
|
|
|||
|
|
*(.dts_data)
|
|||
|
|
*(.dts_const)
|
|||
|
|
*(.dts_code)
|
|||
|
|
|
|||
|
|
LONG(0xFFFFFFFF);
|
|||
|
|
/* *(.dts_bss_id) */
|
|||
|
|
|
|||
|
|
*(.dts_mem)
|
|||
|
|
*(.dts_ctrl_mem)
|
|||
|
|
*(.dts_dec_bss)
|
|||
|
|
*(.dts_bss)
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
.overlay_fm
|
|||
|
|
{
|
|||
|
|
LONG(0xFFFFFFFF);
|
|||
|
|
/* *(.fm_bss_id) */
|
|||
|
|
o_fm_end = .;
|
|||
|
|
|
|||
|
|
*(.fm_mem)
|
|||
|
|
*(.linein_pcm_mem)
|
|||
|
|
}
|
|||
|
|
.overlay_pc
|
|||
|
|
{
|
|||
|
|
#if TCFG_VIR_UDISK_ENABLE == 0
|
|||
|
|
*(.usb_audio_play_dma)
|
|||
|
|
*(.usb_audio_rec_dma)
|
|||
|
|
*(.uac_rx)
|
|||
|
|
*(.mass_storage)
|
|||
|
|
|
|||
|
|
*(.usb_msd_dma)
|
|||
|
|
*(.usb_hid_dma)
|
|||
|
|
*(.usb_iso_dma)
|
|||
|
|
*(.usb_cdc_dma)
|
|||
|
|
*(.uac_var)
|
|||
|
|
*(.usb_config_var)
|
|||
|
|
*(.cdc_var)
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
} > ram0
|
|||
|
|
|
|||
|
|
overlay_end = .;
|
|||
|
|
|
|||
|
|
ASSERT(overlay_end <= overlay_begin + 64k, "overlay overflow 64k!")
|
|||
|
|
|
|||
|
|
RAM_USED = .;
|
|||
|
|
|
|||
|
|
|
|||
|
|
. =ORIGIN(ram1);
|
|||
|
|
//TLB 起始需要16K 对齐;
|
|||
|
|
.mmu_tlb ALIGN(0x4000):
|
|||
|
|
{
|
|||
|
|
*(.mmu_tlb_segment);
|
|||
|
|
} > ram1
|
|||
|
|
|
|||
|
|
|
|||
|
|
.bss1 ALIGN(32) :
|
|||
|
|
{
|
|||
|
|
} > ram1
|
|||
|
|
RAM1_USED = .;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/********************************************/
|
|||
|
|
/*
|
|||
|
|
. =ORIGIN(ram0);
|
|||
|
|
.ram0_data ALIGN(4):
|
|||
|
|
{
|
|||
|
|
_VM_CODE_START = . ;
|
|||
|
|
*(.vm)
|
|||
|
|
_VM_CODE_END = . ;
|
|||
|
|
*(.flushinv_icache)
|
|||
|
|
|
|||
|
|
. = ALIGN(4); // must at tail, make ram0_data size align 4
|
|||
|
|
} > ram0
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
/********************************************/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
#include "update/update.ld"
|
|||
|
|
#include "driver/cpu/br23/driver_lib.ld"
|
|||
|
|
|
|||
|
|
text_begin = ADDR(.text) ;
|
|||
|
|
text_size = SIZEOF(.text) ;
|
|||
|
|
text_end = ADDR(.text) + SIZEOF(.text) ;
|
|||
|
|
|
|||
|
|
bss_begin = ADDR(.bss) ;
|
|||
|
|
bss_size = SIZEOF(.bss);
|
|||
|
|
|
|||
|
|
bss1_begin = ADDR(.bss1) ;
|
|||
|
|
bss1_size = SIZEOF(.bss1);
|
|||
|
|
|
|||
|
|
data_addr = ADDR(.data) ;
|
|||
|
|
data_begin = text_begin + text_size;
|
|||
|
|
data_size = SIZEOF(.data) ;
|
|||
|
|
|
|||
|
|
psram_vaddr = ADDR(.psram_text) ;
|
|||
|
|
psram_laddr = text_begin + text_size + data_size;
|
|||
|
|
psram_text_size = SIZEOF(.psram_text) ;
|
|||
|
|
|
|||
|
|
bank_code_load_addr = data_begin + data_size;
|
|||
|
|
|
|||
|
|
|
|||
|
|
//================ OVERLAY Code Info Export ==================//
|
|||
|
|
|
|||
|
|
aec_addr = ADDR(.overlay_aec);
|
|||
|
|
aec_begin = text_begin + text_size + data_size;
|
|||
|
|
aec_size = o_aec_end - aec_addr;
|
|||
|
|
/* aec_size = SIZEOF(.overlay_aec); */
|
|||
|
|
|
|||
|
|
wav_addr = ADDR(.overlay_wav);
|
|||
|
|
wav_begin = aec_begin + aec_size;
|
|||
|
|
wav_size = SIZEOF(.overlay_wav);
|
|||
|
|
|
|||
|
|
ape_addr = ADDR(.overlay_ape);
|
|||
|
|
ape_begin = wav_begin + wav_size;
|
|||
|
|
ape_size = SIZEOF(.overlay_ape);
|
|||
|
|
|
|||
|
|
flac_addr = ADDR(.overlay_flac);
|
|||
|
|
flac_begin = ape_begin + ape_size;
|
|||
|
|
flac_size = SIZEOF(.overlay_flac);
|
|||
|
|
|
|||
|
|
m4a_addr = ADDR(.overlay_m4a);
|
|||
|
|
m4a_begin = flac_begin + flac_size;
|
|||
|
|
m4a_size = SIZEOF(.overlay_m4a);
|
|||
|
|
|
|||
|
|
amr_addr = ADDR(.overlay_amr);
|
|||
|
|
amr_begin = m4a_begin + m4a_size;
|
|||
|
|
amr_size = SIZEOF(.overlay_amr);
|
|||
|
|
|
|||
|
|
dts_addr = ADDR(.overlay_dts);
|
|||
|
|
dts_begin = amr_begin + amr_size;
|
|||
|
|
dts_size = SIZEOF(.overlay_dts);
|
|||
|
|
|
|||
|
|
fm_addr = ADDR(.overlay_fm);
|
|||
|
|
fm_begin = dts_begin + dts_size;
|
|||
|
|
fm_size = o_fm_end - fm_addr;
|
|||
|
|
/* fm_size = SIZEOF(.overlay_fm); */
|
|||
|
|
|
|||
|
|
#ifdef CONFIG_MP3_WMA_LIB_SPECIAL
|
|||
|
|
mp3_addr = ADDR(.overlay_mp3);
|
|||
|
|
mp3_begin = fm_begin + fm_size;
|
|||
|
|
mp3_size = o_mp3_end - mp3_addr;
|
|||
|
|
|
|||
|
|
wma_addr = ADDR(.overlay_wma);
|
|||
|
|
wma_begin = mp3_begin + mp3_size;
|
|||
|
|
wma_size = o_wma_end - wma_addr;
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
_HEAP_BEGIN = RAM_USED;
|
|||
|
|
PROVIDE(HEAP_BEGIN = RAM_USED);
|
|||
|
|
|
|||
|
|
_HEAP_END = RAM_END;
|
|||
|
|
PROVIDE(HEAP_END = RAM_END);
|
|||
|
|
|
|||
|
|
_HEAP_SIZE = HEAP_END - HEAP_BEGIN;
|
|||
|
|
PROVIDE(HEAP_SIZE = HEAP_END - HEAP_BEGIN);
|
|||
|
|
|
|||
|
|
_HEAP1_BEGIN = RAM1_USED;
|
|||
|
|
PROVIDE(HEAP1_BEGIN = RAM1_USED);
|
|||
|
|
|
|||
|
|
_HEAP1_END = RAM1_END;
|
|||
|
|
PROVIDE(HEAP1_END = RAM1_END);
|
|||
|
|
|
|||
|
|
_HEAP1_SIZE = HEAP1_END - HEAP1_BEGIN;
|
|||
|
|
PROVIDE(HEAP1_SIZE = HEAP1_END - HEAP1_BEGIN);
|
|||
|
|
|
|||
|
|
_MALLOC_SIZE = HEAP_SIZE + HEAP1_SIZE;
|
|||
|
|
PROVIDE(MALLOC_SIZE = HEAP_SIZE + HEAP1_SIZE);
|
|||
|
|
|