From 01f29a93560b450fb5c015f2a53d7a2f71c4ef2d Mon Sep 17 00:00:00 2001 From: cjin Date: Mon, 6 Jul 2026 18:10:58 +0800 Subject: [PATCH] feat(modem_clock): separete btmac module to btmac and bt peripheral --- .../modem/include/modem/modem_clock_impl.h | 1 + .../modem/port/esp32h4/modem_clock_impl.c | 32 +++++++++---------- .../modem/port/esp32s31/modem_clock_impl.c | 22 ++++++++++--- 3 files changed, 34 insertions(+), 21 deletions(-) diff --git a/components/esp_hw_support/modem/include/modem/modem_clock_impl.h b/components/esp_hw_support/modem/include/modem/modem_clock_impl.h index fc8ad09901d..67f6b3ec5f6 100644 --- a/components/esp_hw_support/modem/include/modem/modem_clock_impl.h +++ b/components/esp_hw_support/modem/include/modem/modem_clock_impl.h @@ -69,6 +69,7 @@ typedef enum { MODEM_CLOCK_ETM, #if SOC_BT_SUPPORTED MODEM_CLOCK_BLE_MAC, + MODEM_CLOCK_BT_PERIPHERAL, MODEM_CLOCK_BT_APB, #endif #if SOC_BT_SUPPORTED || SOC_IEEE802154_SUPPORTED diff --git a/components/esp_hw_support/modem/port/esp32h4/modem_clock_impl.c b/components/esp_hw_support/modem/port/esp32h4/modem_clock_impl.c index a16d5928bd2..a8d9f18a8bb 100644 --- a/components/esp_hw_support/modem/port/esp32h4/modem_clock_impl.c +++ b/components/esp_hw_support/modem/port/esp32h4/modem_clock_impl.c @@ -12,7 +12,7 @@ /* Clock dependency definitions */ #define BT_APB_CLOCK_DEPS ( MODEM_CLOCKS( BT_APB, ETM ) ) -#define BLE_CLOCK_DEPS ( MODEM_CLOCKS( BLE_MAC, BT_I154_COMMON_BB, ETM, COEXIST, BT_APB ) ) +#define BLE_CLOCK_DEPS ( MODEM_CLOCKS( BLE_MAC, BT_I154_COMMON_BB, ETM, COEXIST, BT_APB, BT_PERIPHERAL ) ) #define IEEE802154_CLOCK_DEPS ( MODEM_CLOCKS( 802154_MAC, BT_I154_COMMON_BB, ETM, COEXIST, BT_APB ) ) #define COEXIST_CLOCK_DEPS ( MODEM_CLOCKS( COEXIST ) ) #define I2C_ANA_MST_CLOCK_DEPS ( MODEM_CLOCKS( I2C_MASTER ) ) @@ -49,15 +49,25 @@ uint32_t IRAM_ATTR modem_clock_get_module_deps(shared_periph_module_t module) static void IRAM_ATTR modem_clock_ble_mac_configure(modem_clock_context_t *ctx, bool enable) { modem_syscon_ll_enable_bt_mac_clock(ctx->hal->syscon_dev, enable); - modem_syscon_ll_enable_modem_sec_clock(ctx->hal->syscon_dev, enable); - modem_syscon_ll_enable_ble_timer_clock(ctx->hal->syscon_dev, enable); } #if CONFIG_ESP_MODEM_CLOCK_ENABLE_CHECKING static esp_err_t IRAM_ATTR modem_clock_ble_mac_check_enable(modem_clock_context_t *ctx) +{ + return modem_syscon_ll_bt_mac_clock_is_enabled(ctx->hal->syscon_dev) ? ESP_OK : ESP_FAIL; +} +#endif + +static void IRAM_ATTR modem_clock_bt_peripheral_configure(modem_clock_context_t *ctx, bool enable) +{ + modem_syscon_ll_enable_modem_sec_clock(ctx->hal->syscon_dev, enable); + modem_syscon_ll_enable_ble_timer_clock(ctx->hal->syscon_dev, enable); +} + +#if CONFIG_ESP_MODEM_CLOCK_ENABLE_CHECKING +static esp_err_t IRAM_ATTR modem_clock_bt_peripheral_check_enable(modem_clock_context_t *ctx) { bool all_clock_enabled = true; - all_clock_enabled &= modem_syscon_ll_bt_mac_clock_is_enabled(ctx->hal->syscon_dev); all_clock_enabled &= modem_syscon_ll_modem_sec_clock_is_enabled(ctx->hal->syscon_dev); all_clock_enabled &= modem_syscon_ll_ble_timer_clock_is_enabled(ctx->hal->syscon_dev); return all_clock_enabled ? ESP_OK : ESP_FAIL; @@ -80,18 +90,6 @@ static esp_err_t IRAM_ATTR modem_clock_bt_apb_check_enable(modem_clock_context_t } #endif -static void IRAM_ATTR modem_clock_ble_i154_bb_configure(modem_clock_context_t *ctx, bool enable) -{ - modem_syscon_ll_enable_bt_apb_clock(ctx->hal->syscon_dev, enable); -} - -#if CONFIG_ESP_MODEM_CLOCK_ENABLE_CHECKING -static esp_err_t IRAM_ATTR modem_clock_bt_apb_check_enable(modem_clock_context_t *ctx) -{ - return modem_syscon_ll_bt_apb_clock_is_enabled(ctx->hal->syscon_dev) ? ESP_OK : ESP_FAIL; -} -#endif - static void IRAM_ATTR modem_clock_ble_i154_bb_configure(modem_clock_context_t *ctx, bool enable) { modem_syscon_ll_enable_bt_bb_clock(ctx->hal->syscon_dev, enable); @@ -203,6 +201,7 @@ static void IRAM_ATTR modem_clock_configure_impl(modem_clock_context_t *ctx, int : (dev_id == MODEM_CLOCK_I2C_MASTER) ? modem_clock_i2c_master_configure : (dev_id == MODEM_CLOCK_ETM) ? modem_clock_etm_configure : (dev_id == MODEM_CLOCK_BLE_MAC) ? modem_clock_ble_mac_configure + : (dev_id == MODEM_CLOCK_BT_PERIPHERAL) ? modem_clock_bt_peripheral_configure : (dev_id == MODEM_CLOCK_BT_APB) ? modem_clock_bt_apb_configure : (dev_id == MODEM_CLOCK_BT_I154_COMMON_BB) ? modem_clock_ble_i154_bb_configure : (dev_id == MODEM_CLOCK_802154_MAC) ? modem_clock_ieee802154_mac_configure @@ -224,6 +223,7 @@ static esp_err_t IRAM_ATTR modem_clock_check_impl(modem_clock_context_t *ctx, in : (dev_id == MODEM_CLOCK_I2C_MASTER) ? modem_clock_i2c_master_check_enable : (dev_id == MODEM_CLOCK_ETM) ? modem_clock_etm_check_enable : (dev_id == MODEM_CLOCK_BLE_MAC) ? modem_clock_ble_mac_check_enable + : (dev_id == MODEM_CLOCK_BT_PERIPHERAL) ? modem_clock_bt_peripheral_check_enable : (dev_id == MODEM_CLOCK_BT_APB) ? modem_clock_bt_apb_check_enable : (dev_id == MODEM_CLOCK_BT_I154_COMMON_BB) ? modem_clock_ble_i154_bb_check_enable : (dev_id == MODEM_CLOCK_802154_MAC) ? modem_clock_ieee802154_mac_check_enable diff --git a/components/esp_hw_support/modem/port/esp32s31/modem_clock_impl.c b/components/esp_hw_support/modem/port/esp32s31/modem_clock_impl.c index 202f35ff4d3..6d6356f714d 100644 --- a/components/esp_hw_support/modem/port/esp32s31/modem_clock_impl.c +++ b/components/esp_hw_support/modem/port/esp32s31/modem_clock_impl.c @@ -12,8 +12,8 @@ /* Clock dependency definitions */ #define WIFI_CLOCK_DEPS ( MODEM_CLOCKS( WIFI_MAC, WIFI_APB, WIFI_BB, WIFI_BB_44M, COEXIST, WIFI_BB_80X1, SOC_PLL_SOURCE_CG ) ) -#define BLE_CLOCK_DEPS ( MODEM_CLOCKS( BLE_MAC, BT_I154_COMMON_BB, ETM, COEXIST, WIFI_BB_80X1, SOC_PLL_SOURCE_CG, BT_APB ) ) -#define BT_APB_CLOCK_DEPS ( MODEM_CLOCKS( BT_APB, ETM, WIFI_BB_80X1, SOC_PLL_SOURCE_CG ) ) +#define BLE_CLOCK_DEPS ( MODEM_CLOCKS( BLE_MAC, BT_I154_COMMON_BB, ETM, COEXIST, WIFI_BB_80X1, SOC_PLL_SOURCE_CG, BT_APB, BT_PERIPHERAL ) ) +#define BT_APB_CLOCK_DEPS ( MODEM_CLOCKS( BT_APB, ETM, SOC_PLL_SOURCE_CG, BLE_MAC ) ) #define IEEE802154_CLOCK_DEPS ( MODEM_CLOCKS( 802154_MAC, BT_I154_COMMON_BB, ETM, COEXIST, WIFI_BB_80X1, SOC_PLL_SOURCE_CG, BT_APB ) ) #define COEXIST_CLOCK_DEPS ( MODEM_CLOCKS( COEXIST, SOC_PLL_SOURCE_CG ) ) #define I2C_ANA_MST_CLOCK_DEPS ( MODEM_CLOCKS( I2C_MASTER ) ) @@ -102,15 +102,25 @@ static esp_err_t IRAM_ATTR modem_clock_wifi_bb_80x1_check_enable(modem_clock_con static void IRAM_ATTR modem_clock_ble_mac_configure(modem_clock_context_t *ctx, bool enable) { modem_syscon_ll_enable_bt_mac_clock(ctx->hal->syscon_dev, enable); - modem_syscon_ll_enable_modem_sec_clock(ctx->hal->syscon_dev, enable); - modem_syscon_ll_enable_ble_timer_clock(ctx->hal->syscon_dev, enable); } #if CONFIG_ESP_MODEM_CLOCK_ENABLE_CHECKING static esp_err_t IRAM_ATTR modem_clock_ble_mac_check_enable(modem_clock_context_t *ctx) +{ + return modem_syscon_ll_bt_mac_clock_is_enabled(ctx->hal->syscon_dev) ? ESP_OK : ESP_FAIL; +} +#endif + +static void IRAM_ATTR modem_clock_bt_peripheral_configure(modem_clock_context_t *ctx, bool enable) +{ + modem_syscon_ll_enable_modem_sec_clock(ctx->hal->syscon_dev, enable); + modem_syscon_ll_enable_ble_timer_clock(ctx->hal->syscon_dev, enable); +} + +#if CONFIG_ESP_MODEM_CLOCK_ENABLE_CHECKING +static esp_err_t IRAM_ATTR modem_clock_bt_peripheral_check_enable(modem_clock_context_t *ctx) { bool all_clock_enabled = true; - all_clock_enabled &= modem_syscon_ll_bt_mac_clock_is_enabled(ctx->hal->syscon_dev); all_clock_enabled &= modem_syscon_ll_modem_sec_clock_is_enabled(ctx->hal->syscon_dev); all_clock_enabled &= modem_syscon_ll_ble_timer_clock_is_enabled(ctx->hal->syscon_dev); return all_clock_enabled ? ESP_OK : ESP_FAIL; @@ -300,6 +310,7 @@ static void IRAM_ATTR modem_clock_configure_impl(modem_clock_context_t *ctx, int : (dev_id == MODEM_CLOCK_ETM) ? modem_clock_etm_configure #if SOC_BT_SUPPORTED : (dev_id == MODEM_CLOCK_BLE_MAC) ? modem_clock_ble_mac_configure + : (dev_id == MODEM_CLOCK_BT_PERIPHERAL) ? modem_clock_bt_peripheral_configure : (dev_id == MODEM_CLOCK_BT_APB) ? modem_clock_bt_apb_configure #endif #if SOC_BT_SUPPORTED || SOC_IEEE802154_SUPPORTED @@ -332,6 +343,7 @@ static esp_err_t IRAM_ATTR modem_clock_check_impl(modem_clock_context_t *ctx, in : (dev_id == MODEM_CLOCK_WIFI_BB_80X1) ? modem_clock_wifi_bb_80x1_check_enable : (dev_id == MODEM_CLOCK_ETM) ? modem_clock_etm_check_enable : (dev_id == MODEM_CLOCK_BLE_MAC) ? modem_clock_ble_mac_check_enable + : (dev_id == MODEM_CLOCK_BT_PERIPHERAL) ? modem_clock_bt_peripheral_check_enable : (dev_id == MODEM_CLOCK_BT_APB) ? modem_clock_bt_apb_check_enable : (dev_id == MODEM_CLOCK_BT_I154_COMMON_BB) ? modem_clock_ble_i154_bb_check_enable : (dev_id == MODEM_CLOCK_802154_MAC) ? modem_clock_ieee802154_mac_check_enable