first
This commit is contained in:
421
cpu/br28/sdk_ld.c
Normal file
421
cpu/br28/sdk_ld.c
Normal file
@ -0,0 +1,421 @@
|
||||
// *INDENT-OFF*
|
||||
#include "app_config.h"
|
||||
|
||||
/* ================= BR28 SDK memory ========================
|
||||
_______________ ___ 0x1A0000(176K)
|
||||
| isr base |
|
||||
|_______________|___ _IRQ_MEM_ADDR(size = 0x100)
|
||||
|rom export ram |
|
||||
|_______________|
|
||||
| update |
|
||||
|_______________|___ RAM_LIMIT_H
|
||||
| HEAP |
|
||||
|_______________|___ data_code_pc_limit_H
|
||||
| audio overlay |
|
||||
|_______________|
|
||||
| data_code |
|
||||
|_______________|___ data_code_pc_limit_L
|
||||
| bss |
|
||||
|_______________|
|
||||
| data |
|
||||
|_______________|
|
||||
| irq_stack |
|
||||
|_______________|
|
||||
| boot info |
|
||||
|_______________|
|
||||
| TLB |
|
||||
|_______________|0 RAM_LIMIT_L
|
||||
|
||||
=========================================================== */
|
||||
|
||||
#include "maskrom_stubs.ld"
|
||||
|
||||
EXTERN(
|
||||
_start
|
||||
#include "sdk_used_list.c"
|
||||
);
|
||||
|
||||
UPDATA_SIZE = 0x80;
|
||||
UPDATA_BEG = _MASK_MEM_BEGIN - UPDATA_SIZE;
|
||||
UPDATA_BREDR_BASE_BEG = 0x1A0000;
|
||||
|
||||
RAM_LIMIT_L = 0x100000;
|
||||
RAM_LIMIT_H = UPDATA_BEG;
|
||||
PHY_RAM_SIZE = RAM_LIMIT_H - RAM_LIMIT_L;
|
||||
|
||||
//from mask export
|
||||
ISR_BASE = _IRQ_MEM_ADDR;
|
||||
ROM_RAM_SIZE = _MASK_MEM_SIZE;
|
||||
ROM_RAM_BEG = _MASK_MEM_BEGIN;
|
||||
|
||||
#ifdef TCFG_LOWPOWER_RAM_SIZE
|
||||
RAM0_BEG = RAM_LIMIT_L + (128K * TCFG_LOWPOWER_RAM_SIZE);
|
||||
#else
|
||||
RAM0_BEG = RAM_LIMIT_L;
|
||||
#endif
|
||||
RAM0_END = RAM_LIMIT_H;
|
||||
RAM0_SIZE = RAM0_END - RAM0_BEG;
|
||||
|
||||
RAM1_BEG = RAM_LIMIT_L;
|
||||
RAM1_END = RAM0_BEG;
|
||||
RAM1_SIZE = RAM1_END - RAM1_BEG;
|
||||
|
||||
#ifdef CONFIG_NEW_CFG_TOOL_ENABLE
|
||||
CODE_BEG = 0x6000100;
|
||||
#else
|
||||
CODE_BEG = 0x6000120;
|
||||
#endif
|
||||
|
||||
//============ About EQ coeff RAM ================
|
||||
//internal EQ priv ram
|
||||
EQ_PRIV_COEFF_BASE =0x1A0600;
|
||||
EQ_PRIV_SECTION_NUM = 10;
|
||||
EQ_PRIV_COEFF_END = EQ_PRIV_COEFF_BASE + 4 * EQ_PRIV_SECTION_NUM * (5+3)*2;
|
||||
EQ_SECTION_NUM = EQ_SECTION_MAX;
|
||||
|
||||
//=============== About BT RAM ===================
|
||||
//CONFIG_BT_RX_BUFF_SIZE = (1024 * 18);
|
||||
|
||||
MEMORY
|
||||
{
|
||||
code0(rx) : ORIGIN = CODE_BEG, LENGTH = CONFIG_FLASH_SIZE
|
||||
ram0(rwx) : ORIGIN = RAM0_BEG, LENGTH = RAM0_SIZE
|
||||
|
||||
//ram1 - 用于volatile-heap
|
||||
//ram1(rwx) : ORIGIN = RAM1_BEG, LENGTH = RAM1_SIZE
|
||||
|
||||
psr_ram(rwx) : ORIGIN = 0x2000000, LENGTH = 8*1024*1024
|
||||
}
|
||||
|
||||
|
||||
ENTRY(_start)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(code0);
|
||||
.text ALIGN(4):
|
||||
{
|
||||
PROVIDE(text_rodata_begin = .);
|
||||
|
||||
*(.startup.text)
|
||||
|
||||
*(.text)
|
||||
|
||||
. = ALIGN(4);
|
||||
update_target_begin = .;
|
||||
PROVIDE(update_target_begin = .);
|
||||
KEEP(*(.update_target))
|
||||
update_target_end = .;
|
||||
PROVIDE(update_target_end = .);
|
||||
. = ALIGN(4);
|
||||
|
||||
*(.LOG_TAG_CONST*)
|
||||
*(.rodata*)
|
||||
|
||||
. = ALIGN(4); // must at tail, make rom_code size align 4
|
||||
PROVIDE(text_rodata_end = .);
|
||||
|
||||
clock_critical_handler_begin = .;
|
||||
KEEP(*(.clock_critical_txt))
|
||||
clock_critical_handler_end = .;
|
||||
|
||||
chargestore_handler_begin = .;
|
||||
KEEP(*(.chargestore_callback_txt))
|
||||
chargestore_handler_end = .;
|
||||
|
||||
/********maskrom arithmetic ****/
|
||||
*(.opcore_table_maskrom)
|
||||
*(.bfilt_table_maskroom)
|
||||
*(.opcore_maskrom)
|
||||
*(.bfilt_code)
|
||||
*(.bfilt_const)
|
||||
/********maskrom arithmetic end****/
|
||||
|
||||
. = ALIGN(4);
|
||||
#include "ui/ui/ui.ld"
|
||||
. = ALIGN(4);
|
||||
__VERSION_BEGIN = .;
|
||||
KEEP(*(.sys.version))
|
||||
__VERSION_END = .;
|
||||
|
||||
*(.noop_version)
|
||||
. = ALIGN(4);
|
||||
|
||||
. = 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(32);
|
||||
m_code_addr = . ;
|
||||
*(.m.code*)
|
||||
*(.movable.code*)
|
||||
m_code_size = ABSOLUTE(. - m_code_addr) ;
|
||||
. = ALIGN(32);
|
||||
} > code0
|
||||
|
||||
. = ORIGIN(ram0);
|
||||
//TLB 起始需要16K 对齐;
|
||||
.mmu_tlb ALIGN(0x10000):
|
||||
{
|
||||
*(.mmu_tlb_segment);
|
||||
} > ram0
|
||||
|
||||
.boot_info ALIGN(32):
|
||||
{
|
||||
*(.boot_info)
|
||||
. = ALIGN(32);
|
||||
} > ram0
|
||||
|
||||
.irq_stack ALIGN(32):
|
||||
{
|
||||
_cpu0_sstack_begin = .;
|
||||
*(.cpu0_stack)
|
||||
_cpu0_sstack_end = .;
|
||||
. = ALIGN(4);
|
||||
|
||||
_cpu1_sstack_begin = .;
|
||||
*(.cpu1_stack)
|
||||
_cpu1_sstack_end = .;
|
||||
. = ALIGN(4);
|
||||
|
||||
} > ram0
|
||||
|
||||
.data ALIGN(32):
|
||||
{
|
||||
//cpu start
|
||||
. = ALIGN(4);
|
||||
*(.data_magic)
|
||||
|
||||
. = ALIGN(4);
|
||||
#include "media/cpu/br28/audio_lib_data.ld"
|
||||
|
||||
. = ALIGN(4);
|
||||
*(.data*)
|
||||
|
||||
. = ALIGN(4);
|
||||
} > ram0
|
||||
|
||||
.bss ALIGN(32):
|
||||
{
|
||||
. = ALIGN(4);
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
*(.volatile_ram)
|
||||
|
||||
*(.btstack_pool)
|
||||
|
||||
*(.mem_heap)
|
||||
*(.memp_memory_x)
|
||||
|
||||
. = ALIGN(4);
|
||||
*(.non_volatile_ram)
|
||||
|
||||
. = ALIGN(32);
|
||||
|
||||
*(.usb_h_dma)
|
||||
*(.usb_ep0)
|
||||
|
||||
#if TCFG_USB_CDC_BACKGROUND_RUN
|
||||
*(.usb_cdc_dma)
|
||||
*(.usb_config_var)
|
||||
*(.cdc_var)
|
||||
#endif
|
||||
|
||||
*(.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)
|
||||
. = ALIGN(32);
|
||||
|
||||
} > ram0
|
||||
|
||||
.data_code ALIGN(32):
|
||||
{
|
||||
data_code_pc_limit_begin = .;
|
||||
*(.flushinv_icache)
|
||||
*(.cache)
|
||||
*(.os_critical_code)
|
||||
*(.volatile_ram_code)
|
||||
*(.chargebox_code)
|
||||
*(.fat_data_code)
|
||||
*(.fat_data_code_ex)
|
||||
|
||||
*(.ui_ram)
|
||||
*(.math_fast_funtion_code)
|
||||
. = ALIGN(4);
|
||||
*(.pSOUND360TD_cal_const)
|
||||
*(.pSOUND360TD_cal_code)
|
||||
. = ALIGN(4);
|
||||
*(.SpatialAudio.text.const)
|
||||
*(.SpatialAudio.text)
|
||||
*(.SpatialAudio.text.cache.L1)
|
||||
|
||||
. = ALIGN(4);
|
||||
_SPI_CODE_START = . ;
|
||||
*(.spi_code)
|
||||
. = ALIGN(4);
|
||||
_SPI_CODE_END = . ;
|
||||
. = ALIGN(4);
|
||||
|
||||
} > ram0
|
||||
|
||||
.moveable_slot ALIGN(4):
|
||||
{
|
||||
*(movable.slot.*)
|
||||
|
||||
} >ram0
|
||||
|
||||
__report_overlay_begin = .;
|
||||
#include "app_overlay.ld"
|
||||
|
||||
data_code_pc_limit_end = .;
|
||||
__report_overlay_end = .;
|
||||
|
||||
_HEAP_BEGIN = . ;
|
||||
_HEAP_END = RAM0_END;
|
||||
|
||||
|
||||
. = ORIGIN(psr_ram);
|
||||
.psr_data_code ALIGN(32):
|
||||
{
|
||||
*(.psram_data_code)
|
||||
. = ALIGN(4);
|
||||
} > psr_ram
|
||||
|
||||
.psr_bss_code ALIGN(32):
|
||||
{
|
||||
. = ALIGN(4);
|
||||
} > psr_ram
|
||||
}
|
||||
|
||||
#include "app.ld"
|
||||
#include "update/update.ld"
|
||||
#include "btstack/btstack_lib.ld"
|
||||
#include "system/port/br28/system_lib.ld"
|
||||
#include "btctrler/port/br28/btctler_lib.ld"
|
||||
#include "driver/cpu/br28/driver_lib.ld"
|
||||
#include "media/cpu/br28/audio_lib.ld"
|
||||
//================== Section Info Export ====================//
|
||||
text_begin = ADDR(.text);
|
||||
text_size = SIZEOF(.text);
|
||||
text_end = text_begin + text_size;
|
||||
|
||||
bss_begin = ADDR(.bss);
|
||||
bss_size = SIZEOF(.bss);
|
||||
bss_end = bss_begin + bss_size;
|
||||
|
||||
data_addr = ADDR(.data);
|
||||
data_begin = text_begin + text_size;
|
||||
data_size = SIZEOF(.data);
|
||||
|
||||
moveable_slot_addr = ADDR(.moveable_slot);
|
||||
moveable_slot_begin = data_begin + data_size;
|
||||
moveable_slot_size = SIZEOF(.moveable_slot);
|
||||
|
||||
data_code_addr = ADDR(.data_code);
|
||||
data_code_begin = moveable_slot_begin + moveable_slot_size;
|
||||
data_code_size = SIZEOF(.data_code);
|
||||
|
||||
|
||||
//================ OVERLAY Code Info Export ==================//
|
||||
aec_addr = ADDR(.overlay_aec);
|
||||
aec_begin = data_code_begin + data_code_size;
|
||||
aec_size = SIZEOF(.overlay_aec);
|
||||
|
||||
aac_addr = ADDR(.overlay_aac);
|
||||
aac_begin = aec_begin + aec_size;
|
||||
aac_size = SIZEOF(.overlay_aac);
|
||||
|
||||
psr_data_code_addr = ADDR(.psr_data_code);
|
||||
psr_data_code_begin = aac_begin + aac_size;
|
||||
psr_data_code_size = SIZEOF(.psr_data_code);
|
||||
|
||||
/*
|
||||
lc3_addr = ADDR(.overlay_lc3);
|
||||
lc3_begin = aac_begin + aac_size;
|
||||
lc3_size = SIZEOF(.overlay_lc3);
|
||||
*/
|
||||
|
||||
/* moveable_addr = ADDR(.overlay_moveable) ; */
|
||||
/* moveable_size = SIZEOF(.overlay_moveable) ; */
|
||||
//===================== HEAP Info Export =====================//
|
||||
ASSERT(_HEAP_BEGIN > bss_begin,"_HEAP_BEGIN < bss_begin");
|
||||
ASSERT(_HEAP_BEGIN > data_addr,"_HEAP_BEGIN < data_addr");
|
||||
ASSERT(_HEAP_BEGIN > data_code_addr,"_HEAP_BEGIN < data_code_addr");
|
||||
/* ASSERT(_HEAP_BEGIN > moveable_slot_addr,"_HEAP_BEGIN < moveable_slot_addr"); */
|
||||
/* ASSERT(_HEAP_BEGIN > __report_overlay_begin,"_HEAP_BEGIN < __report_overlay_begin"); */
|
||||
|
||||
PROVIDE(HEAP_BEGIN = _HEAP_BEGIN);
|
||||
PROVIDE(HEAP_END = _HEAP_END);
|
||||
_MALLOC_SIZE = _HEAP_END - _HEAP_BEGIN;
|
||||
PROVIDE(MALLOC_SIZE = _HEAP_END - _HEAP_BEGIN);
|
||||
|
||||
ASSERT(MALLOC_SIZE >= 0x8000, "heap space too small !")
|
||||
|
||||
//============================================================//
|
||||
//=== report section info begin:
|
||||
//============================================================//
|
||||
report_text_beign = ADDR(.text);
|
||||
report_text_size = SIZEOF(.text);
|
||||
report_text_end = report_text_beign + report_text_size;
|
||||
|
||||
report_mmu_tlb_begin = ADDR(.mmu_tlb);
|
||||
report_mmu_tlb_size = SIZEOF(.mmu_tlb);
|
||||
report_mmu_tlb_end = report_mmu_tlb_begin + report_mmu_tlb_size;
|
||||
|
||||
report_boot_info_begin = ADDR(.boot_info);
|
||||
report_boot_info_size = SIZEOF(.boot_info);
|
||||
report_boot_info_end = report_boot_info_begin + report_boot_info_size;
|
||||
|
||||
report_irq_stack_begin = ADDR(.irq_stack);
|
||||
report_irq_stack_size = SIZEOF(.irq_stack);
|
||||
report_irq_stack_end = report_irq_stack_begin + report_irq_stack_size;
|
||||
|
||||
report_data_begin = ADDR(.data);
|
||||
report_data_size = SIZEOF(.data);
|
||||
report_data_end = report_data_begin + report_data_size;
|
||||
|
||||
report_bss_begin = ADDR(.bss);
|
||||
report_bss_size = SIZEOF(.bss);
|
||||
report_bss_end = report_bss_begin + report_bss_size;
|
||||
|
||||
report_data_code_begin = ADDR(.data_code);
|
||||
report_data_code_size = SIZEOF(.data_code);
|
||||
report_data_code_end = report_data_code_begin + report_data_code_size;
|
||||
|
||||
report_overlay_begin = __report_overlay_begin;
|
||||
report_overlay_size = __report_overlay_end - __report_overlay_begin;
|
||||
report_overlay_end = __report_overlay_end;
|
||||
|
||||
report_heap_beign = _HEAP_BEGIN;
|
||||
report_heap_size = _HEAP_END - _HEAP_BEGIN;
|
||||
report_heap_end = _HEAP_END;
|
||||
|
||||
BR28_PHY_RAM_SIZE = PHY_RAM_SIZE;
|
||||
BR28_SDK_RAM_SIZE = report_mmu_tlb_size + \
|
||||
report_boot_info_size + \
|
||||
report_irq_stack_size + \
|
||||
report_data_size + \
|
||||
report_bss_size + \
|
||||
report_overlay_size + \
|
||||
report_data_code_size + \
|
||||
report_heap_size;
|
||||
//============================================================//
|
||||
//=== report section info end
|
||||
//============================================================//
|
||||
|
||||
Reference in New Issue
Block a user