From 7147d7b36632b657cdaff4c3e15a23d0bf5b46bc Mon Sep 17 00:00:00 2001 From: wuzhenghui Date: Wed, 12 Feb 2025 17:27:15 +0800 Subject: [PATCH] change(esp_hw_support): wrapper sleep dcdc/ldo ops with ll --- .../esp_hw_support/port/esp32p4/pmu_init.c | 4 ++-- .../esp_hw_support/port/esp32p4/pmu_sleep.c | 12 ++++++------ .../esp_hw_support/port/esp32p4/rtc_clk_init.c | 13 ++++++------- components/hal/esp32p4/include/hal/pmu_ll.h | 17 ++++++++++++++--- 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/components/esp_hw_support/port/esp32p4/pmu_init.c b/components/esp_hw_support/port/esp32p4/pmu_init.c index ffebc6a0e2..f511dd4341 100644 --- a/components/esp_hw_support/port/esp32p4/pmu_init.c +++ b/components/esp_hw_support/port/esp32p4/pmu_init.c @@ -149,8 +149,8 @@ static inline void pmu_power_domain_force_default(pmu_context_t *ctx) pmu_ll_lp_set_power_force_power_down(ctx->hal->dev, false); pmu_ll_lp_set_power_force_isolate (ctx->hal->dev, false); pmu_ll_lp_set_power_force_reset (ctx->hal->dev, false); - pmu_ll_set_dcdc_force_power_up(ctx->hal->dev, false); - pmu_ll_set_dcdc_force_power_down(ctx->hal->dev, false); + pmu_ll_set_dcdc_switch_force_power_up(ctx->hal->dev, false); + pmu_ll_set_dcdc_switch_force_power_down(ctx->hal->dev, false); } static inline void pmu_hp_system_param_default(pmu_hp_mode_t mode, pmu_hp_system_param_t *param) diff --git a/components/esp_hw_support/port/esp32p4/pmu_sleep.c b/components/esp_hw_support/port/esp32p4/pmu_sleep.c index 1d2a2b04b9..ab808998f5 100644 --- a/components/esp_hw_support/port/esp32p4/pmu_sleep.c +++ b/components/esp_hw_support/port/esp32p4/pmu_sleep.c @@ -318,20 +318,20 @@ void pmu_sleep_increase_ldo_volt(void) { } void pmu_sleep_shutdown_dcdc(void) { - REG_SET_BIT(PMU_POWER_DCDC_SWITCH_REG, PMU_FORCE_DCDC_SWITCH_PD); - REG_SET_BIT(PMU_DCM_CTRL_REG, PMU_DCDC_OFF_REQ); + pmu_ll_set_dcdc_switch_force_power_down(&PMU, true); + pmu_ll_set_dcdc_en(&PMU, false); // Decrease hp_ldo voltage. REG_SET_FIELD(PMU_HP_ACTIVE_HP_REGULATOR0_REG, PMU_HP_ACTIVE_HP_REGULATOR_DBIAS, 24); } FORCE_INLINE_ATTR void pmu_sleep_enable_dcdc(void) { - REG_CLR_BIT(PMU_POWER_DCDC_SWITCH_REG, PMU_FORCE_DCDC_SWITCH_PD); - SET_PERI_REG_MASK(PMU_DCM_CTRL_REG, PMU_DCDC_ON_REQ); - REG_SET_FIELD(PMU_HP_ACTIVE_BIAS_REG, PMU_HP_ACTIVE_DCM_VSET, 27); + pmu_ll_set_dcdc_switch_force_power_down(&PMU, false); + pmu_ll_set_dcdc_en(&PMU, true); + pmu_ll_hp_set_dcm_vset(&PMU, PMU_MODE_HP_ACTIVE, HP_CALI_ACTIVE_DCM_VSET_DEFAULT); } FORCE_INLINE_ATTR void pmu_sleep_shutdown_ldo(void) { - CLEAR_PERI_REG_MASK(PMU_HP_ACTIVE_HP_REGULATOR0_REG, PMU_HP_ACTIVE_HP_REGULATOR_XPD); + pmu_ll_hp_set_regulator_xpd(&PMU, PMU_MODE_HP_ACTIVE, 0); } FORCE_INLINE_ATTR void pmu_sleep_cache_sync_items(uint32_t gid, uint32_t type, uint32_t map, uint32_t addr, uint32_t bytes) diff --git a/components/esp_hw_support/port/esp32p4/rtc_clk_init.c b/components/esp_hw_support/port/esp32p4/rtc_clk_init.c index 51b88f7548..2003e50066 100644 --- a/components/esp_hw_support/port/esp32p4/rtc_clk_init.c +++ b/components/esp_hw_support/port/esp32p4/rtc_clk_init.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -54,14 +54,13 @@ void rtc_clk_init(rtc_clk_config_t cfg) REGI2C_WRITE_MASK(I2C_BIAS, I2C_BIAS_OR_FORCE_XPD_IPH, 0); REGI2C_WRITE_MASK(I2C_BIAS, I2C_BIAS_OR_FORCE_XPD_VGATE_BUF, 0); - REG_SET_FIELD(PMU_HP_SLEEP_LP_REGULATOR0_REG, PMU_HP_SLEEP_LP_REGULATOR_DBIAS, LP_CALI_DBIAS); - + pmu_ll_lp_set_regulator_dbias(&PMU, PMU_MODE_LP_ACTIVE, LP_CALI_DBIAS); // Switch to DCDC - SET_PERI_REG_MASK(PMU_DCM_CTRL_REG, PMU_DCDC_ON_REQ); - REG_CLR_BIT(PMU_POWER_DCDC_SWITCH_REG, PMU_FORCE_DCDC_SWITCH_PD); - REG_SET_FIELD(PMU_HP_ACTIVE_BIAS_REG, PMU_HP_ACTIVE_DCM_VSET, HP_CALI_ACTIVE_DCM_VSET_DEFAULT); + pmu_ll_set_dcdc_en(&PMU, true); + pmu_ll_set_dcdc_switch_force_power_down(&PMU, false); + pmu_ll_hp_set_dcm_vset(&PMU, PMU_MODE_HP_ACTIVE, HP_CALI_ACTIVE_DCM_VSET_DEFAULT); esp_rom_delay_us(1000); - CLEAR_PERI_REG_MASK(PMU_HP_ACTIVE_HP_REGULATOR0_REG, PMU_HP_ACTIVE_HP_REGULATOR_XPD); + pmu_ll_hp_set_regulator_xpd(&PMU, PMU_MODE_HP_ACTIVE, false); soc_xtal_freq_t xtal_freq = cfg.xtal_freq; esp_rom_output_tx_wait_idle(0); diff --git a/components/hal/esp32p4/include/hal/pmu_ll.h b/components/hal/esp32p4/include/hal/pmu_ll.h index 9084e06ab1..16ec05fb57 100644 --- a/components/hal/esp32p4/include/hal/pmu_ll.h +++ b/components/hal/esp32p4/include/hal/pmu_ll.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -663,16 +663,27 @@ FORCE_INLINE_ATTR uint32_t pmu_ll_hp_get_digital_power_up_wait_cycle(pmu_dev_t * return hw->power.wait_timer0.powerup_timer; } -FORCE_INLINE_ATTR void pmu_ll_set_dcdc_force_power_up(pmu_dev_t *hw, bool fpu) +FORCE_INLINE_ATTR void pmu_ll_set_dcdc_switch_force_power_up(pmu_dev_t *hw, bool fpu) { + hw->power.dcdc_switch.force_pd = 0; hw->power.dcdc_switch.force_pu = fpu; } -FORCE_INLINE_ATTR void pmu_ll_set_dcdc_force_power_down(pmu_dev_t *hw, bool fpd) +FORCE_INLINE_ATTR void pmu_ll_set_dcdc_switch_force_power_down(pmu_dev_t *hw, bool fpd) { + hw->power.dcdc_switch.force_pu = 0; hw->power.dcdc_switch.force_pd = fpd; } +FORCE_INLINE_ATTR void pmu_ll_set_dcdc_en(pmu_dev_t *hw, bool en) +{ + if (en) { + hw->dcm_ctrl.on_req = 1; + } else { + hw->dcm_ctrl.off_req = 1; + } +} + /** * @brief Get ext1 wakeup source status * @return The lower 8 bits of the returned value are the bitmap of