mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 03:00:34 +03:00
Merge branch 'bugfix/fix_some_wifi_bugs_260625_v5.2' into 'release/v5.2'
fix(wifi): fix some wifi bugs 260625 backport v5.2 See merge request espressif/esp-idf!50041
This commit is contained in:
@@ -46,6 +46,18 @@ entries:
|
|||||||
sar_periph_ctrl (noflash)
|
sar_periph_ctrl (noflash)
|
||||||
else:
|
else:
|
||||||
sar_periph_ctrl: sar_periph_ctrl_power_enable (noflash)
|
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]
|
[mapping:soc_pm]
|
||||||
archive: libsoc.a
|
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
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -311,43 +311,43 @@ void * regdma_link_init(const regdma_link_config_t *config, bool branch, uint32_
|
|||||||
return link;
|
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);
|
regdma_link_continuous_t *continuous = __containerof(link, regdma_link_continuous_t, head);
|
||||||
return (void *)(continuous->body.next);
|
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);
|
regdma_link_addr_map_t *addr_map = __containerof(link, regdma_link_addr_map_t, head);
|
||||||
return (void *)(addr_map->body.next);
|
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);
|
regdma_link_write_wait_t *write_wait = __containerof(link, regdma_link_write_wait_t, head);
|
||||||
return (void *)(write_wait->body.next);
|
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);
|
regdma_link_branch_continuous_t *branch_continuous = __containerof(link, regdma_link_branch_continuous_t, head);
|
||||||
return &branch_continuous->body.next;
|
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);
|
regdma_link_branch_addr_map_t *branch_addr_map = __containerof(link, regdma_link_branch_addr_map_t, head);
|
||||||
return &branch_addr_map->body.next;
|
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);
|
regdma_link_branch_write_wait_t *branch_write_wait = __containerof(link, regdma_link_branch_write_wait_t, head);
|
||||||
return &branch_write_wait->body.next;
|
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) {
|
if (link) {
|
||||||
regdma_link_head_t head = REGDMA_LINK_HEAD(link);
|
regdma_link_head_t head = REGDMA_LINK_HEAD(link);
|
||||||
@@ -400,7 +400,7 @@ void * regdma_link_recursive(void *link, int entry, void (*hook)(void *, int, in
|
|||||||
return regdma_link_recursive_impl(link, entry, 0, hook);
|
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 * container_memaddr[] = {
|
||||||
(void *)__containerof(link, regdma_link_continuous_t, head),
|
(void *)__containerof(link, regdma_link_continuous_t, head),
|
||||||
|
|||||||
@@ -414,7 +414,8 @@ menu "Wi-Fi"
|
|||||||
config ESP_WIFI_SLP_BEACON_LOST_TIMEOUT
|
config ESP_WIFI_SLP_BEACON_LOST_TIMEOUT
|
||||||
int "Beacon loss timeout"
|
int "Beacon loss timeout"
|
||||||
range 5 100
|
range 5 100
|
||||||
default 10
|
default 25 if ESP_COEX_SW_COEXIST_ENABLE
|
||||||
|
default 10 if (!ESP_COEX_SW_COEXIST_ENABLE)
|
||||||
depends on ESP_WIFI_SLP_BEACON_LOST_OPT
|
depends on ESP_WIFI_SLP_BEACON_LOST_OPT
|
||||||
help
|
help
|
||||||
Timeout time for close rf phy when beacon loss occurs, Unit: 1024 microsecond.
|
Timeout time for close rf phy when beacon loss occurs, Unit: 1024 microsecond.
|
||||||
|
|||||||
@@ -563,12 +563,12 @@ static void esp_phy_disable_wrapper(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if SOC_PM_MODEM_RETENTION_BY_REGDMA
|
#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);
|
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);
|
return sleep_retention_find_link_by_id(id);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
Submodule components/esp_wifi/lib updated: 5779457dea...2b12cece79
@@ -1,4 +1,4 @@
|
|||||||
# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
|
# SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@@ -64,6 +64,19 @@ def test_wifi_power_save_pd_top(dut: Dut) -> None:
|
|||||||
_run_test(dut)
|
_run_test(dut)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.esp32c6
|
||||||
|
@pytest.mark.wifi_ap
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'config',
|
||||||
|
[
|
||||||
|
'pd_modem',
|
||||||
|
],
|
||||||
|
indirect=True,
|
||||||
|
)
|
||||||
|
def test_wifi_power_save_pd_modem(dut: Dut) -> None:
|
||||||
|
_run_test(dut)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.esp32c2
|
@pytest.mark.esp32c2
|
||||||
@pytest.mark.wifi_ap
|
@pytest.mark.wifi_ap
|
||||||
@pytest.mark.xtal_26mhz
|
@pytest.mark.xtal_26mhz
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
CONFIG_IDF_TARGET="esp32c2"
|
CONFIG_IDF_TARGET="esp32c2"
|
||||||
CONFIG_XTAL_FREQ_26=y
|
CONFIG_XTAL_FREQ_26=y
|
||||||
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
||||||
|
CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y
|
||||||
|
|||||||
@@ -2,3 +2,4 @@ CONFIG_IDF_TARGET="esp32c2"
|
|||||||
CONFIG_XTAL_FREQ_26=y
|
CONFIG_XTAL_FREQ_26=y
|
||||||
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
||||||
CONFIG_ESP32C2_REV_MIN_200=y
|
CONFIG_ESP32C2_REV_MIN_200=y
|
||||||
|
CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
CONFIG_IDF_TARGET="esp32c3"
|
CONFIG_IDF_TARGET="esp32c3"
|
||||||
CONFIG_ESP32C3_REV_MIN_101=y
|
CONFIG_ESP32C3_REV_MIN_101=y
|
||||||
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
||||||
|
CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
||||||
|
CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y
|
||||||
|
CONFIG_ESP_PHY_MAC_BB_PD=y
|
||||||
|
CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP=y
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
||||||
CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y
|
CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y
|
||||||
CONFIG_ESP_PHY_MAC_BB_PD=y
|
CONFIG_ESP_PHY_MAC_BB_PD=y
|
||||||
|
CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y
|
||||||
|
|||||||
Reference in New Issue
Block a user