diff --git a/src/platform/apollolake/apollolake.x.in b/src/platform/apollolake/apollolake.x.in index df0996a57..31b09a703 100644 --- a/src/platform/apollolake/apollolake.x.in +++ b/src/platform/apollolake/apollolake.x.in @@ -486,16 +486,6 @@ SECTIONS *(.gnu.linkonce.b.*) *(COMMON) - . = ALIGN (HEAP_BUF_ALIGNMENT); - _runtime_heap_start = ABSOLUTE(.); - . = . + HEAP_RUNTIME_SIZE; - _runtime_heap_end = ABSOLUTE(.); - - . = ALIGN (HEAP_BUF_ALIGNMENT); - _buffer_heap_start = ABSOLUTE(.); - . = . + HEAP_BUFFER_SIZE; - _buffer_heap_end = ABSOLUTE(.); - . = ALIGN (HEAP_BUF_ALIGNMENT); _system_heap_start = ABSOLUTE(.); . = . + HEAP_SYSTEM_M_SIZE; @@ -506,6 +496,12 @@ SECTIONS . = . + HEAP_SYS_RUNTIME_M_SIZE; _system_runtime_heap_end = ABSOLUTE(.); + . = ALIGN (4096); + _sof_stack_start = ABSOLUTE(.); + . = . + SOF_STACK_SIZE; + _sof_stack_end = ABSOLUTE(.); + +#if CONFIG_CORE_COUNT > 1 . = ALIGN (PLATFORM_DCACHE_ALIGN); _runtime_shared_heap_start = ABSOLUTE(.); . = . + HEAP_RUNTIME_SHARED_SIZE; @@ -518,15 +514,20 @@ SECTIONS . = ALIGN (PLATFORM_DCACHE_ALIGN); _system_shared_heap_end = ABSOLUTE(.); - . = ALIGN (4096); - _sof_stack_start = ABSOLUTE(.); - . = . + SOF_STACK_SIZE; - _sof_stack_end = ABSOLUTE(.); - . = ALIGN (HEAP_BUF_ALIGNMENT); _sof_core_s_start = ABSOLUTE(.); . = . + SOF_CORE_S_T_SIZE; _sof_core_s_end = ABSOLUTE(.); +#endif + + _runtime_heap_start = ABSOLUTE(.); + . = . + HEAP_RUNTIME_SIZE; + _runtime_heap_end = ABSOLUTE(.); + + . = ALIGN (PLATFORM_DCACHE_ALIGN); + _buffer_heap_start = ABSOLUTE(.); + . = . + SOF_FW_END - _buffer_heap_start; + _buffer_heap_end = ABSOLUTE(.); _bss_end = ABSOLUTE(.); } >sof_fw :sof_fw_phdr @@ -546,9 +547,11 @@ SECTIONS /* system runtime heap */ _system_runtime_heap = _system_runtime_heap_start; +#if CONFIG_CORE_COUNT > 1 /* Shared Heap */ _runtime_shared_heap = _runtime_shared_heap_start; _system_shared_heap = _system_shared_heap_start; +#endif /* module heap */ _module_heap = _runtime_heap_start; diff --git a/src/platform/apollolake/include/platform/lib/memory.h b/src/platform/apollolake/include/platform/lib/memory.h index 2d3b38483..953049b7c 100644 --- a/src/platform/apollolake/include/platform/lib/memory.h +++ b/src/platform/apollolake/include/platform/lib/memory.h @@ -249,6 +249,9 @@ /* max size for all var-size sections (text/rodata/bss) */ #define SOF_FW_MAX_SIZE (HP_SRAM_BASE + HP_SRAM_SIZE - SOF_FW_BASE) +/* TODO: the last 4KB is not usable with QEMU, need to debug it. */ +#define SOF_FW_END (HP_SRAM_BASE + HP_SRAM_SIZE - 0x1000) + #define SOF_TEXT_START (SOF_FW_START) #define SOF_TEXT_BASE (SOF_FW_START) @@ -305,10 +308,8 @@ /* Heap section sizes for system shared heap */ #define HEAP_SYSTEM_SHARED_SIZE 0x1500 -#define HEAP_BUFFER_SIZE 0x10000 - #define HEAP_BUFFER_BLOCK_SIZE 0x100 -#define HEAP_BUFFER_COUNT (HEAP_BUFFER_SIZE / HEAP_BUFFER_BLOCK_SIZE) +#define HEAP_BUFFER_COUNT_MAX (HP_SRAM_SIZE / HEAP_BUFFER_BLOCK_SIZE) #define HEAP_SYSTEM_M_SIZE 0x4000 /* heap primary core size */ #define HEAP_SYSTEM_S_SIZE 0x3000 /* heap secondary core size */ diff --git a/src/platform/cannonlake/cannonlake.x.in b/src/platform/cannonlake/cannonlake.x.in index c8e60388e..176c03f3c 100644 --- a/src/platform/cannonlake/cannonlake.x.in +++ b/src/platform/cannonlake/cannonlake.x.in @@ -451,16 +451,6 @@ SECTIONS *(.gnu.linkonce.b.*) *(COMMON) - . = ALIGN (SRAM_BANK_SIZE); - _runtime_heap_start = ABSOLUTE(.); - . = . + HEAP_RUNTIME_SIZE; - _runtime_heap_end = ABSOLUTE(.); - - . = ALIGN (HEAP_BUF_ALIGNMENT); - _buffer_heap_start = ABSOLUTE(.); - . = . + HEAP_BUFFER_SIZE; - _buffer_heap_end = ABSOLUTE(.); - . = ALIGN (SRAM_BANK_SIZE); _system_heap_start = ABSOLUTE(.); . = . + HEAP_SYSTEM_M_SIZE; @@ -471,6 +461,12 @@ SECTIONS . = . + HEAP_SYS_RUNTIME_M_SIZE; _system_runtime_heap_end = ABSOLUTE(.); + . = ALIGN (4096); + _sof_stack_start = ABSOLUTE(.); + . = . + SOF_STACK_SIZE; + _sof_stack_end = ABSOLUTE(.); + +#if CONFIG_CORE_COUNT > 1 . = ALIGN (PLATFORM_DCACHE_ALIGN); _runtime_shared_heap_start = ABSOLUTE(.); . = . + HEAP_RUNTIME_SHARED_SIZE; @@ -483,15 +479,21 @@ SECTIONS . = ALIGN (PLATFORM_DCACHE_ALIGN); _system_shared_heap_end = ABSOLUTE(.); - . = ALIGN (4096); - _sof_stack_start = ABSOLUTE(.); - . = . + SOF_STACK_SIZE; - _sof_stack_end = ABSOLUTE(.); - . = ALIGN (SRAM_BANK_SIZE); _sof_core_s_start = ABSOLUTE(.); . = . + SOF_CORE_S_T_SIZE; _sof_core_s_end = ABSOLUTE(.); +#endif + + . = ALIGN (SRAM_BANK_SIZE); + _runtime_heap_start = ABSOLUTE(.); + . = . + HEAP_RUNTIME_SIZE; + _runtime_heap_end = ABSOLUTE(.); + + . = ALIGN (HEAP_BUF_ALIGNMENT); + _buffer_heap_start = ABSOLUTE(.); + . = . + SOF_FW_END - _buffer_heap_start; + _buffer_heap_end = ABSOLUTE(.); _bss_end = ABSOLUTE(.); } >sof_fw :sof_fw_phdr @@ -511,9 +513,11 @@ SECTIONS /* system runtime heap */ _system_runtime_heap = _system_runtime_heap_start; +#if CONFIG_CORE_COUNT > 1 /* Shared Heap */ _runtime_shared_heap = _runtime_shared_heap_start; _system_shared_heap = _system_shared_heap_start; +#endif /* module heap */ _module_heap = _runtime_heap_start; diff --git a/src/platform/cannonlake/include/platform/lib/memory.h b/src/platform/cannonlake/include/platform/lib/memory.h index 346857017..a20e1e3dd 100644 --- a/src/platform/cannonlake/include/platform/lib/memory.h +++ b/src/platform/cannonlake/include/platform/lib/memory.h @@ -230,6 +230,8 @@ /* max size for all var-size sections (text/rodata/bss) */ #define SOF_FW_MAX_SIZE (HP_SRAM_BASE + HP_SRAM_SIZE - SOF_FW_BASE) +#define SOF_FW_END (HP_SRAM_BASE + HP_SRAM_SIZE) + #define SOF_TEXT_START (SOF_FW_START) #define SOF_TEXT_BASE (SOF_FW_START) @@ -291,9 +293,8 @@ /* Heap section sizes for system shared heap */ #define HEAP_SYSTEM_SHARED_SIZE 0x1500 -#define HEAP_BUFFER_SIZE 0x50000 #define HEAP_BUFFER_BLOCK_SIZE 0x100 -#define HEAP_BUFFER_COUNT (HEAP_BUFFER_SIZE / HEAP_BUFFER_BLOCK_SIZE) +#define HEAP_BUFFER_COUNT_MAX (HP_SRAM_SIZE / HEAP_BUFFER_BLOCK_SIZE) #define HEAP_SYSTEM_M_SIZE 0x8000 /* heap primary core size */ #define HEAP_SYSTEM_S_SIZE 0x6000 /* heap secondary core size */ diff --git a/src/platform/icelake/icelake.x.in b/src/platform/icelake/icelake.x.in index 96874660b..d1711941a 100644 --- a/src/platform/icelake/icelake.x.in +++ b/src/platform/icelake/icelake.x.in @@ -455,16 +455,6 @@ SECTIONS *(.gnu.linkonce.b.*) *(COMMON) - . = ALIGN (SRAM_BANK_SIZE); - _runtime_heap_start = ABSOLUTE(.); - . = . + HEAP_RUNTIME_SIZE; - _runtime_heap_end = ABSOLUTE(.); - - . = ALIGN (HEAP_BUF_ALIGNMENT); - _buffer_heap_start = ABSOLUTE(.); - . = . + HEAP_BUFFER_SIZE; - _buffer_heap_end = ABSOLUTE(.); - . = ALIGN (SRAM_BANK_SIZE); _system_heap_start = ABSOLUTE(.); . = . + HEAP_SYSTEM_M_SIZE; @@ -475,6 +465,12 @@ SECTIONS . = . + HEAP_SYS_RUNTIME_M_SIZE; _system_runtime_heap_end = ABSOLUTE(.); + . = ALIGN (4096); + _sof_stack_start = ABSOLUTE(.); + . = . + SOF_STACK_SIZE; + _sof_stack_end = ABSOLUTE(.); + +#if CONFIG_CORE_COUNT > 1 . = ALIGN (PLATFORM_DCACHE_ALIGN); _runtime_shared_heap_start = ABSOLUTE(.); . = . + HEAP_RUNTIME_SHARED_SIZE; @@ -487,15 +483,21 @@ SECTIONS . = ALIGN (PLATFORM_DCACHE_ALIGN); _system_shared_heap_end = ABSOLUTE(.); - . = ALIGN (4096); - _sof_stack_start = ABSOLUTE(.); - . = . + SOF_STACK_SIZE; - _sof_stack_end = ABSOLUTE(.); - . = ALIGN (SRAM_BANK_SIZE); _sof_core_s_start = ABSOLUTE(.); . = . + SOF_CORE_S_T_SIZE; _sof_core_s_end = ABSOLUTE(.); +#endif + + . = ALIGN (SRAM_BANK_SIZE); + _runtime_heap_start = ABSOLUTE(.); + . = . + HEAP_RUNTIME_SIZE; + _runtime_heap_end = ABSOLUTE(.); + + . = ALIGN (HEAP_BUF_ALIGNMENT); + _buffer_heap_start = ABSOLUTE(.); + . = . + SOF_FW_END - _buffer_heap_start; + _buffer_heap_end = ABSOLUTE(.); _bss_end = ABSOLUTE(.); } >sof_fw :sof_fw_phdr @@ -515,9 +517,11 @@ SECTIONS /* system runtime heap */ _system_runtime_heap = _system_runtime_heap_start; +#if CONFIG_CORE_COUNT > 1 /* Shared Heap */ _runtime_shared_heap = _runtime_shared_heap_start; _system_shared_heap = _system_shared_heap_start; +#endif /* module heap */ _module_heap = _runtime_heap_start; diff --git a/src/platform/icelake/include/platform/lib/memory.h b/src/platform/icelake/include/platform/lib/memory.h index 86135b2cd..bbcb49643 100644 --- a/src/platform/icelake/include/platform/lib/memory.h +++ b/src/platform/icelake/include/platform/lib/memory.h @@ -227,6 +227,8 @@ /* max size for all var-size sections (text/rodata/bss) */ #define SOF_FW_MAX_SIZE (HP_SRAM_BASE + HP_SRAM_SIZE - SOF_FW_BASE) +#define SOF_FW_END (HP_SRAM_BASE + HP_SRAM_SIZE) + #define SOF_TEXT_START (SOF_FW_START) #define SOF_TEXT_BASE (SOF_FW_START) @@ -288,9 +290,8 @@ /* Heap section sizes for system shared heap */ #define HEAP_SYSTEM_SHARED_SIZE 0x1500 -#define HEAP_BUFFER_SIZE 0x50000 #define HEAP_BUFFER_BLOCK_SIZE 0x100 -#define HEAP_BUFFER_COUNT (HEAP_BUFFER_SIZE / HEAP_BUFFER_BLOCK_SIZE) +#define HEAP_BUFFER_COUNT_MAX (HP_SRAM_SIZE / HEAP_BUFFER_BLOCK_SIZE) #define HEAP_SYSTEM_M_SIZE 0x8000 /* heap primary core size */ #define HEAP_SYSTEM_S_SIZE 0x6000 /* heap secondary core size */ diff --git a/src/platform/intel/cavs/lib/memory.c b/src/platform/intel/cavs/lib/memory.c index aa2a5c60f..7ebcb3684 100644 --- a/src/platform/intel/cavs/lib/memory.c +++ b/src/platform/intel/cavs/lib/memory.c @@ -112,12 +112,12 @@ static SHARED_DATA struct block_map rt_shared_heap_map[] = { #endif /* Heap blocks for buffers */ -static SHARED_DATA struct block_hdr buf_block[HEAP_BUFFER_COUNT]; +static SHARED_DATA struct block_hdr buf_block[HEAP_BUFFER_COUNT_MAX]; static SHARED_DATA struct block_hdr lp_buf_block[HEAP_LP_BUFFER_COUNT]; /* Heap memory map for buffers */ static SHARED_DATA struct block_map buf_heap_map[] = { - BLOCK_DEF(HEAP_BUFFER_BLOCK_SIZE, HEAP_BUFFER_COUNT, + BLOCK_DEF(HEAP_BUFFER_BLOCK_SIZE, HEAP_BUFFER_COUNT_MAX, uncached_block_hdr(buf_block)), }; @@ -130,8 +130,21 @@ static SHARED_DATA struct mm memmap; void platform_init_memmap(struct sof *sof) { + uint32_t heap_buffer_size = SOF_FW_END - (uint32_t)&_buffer_heap; + uint32_t buffer_count; int i; + /* calculate the buffer heap size */ + buffer_count = heap_buffer_size / HEAP_BUFFER_BLOCK_SIZE; + heap_buffer_size = buffer_count * HEAP_BUFFER_BLOCK_SIZE; + + for (i = 0; i < ARRAY_SIZE(buf_heap_map); i++) { + buf_heap_map[i].count = buffer_count; + buf_heap_map[i].free_count = buffer_count; + } + dcache_writeback_region(buf_heap_map, + sizeof(struct block_map) * ARRAY_SIZE(buf_heap_map)); + /* access memory map through uncached region */ sof->memory_map = cache_to_uncache(&memmap); @@ -216,11 +229,12 @@ void platform_init_memmap(struct sof *sof) sof->memory_map->buffer[0].blocks = ARRAY_SIZE(buf_heap_map); sof->memory_map->buffer[0].map = uncached_block_map(buf_heap_map); sof->memory_map->buffer[0].heap = (uintptr_t)&_buffer_heap; - sof->memory_map->buffer[0].size = HEAP_BUFFER_SIZE; - sof->memory_map->buffer[0].info.free = HEAP_BUFFER_SIZE; + sof->memory_map->buffer[0].size = heap_buffer_size; + sof->memory_map->buffer[0].info.free = heap_buffer_size; sof->memory_map->buffer[0].caps = SOF_MEM_CAPS_RAM | SOF_MEM_CAPS_HP | SOF_MEM_CAPS_CACHE | SOF_MEM_CAPS_DMA; +#if PLATFORM_HEAP_BUFFER >= 2 /* heap lp buffer init */ sof->memory_map->buffer[1].blocks = ARRAY_SIZE(lp_buf_heap_map); sof->memory_map->buffer[1].map = uncached_block_map(lp_buf_heap_map); @@ -229,10 +243,11 @@ void platform_init_memmap(struct sof *sof) sof->memory_map->buffer[1].info.free = HEAP_LP_BUFFER_SIZE; sof->memory_map->buffer[1].caps = SOF_MEM_CAPS_RAM | SOF_MEM_CAPS_LP | SOF_MEM_CAPS_CACHE | SOF_MEM_CAPS_DMA; +#endif /* .total init */ sof->memory_map->total.free = HEAP_SYSTEM_T_SIZE + - HEAP_SYS_RUNTIME_T_SIZE + HEAP_RUNTIME_SIZE + HEAP_BUFFER_SIZE + + HEAP_SYS_RUNTIME_T_SIZE + HEAP_RUNTIME_SIZE + heap_buffer_size + HEAP_LP_BUFFER_SIZE; } diff --git a/src/platform/suecreek/include/platform/lib/memory.h b/src/platform/suecreek/include/platform/lib/memory.h index c056e8a22..8999057b5 100644 --- a/src/platform/suecreek/include/platform/lib/memory.h +++ b/src/platform/suecreek/include/platform/lib/memory.h @@ -236,6 +236,8 @@ /* max size for all var-size sections (text/rodata/bss) */ #define SOF_FW_MAX_SIZE (HP_SRAM_BASE + HP_SRAM_SIZE - SOF_FW_BASE) +#define SOF_FW_END (HP_SRAM_BASE + HP_SRAM_SIZE) + /* Heap section sizes for system runtime heap for core */ #define HEAP_SYS_RT_0_COUNT64 64 #define HEAP_SYS_RT_0_COUNT512 16 @@ -277,9 +279,8 @@ /* Heap section sizes for system shared heap */ #define HEAP_SYSTEM_SHARED_SIZE 0x1500 -#define HEAP_BUFFER_SIZE 0x10000 #define HEAP_BUFFER_BLOCK_SIZE 0x100 -#define HEAP_BUFFER_COUNT (HEAP_BUFFER_SIZE / HEAP_BUFFER_BLOCK_SIZE) +#define HEAP_BUFFER_COUNT_MAX (HP_SRAM_SIZE / HEAP_BUFFER_BLOCK_SIZE) #define HEAP_SYSTEM_M_SIZE 0x8000 /* heap core size */ #define HEAP_SYSTEM_S_SIZE 0x6000 /* heap secondary core size */ diff --git a/src/platform/suecreek/suecreek.x.in b/src/platform/suecreek/suecreek.x.in index 8ce692435..858fab86f 100644 --- a/src/platform/suecreek/suecreek.x.in +++ b/src/platform/suecreek/suecreek.x.in @@ -453,16 +453,6 @@ SECTIONS *(.gnu.linkonce.b.*) *(COMMON) - . = ALIGN (SRAM_BANK_SIZE); - _runtime_heap_start = ABSOLUTE(.); - . = . + HEAP_RUNTIME_SIZE; - _runtime_heap_end = ABSOLUTE(.); - - . = ALIGN (HEAP_BUF_ALIGNMENT); - _buffer_heap_start = ABSOLUTE(.); - . = . + HEAP_BUFFER_SIZE; - _buffer_heap_end = ABSOLUTE(.); - . = ALIGN (SRAM_BANK_SIZE); _system_heap_start = ABSOLUTE(.); . = . + HEAP_SYSTEM_M_SIZE; @@ -473,6 +463,12 @@ SECTIONS . = . + HEAP_SYS_RUNTIME_M_SIZE; _system_runtime_heap_end = ABSOLUTE(.); + . = ALIGN (4096); + _sof_stack_start = ABSOLUTE(.); + . = . + SOF_STACK_SIZE; + _sof_stack_end = ABSOLUTE(.); + +#if CONFIG_CORE_COUNT > 1 . = ALIGN (PLATFORM_DCACHE_ALIGN); _runtime_shared_heap_start = ABSOLUTE(.); . = . + HEAP_RUNTIME_SHARED_SIZE; @@ -485,15 +481,21 @@ SECTIONS . = ALIGN (PLATFORM_DCACHE_ALIGN); _system_shared_heap_end = ABSOLUTE(.); - . = ALIGN (4096); - _sof_stack_start = ABSOLUTE(.); - . = . + SOF_STACK_SIZE; - _sof_stack_end = ABSOLUTE(.); - . = ALIGN (SRAM_BANK_SIZE); _sof_core_s_start = ABSOLUTE(.); . = . + SOF_CORE_S_T_SIZE; _sof_core_s_end = ABSOLUTE(.); +#endif + + . = ALIGN (SRAM_BANK_SIZE); + _runtime_heap_start = ABSOLUTE(.); + . = . + HEAP_RUNTIME_SIZE; + _runtime_heap_end = ABSOLUTE(.); + + . = ALIGN (HEAP_BUF_ALIGNMENT); + _buffer_heap_start = ABSOLUTE(.); + . = . + SOF_FW_END - _buffer_heap_start; + _buffer_heap_end = ABSOLUTE(.); _bss_end = ABSOLUTE(.); } >sof_fw :sof_fw_phdr @@ -513,9 +515,11 @@ SECTIONS /* system runtime heap */ _system_runtime_heap = _system_runtime_heap_start; +#if CONFIG_CORE_COUNT > 1 /* Shared Heap */ _runtime_shared_heap = _runtime_shared_heap_start; _system_shared_heap = _system_shared_heap_start; +#endif /* module heap */ _module_heap = _runtime_heap_start; diff --git a/src/platform/tigerlake/include/platform/lib/memory.h b/src/platform/tigerlake/include/platform/lib/memory.h index a64f0cf63..80206d2d2 100644 --- a/src/platform/tigerlake/include/platform/lib/memory.h +++ b/src/platform/tigerlake/include/platform/lib/memory.h @@ -236,6 +236,8 @@ /* max size for all var-size sections (text/rodata/bss) */ #define SOF_FW_MAX_SIZE (HP_SRAM_BASE + HP_SRAM_SIZE - SOF_FW_BASE) +#define SOF_FW_END (HP_SRAM_BASE + HP_SRAM_SIZE) + #define SOF_TEXT_START (SOF_FW_START) #define SOF_TEXT_BASE (SOF_FW_START) @@ -302,9 +304,8 @@ /* Heap section sizes for system shared heap */ #define HEAP_SYSTEM_SHARED_SIZE 0x1500 -#define HEAP_BUFFER_SIZE 0x80000 #define HEAP_BUFFER_BLOCK_SIZE 0x100 -#define HEAP_BUFFER_COUNT (HEAP_BUFFER_SIZE / HEAP_BUFFER_BLOCK_SIZE) +#define HEAP_BUFFER_COUNT_MAX (HP_SRAM_SIZE / HEAP_BUFFER_BLOCK_SIZE) #define HEAP_SYSTEM_M_SIZE 0x8000 /* heap primary core size */ #define HEAP_SYSTEM_S_SIZE 0x6000 /* heap secondary core size */ diff --git a/src/platform/tigerlake/tigerlake.x.in b/src/platform/tigerlake/tigerlake.x.in index 0317b5d51..1df42426d 100644 --- a/src/platform/tigerlake/tigerlake.x.in +++ b/src/platform/tigerlake/tigerlake.x.in @@ -529,16 +529,6 @@ SECTIONS *(.gnu.linkonce.b.*) *(COMMON) - . = ALIGN (SRAM_BANK_SIZE); - _runtime_heap_start = ABSOLUTE(.); - . = . + HEAP_RUNTIME_SIZE; - _runtime_heap_end = ABSOLUTE(.); - - . = ALIGN (HEAP_BUF_ALIGNMENT); - _buffer_heap_start = ABSOLUTE(.); - . = . + HEAP_BUFFER_SIZE; - _buffer_heap_end = ABSOLUTE(.); - . = ALIGN (SRAM_BANK_SIZE); _system_heap_start = ABSOLUTE(.); . = . + HEAP_SYSTEM_M_SIZE; @@ -549,6 +539,12 @@ SECTIONS . = . + HEAP_SYS_RUNTIME_M_SIZE; _system_runtime_heap_end = ABSOLUTE(.); + . = ALIGN (4096); + _sof_stack_start = ABSOLUTE(.); + . = . + SOF_STACK_SIZE; + _sof_stack_end = ABSOLUTE(.); + +#if CONFIG_CORE_COUNT > 1 . = ALIGN (PLATFORM_DCACHE_ALIGN); _runtime_shared_heap_start = ABSOLUTE(.); . = . + HEAP_RUNTIME_SHARED_SIZE; @@ -561,15 +557,21 @@ SECTIONS . = ALIGN (PLATFORM_DCACHE_ALIGN); _system_shared_heap_end = ABSOLUTE(.); - . = ALIGN (4096); - _sof_stack_start = ABSOLUTE(.); - . = . + SOF_STACK_SIZE; - _sof_stack_end = ABSOLUTE(.); - . = ALIGN (SRAM_BANK_SIZE); _sof_core_s_start = ABSOLUTE(.); . = . + SOF_CORE_S_T_SIZE; _sof_core_s_end = ABSOLUTE(.); +#endif + + . = ALIGN (SRAM_BANK_SIZE); + _runtime_heap_start = ABSOLUTE(.); + . = . + HEAP_RUNTIME_SIZE; + _runtime_heap_end = ABSOLUTE(.); + + . = ALIGN (HEAP_BUF_ALIGNMENT); + _buffer_heap_start = ABSOLUTE(.); + . = . + SOF_FW_END - _buffer_heap_start; + _buffer_heap_end = ABSOLUTE(.); _bss_end = ABSOLUTE(.); } >sof_fw :sof_fw_phdr @@ -589,9 +591,11 @@ SECTIONS /* system runtime heap */ _system_runtime_heap = _system_runtime_heap_start; +#if CONFIG_CORE_COUNT > 1 /* Shared Heap */ _runtime_shared_heap = _runtime_shared_heap_start; _system_shared_heap = _system_shared_heap_start; +#endif /* module heap */ _module_heap = _runtime_heap_start;