Skip to content

Commit a63e9c5

Browse files
committed
fix(esp_hw_support): fix DCDC switch bad software powerdown
1 parent 4542c46 commit a63e9c5

File tree

2 files changed

+5
-6
lines changed

2 files changed

+5
-6
lines changed

components/esp_hw_support/port/esp32p4/pmu_sleep.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -333,20 +333,19 @@ void pmu_sleep_increase_ldo_volt(void) {
333333
}
334334

335335
void pmu_sleep_shutdown_dcdc(void) {
336-
SET_PERI_REG_MASK(LP_SYSTEM_REG_SYS_CTRL_REG, LP_SYSTEM_REG_LP_FIB_DCDC_SWITCH); //0: enable, 1: disable
336+
REG_SET_BIT(PMU_POWER_DCDC_SWITCH_REG, PMU_FORCE_DCDC_SWITCH_PD);
337337
REG_SET_BIT(PMU_DCM_CTRL_REG, PMU_DCDC_OFF_REQ);
338338
// Decrease hp_ldo voltage.
339339
pmu_ll_hp_set_regulator_dbias(&PMU, PMU_MODE_HP_ACTIVE, HP_CALI_ACTIVE_DBIAS_DEFAULT);
340340
}
341341

342342
FORCE_INLINE_ATTR void pmu_sleep_enable_dcdc(void) {
343-
CLEAR_PERI_REG_MASK(LP_SYSTEM_REG_SYS_CTRL_REG, LP_SYSTEM_REG_LP_FIB_DCDC_SWITCH); //0: enable, 1: disable
343+
REG_CLR_BIT(PMU_POWER_DCDC_SWITCH_REG, PMU_FORCE_DCDC_SWITCH_PD);
344344
SET_PERI_REG_MASK(PMU_DCM_CTRL_REG, PMU_DCDC_ON_REQ);
345345
REG_SET_FIELD(PMU_HP_ACTIVE_BIAS_REG, PMU_HP_ACTIVE_DCM_VSET, HP_CALI_ACTIVE_DCM_VSET_DEFAULT);
346346
}
347347

348348
FORCE_INLINE_ATTR void pmu_sleep_shutdown_ldo(void) {
349-
CLEAR_PERI_REG_MASK(LP_SYSTEM_REG_SYS_CTRL_REG, LP_SYSTEM_REG_LP_FIB_DCDC_SWITCH); //0: enable, 1: disable
350349
CLEAR_PERI_REG_MASK(PMU_HP_ACTIVE_HP_REGULATOR0_REG, PMU_HP_ACTIVE_HP_REGULATOR_XPD);
351350
}
352351

@@ -441,10 +440,10 @@ TCM_IRAM_ATTR bool pmu_sleep_finish(bool dslp)
441440
#endif
442441
{
443442
pmu_ll_hp_set_dcm_vset(&PMU, PMU_MODE_HP_ACTIVE, HP_CALI_ACTIVE_DCM_VSET_DEFAULT);
443+
pmu_sleep_enable_dcdc();
444444
if (pmu_ll_hp_is_sleep_reject(PMU_instance()->hal->dev)) {
445445
// If sleep is rejected, the hardware wake-up process that turns on DCDC
446-
// is skipped, and software is used to enable DCDC here.
447-
pmu_sleep_enable_dcdc();
446+
// is skipped, and wait DCDC volt rise up by software here.
448447
esp_rom_delay_us(950);
449448
}
450449
pmu_sleep_shutdown_ldo();

components/esp_hw_support/port/esp32p4/rtc_clk_init.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ void rtc_clk_init(rtc_clk_config_t cfg)
5858

5959
// Switch to DCDC
6060
SET_PERI_REG_MASK(PMU_DCM_CTRL_REG, PMU_DCDC_ON_REQ);
61-
CLEAR_PERI_REG_MASK(LP_SYSTEM_REG_SYS_CTRL_REG, LP_SYSTEM_REG_LP_FIB_DCDC_SWITCH); //0: enable, 1: disable
61+
REG_CLR_BIT(PMU_POWER_DCDC_SWITCH_REG, PMU_FORCE_DCDC_SWITCH_PD);
6262
REG_SET_FIELD(PMU_HP_ACTIVE_BIAS_REG, PMU_HP_ACTIVE_DCM_VSET, HP_CALI_ACTIVE_DCM_VSET_DEFAULT);
6363
esp_rom_delay_us(1000);
6464
CLEAR_PERI_REG_MASK(PMU_HP_ACTIVE_HP_REGULATOR0_REG, PMU_HP_ACTIVE_HP_REGULATOR_XPD);

0 commit comments

Comments
 (0)