mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-29 18:27:20 +02:00
Merge branch 'fix/fix_writeback_psram_after_vo2_powerdown_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix writeback cache to psram after vo2 powerdown (v5.4) See merge request espressif/esp-idf!34579
This commit is contained in:
@ -71,7 +71,7 @@ menu "Hardware Settings"
|
||||
config ESP_SLEEP_POWER_DOWN_FLASH
|
||||
bool "Power down flash in light sleep when there is no SPIRAM or SPIRAM has independent power supply"
|
||||
depends on !SPIRAM || ESP_LDO_RESERVE_PSRAM
|
||||
depends on !(IDF_TARGET_ESP32P4 && (ESP32P4_REV_MIN_FULL >= 100))
|
||||
depends on !(IDF_TARGET_ESP32P4 && (ESP32P4_REV_MIN_FULL < 100))
|
||||
default n
|
||||
help
|
||||
If enabled, chip will try to power down flash as part of esp_light_sleep_start(), which costs
|
||||
|
@ -35,6 +35,9 @@
|
||||
#include "esp_rom_sys.h"
|
||||
#include "esp_rom_uart.h"
|
||||
#include "hal/efuse_hal.h"
|
||||
#if CONFIG_SPIRAM
|
||||
#include "hal/ldo_ll.h"
|
||||
#endif
|
||||
|
||||
#define HP(state) (PMU_MODE_HP_ ## state)
|
||||
#define LP(state) (PMU_MODE_LP_ ## state)
|
||||
@ -365,6 +368,14 @@ TCM_IRAM_ATTR uint32_t pmu_sleep_start(uint32_t wakeup_opt, uint32_t reject_opt,
|
||||
rtc_clk_mpll_disable();
|
||||
}
|
||||
|
||||
|
||||
#if CONFIG_SPIRAM && CONFIG_ESP_LDO_RESERVE_PSRAM
|
||||
// Disable PSRAM chip power supply
|
||||
if (dslp) {
|
||||
ldo_ll_enable(LDO_ID2UNIT(CONFIG_ESP_LDO_CHAN_PSRAM_DOMAIN), false);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Start entry into sleep mode */
|
||||
pmu_ll_hp_set_sleep_enable(PMU_instance()->hal->dev);
|
||||
|
||||
@ -373,6 +384,13 @@ TCM_IRAM_ATTR uint32_t pmu_sleep_start(uint32_t wakeup_opt, uint32_t reject_opt,
|
||||
;
|
||||
}
|
||||
|
||||
#if CONFIG_SPIRAM && CONFIG_ESP_LDO_RESERVE_PSRAM
|
||||
// Enable PSRAM chip power supply after deepsleep request rejected
|
||||
if (dslp) {
|
||||
ldo_ll_enable(LDO_ID2UNIT(CONFIG_ESP_LDO_CHAN_PSRAM_DOMAIN), true);
|
||||
}
|
||||
#endif
|
||||
|
||||
return pmu_sleep_finish(dslp);
|
||||
}
|
||||
|
||||
|
@ -325,7 +325,7 @@ typedef struct {
|
||||
#define PMU_SLEEP_DIGITAL_DSLP_CONFIG_DEFAULT(pd_flags) { \
|
||||
.syscntl = { \
|
||||
.dig_pad_slp_sel = 0, \
|
||||
.lp_pad_hold_all = 0, \
|
||||
.lp_pad_hold_all = (pd_flags & PMU_SLEEP_PD_LP_PERIPH) ? 1 : 0, \
|
||||
} \
|
||||
}
|
||||
|
||||
|
@ -64,10 +64,6 @@
|
||||
#include "hal/touch_sensor_hal.h"
|
||||
#endif
|
||||
|
||||
#if CONFIG_SPIRAM && CONFIG_ESP_LDO_RESERVE_PSRAM
|
||||
#include "hal/ldo_ll.h"
|
||||
#endif
|
||||
|
||||
#include "sdkconfig.h"
|
||||
#include "esp_rom_uart.h"
|
||||
#include "esp_rom_sys.h"
|
||||
@ -1180,10 +1176,6 @@ static esp_err_t IRAM_ATTR deep_sleep_start(bool allow_sleep_rejection)
|
||||
portENTER_CRITICAL(&spinlock_rtc_deep_sleep);
|
||||
esp_ipc_isr_stall_other_cpu();
|
||||
esp_ipc_isr_stall_pause();
|
||||
#if CONFIG_SPIRAM && CONFIG_ESP_LDO_RESERVE_PSRAM
|
||||
// Disable PSRAM chip power supply
|
||||
ldo_ll_enable(LDO_ID2UNIT(CONFIG_ESP_LDO_CHAN_PSRAM_DOMAIN), false);
|
||||
#endif
|
||||
|
||||
// record current RTC time
|
||||
s_config.rtc_ticks_at_sleep_start = rtc_time_get();
|
||||
@ -1247,10 +1239,6 @@ static esp_err_t IRAM_ATTR deep_sleep_start(bool allow_sleep_rejection)
|
||||
// can take several CPU cycles for the sleep mode to start.
|
||||
ESP_INFINITE_LOOP();
|
||||
}
|
||||
#if CONFIG_SPIRAM && CONFIG_ESP_LDO_RESERVE_PSRAM
|
||||
// Enable PSRAM chip power supply
|
||||
ldo_ll_enable(LDO_ID2UNIT(CONFIG_ESP_LDO_CHAN_PSRAM_DOMAIN), true);
|
||||
#endif
|
||||
// Never returns here, except that the sleep is rejected.
|
||||
esp_ipc_isr_stall_resume();
|
||||
esp_ipc_isr_release_other_cpu();
|
||||
|
Reference in New Issue
Block a user