mirror of
https://github.com/espressif/esp-idf.git
synced 2026-09-22 13:01:16 +03:00
fix(wifi): IRAM for regdma path used in modem pd light sleep
This commit is contained in:
@@ -54,6 +54,18 @@ entries:
|
||||
sar_periph_ctrl (noflash)
|
||||
else:
|
||||
sar_periph_ctrl: sar_periph_ctrl_power_enable (noflash)
|
||||
if SOC_PM_MODEM_RETENTION_BY_REGDMA = y && ESP_PHY_MAC_BB_PD = y:
|
||||
sleep_retention:sleep_retention_find_link_by_id (noflash)
|
||||
regdma_link:regdma_find_link_by_id (noflash)
|
||||
regdma_link:regdma_link_get_next (noflash)
|
||||
regdma_link:regdma_link_get_next_continuous_wrapper (noflash)
|
||||
regdma_link:regdma_link_get_next_addr_map_wrapper (noflash)
|
||||
regdma_link:regdma_link_get_next_write_wait_wrapper (noflash)
|
||||
regdma_link:regdma_link_get_next_branch_continuous_wrapper (noflash)
|
||||
regdma_link:regdma_link_get_next_branch_addr_map_wrapper (noflash)
|
||||
regdma_link:regdma_link_get_next_branch_write_wait_wrapper (noflash)
|
||||
regdma_link:regdma_link_set_write_wait_content (noflash)
|
||||
regdma_link:regdma_link_get_instance (noflash)
|
||||
|
||||
[mapping:soc_pm]
|
||||
archive: libsoc.a
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -318,43 +318,43 @@ void * regdma_link_init(const regdma_link_config_t *config, bool branch, int mod
|
||||
return link;
|
||||
}
|
||||
|
||||
static void * regdma_link_get_next_continuous_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static void * regdma_link_get_next_continuous_wrapper(void *link)
|
||||
{
|
||||
regdma_link_continuous_t *continuous = __containerof(link, regdma_link_continuous_t, head);
|
||||
return (void *)(continuous->body.next);
|
||||
}
|
||||
|
||||
static void * regdma_link_get_next_addr_map_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static void * regdma_link_get_next_addr_map_wrapper(void *link)
|
||||
{
|
||||
regdma_link_addr_map_t *addr_map = __containerof(link, regdma_link_addr_map_t, head);
|
||||
return (void *)(addr_map->body.next);
|
||||
}
|
||||
|
||||
static void * regdma_link_get_next_write_wait_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static void * regdma_link_get_next_write_wait_wrapper(void *link)
|
||||
{
|
||||
regdma_link_write_wait_t *write_wait = __containerof(link, regdma_link_write_wait_t, head);
|
||||
return (void *)(write_wait->body.next);
|
||||
}
|
||||
|
||||
static regdma_entry_buf_t * regdma_link_get_next_branch_continuous_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static regdma_entry_buf_t * regdma_link_get_next_branch_continuous_wrapper(void *link)
|
||||
{
|
||||
regdma_link_branch_continuous_t *branch_continuous = __containerof(link, regdma_link_branch_continuous_t, head);
|
||||
return &branch_continuous->body.next;
|
||||
}
|
||||
|
||||
static regdma_entry_buf_t * regdma_link_get_next_branch_addr_map_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static regdma_entry_buf_t * regdma_link_get_next_branch_addr_map_wrapper(void *link)
|
||||
{
|
||||
regdma_link_branch_addr_map_t *branch_addr_map = __containerof(link, regdma_link_branch_addr_map_t, head);
|
||||
return &branch_addr_map->body.next;
|
||||
}
|
||||
|
||||
static regdma_entry_buf_t * regdma_link_get_next_branch_write_wait_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static regdma_entry_buf_t * regdma_link_get_next_branch_write_wait_wrapper(void *link)
|
||||
{
|
||||
regdma_link_branch_write_wait_t *branch_write_wait = __containerof(link, regdma_link_branch_write_wait_t, head);
|
||||
return &branch_write_wait->body.next;
|
||||
}
|
||||
|
||||
static void * regdma_link_get_next(void *link, int entry)
|
||||
__attribute__((used, noinline)) static void * regdma_link_get_next(void *link, int entry)
|
||||
{
|
||||
if (link) {
|
||||
regdma_link_head_t head = REGDMA_LINK_HEAD(link);
|
||||
@@ -407,7 +407,7 @@ void * regdma_link_recursive(void *link, int entry, void (*hook)(void *, int, in
|
||||
return regdma_link_recursive_impl(link, entry, 0, hook);
|
||||
}
|
||||
|
||||
static void * regdma_link_get_instance(void *link)
|
||||
__attribute__((used, noinline)) static void * regdma_link_get_instance(void *link)
|
||||
{
|
||||
void * container_memaddr[] = {
|
||||
(void *)__containerof(link, regdma_link_continuous_t, head),
|
||||
|
||||
@@ -568,12 +568,12 @@ static void esp_phy_disable_wrapper(void)
|
||||
}
|
||||
|
||||
#if SOC_PM_MODEM_RETENTION_BY_REGDMA
|
||||
static void regdma_link_set_write_wait_content_wrapper(void *addr, uint32_t value, uint32_t mask)
|
||||
static void IRAM_ATTR regdma_link_set_write_wait_content_wrapper(void *addr, uint32_t value, uint32_t mask)
|
||||
{
|
||||
regdma_link_set_write_wait_content(addr, value, mask);
|
||||
}
|
||||
|
||||
static void *sleep_retention_find_link_by_id_wrapper(int id)
|
||||
static void *IRAM_ATTR sleep_retention_find_link_by_id_wrapper(int id)
|
||||
{
|
||||
return sleep_retention_find_link_by_id(id);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user