mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
change(esp_hw_support): change regdma link entry num
This commit is contained in:
parent
a0da9ade35
commit
24aa547c80
@ -175,9 +175,11 @@ typedef struct {
|
||||
#define SLEEP_RETENTION_MODULE_INVALID ((sleep_retention_module_t)(-1)) /* the final node does not belong to any module */
|
||||
struct {
|
||||
sleep_retention_entries_t entries;
|
||||
uint32_t entries_bitmap: REGDMA_LINK_ENTRY_NUM,
|
||||
runtime_bitmap: REGDMA_LINK_ENTRY_NUM,
|
||||
reserved: 32-(2*REGDMA_LINK_ENTRY_NUM);
|
||||
uint32_t entries_bitmap: REGDMA_LINK_ENTRY_NUM;
|
||||
uint32_t runtime_bitmap: REGDMA_LINK_ENTRY_NUM;
|
||||
#if REGDMA_LINK_ENTRY_NUM < 16
|
||||
uint32_t reserved: 32-(2*REGDMA_LINK_ENTRY_NUM);
|
||||
#endif
|
||||
void *entries_tail;
|
||||
} lists[SLEEP_RETENTION_REGDMA_LINK_NR_PRIORITIES];
|
||||
_lock_t lock;
|
||||
@ -245,6 +247,9 @@ static void sleep_retention_entries_update(uint32_t owner, void *new_link, regdm
|
||||
(owner & BIT(1)) ? new_link : s_retention.lists[priority].entries[1],
|
||||
(owner & BIT(2)) ? new_link : s_retention.lists[priority].entries[2],
|
||||
(owner & BIT(3)) ? new_link : s_retention.lists[priority].entries[3]
|
||||
#if (REGDMA_LINK_ENTRY_NUM == 5)
|
||||
, (owner & BIT(4)) ? new_link : s_retention.lists[priority].entries[4]
|
||||
#endif
|
||||
};
|
||||
if (s_retention.lists[priority].entries_bitmap == 0) {
|
||||
s_retention.lists[priority].entries_tail = new_link;
|
||||
@ -270,6 +275,9 @@ static void * sleep_retention_entries_try_create(const regdma_link_config_t *con
|
||||
(owner & BIT(1)) ? s_retention.lists[priority].entries[1] : NULL,
|
||||
(owner & BIT(2)) ? s_retention.lists[priority].entries[2] : NULL,
|
||||
(owner & BIT(3)) ? s_retention.lists[priority].entries[3] : NULL
|
||||
#if (REGDMA_LINK_ENTRY_NUM == 5)
|
||||
, (owner & BIT(4)) ? s_retention.lists[priority].entries[4] : NULL
|
||||
#endif
|
||||
);
|
||||
}
|
||||
} else {
|
||||
@ -289,6 +297,9 @@ static void * sleep_retention_entries_try_create_bonding(const regdma_link_confi
|
||||
(owner & BIT(1)) ? s_retention.lists[priority].entries[1] : NULL,
|
||||
(owner & BIT(2)) ? s_retention.lists[priority].entries[2] : NULL,
|
||||
(owner & BIT(3)) ? s_retention.lists[priority].entries[3] : NULL
|
||||
#if (REGDMA_LINK_ENTRY_NUM == 5)
|
||||
, (owner & BIT(4)) ? s_retention.lists[priority].entries[4] : NULL
|
||||
#endif
|
||||
);
|
||||
_lock_release_recursive(&s_retention.lock);
|
||||
return link;
|
||||
@ -399,11 +410,18 @@ static bool sleep_retention_entries_dettach(regdma_link_priority_t priority, sle
|
||||
} else if (is_tail) {
|
||||
s_retention.lists[priority].entries_tail = prev_tail;
|
||||
} else {
|
||||
#if (REGDMA_LINK_ENTRY_NUM == 5)
|
||||
regdma_link_update_next_safe(prev_tail, (*next_entries)[0], (*next_entries)[1], (*next_entries)[2], (*next_entries)[3], (*next_entries)[4]);
|
||||
#else
|
||||
regdma_link_update_next_safe(prev_tail, (*next_entries)[0], (*next_entries)[1], (*next_entries)[2], (*next_entries)[3]);
|
||||
#endif
|
||||
}
|
||||
sleep_retention_entries_context_update(priority);
|
||||
|
||||
#if (REGDMA_LINK_ENTRY_NUM == 5)
|
||||
regdma_link_update_next_safe(destroy_tail, NULL, NULL, NULL, NULL, NULL);
|
||||
#else
|
||||
regdma_link_update_next_safe(destroy_tail, NULL, NULL, NULL, NULL);
|
||||
#endif
|
||||
_lock_release_recursive(&s_retention.lock);
|
||||
return (is_head || is_tail);
|
||||
}
|
||||
@ -527,6 +545,9 @@ static void sleep_retention_entries_join(void)
|
||||
s_retention.lists[priority].entries[1],
|
||||
s_retention.lists[priority].entries[2],
|
||||
s_retention.lists[priority].entries[3]
|
||||
#if (REGDMA_LINK_ENTRY_NUM == 5)
|
||||
, s_retention.lists[priority].entries[4]
|
||||
#endif
|
||||
);
|
||||
}
|
||||
entries_tail = s_retention.lists[priority].entries_tail;
|
||||
|
@ -1245,7 +1245,7 @@ config SOC_PM_MODEM_RETENTION_BY_REGDMA
|
||||
|
||||
config SOC_PM_PAU_LINK_NUM
|
||||
int
|
||||
default 4
|
||||
default 5
|
||||
|
||||
config SOC_PM_PAU_REGDMA_LINK_CONFIGURABLE
|
||||
bool
|
||||
|
@ -561,7 +561,7 @@
|
||||
#define SOC_PM_MODEM_RETENTION_BY_REGDMA (1)
|
||||
// #define SOC_PM_RETENTION_HAS_CLOCK_BUG (1)
|
||||
|
||||
#define SOC_PM_PAU_LINK_NUM (4)
|
||||
#define SOC_PM_PAU_LINK_NUM (5)
|
||||
#define SOC_PM_PAU_REGDMA_LINK_CONFIGURABLE (1)
|
||||
|
||||
/*-------------------------- CLOCK SUBSYSTEM CAPS ----------------------------------------*/
|
||||
|
@ -154,10 +154,12 @@ 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 less 16");
|
||||
ESP_STATIC_ASSERT(REGDMA_LINK_ENTRY_NUM <= 16, "regdma link entry number should equal to and less than 16");
|
||||
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
|
||||
id: 16; /* REGDMA linked list node unique identifier */
|
||||
volatile uint32_t module; /* a bitmap used to identify the module to which the current node belongs */
|
||||
} regdma_link_stats_t;
|
||||
|
Loading…
Reference in New Issue
Block a user