108 lines
2.8 KiB
Plaintext
108 lines
2.8 KiB
Plaintext
|
|
%%{
|
||
|
|
let options = args.options;
|
||
|
|
|
||
|
|
let stackSize = 0x10000;
|
||
|
|
let heapSize = 0x20000;
|
||
|
|
|
||
|
|
let isSingleCore = true;
|
||
|
|
let useDdr = true;
|
||
|
|
let addrBaseDdr = 0x80000000;
|
||
|
|
let codeDataSizeDdr = 0x1000000;
|
||
|
|
|
||
|
|
/* if no options given use defaults */
|
||
|
|
if(options && options.stackSize)
|
||
|
|
stackSize = options.stackSize;
|
||
|
|
if(options && options.heapSize)
|
||
|
|
heapSize = options.heapSize;
|
||
|
|
|
||
|
|
if(isSingleCore == true) {
|
||
|
|
codeDataAddrDdr = addrBaseDdr;
|
||
|
|
codeDataSizeDdr = 0x1000000 * 2;
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
if(args.project.cpu == "a53ss0-0")
|
||
|
|
{
|
||
|
|
codeDataAddrDdr = addrBaseDdr + codeDataSizeDdr*0;
|
||
|
|
}
|
||
|
|
if(args.project.cpu == "a53ss0-1")
|
||
|
|
{
|
||
|
|
codeDataAddrDdr = addrBaseDdr + codeDataSizeDdr*1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if(options && options.addrBaseDdr)
|
||
|
|
addrBaseDdr = options.addrBaseDdr;
|
||
|
|
if(options && options.codeDataSizeDdr)
|
||
|
|
codeDataSizeDdr = options.codeDataSizeDdr;
|
||
|
|
|
||
|
|
%%}
|
||
|
|
|
||
|
|
ENTRY(_c_int00)
|
||
|
|
|
||
|
|
__TI_STACK_SIZE = `stackSize`;
|
||
|
|
__TI_HEAP_SIZE = `heapSize`;
|
||
|
|
|
||
|
|
MEMORY
|
||
|
|
{
|
||
|
|
% if(useDdr) {
|
||
|
|
DDR : ORIGIN = 0x`(codeDataAddrDdr).toString(16).toUpperCase()`, LENGTH = 0x`(codeDataSizeDdr).toString(16).toUpperCase()`
|
||
|
|
% }
|
||
|
|
|
||
|
|
/* shared memory segments */
|
||
|
|
/* On A53,
|
||
|
|
* - make sure there is a MMU entry which maps below regions as non-cache
|
||
|
|
*/
|
||
|
|
USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x80
|
||
|
|
LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x80, LENGTH = 0x00004000 - 0x80
|
||
|
|
RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x0000C000
|
||
|
|
}
|
||
|
|
|
||
|
|
SECTIONS {
|
||
|
|
|
||
|
|
.vecs : {} > DDR
|
||
|
|
.text : {} > DDR
|
||
|
|
.rodata : {} > DDR
|
||
|
|
|
||
|
|
.data : ALIGN (8) {
|
||
|
|
__data_load__ = LOADADDR (.data);
|
||
|
|
__data_start__ = .;
|
||
|
|
*(.data)
|
||
|
|
*(.data*)
|
||
|
|
. = ALIGN (8);
|
||
|
|
__data_end__ = .;
|
||
|
|
} > DDR
|
||
|
|
|
||
|
|
/* General purpose user shared memory, used in some examples */
|
||
|
|
.bss.user_shared_mem (NOLOAD) : { KEEP(*(.bss.user_shared_mem)) } > USER_SHM_MEM
|
||
|
|
/* this is used when Debug log's to shared memory are enabled, else this is not used */
|
||
|
|
.bss.log_shared_mem (NOLOAD) : { KEEP(*(.bss.log_shared_mem)) } > LOG_SHM_MEM
|
||
|
|
/* this is used only when IPC RPMessage is enabled, else this is not used */
|
||
|
|
.bss.ipc_vring_mem (NOLOAD) : { KEEP(*(.bss.ipc_vring_mem)) } > RTOS_NORTOS_IPC_SHM_MEM
|
||
|
|
|
||
|
|
.bss : {
|
||
|
|
__bss_start__ = .;
|
||
|
|
*(.bss)
|
||
|
|
*(.bss.*)
|
||
|
|
. = ALIGN (8);
|
||
|
|
*(COMMON)
|
||
|
|
__bss_end__ = .;
|
||
|
|
. = ALIGN (8);
|
||
|
|
} > DDR
|
||
|
|
|
||
|
|
.heap (NOLOAD) : {
|
||
|
|
__heap_start__ = .;
|
||
|
|
KEEP(*(.heap))
|
||
|
|
. = . + __TI_HEAP_SIZE;
|
||
|
|
__heap_end__ = .;
|
||
|
|
} > DDR
|
||
|
|
|
||
|
|
.stack (NOLOAD) : ALIGN(16) {
|
||
|
|
__TI_STACK_BASE = .;
|
||
|
|
KEEP(*(.stack))
|
||
|
|
. = . + __TI_STACK_SIZE;
|
||
|
|
__TI_STACK_BASE1 = .;
|
||
|
|
KEEP(*(.stack))
|
||
|
|
. = . + __TI_STACK_SIZE;
|
||
|
|
} > DDR
|
||
|
|
|
||
|
|
}
|