Skip to content

Commit 2973d97

Browse files
committed
fix(esp_hw_support): fix DCDC switch bad software powerdown
1 parent 5549ae0 commit 2973d97

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
@@ -312,20 +312,19 @@ void pmu_sleep_increase_ldo_volt(void) {
312312
}
313313

314314
void pmu_sleep_shutdown_dcdc(void) {
315-
SET_PERI_REG_MASK(LP_SYSTEM_REG_SYS_CTRL_REG, LP_SYSTEM_REG_LP_FIB_DCDC_SWITCH); //0: enable, 1: disable
315+
REG_SET_BIT(PMU_POWER_DCDC_SWITCH_REG, PMU_FORCE_DCDC_SWITCH_PD);
316316
REG_SET_BIT(PMU_DCM_CTRL_REG, PMU_DCDC_OFF_REQ);
317317
// Decrease hp_ldo voltage.
318318
pmu_ll_hp_set_regulator_dbias(&PMU, PMU_MODE_HP_ACTIVE, HP_CALI_ACTIVE_DBIAS_DEFAULT);
319319
}
320320

321321
FORCE_INLINE_ATTR void pmu_sleep_enable_dcdc(void) {
322-
CLEAR_PERI_REG_MASK(LP_SYSTEM_REG_SYS_CTRL_REG, LP_SYSTEM_REG_LP_FIB_DCDC_SWITCH); //0: enable, 1: disable
322+
REG_CLR_BIT(PMU_POWER_DCDC_SWITCH_REG, PMU_FORCE_DCDC_SWITCH_PD);
323323
SET_PERI_REG_MASK(PMU_DCM_CTRL_REG, PMU_DCDC_ON_REQ);
324324
REG_SET_FIELD(PMU_HP_ACTIVE_BIAS_REG, PMU_HP_ACTIVE_DCM_VSET, HP_CALI_ACTIVE_DCM_VSET_DEFAULT);
325325
}
326326

327327
FORCE_INLINE_ATTR void pmu_sleep_shutdown_ldo(void) {
328-
CLEAR_PERI_REG_MASK(LP_SYSTEM_REG_SYS_CTRL_REG, LP_SYSTEM_REG_LP_FIB_DCDC_SWITCH); //0: enable, 1: disable
329328
CLEAR_PERI_REG_MASK(PMU_HP_ACTIVE_HP_REGULATOR0_REG, PMU_HP_ACTIVE_HP_REGULATOR_XPD);
330329
}
331330

@@ -415,10 +414,10 @@ TCM_IRAM_ATTR bool pmu_sleep_finish(bool dslp)
415414
#endif
416415
{
417416
pmu_ll_hp_set_dcm_vset(&PMU, PMU_MODE_HP_ACTIVE, HP_CALI_ACTIVE_DCM_VSET_DEFAULT);
417+
pmu_sleep_enable_dcdc();
418418
if (pmu_ll_hp_is_sleep_reject(PMU_instance()->hal->dev)) {
419419
// If sleep is rejected, the hardware wake-up process that turns on DCDC
420-
// is skipped, and software is used to enable DCDC here.
421-
pmu_sleep_enable_dcdc();
420+
// is skipped, and wait DCDC volt rise up by software here.
422421
esp_rom_delay_us(950);
423422
}
424423
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)