From ea086840a40c58a14a71bcc5cad7259d8f6ac83e Mon Sep 17 00:00:00 2001 From: Tomas Rezucha Date: Thu, 23 Nov 2023 12:05:43 +0100 Subject: [PATCH] fix(esp_phy): Allow WiFi/USB interference workaround option only on supported targets "Enable USB when phy init" Kconfig option would call esp_phy function `phy_bbpll_en_usb()` that is not implemented for all targets. Selecting this option for unsupported target results in linking error. The necessity of this workaround is now defined soc_caps.h rather than in the Kconfig. Closes https://github.com/espressif/esp-idf/issues/12185 --- components/esp_phy/Kconfig | 17 ++++++++++++----- .../soc/esp32c2/include/soc/Kconfig.soc_caps.in | 4 ++++ components/soc/esp32c2/include/soc/soc_caps.h | 1 + .../soc/esp32c3/include/soc/Kconfig.soc_caps.in | 4 ++++ components/soc/esp32c3/include/soc/soc_caps.h | 1 + .../soc/esp32s3/include/soc/Kconfig.soc_caps.in | 4 ++++ components/soc/esp32s3/include/soc/soc_caps.h | 1 + 7 files changed, 27 insertions(+), 5 deletions(-) diff --git a/components/esp_phy/Kconfig b/components/esp_phy/Kconfig index 7a2b7a811f..b6b4e4923e 100644 --- a/components/esp_phy/Kconfig +++ b/components/esp_phy/Kconfig @@ -106,13 +106,20 @@ menu "PHY" When brownout reset occurs, reduce PHY TX power to keep the code running. config ESP_PHY_ENABLE_USB - bool "Enable USB when phy init" - depends on SOC_USB_OTG_SUPPORTED || ESP_CONSOLE_USB_SERIAL_JTAG || ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG - default y if IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3 + bool "Keep the USB PHY enabled when initializing WiFi" + depends on SOC_WIFI_PHY_NEEDS_USB_WORKAROUND + default y if IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3 \ + || ESP_CONSOLE_USB_SERIAL_JTAG || ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG default n help - When using USB Serial/JTAG/OTG/CDC, PHY should enable USB, otherwise USB module - can not work properly. Notice: Enabling this configuration option will slightly impact wifi performance. + On some ESP targets, the USB PHY can interfere with WiFi thus lowering WiFi performance. As a result, on + those affected ESP targets, the ESP PHY library's initialization will automatically disable the USB PHY to + get best WiFi performance. This option controls whether or not the ESP PHY library will keep the USB PHY + enabled on initialization. + + Note: This option can be disabled to increase WiFi performance. However, disabling this option will also + mean that the USB PHY cannot be used while WiFi is enabled. + config ESP_PHY_ENABLE_CERT_TEST bool "Enable RF certification test functions" diff --git a/components/soc/esp32c2/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c2/include/soc/Kconfig.soc_caps.in index 5cdbff97b5..1a60df1f24 100644 --- a/components/soc/esp32c2/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c2/include/soc/Kconfig.soc_caps.in @@ -711,6 +711,10 @@ config SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW bool default y +config SOC_WIFI_PHY_NEEDS_USB_WORKAROUND + bool + default y + config SOC_BLE_SUPPORTED bool default y diff --git a/components/soc/esp32c2/include/soc/soc_caps.h b/components/soc/esp32c2/include/soc/soc_caps.h index 9f3fb8adb8..d7b51729d6 100644 --- a/components/soc/esp32c2/include/soc/soc_caps.h +++ b/components/soc/esp32c2/include/soc/soc_caps.h @@ -324,6 +324,7 @@ #define SOC_WIFI_HW_TSF (1) /*!< Support hardware TSF */ #define SOC_WIFI_FTM_SUPPORT (1) /*!< Support FTM */ #define SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW (1) /*!< Support delta early time for rf phy on/off */ +#define SOC_WIFI_PHY_NEEDS_USB_WORKAROUND (1) /*!< SoC has WiFi and USB PHYs interference, needs a workaround */ /*---------------------------------- Bluetooth CAPS ----------------------------------*/ #define SOC_BLE_SUPPORTED (1) /*!< Support Bluetooth Low Energy hardware */ diff --git a/components/soc/esp32c3/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c3/include/soc/Kconfig.soc_caps.in index 3e6ef40233..35ad04840f 100644 --- a/components/soc/esp32c3/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c3/include/soc/Kconfig.soc_caps.in @@ -1039,6 +1039,10 @@ config SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW bool default y +config SOC_WIFI_PHY_NEEDS_USB_WORKAROUND + bool + default y + config SOC_BLE_SUPPORTED bool default y diff --git a/components/soc/esp32c3/include/soc/soc_caps.h b/components/soc/esp32c3/include/soc/soc_caps.h index 0d8d988c7e..95be1c8328 100644 --- a/components/soc/esp32c3/include/soc/soc_caps.h +++ b/components/soc/esp32c3/include/soc/soc_caps.h @@ -439,6 +439,7 @@ #define SOC_WIFI_CSI_SUPPORT (1) /*!< Support CSI */ #define SOC_WIFI_MESH_SUPPORT (1) /*!< Support WIFI MESH */ #define SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW (1) /*!< Support delta early time for rf phy on/off */ +#define SOC_WIFI_PHY_NEEDS_USB_WORKAROUND (1) /*!< SoC has WiFi and USB PHYs interference, needs a workaround */ /*---------------------------------- Bluetooth CAPS ----------------------------------*/ #define SOC_BLE_SUPPORTED (1) /*!< Support Bluetooth Low Energy hardware */ diff --git a/components/soc/esp32s3/include/soc/Kconfig.soc_caps.in b/components/soc/esp32s3/include/soc/Kconfig.soc_caps.in index 0b2ce61815..baca2d76b8 100644 --- a/components/soc/esp32s3/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32s3/include/soc/Kconfig.soc_caps.in @@ -1335,6 +1335,10 @@ config SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW bool default y +config SOC_WIFI_PHY_NEEDS_USB_WORKAROUND + bool + default y + config SOC_BLE_SUPPORTED bool default y diff --git a/components/soc/esp32s3/include/soc/soc_caps.h b/components/soc/esp32s3/include/soc/soc_caps.h index 4a8d731fe7..c769085bc3 100644 --- a/components/soc/esp32s3/include/soc/soc_caps.h +++ b/components/soc/esp32s3/include/soc/soc_caps.h @@ -532,6 +532,7 @@ #define SOC_WIFI_CSI_SUPPORT (1) /*!< Support CSI */ #define SOC_WIFI_MESH_SUPPORT (1) /*!< Support WIFI MESH */ #define SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW (1) /*!< Support delta early time for rf phy on/off */ +#define SOC_WIFI_PHY_NEEDS_USB_WORKAROUND (1) /*!< SoC has WiFi and USB PHYs interference, needs a workaround */ /*---------------------------------- Bluetooth CAPS ----------------------------------*/ #define SOC_BLE_SUPPORTED (1) /*!< Support Bluetooth Low Energy hardware */