Skip to content

Commit

Permalink
Merge branch 'bugfix/fix_sleep_cache_spi_safe_issues_backport_v5.1' i…
Browse files Browse the repository at this point in the history
…nto 'release/v5.1'

Power Management: fix cache spi flash related issues in sleep process (backport v5.1)

See merge request espressif/esp-idf!24812
  • Loading branch information
jack0c committed Jul 15, 2023
2 parents 77f6f72 + 16d849b commit b210054
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 7 deletions.
9 changes: 8 additions & 1 deletion components/esp_hw_support/linker.lf
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ entries:
rtc_clk (noflash)
esp_gpio_reserve: esp_gpio_reserve_pins (noflash)
esp_gpio_reserve: esp_gpio_is_pin_reserved (noflash)
if SOC_CONFIGURABLE_VDDSDIO_SUPPORTED:
if SOC_CONFIGURABLE_VDDSDIO_SUPPORTED = y && (PM_SLP_IRAM_OPT = y || ESP_SLEEP_POWER_DOWN_FLASH = y):
rtc_init:rtc_vddsdio_get_config (noflash)
rtc_init:rtc_vddsdio_set_config (noflash)
if IDF_TARGET_ESP32C6 = n && IDF_TARGET_ESP32H2 = n: # TODO: IDF-5645
rtc_sleep (noflash_text)
Expand Down Expand Up @@ -45,3 +46,9 @@ entries:
sar_periph_ctrl (noflash)
else:
sar_periph_ctrl: sar_periph_ctrl_power_enable (noflash)

[mapping:soc_pm]
archive: libsoc.a
entries:
if PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP && ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND:
gpio_periph: GPIO_HOLD_MASK (noflash)
4 changes: 0 additions & 4 deletions components/esp_hw_support/sleep_cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -706,10 +706,6 @@ esp_err_t IRAM_ATTR esp_sleep_cpu_retention(uint32_t (*goto_sleep)(uint32_t, uin
{
uint32_t mstatus = save_mstatus_and_disable_global_int();

/* wait cache idle */
Cache_Freeze_ICache_Enable(CACHE_FREEZE_ACK_BUSY);
Cache_Freeze_ICache_Disable();

cpu_domain_dev_regs_save(s_cpu_retention.retent.plic_frame);
cpu_domain_dev_regs_save(s_cpu_retention.retent.clint_frame);
cpu_domain_dev_regs_save(s_cpu_retention.retent.intpri_frame);
Expand Down
7 changes: 7 additions & 0 deletions components/esp_hw_support/sleep_modes.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include "soc/soc_caps.h"
#include "regi2c_ctrl.h" //For `REGI2C_ANA_CALI_PD_WORKAROUND`, temp

#include "hal/cache_hal.h"
#include "hal/wdt_hal.h"
#include "hal/uart_hal.h"
#if SOC_TOUCH_SENSOR_SUPPORTED
Expand Down Expand Up @@ -105,6 +106,10 @@
#include "esp_private/sleep_retention.h"
#endif

#if (CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP && CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND) && !CONFIG_IDF_TARGET_ESP32H2
#include "hal/cache_hal.h"
#endif

// If light sleep time is less than that, don't power down flash
#define FLASH_PD_MIN_SLEEP_TIME_US 2000

Expand Down Expand Up @@ -731,6 +736,7 @@ static esp_err_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags, esp_sleep_mode_t m
#if (CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP && CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND)
#if !CONFIG_IDF_TARGET_ESP32H2 // ESP32H2 TODO IDF-7359: related rtcio ll func not supported yet
if(!(pd_flags & PMU_SLEEP_PD_VDDSDIO)) {
cache_hal_freeze(CACHE_TYPE_ALL);
gpio_ll_hold_en(&GPIO, SPI_CS0_GPIO_NUM);
}
#endif
Expand All @@ -753,6 +759,7 @@ static esp_err_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags, esp_sleep_mode_t m
#if !CONFIG_IDF_TARGET_ESP32H2 // ESP32H2 TODO IDF-7359: related rtcio ll func not supported yet
if(!(pd_flags & PMU_SLEEP_PD_VDDSDIO)) {
gpio_ll_hold_dis(&GPIO, SPI_CS0_GPIO_NUM);
cache_hal_unfreeze(CACHE_TYPE_ALL);
}
#endif
#endif
Expand Down
2 changes: 0 additions & 2 deletions components/esp_pm/linker.lf
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ entries:
sleep_modes:esp_sleep_enable_timer_wakeup (noflash)
sleep_modes:timer_wakeup_prepare (noflash)
sleep_modes:get_power_down_flags (noflash)
if SOC_CONFIGURABLE_VDDSDIO_SUPPORTED:
rtc_init:rtc_vddsdio_get_config (noflash)
esp_clk:esp_clk_slowclk_cal_set (noflash)
esp_clk:esp_clk_slowclk_cal_get (noflash)
esp_clk:esp_rtc_get_time_us (noflash)
Expand Down

0 comments on commit b210054

Please sign in to comment.