From 4d1c566c3ce61480c845f1220fe76f92e779b9cc Mon Sep 17 00:00:00 2001 From: Tomasz Lauda Date: Mon, 10 Sep 2018 11:05:53 +0200 Subject: [PATCH] memory: cavs: cache fixes We need to writeback clock data, because it's used in work queue. Also we need to writeback bss in order to share static pointers with slave cores. Signed-off-by: Tomasz Lauda --- src/arch/xtensa/smp/include/arch/alloc.h | 3 +++ src/drivers/intel/cavs/clk.c | 2 ++ src/platform/apollolake/apollolake.x.in | 4 ++-- src/platform/apollolake/include/platform/memory.h | 4 +++- src/platform/cannonlake/cannonlake.x.in | 4 ++-- src/platform/cannonlake/include/platform/memory.h | 4 +++- src/platform/icelake/icelake.x.in | 4 ++-- src/platform/icelake/include/platform/memory.h | 4 +++- 8 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/arch/xtensa/smp/include/arch/alloc.h b/src/arch/xtensa/smp/include/arch/alloc.h index 65cb9b0c8..a36497d98 100644 --- a/src/arch/xtensa/smp/include/arch/alloc.h +++ b/src/arch/xtensa/smp/include/arch/alloc.h @@ -72,6 +72,9 @@ static inline void alloc_core_context(int core) core_ctx_ptr[core] = core_ctx; dcache_writeback_invalidate_region(core_ctx_ptr, sizeof(core_ctx_ptr)); + + /* writeback bss region to share static pointers */ + dcache_writeback_region((void *)SOF_BSS_DATA_START, SOF_BSS_DATA_SIZE); } /** diff --git a/src/drivers/intel/cavs/clk.c b/src/drivers/intel/cavs/clk.c index 2ce6af626..d07802877 100644 --- a/src/drivers/intel/cavs/clk.c +++ b/src/drivers/intel/cavs/clk.c @@ -252,4 +252,6 @@ void init_platform_clocks(void) ssp_freq[SSP_DEFAULT_IDX].ticks_per_usec; clk_pdata->clk[CLK_SSP].ticks_per_msec = ssp_freq[SSP_DEFAULT_IDX].ticks_per_msec; + + dcache_writeback_region(clk_pdata, sizeof(*clk_pdata)); } diff --git a/src/platform/apollolake/apollolake.x.in b/src/platform/apollolake/apollolake.x.in index 5802cc579..4aef637ec 100644 --- a/src/platform/apollolake/apollolake.x.in +++ b/src/platform/apollolake/apollolake.x.in @@ -81,10 +81,10 @@ MEMORY org = SOF_TEXT_BASE, len = SOF_TEXT_SIZE, sof_data : - org = SOF_TEXT_BASE + SOF_TEXT_SIZE, + org = SOF_DATA_START, len = SOF_DATA_SIZE sof_bss_data : - org = SOF_TEXT_BASE + SOF_TEXT_SIZE + SOF_DATA_SIZE, + org = SOF_BSS_DATA_START, len = SOF_BSS_DATA_SIZE system_heap : org = HEAP_SYSTEM_BASE, diff --git a/src/platform/apollolake/include/platform/memory.h b/src/platform/apollolake/include/platform/memory.h index d1d84a1ea..bba58c930 100644 --- a/src/platform/apollolake/include/platform/memory.h +++ b/src/platform/apollolake/include/platform/memory.h @@ -143,7 +143,7 @@ #define HEAP_SYSTEM_BASE \ (SOF_TEXT_BASE + SOF_TEXT_SIZE +\ SOF_DATA_SIZE + SOF_BSS_DATA_SIZE) -#define HEAP_SYSTEM_SIZE 0x8000 +#define HEAP_SYSTEM_SIZE 0x9000 #define HEAP_RUNTIME_BASE (HEAP_SYSTEM_BASE + HEAP_SYSTEM_SIZE) #define HEAP_RUNTIME_SIZE \ @@ -243,6 +243,7 @@ #define SOF_TEXT_SIZE (0x19000 - 0x400) /* initialized data */ +#define SOF_DATA_START (SOF_TEXT_BASE + SOF_TEXT_SIZE) #if defined CONFIG_DMIC #define SOF_DATA_SIZE 0x1b000 #else @@ -250,6 +251,7 @@ #endif /* bss data */ +#define SOF_BSS_DATA_START (SOF_TEXT_BASE + SOF_TEXT_SIZE + SOF_DATA_SIZE) #define SOF_BSS_DATA_SIZE 0x8700 /* Stack configuration */ diff --git a/src/platform/cannonlake/cannonlake.x.in b/src/platform/cannonlake/cannonlake.x.in index 06f745b73..03c7916d6 100644 --- a/src/platform/cannonlake/cannonlake.x.in +++ b/src/platform/cannonlake/cannonlake.x.in @@ -81,10 +81,10 @@ MEMORY org = SOF_TEXT_BASE, len = SOF_TEXT_SIZE, sof_data : - org = SOF_TEXT_BASE + SOF_TEXT_SIZE, + org = SOF_DATA_START, len = SOF_DATA_SIZE sof_bss_data : - org = SOF_TEXT_BASE + SOF_TEXT_SIZE + SOF_DATA_SIZE, + org = SOF_BSS_DATA_START, len = SOF_BSS_DATA_SIZE system_heap : org = HEAP_SYSTEM_BASE, diff --git a/src/platform/cannonlake/include/platform/memory.h b/src/platform/cannonlake/include/platform/memory.h index 2dfa08a0e..0cbfe996b 100644 --- a/src/platform/cannonlake/include/platform/memory.h +++ b/src/platform/cannonlake/include/platform/memory.h @@ -230,6 +230,7 @@ #define SOF_TEXT_SIZE (0x18000 - 0x400) /* initialized data */ +#define SOF_DATA_START (SOF_TEXT_BASE + SOF_TEXT_SIZE) #if defined CONFIG_DMIC #define SOF_DATA_SIZE 0x1b000 #else @@ -237,7 +238,8 @@ #endif /* bss data */ -#define SOF_BSS_DATA_SIZE 0x10900 +#define SOF_BSS_DATA_START (SOF_TEXT_BASE + SOF_TEXT_SIZE + SOF_DATA_SIZE) +#define SOF_BSS_DATA_SIZE 0x10900 /* Heap configuration */ #define HEAP_SYSTEM_BASE (SOF_TEXT_BASE + SOF_TEXT_SIZE + \ diff --git a/src/platform/icelake/icelake.x.in b/src/platform/icelake/icelake.x.in index 6a7020dae..0d76fa106 100644 --- a/src/platform/icelake/icelake.x.in +++ b/src/platform/icelake/icelake.x.in @@ -81,10 +81,10 @@ MEMORY org = SOF_TEXT_BASE, len = SOF_TEXT_SIZE, sof_data : - org = SOF_TEXT_BASE + SOF_TEXT_SIZE, + org = SOF_DATA_START, len = SOF_DATA_SIZE sof_bss_data : - org = SOF_TEXT_BASE + SOF_TEXT_SIZE + SOF_DATA_SIZE, + org = SOF_BSS_DATA_START, len = SOF_BSS_DATA_SIZE system_heap : org = HEAP_SYSTEM_BASE, diff --git a/src/platform/icelake/include/platform/memory.h b/src/platform/icelake/include/platform/memory.h index f6e6e828a..7dfce3bf1 100644 --- a/src/platform/icelake/include/platform/memory.h +++ b/src/platform/icelake/include/platform/memory.h @@ -230,6 +230,7 @@ #define SOF_TEXT_SIZE (0x18000 - 0x400) /* initialized data */ +#define SOF_DATA_START (SOF_TEXT_BASE + SOF_TEXT_SIZE) #if defined CONFIG_DMIC #define SOF_DATA_SIZE 0x1b000 #else @@ -237,7 +238,8 @@ #endif /* bss data */ -#define SOF_BSS_DATA_SIZE 0x10900 +#define SOF_BSS_DATA_START (SOF_TEXT_BASE + SOF_TEXT_SIZE + SOF_DATA_SIZE) +#define SOF_BSS_DATA_SIZE 0x10900 /* Heap configuration */ #define HEAP_SYSTEM_BASE (SOF_TEXT_BASE + SOF_TEXT_SIZE + \