diff --git a/components/bootloader_support/src/bootloader_common.c b/components/bootloader_support/src/bootloader_common.c index d70ba5f9c0..1d7294e17e 100644 --- a/components/bootloader_support/src/bootloader_common.c +++ b/components/bootloader_support/src/bootloader_common.c @@ -34,6 +34,7 @@ #include "soc/gpio_periph.h" #include "soc/rtc.h" #include "soc/efuse_reg.h" +#include "soc/soc_memory_layout.h" #include "esp_image_format.h" #include "bootloader_sha.h" #include "sys/param.h" @@ -295,7 +296,18 @@ RESET_REASON bootloader_common_get_reset_reason(int cpu_no) #if defined( CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP ) || defined( CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC ) -rtc_retain_mem_t *const rtc_retain_mem = (rtc_retain_mem_t *)(SOC_RTC_DRAM_HIGH - sizeof(rtc_retain_mem_t)); +#define RTC_RETAIN_MEM_ADDR (SOC_RTC_DATA_HIGH - sizeof(rtc_retain_mem_t)) + +rtc_retain_mem_t *const rtc_retain_mem = (rtc_retain_mem_t *)RTC_RETAIN_MEM_ADDR; + +#if !IS_BOOTLOADER_BUILD +/* The app needs to be told this memory is reserved, important if configured to use RTC memory as heap. + + Note that keeping this macro here only works when other symbols in this file are referenced by the app, as + this feature is otherwise 100% part of the bootloader. However this seems to happen in all apps. + */ +SOC_RESERVE_MEMORY_REGION(RTC_RETAIN_MEM_ADDR, RTC_RETAIN_MEM_ADDR + sizeof(rtc_retain_mem_t), rtc_retain_mem); +#endif static bool check_rtc_retain_mem(void) {