mirror of
https://github.com/espressif/esp-idf.git
synced 2026-09-22 13:01:16 +03:00
change(esp_hw_support): optimize retention driver RAM cost
This commit is contained in:
@@ -17,7 +17,7 @@ extern "C" {
|
||||
#include "esp_regdma.h"
|
||||
#include "soc/retention_periph_defs.h"
|
||||
|
||||
#define SLEEP_RETENTION_MODULE_BITMAP_SZ ((SLEEP_RETENTION_MODULE_MAX >> 5) + 1)
|
||||
#define SLEEP_RETENTION_MODULE_BITMAP_SZ (((SLEEP_RETENTION_MODULE_MAX - 1) >> 5) + 1)
|
||||
|
||||
/**
|
||||
* @file sleep_retention.h
|
||||
|
||||
@@ -173,7 +173,7 @@ struct module_sleep_retention_context {
|
||||
#define SLEEP_RETENTION_REGDMA_LINK_NR_PRIORITIES (8u)
|
||||
#define SLEEP_RETENTION_REGDMA_LINK_HIGHEST_PRIORITY (0)
|
||||
#define SLEEP_RETENTION_REGDMA_LINK_LOWEST_PRIORITY (SLEEP_RETENTION_REGDMA_LINK_NR_PRIORITIES - 1)
|
||||
#define SLEEP_RETENTION_MODULE_INVALID ((sleep_retention_module_t)(-1)) /* the final node does not belong to any module */
|
||||
#define SLEEP_RETENTION_MODULE_INVALID ((sleep_retention_module_t)(SLEEP_RETENTION_MODULE_MAX)) /* the final node does not belong to any module */
|
||||
struct {
|
||||
sleep_retention_entries_t entries;
|
||||
uint32_t entries_bitmap: REGDMA_LINK_ENTRY_NUM;
|
||||
@@ -250,7 +250,7 @@ typedef struct {
|
||||
|
||||
void *final_default;
|
||||
|
||||
struct sleep_retention_module_object instance[SLEEP_RETENTION_MODULE_MAX + 1];
|
||||
struct sleep_retention_module_object instance[SLEEP_RETENTION_MODULE_MAX];
|
||||
|
||||
#define EXTRA_LINK_NUM (REGDMA_LINK_ENTRY_NUM - 1)
|
||||
} sleep_retention_t;
|
||||
@@ -416,7 +416,7 @@ static void * entries_try_create_bonding(const regdma_link_config_t *config, uin
|
||||
|
||||
void sleep_retention_dump_modules(FILE *out)
|
||||
{
|
||||
for (int i = SLEEP_RETENTION_MODULE_MIN; i <= SLEEP_RETENTION_MODULE_MAX; i++) {
|
||||
for (int i = SLEEP_RETENTION_MODULE_MIN; i < SLEEP_RETENTION_MODULE_MAX; i++) {
|
||||
bool inited = sleep_retention_is_module_inited(i);
|
||||
bool created = sleep_retention_is_module_created(i);
|
||||
bool is_top = is_top_domain_module(i);
|
||||
@@ -628,13 +628,16 @@ static void entries_do_destroy(sleep_retention_module_t module)
|
||||
priority++;
|
||||
}
|
||||
} while (priority < SLEEP_RETENTION_REGDMA_LINK_NR_PRIORITIES);
|
||||
s_retention.created_modules.bitmap[module >> 5] &= ~BIT(module % 32);
|
||||
/* INVALID == MAX: must not index bitmap with module==MAX (OOB). */
|
||||
if (module < SLEEP_RETENTION_MODULE_MAX) {
|
||||
s_retention.created_modules.bitmap[module >> 5] &= ~BIT(module % 32);
|
||||
}
|
||||
_lock_release_recursive(&s_retention.lock);
|
||||
}
|
||||
|
||||
static void entries_destroy(sleep_retention_module_t module)
|
||||
{
|
||||
assert(SLEEP_RETENTION_MODULE_MIN <= module && module <= SLEEP_RETENTION_MODULE_MAX);
|
||||
assert(SLEEP_RETENTION_MODULE_MIN <= module && module <= SLEEP_RETENTION_MODULE_INVALID);
|
||||
_lock_acquire_recursive(&s_retention.lock);
|
||||
if (!module_runtime_attach(instance(module))) {
|
||||
retention_entries_join();
|
||||
@@ -647,7 +650,7 @@ static void entries_destroy(sleep_retention_module_t module)
|
||||
|
||||
static void sleep_retention_entries_destroy(sleep_retention_module_t module)
|
||||
{
|
||||
assert(SLEEP_RETENTION_MODULE_MIN <= module && module <= SLEEP_RETENTION_MODULE_MAX);
|
||||
assert(SLEEP_RETENTION_MODULE_MIN <= module && module < SLEEP_RETENTION_MODULE_MAX);
|
||||
_lock_acquire_recursive(&s_retention.lock);
|
||||
entries_destroy(module);
|
||||
uint32_t created_modules = 0;
|
||||
@@ -800,7 +803,7 @@ esp_err_t sleep_retention_entries_create(const sleep_retention_entries_config_t
|
||||
if (priority >= SLEEP_RETENTION_REGDMA_LINK_NR_PRIORITIES) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module > SLEEP_RETENTION_MODULE_MAX) {
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module >= SLEEP_RETENTION_MODULE_MAX) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
esp_err_t err = check_and_create_final_default();
|
||||
@@ -838,7 +841,7 @@ sleep_retention_module_bitmap_t IRAM_ATTR sleep_retention_get_retained_modules(v
|
||||
|
||||
bool sleep_retention_is_module_inited(sleep_retention_module_t module)
|
||||
{
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module > SLEEP_RETENTION_MODULE_MAX) {
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module >= SLEEP_RETENTION_MODULE_MAX) {
|
||||
return false;
|
||||
}
|
||||
_lock_acquire_recursive(&s_retention.lock);
|
||||
@@ -849,7 +852,7 @@ bool sleep_retention_is_module_inited(sleep_retention_module_t module)
|
||||
|
||||
bool sleep_retention_is_module_created(sleep_retention_module_t module)
|
||||
{
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module > SLEEP_RETENTION_MODULE_MAX) {
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module >= SLEEP_RETENTION_MODULE_MAX) {
|
||||
return false;
|
||||
}
|
||||
_lock_acquire_recursive(&s_retention.lock);
|
||||
@@ -860,7 +863,7 @@ bool sleep_retention_is_module_created(sleep_retention_module_t module)
|
||||
|
||||
bool sleep_retention_is_module_attached(sleep_retention_module_t module)
|
||||
{
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module > SLEEP_RETENTION_MODULE_MAX) {
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module >= SLEEP_RETENTION_MODULE_MAX) {
|
||||
return false;
|
||||
}
|
||||
_lock_acquire_recursive(&s_retention.lock);
|
||||
@@ -953,7 +956,7 @@ static esp_err_t module_action_wrapper(sleep_retention_module_t module, int arg,
|
||||
|
||||
esp_err_t sleep_retention_module_init(sleep_retention_module_t module, sleep_retention_module_init_param_t *param)
|
||||
{
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module > SLEEP_RETENTION_MODULE_MAX) {
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module >= SLEEP_RETENTION_MODULE_MAX) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
if (param == NULL || param->cbs.create.handle == NULL) {
|
||||
@@ -986,7 +989,7 @@ esp_err_t sleep_retention_module_init(sleep_retention_module_t module, sleep_ret
|
||||
|
||||
esp_err_t sleep_retention_module_deinit(sleep_retention_module_t module)
|
||||
{
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module > SLEEP_RETENTION_MODULE_MAX) {
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module >= SLEEP_RETENTION_MODULE_MAX) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
@@ -1017,7 +1020,7 @@ esp_err_t sleep_retention_module_deinit(sleep_retention_module_t module)
|
||||
|
||||
static esp_err_t passive_module_allocate(sleep_retention_module_t module)
|
||||
{
|
||||
assert(module >= SLEEP_RETENTION_MODULE_MIN && module <= SLEEP_RETENTION_MODULE_MAX);
|
||||
assert(module >= SLEEP_RETENTION_MODULE_MIN && module < SLEEP_RETENTION_MODULE_MAX);
|
||||
|
||||
esp_err_t err = ESP_OK;
|
||||
_lock_acquire_recursive(&s_retention.lock);
|
||||
@@ -1038,7 +1041,7 @@ static esp_err_t passive_module_allocate(sleep_retention_module_t module)
|
||||
|
||||
esp_err_t sleep_retention_module_allocate(sleep_retention_module_t module)
|
||||
{
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module > SLEEP_RETENTION_MODULE_MAX) {
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module >= SLEEP_RETENTION_MODULE_MAX) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
@@ -1065,7 +1068,7 @@ esp_err_t sleep_retention_module_allocate(sleep_retention_module_t module)
|
||||
|
||||
static esp_err_t passive_module_free(sleep_retention_module_t module)
|
||||
{
|
||||
assert(module >= SLEEP_RETENTION_MODULE_MIN && module <= SLEEP_RETENTION_MODULE_MAX);
|
||||
assert(module >= SLEEP_RETENTION_MODULE_MIN && module < SLEEP_RETENTION_MODULE_MAX);
|
||||
|
||||
esp_err_t err = ESP_OK;
|
||||
_lock_acquire_recursive(&s_retention.lock);
|
||||
@@ -1087,7 +1090,7 @@ static esp_err_t passive_module_free(sleep_retention_module_t module)
|
||||
|
||||
esp_err_t sleep_retention_module_free(sleep_retention_module_t module)
|
||||
{
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module > SLEEP_RETENTION_MODULE_MAX) {
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module >= SLEEP_RETENTION_MODULE_MAX) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
@@ -1132,7 +1135,7 @@ static void module_entries_move(sleep_retention_module_t module, struct module_s
|
||||
|
||||
static esp_err_t passive_module_attach(sleep_retention_module_t module)
|
||||
{
|
||||
assert(module >= SLEEP_RETENTION_MODULE_MIN && module <= SLEEP_RETENTION_MODULE_MAX);
|
||||
assert(module >= SLEEP_RETENTION_MODULE_MIN && module < SLEEP_RETENTION_MODULE_MAX);
|
||||
|
||||
esp_err_t err = ESP_OK;
|
||||
_lock_acquire_recursive(&s_retention.lock);
|
||||
@@ -1150,7 +1153,7 @@ static esp_err_t passive_module_attach(sleep_retention_module_t module)
|
||||
|
||||
esp_err_t sleep_retention_module_attach(sleep_retention_module_t module)
|
||||
{
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module > SLEEP_RETENTION_MODULE_MAX) {
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module >= SLEEP_RETENTION_MODULE_MAX) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
@@ -1177,7 +1180,7 @@ esp_err_t sleep_retention_module_attach(sleep_retention_module_t module)
|
||||
|
||||
static esp_err_t passive_module_detach(sleep_retention_module_t module)
|
||||
{
|
||||
assert(module >= SLEEP_RETENTION_MODULE_MIN && module <= SLEEP_RETENTION_MODULE_MAX);
|
||||
assert(module >= SLEEP_RETENTION_MODULE_MIN && module < SLEEP_RETENTION_MODULE_MAX);
|
||||
|
||||
esp_err_t err = ESP_OK;
|
||||
_lock_acquire_recursive(&s_retention.lock);
|
||||
@@ -1197,7 +1200,7 @@ static esp_err_t passive_module_detach(sleep_retention_module_t module)
|
||||
|
||||
esp_err_t sleep_retention_module_detach(sleep_retention_module_t module)
|
||||
{
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module > SLEEP_RETENTION_MODULE_MAX) {
|
||||
if (module < SLEEP_RETENTION_MODULE_MIN || module >= SLEEP_RETENTION_MODULE_MAX) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
|
||||
@@ -1467,10 +1467,6 @@ config SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED
|
||||
bool
|
||||
default y
|
||||
|
||||
config SOC_PM_RETENTION_MODULE_NUM
|
||||
int
|
||||
default 40
|
||||
|
||||
config SOC_PM_FLASH_KEEP_POWER_IN_LSLP
|
||||
bool
|
||||
default y
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include "soc_caps.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -57,7 +56,7 @@ typedef enum periph_retention_module {
|
||||
SLEEP_RETENTION_MODULE_MODEM_PHY = 31,
|
||||
SLEEP_RETENTION_MODULE_PHY_FE = 32,
|
||||
|
||||
SLEEP_RETENTION_MODULE_MAX = SOC_PM_RETENTION_MODULE_NUM - 1
|
||||
SLEEP_RETENTION_MODULE_MAX,
|
||||
} periph_retention_module_t;
|
||||
|
||||
#define is_top_domain_module(m) (m <= SLEEP_RETENTION_MODULE_SDM0)
|
||||
|
||||
@@ -594,8 +594,6 @@
|
||||
|
||||
#define SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED (1)
|
||||
|
||||
#define SOC_PM_RETENTION_MODULE_NUM (40)
|
||||
|
||||
#define SOC_PM_FLASH_KEEP_POWER_IN_LSLP (1) /*!<Keep flash on in light sleep to reduce wake latency and current leakage*/
|
||||
|
||||
/*-------------------------- CLOCK SUBSYSTEM CAPS ----------------------------------------*/
|
||||
|
||||
@@ -1203,10 +1203,6 @@ config SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED
|
||||
bool
|
||||
default y
|
||||
|
||||
config SOC_PM_RETENTION_MODULE_NUM
|
||||
int
|
||||
default 32
|
||||
|
||||
config SOC_PM_TOP_DEPENDS_ON_RTC_PERIPH
|
||||
bool
|
||||
default y
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include "soc_caps.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -56,7 +55,7 @@ typedef enum periph_retention_module {
|
||||
SLEEP_RETENTION_MODULE_802154_MAC = 30,
|
||||
SLEEP_RETENTION_MODULE_PHY_FE = 31,
|
||||
|
||||
SLEEP_RETENTION_MODULE_MAX = SOC_PM_RETENTION_MODULE_NUM - 1
|
||||
SLEEP_RETENTION_MODULE_MAX,
|
||||
} periph_retention_module_t;
|
||||
|
||||
#define is_top_domain_module(m) (m <= SLEEP_RETENTION_MODULE_SDM0)
|
||||
|
||||
@@ -493,8 +493,6 @@
|
||||
#define SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE (1)
|
||||
#define SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED (1)
|
||||
|
||||
#define SOC_PM_RETENTION_MODULE_NUM (32)
|
||||
|
||||
#define SOC_PM_TOP_DEPENDS_ON_RTC_PERIPH (1)
|
||||
|
||||
/*-------------------------- CLOCK SUBSYSTEM CAPS ----------------------------------------*/
|
||||
|
||||
@@ -1111,10 +1111,6 @@ config SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED
|
||||
bool
|
||||
default y
|
||||
|
||||
config SOC_PM_RETENTION_MODULE_NUM
|
||||
int
|
||||
default 32
|
||||
|
||||
config SOC_PM_FLASH_KEEP_POWER_IN_LSLP
|
||||
bool
|
||||
default y
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include "soc_caps.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -49,7 +48,7 @@ typedef enum periph_retention_module {
|
||||
SLEEP_RETENTION_MODULE_802154_MAC = 30,
|
||||
SLEEP_RETENTION_MODULE_PHY_FE = 31,
|
||||
|
||||
SLEEP_RETENTION_MODULE_MAX = SOC_PM_RETENTION_MODULE_NUM - 1
|
||||
SLEEP_RETENTION_MODULE_MAX,
|
||||
} periph_retention_module_t;
|
||||
|
||||
#define is_top_domain_module(m) (m <= SLEEP_RETENTION_MODULE_TEMP_SENSOR)
|
||||
|
||||
@@ -457,8 +457,6 @@
|
||||
#define SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE (1)
|
||||
#define SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED (1)
|
||||
|
||||
#define SOC_PM_RETENTION_MODULE_NUM (32)
|
||||
|
||||
#define SOC_PM_FLASH_KEEP_POWER_IN_LSLP (1) /*!<Keep flash on in light sleep to reduce wake latency and current leakage*/
|
||||
|
||||
/*-------------------------- CLOCK SUBSYSTEM CAPS ----------------------------------------*/
|
||||
|
||||
@@ -1139,10 +1139,6 @@ config SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE
|
||||
bool
|
||||
default y
|
||||
|
||||
config SOC_PM_RETENTION_MODULE_NUM
|
||||
int
|
||||
default 32
|
||||
|
||||
config SOC_EXT_MEM_CACHE_TAG_IN_CPU_DOMAIN
|
||||
bool
|
||||
default y
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include "soc_caps.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -53,7 +52,7 @@ typedef enum periph_retention_module {
|
||||
SLEEP_RETENTION_MODULE_BT_BB = 29,
|
||||
SLEEP_RETENTION_MODULE_802154_MAC = 30,
|
||||
|
||||
SLEEP_RETENTION_MODULE_MAX = SOC_PM_RETENTION_MODULE_NUM - 1
|
||||
SLEEP_RETENTION_MODULE_MAX,
|
||||
} periph_retention_module_t;
|
||||
|
||||
#define is_top_domain_module(m) ((m) <= SLEEP_RETENTION_MODULE_SDM0)
|
||||
|
||||
@@ -491,8 +491,6 @@
|
||||
|
||||
#define SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE (1)
|
||||
|
||||
#define SOC_PM_RETENTION_MODULE_NUM (32)
|
||||
|
||||
#define SOC_EXT_MEM_CACHE_TAG_IN_CPU_DOMAIN (1)
|
||||
#define SOC_PM_CPU_RETENTION_BY_SW (1)
|
||||
#define SOC_PM_MODEM_RETENTION_BY_REGDMA (1)
|
||||
|
||||
@@ -1003,10 +1003,6 @@ config SOC_PM_PAU_LINK_NUM
|
||||
int
|
||||
default 5
|
||||
|
||||
config SOC_PM_RETENTION_MODULE_NUM
|
||||
int
|
||||
default 32
|
||||
|
||||
config SOC_PM_PAU_REGDMA_LINK_CONFIGURABLE
|
||||
bool
|
||||
default y
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include "soc_caps.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -53,7 +52,7 @@ typedef enum periph_retention_module {
|
||||
SLEEP_RETENTION_MODULE_BT_BB = 29,
|
||||
SLEEP_RETENTION_MODULE_802154_MAC = 30,
|
||||
|
||||
SLEEP_RETENTION_MODULE_MAX = SOC_PM_RETENTION_MODULE_NUM - 1
|
||||
SLEEP_RETENTION_MODULE_MAX,
|
||||
} periph_retention_module_t;
|
||||
|
||||
#define is_top_domain_module(m) ((m) <= SLEEP_RETENTION_MODULE_SDM0)
|
||||
|
||||
@@ -460,7 +460,6 @@
|
||||
#define SOC_PM_SUPPORT_VDDSDIO_PD (1)
|
||||
#define SOC_PM_SUPPORT_TOP_PD (1)
|
||||
#define SOC_PM_PAU_LINK_NUM (5)
|
||||
#define SOC_PM_RETENTION_MODULE_NUM (32)
|
||||
#define SOC_PM_PAU_REGDMA_LINK_CONFIGURABLE (1)
|
||||
#define SOC_PM_CPU_RETENTION_BY_SW (1)
|
||||
#define SOC_PM_MODEM_RETENTION_BY_REGDMA (1)
|
||||
|
||||
@@ -1227,10 +1227,6 @@ config SOC_PM_PAU_REGDMA_LINK_CONFIGURABLE
|
||||
bool
|
||||
default y
|
||||
|
||||
config SOC_PM_RETENTION_MODULE_NUM
|
||||
int
|
||||
default 64
|
||||
|
||||
config SOC_PM_TOP_DEPENDS_ON_RTC_PERIPH
|
||||
bool
|
||||
default y
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include "soc_caps.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -59,7 +58,7 @@ typedef enum periph_retention_module {
|
||||
SLEEP_RETENTION_MODULE_802154_MAC = 33,
|
||||
SLEEP_RETENTION_MODULE_POWER = 34,
|
||||
|
||||
SLEEP_RETENTION_MODULE_MAX = SOC_PM_RETENTION_MODULE_NUM - 1
|
||||
SLEEP_RETENTION_MODULE_MAX,
|
||||
} periph_retention_module_t;
|
||||
|
||||
#define is_top_domain_module(m) ((m) <= SLEEP_RETENTION_MODULE_ASRC)
|
||||
|
||||
@@ -514,7 +514,6 @@
|
||||
|
||||
#define SOC_PM_PAU_LINK_NUM (4)
|
||||
#define SOC_PM_PAU_REGDMA_LINK_CONFIGURABLE (1)
|
||||
#define SOC_PM_RETENTION_MODULE_NUM (64)
|
||||
|
||||
#define SOC_PM_TOP_DEPENDS_ON_RTC_PERIPH (1) // In ESP32H4, RTC_PERIPH should be pd only together with TOP, otherwise there is some current leak.
|
||||
#define SOC_PM_BBPLL_PD_IN_MODEM_STATE (1)
|
||||
|
||||
@@ -1827,10 +1827,6 @@ config SOC_SLEEP_TGWDT_STOP_WORKAROUND
|
||||
bool
|
||||
default y
|
||||
|
||||
config SOC_PM_RETENTION_MODULE_NUM
|
||||
int
|
||||
default 64
|
||||
|
||||
config SOC_MAIN_POWER_CONTROL_SUPPORTED
|
||||
bool
|
||||
default y
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include "soc_caps.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -68,9 +67,9 @@ typedef enum periph_retention_module {
|
||||
SLEEP_RETENTION_MODULE_PPA = 42,
|
||||
|
||||
/* PMU REGDMA clock icg */
|
||||
SLEEP_RETENTION_MODULE_CLOCK_ICG = SOC_PM_RETENTION_MODULE_NUM - 2,
|
||||
SLEEP_RETENTION_MODULE_CLOCK_ICG = 43,
|
||||
|
||||
SLEEP_RETENTION_MODULE_MAX = SOC_PM_RETENTION_MODULE_NUM - 1
|
||||
SLEEP_RETENTION_MODULE_MAX,
|
||||
} periph_retention_module_t;
|
||||
|
||||
#define is_top_domain_module(m) (((m) <= SLEEP_RETENTION_MODULE_PPA) || ((m) == SLEEP_RETENTION_MODULE_CLOCK_ICG))
|
||||
|
||||
@@ -694,8 +694,6 @@
|
||||
#define SOC_SLEEP_SYSTIMER_STALL_WORKAROUND 1 //TODO IDF-11381: replace with all xtal field clk gate control
|
||||
#define SOC_SLEEP_TGWDT_STOP_WORKAROUND 1 //TODO IDF-11381: replace with all xtal field clk gate control
|
||||
|
||||
#define SOC_PM_RETENTION_MODULE_NUM (64)
|
||||
|
||||
#define SOC_MAIN_POWER_CONTROL_SUPPORTED (1) /*!<Supports outputting an enable signal to control the power-on and power-off of the main power supply when powered by VBAT.*/
|
||||
|
||||
/*-------------------------- CLOCK SUBSYSTEM CAPS ----------------------------------------*/
|
||||
|
||||
@@ -1611,10 +1611,6 @@ config SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED
|
||||
bool
|
||||
default y
|
||||
|
||||
config SOC_PM_RETENTION_MODULE_NUM
|
||||
int
|
||||
default 64
|
||||
|
||||
config SOC_LP_MAILBOX_SUPPORTED
|
||||
bool
|
||||
default y
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include "soc_caps.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -82,7 +81,7 @@ typedef enum periph_retention_module {
|
||||
|
||||
SLEEP_RETENTION_MODULE_ASRC = 53,
|
||||
|
||||
SLEEP_RETENTION_MODULE_MAX = SOC_PM_RETENTION_MODULE_NUM - 1
|
||||
SLEEP_RETENTION_MODULE_MAX,
|
||||
} periph_retention_module_t;
|
||||
|
||||
#define is_top_domain_module(m) ((m >= SLEEP_RETENTION_MODULE_CLOCK_SYSTEM) && ((m <= SLEEP_RETENTION_MODULE_PPA)))
|
||||
|
||||
@@ -608,8 +608,6 @@
|
||||
*/
|
||||
#define SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED (1)
|
||||
|
||||
#define SOC_PM_RETENTION_MODULE_NUM (64)
|
||||
|
||||
/*-------------------------- LP_CORE CAPS ------------------------------------*/
|
||||
#define SOC_LP_MAILBOX_SUPPORTED (1) /*!< LP Core supports LP-mailbox */
|
||||
#define SOC_LP_CORE_SUPPORT_ETM (1) /*!< LP Core supports ETM wakeup */
|
||||
|
||||
@@ -18,6 +18,8 @@ extern "C" {
|
||||
|
||||
#if SOC_PAU_SUPPORTED
|
||||
|
||||
#include "soc/retention_periph_defs.h"
|
||||
|
||||
#define REGDMA_LINK_ENTRY_NUM (SOC_PM_PAU_LINK_NUM) /* Maximum number of REG DMA linked list entries */
|
||||
|
||||
#ifndef ARRAY_SIZE
|
||||
@@ -192,15 +194,15 @@ typedef struct regdma_link_branch_write_wait_body {
|
||||
volatile uint32_t mask;
|
||||
} regdma_link_branch_write_wait_body_t;
|
||||
|
||||
ESP_STATIC_ASSERT(REGDMA_LINK_ENTRY_NUM <= 16, "regdma link entry number should equal to and less than 16");
|
||||
ESP_STATIC_ASSERT(REGDMA_LINK_ENTRY_NUM < 16, "regdma link entry number must be less than 16 to pack module into stats");
|
||||
typedef struct regdma_link_stats {
|
||||
volatile uint32_t ref: REGDMA_LINK_ENTRY_NUM, /* a bitmap, identifies which entry has referenced the current link */
|
||||
#if REGDMA_LINK_ENTRY_NUM < 16
|
||||
reserve: 16 - REGDMA_LINK_ENTRY_NUM,
|
||||
#endif
|
||||
module: 16 - REGDMA_LINK_ENTRY_NUM, /* module id; width leaves room beside ref within the low 16 bits */
|
||||
id: 16; /* REGDMA linked list node unique identifier */
|
||||
volatile int module; /* a number used to identify the module to which the current node belongs */
|
||||
} regdma_link_stats_t;
|
||||
ESP_STATIC_ASSERT(sizeof(regdma_link_stats_t) == 4, "regdma_link_stats_t must be 4 bytes");
|
||||
ESP_STATIC_ASSERT(SLEEP_RETENTION_MODULE_MAX < (1u << (16 - REGDMA_LINK_ENTRY_NUM)),
|
||||
"module id exceeds bitfield width");
|
||||
|
||||
typedef struct regdma_link_continuous {
|
||||
regdma_link_stats_t stat;
|
||||
|
||||
Reference in New Issue
Block a user