mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 18:57:19 +02:00
feat(pmu): set fix voltage to different mode for esp32h2
h2 remove include
This commit is contained in:
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -24,13 +24,13 @@ typedef struct {
|
|||||||
const pmu_hp_system_power_param_t *power;
|
const pmu_hp_system_power_param_t *power;
|
||||||
const pmu_hp_system_clock_param_t *clock;
|
const pmu_hp_system_clock_param_t *clock;
|
||||||
const pmu_hp_system_digital_param_t *digital;
|
const pmu_hp_system_digital_param_t *digital;
|
||||||
const pmu_hp_system_analog_param_t *analog;
|
pmu_hp_system_analog_param_t *analog; //param determined at runtime
|
||||||
const pmu_hp_system_retention_param_t *retent;
|
const pmu_hp_system_retention_param_t *retent;
|
||||||
} pmu_hp_system_param_t;
|
} pmu_hp_system_param_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const pmu_lp_system_power_param_t *power;
|
const pmu_lp_system_power_param_t *power;
|
||||||
const pmu_lp_system_analog_param_t *analog;
|
pmu_lp_system_analog_param_t *analog; //param determined at runtime
|
||||||
} pmu_lp_system_param_t;
|
} pmu_lp_system_param_t;
|
||||||
|
|
||||||
pmu_context_t * __attribute__((weak)) IRAM_ATTR PMU_instance(void)
|
pmu_context_t * __attribute__((weak)) IRAM_ATTR PMU_instance(void)
|
||||||
@ -43,7 +43,7 @@ pmu_context_t * __attribute__((weak)) IRAM_ATTR PMU_instance(void)
|
|||||||
return &pmu_context;
|
return &pmu_context;
|
||||||
}
|
}
|
||||||
|
|
||||||
void pmu_hp_system_init(pmu_context_t *ctx, pmu_hp_mode_t mode, pmu_hp_system_param_t *param)
|
void pmu_hp_system_init(pmu_context_t *ctx, pmu_hp_mode_t mode, const pmu_hp_system_param_t *param)
|
||||||
{
|
{
|
||||||
const pmu_hp_system_power_param_t *power = param->power;
|
const pmu_hp_system_power_param_t *power = param->power;
|
||||||
const pmu_hp_system_clock_param_t *clock = param->clock;
|
const pmu_hp_system_clock_param_t *clock = param->clock;
|
||||||
@ -102,7 +102,7 @@ void pmu_hp_system_init(pmu_context_t *ctx, pmu_hp_mode_t mode, pmu_hp_system_pa
|
|||||||
pmu_ll_hp_set_sleep_protect_mode(ctx->hal->dev, PMU_SLEEP_PROTECT_HP_LP_SLEEP);
|
pmu_ll_hp_set_sleep_protect_mode(ctx->hal->dev, PMU_SLEEP_PROTECT_HP_LP_SLEEP);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pmu_lp_system_init(pmu_context_t *ctx, pmu_lp_mode_t mode, pmu_lp_system_param_t *param)
|
void pmu_lp_system_init(pmu_context_t *ctx, pmu_lp_mode_t mode, const pmu_lp_system_param_t *param)
|
||||||
{
|
{
|
||||||
const pmu_lp_system_power_param_t *power = param->power;
|
const pmu_lp_system_power_param_t *power = param->power;
|
||||||
const pmu_lp_system_analog_param_t *anlg = param->analog;
|
const pmu_lp_system_analog_param_t *anlg = param->analog;
|
||||||
@ -157,18 +157,26 @@ static inline void pmu_power_domain_force_default(pmu_context_t *ctx)
|
|||||||
|
|
||||||
static inline void pmu_hp_system_param_default(pmu_hp_mode_t mode, pmu_hp_system_param_t *param)
|
static inline void pmu_hp_system_param_default(pmu_hp_mode_t mode, pmu_hp_system_param_t *param)
|
||||||
{
|
{
|
||||||
|
assert (param->analog);
|
||||||
|
|
||||||
param->power = pmu_hp_system_power_param_default(mode);
|
param->power = pmu_hp_system_power_param_default(mode);
|
||||||
param->clock = pmu_hp_system_clock_param_default(mode);
|
param->clock = pmu_hp_system_clock_param_default(mode);
|
||||||
param->digital = pmu_hp_system_digital_param_default(mode);
|
param->digital = pmu_hp_system_digital_param_default(mode);
|
||||||
param->analog = pmu_hp_system_analog_param_default(mode);
|
*param->analog = *pmu_hp_system_analog_param_default(mode); //copy default value
|
||||||
param->retent = pmu_hp_system_retention_param_default(mode);
|
param->retent = pmu_hp_system_retention_param_default(mode);
|
||||||
|
|
||||||
|
if (mode == PMU_MODE_HP_ACTIVE || mode == PMU_MODE_HP_MODEM) {
|
||||||
|
param->analog->regulator0.dbias = get_act_hp_dbias();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pmu_hp_system_init_default(pmu_context_t *ctx)
|
static void pmu_hp_system_init_default(pmu_context_t *ctx)
|
||||||
{
|
{
|
||||||
assert(ctx);
|
assert(ctx);
|
||||||
pmu_hp_system_param_t param = { 0 };
|
|
||||||
for (pmu_hp_mode_t mode = PMU_MODE_HP_ACTIVE; mode < PMU_MODE_HP_MAX; mode++) {
|
for (pmu_hp_mode_t mode = PMU_MODE_HP_ACTIVE; mode < PMU_MODE_HP_MAX; mode++) {
|
||||||
|
pmu_hp_system_analog_param_t analog = {};
|
||||||
|
pmu_hp_system_param_t param = {.analog = &analog};
|
||||||
|
|
||||||
pmu_hp_system_param_default(mode, ¶m);
|
pmu_hp_system_param_default(mode, ¶m);
|
||||||
pmu_hp_system_init(ctx, mode, ¶m);
|
pmu_hp_system_init(ctx, mode, ¶m);
|
||||||
}
|
}
|
||||||
@ -176,15 +184,23 @@ static void pmu_hp_system_init_default(pmu_context_t *ctx)
|
|||||||
|
|
||||||
static inline void pmu_lp_system_param_default(pmu_lp_mode_t mode, pmu_lp_system_param_t *param)
|
static inline void pmu_lp_system_param_default(pmu_lp_mode_t mode, pmu_lp_system_param_t *param)
|
||||||
{
|
{
|
||||||
|
assert (param->analog);
|
||||||
|
|
||||||
param->power = pmu_lp_system_power_param_default(mode);
|
param->power = pmu_lp_system_power_param_default(mode);
|
||||||
param->analog = pmu_lp_system_analog_param_default(mode);
|
*param->analog = *pmu_lp_system_analog_param_default(mode); //copy default value
|
||||||
|
|
||||||
|
if (mode == PMU_MODE_LP_ACTIVE) {
|
||||||
|
param->analog->regulator0.dbias = get_act_lp_dbias();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pmu_lp_system_init_default(pmu_context_t *ctx)
|
static void pmu_lp_system_init_default(pmu_context_t *ctx)
|
||||||
{
|
{
|
||||||
assert(ctx);
|
assert(ctx);
|
||||||
pmu_lp_system_param_t param;
|
|
||||||
for (pmu_lp_mode_t mode = PMU_MODE_LP_ACTIVE; mode < PMU_MODE_LP_MAX; mode++) {
|
for (pmu_lp_mode_t mode = PMU_MODE_LP_ACTIVE; mode < PMU_MODE_LP_MAX; mode++) {
|
||||||
|
pmu_lp_system_analog_param_t analog = {};
|
||||||
|
pmu_lp_system_param_t param = {.analog = &analog};
|
||||||
|
|
||||||
pmu_lp_system_param_default(mode, ¶m);
|
pmu_lp_system_param_default(mode, ¶m);
|
||||||
pmu_lp_system_init(ctx, mode, ¶m);
|
pmu_lp_system_init(ctx, mode, ¶m);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -12,6 +12,11 @@
|
|||||||
#include "pmu_param.h"
|
#include "pmu_param.h"
|
||||||
#include "soc/pmu_icg_mapping.h"
|
#include "soc/pmu_icg_mapping.h"
|
||||||
#include "esp_private/esp_pmu.h"
|
#include "esp_private/esp_pmu.h"
|
||||||
|
#include "hal/efuse_ll.h"
|
||||||
|
#include "hal/efuse_hal.h"
|
||||||
|
#include "esp_hw_log.h"
|
||||||
|
|
||||||
|
static __attribute__((unused)) const char *TAG = "pmu_param";
|
||||||
|
|
||||||
#ifndef ARRAY_SIZE
|
#ifndef ARRAY_SIZE
|
||||||
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
||||||
@ -212,7 +217,7 @@ const pmu_hp_system_digital_param_t * pmu_hp_system_digital_param_default(pmu_hp
|
|||||||
.xpd = 1, \
|
.xpd = 1, \
|
||||||
.slp_mem_dbias = 0, \
|
.slp_mem_dbias = 0, \
|
||||||
.slp_logic_dbias = 0, \
|
.slp_logic_dbias = 0, \
|
||||||
.dbias = HP_CALI_DBIAS \
|
.dbias = HP_CALI_DBIAS_DEFAULT \
|
||||||
}, \
|
}, \
|
||||||
.regulator1 = { \
|
.regulator1 = { \
|
||||||
.drv_b = 0x1a \
|
.drv_b = 0x1a \
|
||||||
@ -232,7 +237,7 @@ const pmu_hp_system_digital_param_t * pmu_hp_system_digital_param_default(pmu_hp
|
|||||||
.xpd = 1, \
|
.xpd = 1, \
|
||||||
.slp_mem_dbias = 0, \
|
.slp_mem_dbias = 0, \
|
||||||
.slp_logic_dbias = 0, \
|
.slp_logic_dbias = 0, \
|
||||||
.dbias = HP_CALI_DBIAS \
|
.dbias = HP_CALI_DBIAS_DEFAULT \
|
||||||
}, \
|
}, \
|
||||||
.regulator1 = { \
|
.regulator1 = { \
|
||||||
.drv_b = 0x1b \
|
.drv_b = 0x1b \
|
||||||
@ -269,7 +274,6 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m
|
|||||||
assert(mode < ARRAY_SIZE(hp_analog));
|
assert(mode < ARRAY_SIZE(hp_analog));
|
||||||
return &hp_analog[mode];
|
return &hp_analog[mode];
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PMU_HP_RETENTION_REGDMA_CONFIG(dir, entry) ((((dir)<<2) | (entry & 0x3)) & 0x7)
|
#define PMU_HP_RETENTION_REGDMA_CONFIG(dir, entry) ((((dir)<<2) | (entry & 0x3)) & 0x7)
|
||||||
|
|
||||||
#define PMU_HP_ACTIVE_RETENTION_CONFIG_DEFAULT() { \
|
#define PMU_HP_ACTIVE_RETENTION_CONFIG_DEFAULT() { \
|
||||||
@ -409,7 +413,7 @@ const pmu_lp_system_power_param_t * pmu_lp_system_power_param_default(pmu_lp_mod
|
|||||||
.slp_xpd = 0, \
|
.slp_xpd = 0, \
|
||||||
.xpd = 1, \
|
.xpd = 1, \
|
||||||
.slp_dbias = 0, \
|
.slp_dbias = 0, \
|
||||||
.dbias = LP_CALI_DBIAS \
|
.dbias = LP_CALI_DBIAS_DEFAULT \
|
||||||
}, \
|
}, \
|
||||||
.regulator1 = { \
|
.regulator1 = { \
|
||||||
.drv_b = 0 \
|
.drv_b = 0 \
|
||||||
@ -442,3 +446,53 @@ const pmu_lp_system_analog_param_t * pmu_lp_system_analog_param_default(pmu_lp_m
|
|||||||
assert(mode < ARRAY_SIZE(lp_analog));
|
assert(mode < ARRAY_SIZE(lp_analog));
|
||||||
return &lp_analog[mode];
|
return &lp_analog[mode];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t get_act_hp_dbias(void)
|
||||||
|
{
|
||||||
|
/* hp_cali_dbias is read from efuse to ensure that the hp_active_voltage is close to 0.93V */
|
||||||
|
unsigned blk_version = efuse_hal_blk_version();
|
||||||
|
uint32_t hp_cali_dbias = HP_CALI_DBIAS_DEFAULT;
|
||||||
|
if (blk_version >= 3) {
|
||||||
|
hp_cali_dbias = efuse_ll_get_active_hp_dbias();
|
||||||
|
if (hp_cali_dbias != 0) {
|
||||||
|
//efuse dbias need to add 2 to meet the CPU frequency switching
|
||||||
|
if (hp_cali_dbias + 2 > 31) {
|
||||||
|
hp_cali_dbias = 31;
|
||||||
|
} else {
|
||||||
|
hp_cali_dbias += 2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
hp_cali_dbias = HP_CALI_DBIAS_DEFAULT;
|
||||||
|
ESP_HW_LOGD(TAG, "hp_cali_dbias not burnt in efuse or wrong value was burnt in blk version: %d\n", blk_version);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ESP_HW_LOGD(TAG, "blk_version is less than 3, act dbias not burnt in efuse\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return hp_cali_dbias;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t get_act_lp_dbias(void)
|
||||||
|
{
|
||||||
|
/* lp_cali_dbias are read from efuse to ensure that the lp_active_voltage is close to 0.925V */
|
||||||
|
unsigned blk_version = efuse_hal_blk_version();
|
||||||
|
uint32_t lp_cali_dbias = LP_CALI_DBIAS_DEFAULT;
|
||||||
|
if (blk_version >= 3) {
|
||||||
|
lp_cali_dbias = efuse_ll_get_active_lp_dbias();
|
||||||
|
if (lp_cali_dbias != 0) {
|
||||||
|
//efuse dbias need to add 2 to meet the CPU frequency switching
|
||||||
|
if (lp_cali_dbias + 2 > 31) {
|
||||||
|
lp_cali_dbias = 31;
|
||||||
|
} else {
|
||||||
|
lp_cali_dbias += 2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
lp_cali_dbias = LP_CALI_DBIAS_DEFAULT;
|
||||||
|
ESP_HW_LOGD(TAG, "lp_cali_dbias not burnt in efuse or wrong value was burnt in blk version: %d\n", blk_version);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ESP_HW_LOGD(TAG, "blk_version is less than 3, act dbias not burnt in efuse\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return lp_cali_dbias;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -17,10 +17,34 @@
|
|||||||
#include "hal/lp_aon_hal.h"
|
#include "hal/lp_aon_hal.h"
|
||||||
#include "esp_private/esp_pmu.h"
|
#include "esp_private/esp_pmu.h"
|
||||||
#include "pmu_param.h"
|
#include "pmu_param.h"
|
||||||
|
#include "hal/efuse_ll.h"
|
||||||
|
#include "hal/efuse_hal.h"
|
||||||
|
#include "esp_hw_log.h"
|
||||||
|
|
||||||
|
static __attribute__((unused)) const char *TAG = "pmu_sleep";
|
||||||
|
|
||||||
#define HP(state) (PMU_MODE_HP_ ## state)
|
#define HP(state) (PMU_MODE_HP_ ## state)
|
||||||
#define LP(state) (PMU_MODE_LP_ ## state)
|
#define LP(state) (PMU_MODE_LP_ ## state)
|
||||||
|
|
||||||
|
uint32_t get_slp_lp_dbias(void)
|
||||||
|
{
|
||||||
|
/* pmu_lp_dbias_sleep_0v7 is read from efuse to ensure that the HP_LDO_voltage is close to 0.68V,
|
||||||
|
** and the LP_LDO_voltage is close to 0.73V
|
||||||
|
*/
|
||||||
|
uint32_t pmu_lp_dbias_sleep_0v7 = PMU_LP_DBIAS_SLEEP_0V7_DEFAULT;
|
||||||
|
unsigned blk_version = efuse_hal_blk_version();
|
||||||
|
if (blk_version >= 3) {
|
||||||
|
pmu_lp_dbias_sleep_0v7 = efuse_ll_get_dslp_dbias();
|
||||||
|
if (pmu_lp_dbias_sleep_0v7 == 0) {
|
||||||
|
pmu_lp_dbias_sleep_0v7 = PMU_LP_DBIAS_SLEEP_0V7_DEFAULT;
|
||||||
|
ESP_HW_LOGD(TAG, "slp dbias not burnt in efuse or wrong value was burnt in blk version: %d\n", blk_version);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ESP_HW_LOGD(TAG, "blk_version is less than 3, slp dbias not burnt in efuse\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return pmu_lp_dbias_sleep_0v7;
|
||||||
|
}
|
||||||
|
|
||||||
void pmu_sleep_enable_regdma_backup(void)
|
void pmu_sleep_enable_regdma_backup(void)
|
||||||
{
|
{
|
||||||
@ -122,21 +146,24 @@ const pmu_sleep_config_t* pmu_sleep_config_default(
|
|||||||
|
|
||||||
if (dslp) {
|
if (dslp) {
|
||||||
pmu_sleep_analog_config_t analog_default = PMU_SLEEP_ANALOG_DSLP_CONFIG_DEFAULT(pd_flags);
|
pmu_sleep_analog_config_t analog_default = PMU_SLEEP_ANALOG_DSLP_CONFIG_DEFAULT(pd_flags);
|
||||||
|
analog_default.lp_sys[LP(SLEEP)].analog.dbias = get_slp_lp_dbias();
|
||||||
config->analog = analog_default;
|
config->analog = analog_default;
|
||||||
} else {
|
} else {
|
||||||
pmu_sleep_digital_config_t digital_default = PMU_SLEEP_DIGITAL_LSLP_CONFIG_DEFAULT(pd_flags);
|
pmu_sleep_digital_config_t digital_default = PMU_SLEEP_DIGITAL_LSLP_CONFIG_DEFAULT(pd_flags);
|
||||||
config->digital = digital_default;
|
config->digital = digital_default;
|
||||||
|
|
||||||
pmu_sleep_analog_config_t analog_default = PMU_SLEEP_ANALOG_LSLP_CONFIG_DEFAULT(pd_flags);
|
pmu_sleep_analog_config_t analog_default = PMU_SLEEP_ANALOG_LSLP_CONFIG_DEFAULT(pd_flags);
|
||||||
|
analog_default.hp_sys.analog.dbias = PMU_HP_DBIAS_LIGHTSLEEP_0V6_DEFAULT;
|
||||||
|
analog_default.lp_sys[LP(SLEEP)].analog.dbias = get_slp_lp_dbias();
|
||||||
if (!(pd_flags & PMU_SLEEP_PD_XTAL)){
|
if (!(pd_flags & PMU_SLEEP_PD_XTAL)){
|
||||||
analog_default.hp_sys.analog.xpd_trx = PMU_XPD_TRX_SLEEP_ON;
|
analog_default.hp_sys.analog.xpd_trx = PMU_XPD_TRX_SLEEP_ON;
|
||||||
analog_default.hp_sys.analog.dbias = HP_CALI_DBIAS;
|
analog_default.hp_sys.analog.dbias = get_act_hp_dbias();
|
||||||
analog_default.hp_sys.analog.pd_cur = PMU_PD_CUR_SLEEP_ON;
|
analog_default.hp_sys.analog.pd_cur = PMU_PD_CUR_SLEEP_ON;
|
||||||
analog_default.hp_sys.analog.bias_sleep = PMU_BIASSLP_SLEEP_ON;
|
analog_default.hp_sys.analog.bias_sleep = PMU_BIASSLP_SLEEP_ON;
|
||||||
|
|
||||||
analog_default.lp_sys[LP(SLEEP)].analog.pd_cur = PMU_PD_CUR_SLEEP_ON;
|
analog_default.lp_sys[LP(SLEEP)].analog.pd_cur = PMU_PD_CUR_SLEEP_ON;
|
||||||
analog_default.lp_sys[LP(SLEEP)].analog.bias_sleep = PMU_BIASSLP_SLEEP_ON;
|
analog_default.lp_sys[LP(SLEEP)].analog.bias_sleep = PMU_BIASSLP_SLEEP_ON;
|
||||||
analog_default.lp_sys[LP(SLEEP)].analog.dbias = LP_CALI_DBIAS;
|
analog_default.lp_sys[LP(SLEEP)].analog.dbias = get_act_lp_dbias();
|
||||||
}
|
}
|
||||||
config->analog = analog_default;
|
config->analog = analog_default;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -16,8 +16,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define HP_CALI_DBIAS 17
|
#define HP_CALI_DBIAS_DEFAULT 17
|
||||||
#define LP_CALI_DBIAS 18
|
#define LP_CALI_DBIAS_DEFAULT 18
|
||||||
|
|
||||||
// FOR XTAL FORCE PU IN SLEEP
|
// FOR XTAL FORCE PU IN SLEEP
|
||||||
#define PMU_PD_CUR_SLEEP_ON 0
|
#define PMU_PD_CUR_SLEEP_ON 0
|
||||||
@ -38,8 +38,8 @@ extern "C" {
|
|||||||
#define PMU_HP_DRVB_LIGHTSLEEP 0xFFFFF8
|
#define PMU_HP_DRVB_LIGHTSLEEP 0xFFFFF8
|
||||||
#define PMU_LP_DRVB_LIGHTSLEEP 0
|
#define PMU_LP_DRVB_LIGHTSLEEP 0
|
||||||
|
|
||||||
#define PMU_HP_DBIAS_LIGHTSLEEP_0V6 1
|
#define PMU_HP_DBIAS_LIGHTSLEEP_0V6_DEFAULT 1
|
||||||
#define PMU_LP_DBIAS_LIGHTSLEEP_0V7 6
|
#define PMU_LP_DBIAS_SLEEP_0V7_DEFAULT 6
|
||||||
|
|
||||||
#define PMU_REGDMA_S2A_WORK_TIME_PD_TOP_US 0
|
#define PMU_REGDMA_S2A_WORK_TIME_PD_TOP_US 0
|
||||||
// The current value of this depends on the restoration time overhead of the longest chain in regdma
|
// The current value of this depends on the restoration time overhead of the longest chain in regdma
|
||||||
@ -48,7 +48,9 @@ extern "C" {
|
|||||||
// FOR DEEPSLEEP
|
// FOR DEEPSLEEP
|
||||||
#define PMU_HP_XPD_DEEPSLEEP 0
|
#define PMU_HP_XPD_DEEPSLEEP 0
|
||||||
#define PMU_LP_DRVB_DEEPSLEEP 7
|
#define PMU_LP_DRVB_DEEPSLEEP 7
|
||||||
#define PMU_LP_DBIAS_DEEPSLEEP_0V7 PMU_LP_DBIAS_LIGHTSLEEP_0V7
|
|
||||||
|
uint32_t get_act_hp_dbias(void);
|
||||||
|
uint32_t get_act_lp_dbias(void);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
pmu_hp_dig_power_reg_t dig_power;
|
pmu_hp_dig_power_reg_t dig_power;
|
||||||
@ -333,7 +335,7 @@ typedef struct {
|
|||||||
.pd_cur = PMU_PD_CUR_SLEEP_DEFAULT, \
|
.pd_cur = PMU_PD_CUR_SLEEP_DEFAULT, \
|
||||||
.bias_sleep = PMU_BIASSLP_SLEEP_DEFAULT, \
|
.bias_sleep = PMU_BIASSLP_SLEEP_DEFAULT, \
|
||||||
.xpd = PMU_HP_XPD_LIGHTSLEEP, \
|
.xpd = PMU_HP_XPD_LIGHTSLEEP, \
|
||||||
.dbias = PMU_HP_DBIAS_LIGHTSLEEP_0V6 \
|
.dbias = PMU_HP_DBIAS_LIGHTSLEEP_0V6_DEFAULT \
|
||||||
} \
|
} \
|
||||||
}, \
|
}, \
|
||||||
.lp_sys[PMU_MODE_LP_SLEEP] = { \
|
.lp_sys[PMU_MODE_LP_SLEEP] = { \
|
||||||
@ -344,7 +346,7 @@ typedef struct {
|
|||||||
.slp_xpd = PMU_LP_SLP_XPD_SLEEP_DEFAULT, \
|
.slp_xpd = PMU_LP_SLP_XPD_SLEEP_DEFAULT, \
|
||||||
.slp_dbias = PMU_LP_SLP_DBIAS_SLEEP_DEFAULT,\
|
.slp_dbias = PMU_LP_SLP_DBIAS_SLEEP_DEFAULT,\
|
||||||
.xpd = PMU_LP_XPD_SLEEP_DEFAULT, \
|
.xpd = PMU_LP_XPD_SLEEP_DEFAULT, \
|
||||||
.dbias = PMU_LP_DBIAS_LIGHTSLEEP_0V7 \
|
.dbias = PMU_LP_DBIAS_SLEEP_0V7_DEFAULT \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
@ -366,7 +368,7 @@ typedef struct {
|
|||||||
.slp_xpd = PMU_LP_SLP_XPD_SLEEP_DEFAULT, \
|
.slp_xpd = PMU_LP_SLP_XPD_SLEEP_DEFAULT, \
|
||||||
.slp_dbias = PMU_LP_SLP_DBIAS_SLEEP_DEFAULT,\
|
.slp_dbias = PMU_LP_SLP_DBIAS_SLEEP_DEFAULT,\
|
||||||
.xpd = PMU_LP_XPD_SLEEP_DEFAULT, \
|
.xpd = PMU_LP_XPD_SLEEP_DEFAULT, \
|
||||||
.dbias = PMU_LP_DBIAS_DEEPSLEEP_0V7 \
|
.dbias = PMU_LP_DBIAS_SLEEP_0V7_DEFAULT \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -43,8 +43,13 @@ void rtc_clk_init(rtc_clk_config_t cfg)
|
|||||||
REG_SET_FIELD(LP_CLKRST_RC32K_CNTL_REG, LP_CLKRST_RC32K_DFREQ, cfg.rc32k_dfreq);
|
REG_SET_FIELD(LP_CLKRST_RC32K_CNTL_REG, LP_CLKRST_RC32K_DFREQ, cfg.rc32k_dfreq);
|
||||||
REGI2C_WRITE_MASK(I2C_PMU, I2C_PMU_EN_I2C_RTC_DREG, 0);
|
REGI2C_WRITE_MASK(I2C_PMU, I2C_PMU_EN_I2C_RTC_DREG, 0);
|
||||||
REGI2C_WRITE_MASK(I2C_PMU, I2C_PMU_EN_I2C_DIG_DREG, 0);
|
REGI2C_WRITE_MASK(I2C_PMU, I2C_PMU_EN_I2C_DIG_DREG, 0);
|
||||||
REG_SET_FIELD(PMU_HP_ACTIVE_HP_REGULATOR0_REG, PMU_HP_ACTIVE_HP_REGULATOR_DBIAS, HP_CALI_DBIAS);
|
|
||||||
REG_SET_FIELD(PMU_HP_SLEEP_LP_REGULATOR0_REG, PMU_HP_SLEEP_LP_REGULATOR_DBIAS, LP_CALI_DBIAS);
|
uint32_t hp_cali_dbias = get_act_hp_dbias();
|
||||||
|
uint32_t lp_cali_dbias = get_act_lp_dbias();
|
||||||
|
|
||||||
|
SET_PERI_REG_BITS(PMU_HP_MODEM_HP_REGULATOR0_REG, PMU_HP_MODEM_HP_REGULATOR_DBIAS, hp_cali_dbias, PMU_HP_MODEM_HP_REGULATOR_DBIAS_S);
|
||||||
|
SET_PERI_REG_BITS(PMU_HP_ACTIVE_HP_REGULATOR0_REG, PMU_HP_ACTIVE_HP_REGULATOR_DBIAS, hp_cali_dbias, PMU_HP_ACTIVE_HP_REGULATOR_DBIAS_S);
|
||||||
|
SET_PERI_REG_BITS(PMU_HP_SLEEP_LP_REGULATOR0_REG, PMU_HP_SLEEP_LP_REGULATOR_DBIAS, lp_cali_dbias, PMU_HP_SLEEP_LP_REGULATOR_DBIAS_S);
|
||||||
|
|
||||||
clk_ll_rc_fast_tick_conf();
|
clk_ll_rc_fast_tick_conf();
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ IRAM_ATTR uint32_t efuse_hal_chip_revision(void)
|
|||||||
return efuse_hal_get_major_chip_version() * 100 + efuse_hal_get_minor_chip_version();
|
return efuse_hal_get_major_chip_version() * 100 + efuse_hal_get_minor_chip_version();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t efuse_hal_blk_version(void)
|
IRAM_ATTR uint32_t efuse_hal_blk_version(void)
|
||||||
{
|
{
|
||||||
return efuse_ll_get_blk_version_major() * 100 + efuse_ll_get_blk_version_minor();
|
return efuse_ll_get_blk_version_major() * 100 + efuse_ll_get_blk_version_minor();
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,26 @@ __attribute__((always_inline)) static inline uint32_t efuse_ll_get_mac1(void)
|
|||||||
return EFUSE.rd_mac_sys_1.mac_1;
|
return EFUSE.rd_mac_sys_1.mac_1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__attribute__((always_inline)) static inline uint32_t efuse_ll_get_active_hp_dbias(void)
|
||||||
|
{
|
||||||
|
return EFUSE.rd_mac_sys_2.active_hp_dbias;
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__((always_inline)) static inline uint32_t efuse_ll_get_active_lp_dbias(void)
|
||||||
|
{
|
||||||
|
return EFUSE.rd_mac_sys_2.active_lp_dbias;
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__((always_inline)) static inline uint32_t efuse_ll_get_dslp_dbias(void)
|
||||||
|
{
|
||||||
|
return EFUSE.rd_mac_sys_2.dslp_dbias;
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__((always_inline)) static inline int32_t efuse_ll_get_dbias_vol_gap(void)
|
||||||
|
{
|
||||||
|
return (EFUSE.rd_mac_sys_3.dbias_vol_gap_sign << 4)|(EFUSE.rd_mac_sys_3.dbias_vol_gap_value2 << 1)|EFUSE.rd_mac_sys_2.dbias_vol_gap_value1;
|
||||||
|
}
|
||||||
|
|
||||||
__attribute__((always_inline)) static inline bool efuse_ll_get_secure_boot_v2_en(void)
|
__attribute__((always_inline)) static inline bool efuse_ll_get_secure_boot_v2_en(void)
|
||||||
{
|
{
|
||||||
return EFUSE.rd_repeat_data2.secure_boot_en;
|
return EFUSE.rd_repeat_data2.secure_boot_en;
|
||||||
|
Reference in New Issue
Block a user