From 8266cc4e69aa4f47f794b801709019aef768b8a7 Mon Sep 17 00:00:00 2001 From: wuzhenghui Date: Fri, 10 Jul 2026 12:38:47 +0800 Subject: [PATCH] fix(esp_hw_support): update memory pointer checks for SPM support --- components/esp_hw_support/include/esp_memory_utils.h | 5 ++++- components/espcoredump/src/port/riscv/core_dump_port.c | 9 ++++++++- components/heap/port/esp32p4/memory_layout.c | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/components/esp_hw_support/include/esp_memory_utils.h b/components/esp_hw_support/include/esp_memory_utils.h index 22aa4c6e6be..067fbc60b07 100644 --- a/components/esp_hw_support/include/esp_memory_utils.h +++ b/components/esp_hw_support/include/esp_memory_utils.h @@ -412,7 +412,10 @@ inline static bool esp_stack_ptr_is_sane(uint32_t sp) || esp_stack_ptr_in_extram(sp) #endif #if CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP - || esp_ptr_in_rtc_dram_fast((void*) sp) + || (esp_ptr_in_rtc_dram_fast((void *)sp) && ((sp & 0xF) == 0)) +#endif +#if SOC_MEM_SPM_SUPPORTED + || (esp_ptr_in_spm((void *)sp) && ((sp & 0xF) == 0)) #endif ; } diff --git a/components/espcoredump/src/port/riscv/core_dump_port.c b/components/espcoredump/src/port/riscv/core_dump_port.c index 38c6d749109..87c6947a4b0 100644 --- a/components/espcoredump/src/port/riscv/core_dump_port.c +++ b/components/espcoredump/src/port/riscv/core_dump_port.c @@ -227,6 +227,9 @@ static inline bool esp_core_dump_task_stack_end_is_sane(uint32_t sp) #endif #if CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP || esp_ptr_in_rtc_dram_fast((void*) sp) +#endif +#if SOC_MEM_SPM_SUPPORTED + || esp_ptr_in_spm((void *)sp) #endif ; } @@ -311,7 +314,11 @@ bool esp_core_dump_mem_seg_is_sane(uint32_t addr, uint32_t sz) || (esp_ptr_in_rtc_slow((void *)addr) && esp_ptr_in_rtc_slow((void *)(addr + sz - 1))) || (esp_ptr_in_rtc_dram_fast((void *)addr) && esp_ptr_in_rtc_dram_fast((void *)(addr + sz - 1))) || (esp_ptr_external_ram((void *)addr) && esp_ptr_external_ram((void *)(addr + sz - 1))) - || (esp_ptr_in_iram((void *)addr) && esp_ptr_in_iram((void *)(addr + sz - 1))); + || (esp_ptr_in_iram((void *)addr) && esp_ptr_in_iram((void *)(addr + sz - 1))) +#if SOC_MEM_SPM_SUPPORTED + || (esp_ptr_in_spm((void *)addr) && esp_ptr_in_spm((void *)(addr + sz - 1))) +#endif + ; } /** diff --git a/components/heap/port/esp32p4/memory_layout.c b/components/heap/port/esp32p4/memory_layout.c index 9bfe225a8c8..2b3e1f12d7d 100644 --- a/components/heap/port/esp32p4/memory_layout.c +++ b/components/heap/port/esp32p4/memory_layout.c @@ -66,7 +66,7 @@ const soc_memory_type_desc_t soc_memory_types[SOC_MEMORY_TYPE_NUM] = { [SOC_MEMORY_TYPE_RETENT_MEM] = { "RETENT_RAM", { MALLOC_CAP_RETENTION | MALLOC_CAP_SIMD, MALLOC_L2MEM_BASE_CAPS, 0 }}, [SOC_MEMORY_TYPE_L2MEM] = { "RAM", { MALLOC_L2MEM_BASE_CAPS | MALLOC_CAP_SIMD, 0, 0 }}, [SOC_MEMORY_TYPE_SPIRAM] = { "SPIRAM", { MALLOC_CAP_SPIRAM, 0, ESP32P4_MEM_COMMON_CAPS | MALLOC_CAP_SIMD }}, - [SOC_MEMORY_TYPE_SPM] = { "SPM", { MALLOC_CAP_SPM, ESP32P4_MEM_COMMON_CAPS | MALLOC_CAP_INTERNAL, 0 }}, + [SOC_MEMORY_TYPE_SPM] = { "SPM", { MALLOC_CAP_SPM, 0, ESP32P4_MEM_COMMON_CAPS | MALLOC_CAP_INTERNAL }}, [SOC_MEMORY_TYPE_RTCRAM] = { "RTCRAM", { MALLOC_CAP_RTCRAM, 0, MALLOC_RTCRAM_BASE_CAPS}}, };