Skip to content

Commit ae2b5af

Browse files
author
Jiang Jiang Jian
committed
Merge branch 'bugfix/add_phy_calibration_independent_support_v5.5' into 'release/v5.5'
feat(phy): add phy calibration independent support(backport v5.5) See merge request espressif/esp-idf!41416
2 parents 0ef3fb4 + 5714153 commit ae2b5af

File tree

11 files changed

+101
-7
lines changed

11 files changed

+101
-7
lines changed

components/esp_hw_support/modem_clock.c

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ typedef enum {
2828
MODEM_CLOCK_MODEM_PRIVATE_FE,
2929
MODEM_CLOCK_COEXIST,
3030
MODEM_CLOCK_I2C_MASTER,
31+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
32+
MODEM_CLOCK_WIFI_APB,
33+
MODEM_CLOCK_WIFI_BB_44M,
34+
#endif
3135
#if SOC_WIFI_SUPPORTED
3236
MODEM_CLOCK_WIFI_MAC,
3337
MODEM_CLOCK_WIFI_BB,
@@ -64,7 +68,9 @@ typedef struct modem_clock_context {
6468
static void IRAM_ATTR modem_clock_wifi_mac_configure(modem_clock_context_t *ctx, bool enable)
6569
{
6670
if (enable) {
71+
#if !SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
6772
modem_syscon_ll_enable_wifi_apb_clock(ctx->hal->syscon_dev, enable);
73+
#endif
6874
modem_syscon_ll_enable_wifi_mac_clock(ctx->hal->syscon_dev, enable);
6975
}
7076
}
@@ -86,6 +92,22 @@ static void IRAM_ATTR modem_clock_ble_mac_configure(modem_clock_context_t *ctx,
8692
}
8793
#endif // SOC_BT_SUPPORTED
8894

95+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
96+
static void IRAM_ATTR modem_clock_wifi_apb_configure(modem_clock_context_t *ctx, bool enable)
97+
{
98+
if (enable) {
99+
modem_syscon_ll_enable_wifi_apb_clock(ctx->hal->syscon_dev, enable);
100+
}
101+
}
102+
103+
static void IRAM_ATTR modem_clock_wifi_bb_44m_configure(modem_clock_context_t *ctx, bool enable)
104+
{
105+
if (enable) {
106+
modem_syscon_ll_enable_wifibb_44m_clock(ctx->hal->syscon_dev, enable);
107+
}
108+
}
109+
#endif
110+
89111
#if SOC_BT_SUPPORTED || SOC_IEEE802154_SUPPORTED
90112
static void IRAM_ATTR modem_clock_ble_i154_bb_configure(modem_clock_context_t *ctx, bool enable)
91113
{
@@ -149,6 +171,10 @@ modem_clock_context_t * __attribute__((weak)) IRAM_ATTR MODEM_CLOCK_instance(voi
149171
[MODEM_CLOCK_MODEM_PRIVATE_FE] = { .refs = 0, .configure = modem_clock_modem_private_fe_configure },
150172
[MODEM_CLOCK_COEXIST] = { .refs = 0, .configure = modem_clock_coex_configure },
151173
[MODEM_CLOCK_I2C_MASTER] = { .refs = 0, .configure = modem_clock_i2c_master_configure },
174+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
175+
[MODEM_CLOCK_WIFI_APB] = { .refs = 0, .configure = modem_clock_wifi_apb_configure },
176+
[MODEM_CLOCK_WIFI_BB_44M] = { .refs = 0, .configure = modem_clock_wifi_bb_44m_configure },
177+
#endif
152178
#if SOC_WIFI_SUPPORTED
153179
[MODEM_CLOCK_WIFI_MAC] = { .refs = 0, .configure = modem_clock_wifi_mac_configure },
154180
[MODEM_CLOCK_WIFI_BB] = { .refs = 0, .configure = modem_clock_wifi_bb_configure },
@@ -273,15 +299,21 @@ void IRAM_ATTR modem_clock_module_mac_reset(periph_module_t module)
273299
}
274300
portEXIT_CRITICAL_SAFE(&ctx->lock);
275301
}
276-
302+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
303+
#define WIFI_CLOCK_DEPS (BIT(MODEM_CLOCK_WIFI_MAC) | BIT(MODEM_CLOCK_WIFI_APB) | BIT(MODEM_CLOCK_WIFI_BB) | BIT(MODEM_CLOCK_WIFI_BB_44M) | BIT(MODEM_CLOCK_COEXIST))
304+
#else
277305
#define WIFI_CLOCK_DEPS (BIT(MODEM_CLOCK_WIFI_MAC) | BIT(MODEM_CLOCK_WIFI_BB) | BIT(MODEM_CLOCK_COEXIST))
306+
#endif
278307
#define BLE_CLOCK_DEPS (BIT(MODEM_CLOCK_BLE_MAC) | BIT(MODEM_CLOCK_BT_I154_COMMON_BB) | BIT(MODEM_CLOCK_ETM) | BIT(MODEM_CLOCK_COEXIST))
279308
#define IEEE802154_CLOCK_DEPS (BIT(MODEM_CLOCK_802154_MAC) | BIT(MODEM_CLOCK_BT_I154_COMMON_BB) | BIT(MODEM_CLOCK_ETM) | BIT(MODEM_CLOCK_COEXIST))
280309
#define COEXIST_CLOCK_DEPS (BIT(MODEM_CLOCK_COEXIST))
281310
#define PHY_CLOCK_DEPS (BIT(MODEM_CLOCK_I2C_MASTER) | BIT(MODEM_CLOCK_MODEM_ADC_COMMON_FE) | BIT(MODEM_CLOCK_MODEM_PRIVATE_FE))
282311
#define I2C_ANA_MST_CLOCK_DEPS (BIT(MODEM_CLOCK_I2C_MASTER))
283312
#define MODEM_ETM_CLOCK_DEPS (BIT(MODEM_CLOCK_ETM))
284313
#define MODEM_ADC_COMMON_FE_CLOCK_DEPS (BIT(MODEM_CLOCK_MODEM_ADC_COMMON_FE))
314+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
315+
#define PHY_CALIBRATION_CLOCK_DEPS (BIT(MODEM_CLOCK_WIFI_APB) | BIT(MODEM_CLOCK_WIFI_BB_44M))
316+
#endif
285317

286318
static IRAM_ATTR uint32_t modem_clock_get_module_deps(periph_module_t module)
287319
{
@@ -299,6 +331,9 @@ static IRAM_ATTR uint32_t modem_clock_get_module_deps(periph_module_t module)
299331
#if SOC_BT_SUPPORTED
300332
case PERIPH_BT_MODULE: deps = BLE_CLOCK_DEPS; break;
301333
#endif
334+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
335+
case PERIPH_PHY_CALIBRATION_MODULE: deps = PHY_CALIBRATION_CLOCK_DEPS; break;
336+
#endif
302337
#if SOC_IEEE802154_SUPPORTED
303338
case PERIPH_IEEE802154_MODULE: deps = IEEE802154_CLOCK_DEPS; break;
304339
#endif

components/esp_phy/src/phy_init.c

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@
4949
#include "esp_private/sleep_modem.h"
5050
#endif
5151
#include "hal/efuse_hal.h"
52+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
53+
#include "esp_private/esp_modem_clock.h"
54+
#include "soc/periph_defs.h"
55+
#endif
5256

5357
#if CONFIG_IDF_TARGET_ESP32
5458
extern wifi_mac_time_update_cb_t s_wifi_mac_time_update_cb;
@@ -268,6 +272,22 @@ IRAM_ATTR void esp_phy_common_clock_disable(void)
268272
wifi_bt_common_module_disable();
269273
}
270274

275+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
276+
IRAM_ATTR void esp_phy_calibration_clock_enable(esp_phy_modem_t modem)
277+
{
278+
if (modem == PHY_MODEM_BT || modem == PHY_MODEM_IEEE802154) {
279+
modem_clock_module_enable(PERIPH_PHY_CALIBRATION_MODULE);
280+
}
281+
}
282+
283+
IRAM_ATTR void esp_phy_calibration_clock_disable(esp_phy_modem_t modem)
284+
{
285+
if (modem == PHY_MODEM_BT || modem == PHY_MODEM_IEEE802154) {
286+
modem_clock_module_disable(PERIPH_PHY_CALIBRATION_MODULE);
287+
}
288+
}
289+
#endif
290+
271291
#if SOC_PM_MODEM_RETENTION_BY_BACKUPDMA
272292
static inline void phy_digital_regs_store(void)
273293
{
@@ -296,6 +316,9 @@ void esp_phy_enable(esp_phy_modem_t modem)
296316
phy_update_wifi_mac_time(false, s_phy_rf_en_ts);
297317
#endif
298318
esp_phy_common_clock_enable();
319+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
320+
esp_phy_calibration_clock_enable(modem);
321+
#endif
299322
if (s_is_phy_calibrated == false) {
300323
esp_phy_load_cal_and_init();
301324
s_is_phy_calibrated = true;
@@ -337,7 +360,9 @@ void esp_phy_enable(esp_phy_modem_t modem)
337360
phy_ant_update();
338361
phy_ant_clr_update_flag();
339362
}
340-
363+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
364+
esp_phy_calibration_clock_disable(modem);
365+
#endif
341366
}
342367
phy_set_modem_flag(modem);
343368
#if !CONFIG_IDF_TARGET_ESP32 && !CONFIG_ESP_PHY_DISABLE_PLL_TRACK

components/hal/esp32c5/include/hal/modem_syscon_ll.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -327,12 +327,23 @@ static inline void modem_syscon_ll_clk_conf1_configure(modem_syscon_dev_t *hw, b
327327
__attribute__((always_inline))
328328
static inline void modem_syscon_ll_clk_wifibb_configure(modem_syscon_dev_t *hw, bool en)
329329
{
330+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
331+
/* Configure
332+
clk_wifibb_22m / clk_wifibb_40m / clk_wifibb_80m
333+
clk_wifibb_40x / clk_wifibb_80x / clk_wifibb_40x1 / clk_wifibb_80x1
334+
clk_wifibb_160x1
335+
336+
clk_wifibb_44m is configured in modem_syscon_ll_enable_wifibb_44m_clock
337+
*/
338+
modem_syscon_ll_clk_conf1_configure(hw, en, 0x1fb);
339+
#else
330340
/* Configure
331341
clk_wifibb_22m / clk_wifibb_40m / clk_wifibb_44m / clk_wifibb_80m
332342
clk_wifibb_40x / clk_wifibb_80x / clk_wifibb_40x1 / clk_wifibb_80x1
333343
clk_wifibb_160x1
334344
*/
335345
modem_syscon_ll_clk_conf1_configure(hw, en, 0x1ff);
346+
#endif
336347
}
337348

338349
__attribute__((always_inline))

components/hal/esp32c61/include/hal/modem_syscon_ll.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -327,12 +327,23 @@ static inline void modem_syscon_ll_clk_conf1_configure(modem_syscon_dev_t *hw, b
327327
__attribute__((always_inline))
328328
static inline void modem_syscon_ll_clk_wifibb_configure(modem_syscon_dev_t *hw, bool en)
329329
{
330+
#if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
331+
/* Configure
332+
clk_wifibb_22m / clk_wifibb_40m / clk_wifibb_80m
333+
clk_wifibb_40x / clk_wifibb_80x / clk_wifibb_40x1 / clk_wifibb_80x1
334+
clk_wifibb_160x1
335+
336+
clk_wifibb_44m is configured in modem_syscon_ll_enable_wifibb_44m_clock
337+
*/
338+
modem_syscon_ll_clk_conf1_configure(hw, en, 0x1fb);
339+
#else
330340
/* Configure
331341
clk_wifibb_22m / clk_wifibb_40m / clk_wifibb_44m / clk_wifibb_80m
332342
clk_wifibb_40x / clk_wifibb_80x / clk_wifibb_40x1 / clk_wifibb_80x1
333343
clk_wifibb_160x1
334344
*/
335345
modem_syscon_ll_clk_conf1_configure(hw, en, 0x1ff);
346+
#endif
336347
}
337348

338349
__attribute__((always_inline))

components/soc/esp32c5/include/soc/Kconfig.soc_caps.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1859,6 +1859,10 @@ config SOC_BLE_CTE_SUPPORTED
18591859
bool
18601860
default y
18611861

1862+
config SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
1863+
bool
1864+
default y
1865+
18621866
config SOC_LP_CORE_SINGLE_INTERRUPT_VECTOR
18631867
bool
18641868
default y

components/soc/esp32c5/include/soc/periph_defs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,13 @@ typedef enum {
7373
PERIPH_ANA_I2C_MASTER_MODULE,
7474
PERIPH_MODEM_ETM_MODULE,
7575
PERIPH_MODEM_ADC_COMMON_FE_MODULE,
76+
PERIPH_PHY_CALIBRATION_MODULE,
7677
PERIPH_MODULE_MAX
7778
/* !!! Don't append soc modules here !!! */
7879
} periph_module_t;
7980

8081
#define PERIPH_MODEM_MODULE_MIN PERIPH_WIFI_MODULE
81-
#define PERIPH_MODEM_MODULE_MAX PERIPH_MODEM_ADC_COMMON_FE_MODULE
82+
#define PERIPH_MODEM_MODULE_MAX PERIPH_PHY_CALIBRATION_MODULE
8283
#define PERIPH_MODEM_MODULE_NUM (PERIPH_MODEM_MODULE_MAX - PERIPH_MODEM_MODULE_MIN + 1)
8384
#define IS_MODEM_MODULE(periph) ((periph>=PERIPH_MODEM_MODULE_MIN) && (periph<=PERIPH_MODEM_MODULE_MAX))
8485

components/soc/esp32c5/include/soc/soc_caps.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,7 @@
717717

718718
/*------------------------------------- PHY CAPS -------------------------------------*/
719719
// #define SOC_PHY_COMBO_MODULE (1) /*!< Support Wi-Fi, BLE and 15.4*/
720+
#define SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT (1)
720721

721722
/*------------------------------------- ULP CAPS -------------------------------------*/
722723
#define SOC_LP_CORE_SINGLE_INTERRUPT_VECTOR (1) /*!< LP Core interrupts all map to a single entry in vector table */

components/soc/esp32c61/include/soc/Kconfig.soc_caps.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,3 +1346,7 @@ config SOC_BLE_CTE_SUPPORTED
13461346
config SOC_PHY_COMBO_MODULE
13471347
bool
13481348
default y
1349+
1350+
config SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT
1351+
bool
1352+
default y

components/soc/esp32c61/include/soc/periph_defs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,13 @@ typedef enum {
4242
PERIPH_ANA_I2C_MASTER_MODULE,
4343
PERIPH_MODEM_ETM_MODULE,
4444
PERIPH_MODEM_ADC_COMMON_FE_MODULE,
45+
PERIPH_PHY_CALIBRATION_MODULE,
4546
PERIPH_MODULE_MAX
4647
/* !!! Don't append soc modules here !!! */
4748
} periph_module_t;
4849

4950
#define PERIPH_MODEM_MODULE_MIN PERIPH_WIFI_MODULE
50-
#define PERIPH_MODEM_MODULE_MAX PERIPH_MODEM_ADC_COMMON_FE_MODULE
51+
#define PERIPH_MODEM_MODULE_MAX PERIPH_PHY_CALIBRATION_MODULE
5152
#define PERIPH_MODEM_MODULE_NUM (PERIPH_MODEM_MODULE_MAX - PERIPH_MODEM_MODULE_MIN + 1)
5253
#define IS_MODEM_MODULE(periph) ((periph>=PERIPH_MODEM_MODULE_MIN) && (periph<=PERIPH_MODEM_MODULE_MAX))
5354

0 commit comments

Comments
 (0)