soc: intel_adsp: set MMU permissions for .cold* sections

This patch will set MMU permissions for .cold* sections
Fixes cold section execution if MMU is enabled

Signed-off-by: Adrian Bonislawski <adrian.bonislawski@intel.com>
This commit is contained in:
Adrian Bonislawski 2025-03-12 12:26:18 +01:00 committed by Benjamin Cabé
commit e7f2e1412d
2 changed files with 18 additions and 0 deletions

View file

@ -175,11 +175,14 @@ SECTIONS {
/* Cold code in IMR memory */
.cold : ALIGN(4096) {
__cold_start = .;
*(.cold .cold.* )
__cold_end = .;
} >imr
/* Cold data. */
.coldrodata : ALIGN(4096) {
__coldrodata_start = .;
*(.coldrodata .coldrodata.*)
_imr_end = .;
} >imr

View file

@ -19,6 +19,10 @@ extern char __common_rom_region_start[];
extern char __common_rom_region_end[];
extern char __common_ram_region_start[];
extern char __common_ram_region_end[];
extern char __cold_start[];
extern char __cold_end[];
extern char __coldrodata_start[];
const struct xtensa_mmu_range xtensa_soc_mmu_ranges[] = {
{
@ -106,6 +110,17 @@ const struct xtensa_mmu_range xtensa_soc_mmu_ranges[] = {
.attrs = XTENSA_MMU_PERM_W | XTENSA_MMU_CACHED_WB,
.name = "imr layout",
},
{
.start = (uint32_t)__cold_start,
.end = (uint32_t)__cold_end,
.attrs = XTENSA_MMU_PERM_X,
.name = "imr cold",
},
{
.start = (uint32_t)__coldrodata_start,
.end = (uint32_t)_imr_end,
.name = "imr coldrodata",
},
{
.start = (uint32_t)IMR_L3_HEAP_BASE,
.end = (uint32_t)(IMR_L3_HEAP_BASE + IMR_L3_HEAP_SIZE),