From fc406ebb631ea7ecf0de43ec9b7b0b8f0719df34 Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Mon, 17 Jun 2019 12:39:48 +0200 Subject: [PATCH 1/5] memory: add heap_buf_alignment define for cavs platforms This value will determine alignment for heap buffers Signed-off-by: Adrian Bonislawski --- src/platform/intel/cavs/include/cavs/memory.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/platform/intel/cavs/include/cavs/memory.h b/src/platform/intel/cavs/include/cavs/memory.h index 46d8946b3ace..9edb6d92a842 100644 --- a/src/platform/intel/cavs/include/cavs/memory.h +++ b/src/platform/intel/cavs/include/cavs/memory.h @@ -39,6 +39,8 @@ #define LPSRAM_SIZE (PLATFORM_LPSRAM_EBB_COUNT * SRAM_BANK_SIZE) +#define HEAP_BUF_ALIGNMENT XCHAL_DCACHE_LINESIZE + #if !defined(__ASSEMBLER__) && !defined(LINKER) void platform_init_memmap(void); #endif From 490cfa594fb45d04949a5cda70f373768c90366e Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Mon, 17 Jun 2019 12:41:40 +0200 Subject: [PATCH 2/5] memory: add static assert for heap_buf_alignment value This will check if heap buffers alignment is valid Signed-off-by: Adrian Bonislawski --- src/platform/intel/cavs/memory.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/platform/intel/cavs/memory.c b/src/platform/intel/cavs/memory.c index 1e63858d9ba8..bc62d232480c 100644 --- a/src/platform/intel/cavs/memory.c +++ b/src/platform/intel/cavs/memory.c @@ -12,6 +12,10 @@ extern uintptr_t _system_heap, _system_runtime_heap, _module_heap; extern uintptr_t _buffer_heap, _sof_core_s_start; +/* Check if heap buffers alignment is valid */ +STATIC_ASSERT(0 == (HEAP_BUF_ALIGNMENT % PLATFORM_DCACHE_ALIGN), + invalid_heap_buf_alignment); + /* Heap blocks for system runtime for master core */ static struct block_hdr sys_rt_0_block64[HEAP_SYS_RT_0_COUNT64]; static struct block_hdr sys_rt_0_block512[HEAP_SYS_RT_0_COUNT512]; From cc46f7618dc70f80e87a22765a20be8941449aca Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Fri, 14 Jun 2019 12:37:59 +0200 Subject: [PATCH 3/5] memory: make buffers aligned to HEAP_BUF_ALIGNMENT in CNL It provides better memory/cache performance since it aligns with memory IO burst size and cache line size Signed-off-by: Adrian Bonislawski --- src/platform/cannonlake/cannonlake.x.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/cannonlake/cannonlake.x.in b/src/platform/cannonlake/cannonlake.x.in index 2747074fe673..1a453aefe2a1 100644 --- a/src/platform/cannonlake/cannonlake.x.in +++ b/src/platform/cannonlake/cannonlake.x.in @@ -443,7 +443,7 @@ SECTIONS . = . + HEAP_RUNTIME_SIZE; _runtime_heap_end = ABSOLUTE(.); - . = ALIGN (32); + . = ALIGN (HEAP_BUF_ALIGNMENT); _buffer_heap_start = ABSOLUTE(.); . = . + HEAP_BUFFER_SIZE; _buffer_heap_end = ABSOLUTE(.); @@ -453,7 +453,7 @@ SECTIONS . = . + HEAP_SYSTEM_M_SIZE; _system_heap_end = ABSOLUTE(.); - . = ALIGN (32); + . = ALIGN (HEAP_BUF_ALIGNMENT); _system_runtime_heap_start = ABSOLUTE(.); . = . + HEAP_SYS_RUNTIME_M_SIZE; _system_runtime_heap_end = ABSOLUTE(.); From 01cb80e9358aaaf87be690240ab48c9560f481de Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Fri, 14 Jun 2019 12:41:29 +0200 Subject: [PATCH 4/5] memory: make buffers aligned to HEAP_BUF_ALIGNMENT in ICL It provides better memory/cache performance since it aligns with memory IO burst size and cache line size Signed-off-by: Adrian Bonislawski --- src/platform/icelake/icelake.x.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/icelake/icelake.x.in b/src/platform/icelake/icelake.x.in index 416b48107c11..f932e42d28ff 100644 --- a/src/platform/icelake/icelake.x.in +++ b/src/platform/icelake/icelake.x.in @@ -447,7 +447,7 @@ SECTIONS . = . + HEAP_RUNTIME_SIZE; _runtime_heap_end = ABSOLUTE(.); - . = ALIGN (32); + . = ALIGN (HEAP_BUF_ALIGNMENT); _buffer_heap_start = ABSOLUTE(.); . = . + HEAP_BUFFER_SIZE; _buffer_heap_end = ABSOLUTE(.); @@ -457,7 +457,7 @@ SECTIONS . = . + HEAP_SYSTEM_M_SIZE; _system_heap_end = ABSOLUTE(.); - . = ALIGN (32); + . = ALIGN (HEAP_BUF_ALIGNMENT); _system_runtime_heap_start = ABSOLUTE(.); . = . + HEAP_SYS_RUNTIME_M_SIZE; _system_runtime_heap_end = ABSOLUTE(.); From 741b9ff051c16080875252e59e52c50f8c810c9e Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Fri, 14 Jun 2019 12:45:02 +0200 Subject: [PATCH 5/5] memory: make buffers aligned to HEAP_BUF_ALIGNMENT in SUE It provides better memory/cache performance since it aligns with memory IO burst size and cache line size Signed-off-by: Adrian Bonislawski --- src/platform/suecreek/suecreek.x.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/suecreek/suecreek.x.in b/src/platform/suecreek/suecreek.x.in index f2994808a258..45bfb780df7c 100644 --- a/src/platform/suecreek/suecreek.x.in +++ b/src/platform/suecreek/suecreek.x.in @@ -438,7 +438,7 @@ SECTIONS . = . + HEAP_RUNTIME_SIZE; _runtime_heap_end = ABSOLUTE(.); - . = ALIGN (32); + . = ALIGN (HEAP_BUF_ALIGNMENT); _buffer_heap_start = ABSOLUTE(.); . = . + HEAP_BUFFER_SIZE; _buffer_heap_end = ABSOLUTE(.); @@ -448,7 +448,7 @@ SECTIONS . = . + HEAP_SYSTEM_M_SIZE; _system_heap_end = ABSOLUTE(.); - . = ALIGN (32); + . = ALIGN (HEAP_BUF_ALIGNMENT); _system_runtime_heap_start = ABSOLUTE(.); . = . + HEAP_SYS_RUNTIME_M_SIZE; _system_runtime_heap_end = ABSOLUTE(.);