mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-01 03:34:32 +02:00
fix(esp_hw_support): fix writeback cache to psram after vo2 powerdown
This commit is contained in:
@@ -34,6 +34,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)
|
||||
@@ -350,6 +353,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);
|
||||
|
||||
@@ -358,6 +369,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, \
|
||||
} \
|
||||
}
|
||||
|
||||
|
@@ -62,10 +62,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"
|
||||
@@ -1114,10 +1110,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();
|
||||
@@ -1183,10 +1175,6 @@ static esp_err_t IRAM_ATTR deep_sleep_start(bool allow_sleep_rejection)
|
||||
;
|
||||
}
|
||||
}
|
||||
#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