From 10860ecbba61770a09254d1a55dde56b8874cddd Mon Sep 17 00:00:00 2001 From: Sylvio Alves Date: Mon, 10 Feb 2025 14:06:23 -0300 Subject: [PATCH] soc: espressif: enable Wi-Fi/Bluetooth SW coexistence mgmt Update and enable Wi-Fi/Bluetooth software coexistence management. This improves package handling and is recommended to be used in high traffic scenarios. Signed-off-by: Sylvio Alves --- drivers/wifi/esp32/Kconfig.esp32 | 14 -------------- soc/espressif/common/Kconfig | 10 ++++++++++ soc/espressif/esp32/default.ld | 2 ++ soc/espressif/esp32c2/default.ld | 3 ++- soc/espressif/esp32c3/default.ld | 3 ++- soc/espressif/esp32c6/default.ld | 3 ++- soc/espressif/esp32s2/default.ld | 4 ++-- soc/espressif/esp32s3/default.ld | 3 ++- west.yml | 2 +- 9 files changed, 23 insertions(+), 21 deletions(-) diff --git a/drivers/wifi/esp32/Kconfig.esp32 b/drivers/wifi/esp32/Kconfig.esp32 index 039e6f1f398..9be2a64fb33 100644 --- a/drivers/wifi/esp32/Kconfig.esp32 +++ b/drivers/wifi/esp32/Kconfig.esp32 @@ -71,11 +71,6 @@ config ESP32_WIFI_STA_SCAN_ALL highest RSSI. Without this, a fast scan is performed which connects to the first AP found. -config ESP32_WIFI_SW_COEXIST_ENABLE - bool - help - Software controls WiFi/Bluetooth coexistence. Not supported yet. - config ESP32_WIFI_NET_ALLOC_SPIRAM bool "Allocate memory of WiFi and NET in SPIRAM" depends on ESP_SPIRAM @@ -227,7 +222,6 @@ config ESP32_WIFI_RX_MGMT_BUF_NUM_DEF config ESP32_WIFI_CSI_ENABLED bool "WiFi CSI(Channel State Information)" - default n help Select this option to enable CSI(Channel State Information) feature. CSI takes about CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM KB of RAM. @@ -280,7 +274,6 @@ config ESP32_WIFI_RX_BA_WIN config ESP32_WIFI_AMSDU_TX_ENABLED bool "WiFi AMSDU TX" depends on ESP_SPIRAM - default n help Select this option to enable AMSDU TX feature @@ -293,8 +286,6 @@ config ESP32_WIFI_MGMT_SBUF_NUM config ESP32_WIFI_IRAM_OPT bool "WiFi IRAM speed optimization" - default n if (BT && ESP_SPIRAM && SOC_SERIES_ESP32) - default y help Select this option to place frequently called Wi-Fi library functions in IRAM. When this option is disabled, more than 10Kbytes of IRAM memory will be saved @@ -302,7 +293,6 @@ config ESP32_WIFI_IRAM_OPT config ESP32_WIFI_RX_IRAM_OPT bool "WiFi RX IRAM speed optimization" - default n if (BT && ESP_SPIRAM && SOC_SERIES_ESP32) help Select this option to place frequently called Wi-Fi library RX functions in IRAM. When this option is disabled, more than 17Kbytes of IRAM memory will be saved @@ -345,7 +335,6 @@ config ESP32_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME config ESP32_WIFI_FTM_ENABLE bool "WiFi FTM" - default n depends on SOC_SERIES_ESP32C2 || SOC_SERIES_ESP32C3 || SOC_SERIES_ESP32C6 || SOC_SERIES_ESP32S2 || SOC_SERIES_ESP32S3 help Enable feature Fine Timing Measurement for calculating WiFi Round-Trip-Time (RTT). @@ -368,7 +357,6 @@ config ESP32_WIFI_SOFTAP_SUPPORT config ESP32_WIFI_MBEDTLS_CRYPTO bool "Use MbedTLS crypto APIs" - default n select MBEDTLS_ECP_C select MBEDTLS_ECDH_C select MBEDTLS_ECDSA_C @@ -382,7 +370,6 @@ config ESP32_WIFI_MBEDTLS_CRYPTO config ESP32_WIFI_ENABLE_WPA3_SAE bool "WPA3-Personal" - default n select ESP32_WIFI_MBEDTLS_CRYPTO help Select this option to allow the device to establish a WPA3-Personal connection. @@ -403,7 +390,6 @@ config ESP32_WIFI_ENABLE_SAE_PK config ESP32_WIFI_DEBUG_PRINT bool "Print debug messages from WPA Supplicant" - default n help Select this option to print logging information from WPA supplicant, this includes handshake information and key hex dumps depending diff --git a/soc/espressif/common/Kconfig b/soc/espressif/common/Kconfig index 67884f4783b..555085435c3 100644 --- a/soc/espressif/common/Kconfig +++ b/soc/espressif/common/Kconfig @@ -48,6 +48,16 @@ config ESP32_PHY_MAX_TX_POWER Set maximum transmit power for Wi-Fi radio. Actual transmit power for high data rates may be lower than this setting. +config ESP32_SW_COEXIST_ENABLE + bool "Software controls Wi-Fi/Bluetooth coexistence" + default y if (BT_ESP32 && WIFI_ESP32) + help + If enabled, Wi-Fi & Bluetooth coexistence is controlled by software rather than hardware. + Recommended for heavy traffic scenarios. Both coexistence configuration options are + automatically managed, no user intervention is required. + If only Bluetooth is used, it is recommended to disable this option to reduce binary file + size. + endif rsource "Kconfig.amp" diff --git a/soc/espressif/esp32/default.ld b/soc/espressif/esp32/default.ld index b8207b9aa71..44c74d4ce89 100644 --- a/soc/espressif/esp32/default.ld +++ b/soc/espressif/esp32/default.ld @@ -443,6 +443,7 @@ SECTIONS #if defined(CONFIG_ESP32_WIFI_IRAM_OPT) *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiorslpiram .wifiorslpiram.* .wifiextrairam .wifiextrairam.*) + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) /* [mapping:esp_wifi] */ *(.literal.wifi_clock_enable_wrapper .text.wifi_clock_enable_wrapper) @@ -948,6 +949,7 @@ SECTIONS #ifndef CONFIG_ESP32_WIFI_IRAM_OPT *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiorslpiram .wifiorslpiram.* .wifiextrairam .wifiextrairam.*) + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) #endif #ifndef CONFIG_ESP32_WIFI_RX_IRAM_OPT diff --git a/soc/espressif/esp32c2/default.ld b/soc/espressif/esp32c2/default.ld index 07b46786c6f..bd72f1ea805 100644 --- a/soc/espressif/esp32c2/default.ld +++ b/soc/espressif/esp32c2/default.ld @@ -319,7 +319,7 @@ SECTIONS #if defined(CONFIG_ESP32_WIFI_IRAM_OPT) *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) - *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.*) + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) /* [mapping:esp_wifi] */ *(.literal.wifi_clock_enable_wrapper .text.wifi_clock_enable_wrapper) @@ -652,6 +652,7 @@ SECTIONS #if !defined(CONFIG_ESP32_WIFI_IRAM_OPT) *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) #endif /* CONFIG_ESP32_WIFI_IRAM_OPT */ #if !defined(CONFIG_ESP32_WIFI_RX_IRAM_OPT) diff --git a/soc/espressif/esp32c3/default.ld b/soc/espressif/esp32c3/default.ld index 46f179f446c..4cce6c7f1eb 100644 --- a/soc/espressif/esp32c3/default.ld +++ b/soc/espressif/esp32c3/default.ld @@ -413,7 +413,7 @@ SECTIONS #if defined(CONFIG_ESP32_WIFI_IRAM_OPT) *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) - *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.*) + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) /* [mapping:esp_wifi] */ *(.literal.wifi_clock_enable_wrapper .text.wifi_clock_enable_wrapper) @@ -751,6 +751,7 @@ SECTIONS #if !defined(CONFIG_ESP32_WIFI_IRAM_OPT) *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) #endif /* CONFIG_ESP32_WIFI_IRAM_OPT */ #if !defined(CONFIG_ESP32_WIFI_RX_IRAM_OPT) diff --git a/soc/espressif/esp32c6/default.ld b/soc/espressif/esp32c6/default.ld index 74a6e13301e..ea24cf1abff 100644 --- a/soc/espressif/esp32c6/default.ld +++ b/soc/espressif/esp32c6/default.ld @@ -430,7 +430,7 @@ SECTIONS #if defined(CONFIG_ESP32_WIFI_IRAM_OPT) *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.* .wifi_extra_iram.*) *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.* .wifi_extra_iram.*) - *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.*) + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) /* [mapping:esp_wifi] */ *(.literal.wifi_clock_enable_wrapper .text.wifi_clock_enable_wrapper) @@ -778,6 +778,7 @@ SECTIONS #if !defined(CONFIG_ESP32_WIFI_IRAM_OPT) *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.* .wifi_extra_iram.*) *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.* .wifi_extra_iram.*) + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) #endif /* CONFIG_ESP32_WIFI_IRAM_OPT */ #if !defined(CONFIG_ESP32_WIFI_RX_IRAM_OPT) diff --git a/soc/espressif/esp32s2/default.ld b/soc/espressif/esp32s2/default.ld index f57add55aac..a9ca15c0dca 100644 --- a/soc/espressif/esp32s2/default.ld +++ b/soc/espressif/esp32s2/default.ld @@ -450,7 +450,7 @@ SECTIONS #if defined(CONFIG_ESP32_WIFI_IRAM_OPT) *libnet80211.a:(.wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) *libpp.a:(.wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiorslpiram .wifiorslpiram.* .wifiextrairam .wifiextrairam.*) - *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.*) + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) /* [mapping:esp_wifi] */ *(.literal.wifi_clock_enable_wrapper .text.wifi_clock_enable_wrapper) @@ -852,7 +852,7 @@ SECTIONS #if !defined(CONFIG_ESP32_WIFI_IRAM_OPT) *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiorslpiram .wifiorslpiram.* .wifiextrairam .wifiextrairam.*) - + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) #endif #if !defined(CONFIG_ESP32_WIFI_RX_IRAM_OPT) diff --git a/soc/espressif/esp32s3/default.ld b/soc/espressif/esp32s3/default.ld index 09c706f8bc3..2242fbd9297 100644 --- a/soc/espressif/esp32s3/default.ld +++ b/soc/espressif/esp32s3/default.ld @@ -458,7 +458,7 @@ SECTIONS #if defined(CONFIG_ESP32_WIFI_IRAM_OPT) *libnet80211.a:(.wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) *libpp.a:(.wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiorslpiram .wifiorslpiram.* .wifiextrairam .wifiextrairam.*) - *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.*) + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) /* [mapping:esp_wifi] */ *(.literal.wifi_clock_enable_wrapper .text.wifi_clock_enable_wrapper) @@ -848,6 +848,7 @@ SECTIONS #if !defined(CONFIG_ESP32_WIFI_IRAM_OPT) *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiorslpiram .wifiorslpiram.* .wifiextrairam .wifiextrairam.*) + *libcoexist.a:(.wifi_slp_iram .wifi_slp_iram.* .coexiram .coexiram.* .coexsleepiram .coexsleepiram.*) #endif #if !defined(CONFIG_ESP32_WIFI_RX_IRAM_OPT) diff --git a/west.yml b/west.yml index 7687ee38507..05e0e9017fd 100644 --- a/west.yml +++ b/west.yml @@ -162,7 +162,7 @@ manifest: groups: - hal - name: hal_espressif - revision: fbbe8f22f34cadc43b69f9eb3fca10e301874e36 + revision: 970156407d42c968c50d4b2e3c85c0c548bd9a9e path: modules/hal/espressif west-commands: west/west-commands.yml groups: