diff --git a/components/bt/controller/lib_esp32h4/esp32h4-bt-lib b/components/bt/controller/lib_esp32h4/esp32h4-bt-lib index c863bbae756..139b2ffa0c6 160000 --- a/components/bt/controller/lib_esp32h4/esp32h4-bt-lib +++ b/components/bt/controller/lib_esp32h4/esp32h4-bt-lib @@ -1 +1 @@ -Subproject commit c863bbae75649d5f679aecbf75d9ef336a5ab6d7 +Subproject commit 139b2ffa0c6ea29faef6bc8f3b2cc6d13e1291fb diff --git a/components/bt/controller/lib_esp32s31/esp32s31-bt-lib b/components/bt/controller/lib_esp32s31/esp32s31-bt-lib index a44320af00a..e03d132448d 160000 --- a/components/bt/controller/lib_esp32s31/esp32s31-bt-lib +++ b/components/bt/controller/lib_esp32s31/esp32s31-bt-lib @@ -1 +1 @@ -Subproject commit a44320af00a6311e5796173391e96c5c5df98eae +Subproject commit e03d132448d5affcb6ba8c5378c458519c8161f9 diff --git a/components/bt/porting_btdm/controller/btdm_common/src/btdm_lp.c b/components/bt/porting_btdm/controller/btdm_common/src/btdm_lp.c index a8b7171fc2a..51cb9efa3cd 100644 --- a/components/bt/porting_btdm/controller/btdm_common/src/btdm_lp.c +++ b/components/bt/porting_btdm/controller/btdm_common/src/btdm_lp.c @@ -325,7 +325,7 @@ btdm_lp_init(void) if (rc != ESP_OK) { return -2; } - // rc = esp_pm_register_skip_light_sleep_callback(r_btdm_sleep_should_skip_light_sleep_check); + rc = esp_pm_register_skip_light_sleep_callback(r_btdm_sleep_should_skip_light_sleep_check); if (rc != ESP_OK) { return -3; } @@ -340,7 +340,7 @@ void btdm_lp_deinit(void) { #if UC_BT_CTRL_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE - // esp_pm_unregister_skip_light_sleep_callback(r_btdm_sleep_should_skip_light_sleep_check); + esp_pm_unregister_skip_light_sleep_callback(r_btdm_sleep_should_skip_light_sleep_check); esp_pm_unregister_inform_out_light_sleep_overhead_callback(r_btdm_sleep_wake_up_overhead_set); esp_sleep_disable_bt_wakeup(); btdm_lp_modem_state_deinit(); diff --git a/components/esp_hw_support/include/esp_private/sleep_clock.h b/components/esp_hw_support/include/esp_private/sleep_clock.h index 884947f8b82..60b5a715027 100644 --- a/components/esp_hw_support/include/esp_private/sleep_clock.h +++ b/components/esp_hw_support/include/esp_private/sleep_clock.h @@ -51,7 +51,7 @@ bool clock_domain_pd_allowed(void); */ esp_err_t sleep_clock_system_retention_init(void *arg); -#if CONFIG_MAC_BB_PD || CONFIG_BT_LE_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE +#if CONFIG_MAC_BB_PD || CONFIG_BT_LE_SLEEP_ENABLE || CONFIG_BT_CTRL_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE || SOC_PM_MODEM_CLK_CONF_RETENTION /** * @brief Modem system clock retention initialize. * diff --git a/components/esp_hw_support/lowpower/port/esp32h4/sleep_clock.c b/components/esp_hw_support/lowpower/port/esp32h4/sleep_clock.c index 3a12d4fd122..4570fd9df9f 100644 --- a/components/esp_hw_support/lowpower/port/esp32h4/sleep_clock.c +++ b/components/esp_hw_support/lowpower/port/esp32h4/sleep_clock.c @@ -33,7 +33,7 @@ esp_err_t sleep_clock_system_retention_init(void *arg) #undef N_REGS_PCR } -#if CONFIG_MAC_BB_PD || CONFIG_BT_LE_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE || SOC_PM_MODEM_CLK_CONF_RETENTION +#if CONFIG_MAC_BB_PD || CONFIG_BT_CTRL_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE || SOC_PM_MODEM_CLK_CONF_RETENTION esp_err_t sleep_clock_modem_retention_init(void *arg) { #define N_REGS_SYSCON() (((MODEM_SYSCON_MEM_RF2_CONF_REG - MODEM_SYSCON_TEST_CONF_REG) / 4) + 1) @@ -120,7 +120,7 @@ ESP_SYSTEM_INIT_FN(sleep_clock_startup_init, SECONDARY, BIT(0), 106) }; sleep_retention_module_init(SLEEP_RETENTION_MODULE_CLOCK_SYSTEM, &init_param); -#if CONFIG_MAC_BB_PD || CONFIG_BT_LE_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE || SOC_PM_MODEM_CLK_CONF_RETENTION +#if CONFIG_MAC_BB_PD || CONFIG_BT_CTRL_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE || SOC_PM_MODEM_CLK_CONF_RETENTION init_param = (sleep_retention_module_init_param_t) { .cbs = { .create = { .handle = sleep_clock_modem_retention_init, .arg = NULL } }, #if !SOC_PM_MODEM_CLK_CONF_RETENTION diff --git a/components/esp_hw_support/lowpower/port/esp32s31/sleep_clock.c b/components/esp_hw_support/lowpower/port/esp32s31/sleep_clock.c index e5f8db29723..8449f7dbc41 100644 --- a/components/esp_hw_support/lowpower/port/esp32s31/sleep_clock.c +++ b/components/esp_hw_support/lowpower/port/esp32s31/sleep_clock.c @@ -43,7 +43,7 @@ esp_err_t sleep_clock_system_retention_init(void *arg) #undef N_REGS_PCR } -#if CONFIG_MAC_BB_PD || CONFIG_BTDM_CTRL_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE +#if CONFIG_MAC_BB_PD || CONFIG_BT_CTRL_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE #include "rom/ets_sys.h" esp_err_t sleep_clock_modem_retention_init(void *arg) { @@ -96,7 +96,7 @@ bool clock_domain_pd_allowed(void) mask.bitmap[SLEEP_RETENTION_MODULE_CLOCK_SYSTEM >> 5] |= BIT(SLEEP_RETENTION_MODULE_CLOCK_SYSTEM % 32); } - #if SOC_WIFI_SUPPORTED || SOC_BT_SUPPORTED || SOC_IEEE802154_SUPPORTED +#if SOC_WIFI_SUPPORTED || SOC_BT_SUPPORTED || SOC_IEEE802154_SUPPORTED const sleep_retention_module_bitmap_t modem_modules = sleep_retention_module_bitmap_and(inited_modules, modem_clk_dep_modules); if (!sleep_retention_module_bitmap_eq(modem_modules, null_module)) { mask.bitmap[SLEEP_RETENTION_MODULE_CLOCK_MODEM >> 5] |= BIT(SLEEP_RETENTION_MODULE_CLOCK_MODEM % 32); @@ -116,7 +116,7 @@ ESP_SYSTEM_INIT_FN(sleep_clock_startup_init, SECONDARY, BIT(0), 106) }; sleep_retention_module_init(SLEEP_RETENTION_MODULE_CLOCK_SYSTEM, &init_param); -#if CONFIG_MAC_BB_PD || CONFIG_BTDM_CTRL_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE +#if CONFIG_MAC_BB_PD || CONFIG_BT_CTRL_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE init_param = (sleep_retention_module_init_param_t) { .cbs = { .create = { .handle = sleep_clock_modem_retention_init, .arg = NULL } }, .attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE diff --git a/components/soc/esp32h4/include/soc/Kconfig.soc_caps.in b/components/soc/esp32h4/include/soc/Kconfig.soc_caps.in index d689ed86fb9..c9433082dce 100644 --- a/components/soc/esp32h4/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32h4/include/soc/Kconfig.soc_caps.in @@ -1055,6 +1055,10 @@ config SOC_PHY_DIG_REGS_MEM_SIZE int default 21 +config SOC_PM_SUPPORT_BT_WAKEUP + bool + default y + config SOC_PM_SUPPORT_EXT1_WAKEUP bool default y diff --git a/components/soc/esp32h4/include/soc/soc_caps.h b/components/soc/esp32h4/include/soc/soc_caps.h index 62c28c4bd7c..770b3fc969d 100644 --- a/components/soc/esp32h4/include/soc/soc_caps.h +++ b/components/soc/esp32h4/include/soc/soc_caps.h @@ -468,7 +468,7 @@ // TODO: IDF-12286 (inherit from verify code, need check) /*-------------------------- Power Management CAPS ----------------------------*/ -// #define SOC_PM_SUPPORT_BT_WAKEUP (1) +#define SOC_PM_SUPPORT_BT_WAKEUP (1) #define SOC_PM_SUPPORT_EXT1_WAKEUP (1) #define SOC_PM_SUPPORT_EXT1_WAKEUP_MODE_PER_PIN (1) /*!addr.val, sizeof(disc->addr.val)) != 0) { return 0; } diff --git a/examples/bluetooth/nimble/blecent/main/main.c b/examples/bluetooth/nimble/blecent/main/main.c index 4c2437808cc..0e4cb7066c0 100644 --- a/examples/bluetooth/nimble/blecent/main/main.c +++ b/examples/bluetooth/nimble/blecent/main/main.c @@ -31,32 +31,6 @@ #include "host/ble_esp_gattc_cache.h" #endif -#if CONFIG_EXAMPLE_USE_CI_ADDRESS -#ifdef CONFIG_IDF_TARGET_ESP32 -#define TEST_CI_ADDRESS_CHIP_OFFSET (0) -#elif CONFIG_IDF_TARGET_ESP32C2 -#define TEST_CI_ADDRESS_CHIP_OFFSET (1) -#elif CONFIG_IDF_TARGET_ESP32C3 -#define TEST_CI_ADDRESS_CHIP_OFFSET (2) -#elif CONFIG_IDF_TARGET_ESP32C6 -#define TEST_CI_ADDRESS_CHIP_OFFSET (3) -#elif CONFIG_IDF_TARGET_ESP32C5 -#define TEST_CI_ADDRESS_CHIP_OFFSET (4) -#elif CONFIG_IDF_TARGET_ESP32H2 -#define TEST_CI_ADDRESS_CHIP_OFFSET (5) -#elif CONFIG_IDF_TARGET_ESP32P4 -#define TEST_CI_ADDRESS_CHIP_OFFSET (6) -#elif CONFIG_IDF_TARGET_ESP32S3 -#define TEST_CI_ADDRESS_CHIP_OFFSET (7) -#elif CONFIG_IDF_TARGET_ESP32C61 -#define TEST_CI_ADDRESS_CHIP_OFFSET (8) -#elif CONFIG_IDF_TARGET_ESP32H4 -#define TEST_CI_ADDRESS_CHIP_OFFSET (9) -#elif CONFIG_IDF_TARGET_ESP32S31 -#define TEST_CI_ADDRESS_CHIP_OFFSET (10) -#endif -#endif - #if MYNEWT_VAL(BLE_GATTC) /*** The UUID of the service containing the subscribable characteristic ***/ static const ble_uuid_t * remote_svc_uuid = @@ -533,7 +507,7 @@ ext_blecent_should_connect(const struct ble_gap_ext_disc_desc *disc) addr_offset = (uint32_t *)&test_addr[1]; *addr_offset = atoi(CONFIG_EXAMPLE_PEER_ADDR); test_addr[5] = 0xC3; - test_addr[0] = TEST_CI_ADDRESS_CHIP_OFFSET; + test_addr[0] = CONFIG_IDF_FIRMWARE_CHIP_ID; #endif if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) { return 0; @@ -610,7 +584,7 @@ blecent_should_connect(const struct ble_gap_disc_desc *disc) addr_offset = (uint32_t *)&test_addr[1]; *addr_offset = atoi(CONFIG_EXAMPLE_PEER_ADDR); test_addr[5] = 0xC3; - test_addr[0] = TEST_CI_ADDRESS_CHIP_OFFSET; + test_addr[0] = CONFIG_IDF_FIRMWARE_CHIP_ID; #endif if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) { diff --git a/examples/bluetooth/nimble/power_save/README.md b/examples/bluetooth/nimble/power_save/README.md index 7f1ea435c5f..acb9f49e19d 100644 --- a/examples/bluetooth/nimble/power_save/README.md +++ b/examples/bluetooth/nimble/power_save/README.md @@ -26,6 +26,10 @@ This example contains some build configurations. For each configuration, a few c - `sdkconfig.48m.esp32c5`: ESP32C5 uses main XTAL as low power clock in light sleep enabled. - `sdkconfig.defaults.esp32c61`: ESP32C61 uses 32kHz XTAL as low power clock in light sleep enabled. - `sdkconfig.40m.esp32c61`: ESP32C61 uses main XTAL as low power clock in light sleep enabled. +- `sdkconfig.defaults.esp32s31`: ESP32S31 uses 32kHz XTAL as low power clock in light sleep enabled. +- `sdkconfig.40m.esp32s31`: ESP32S31 uses main XTAL as low power clock in light sleep enabled. +- `sdkconfig.defaults.esp32h4`: ESP32H4 uses 32kHz XTAL as low power clock in light sleep enabled. +- `sdkconfig.32m.esp32h4`: ESP32H4 uses main XTAL as low power clock in light sleep enabled. ## How to use example diff --git a/examples/bluetooth/nimble/power_save/main/Kconfig.projbuild b/examples/bluetooth/nimble/power_save/main/Kconfig.projbuild index 1ce82a20a12..733f7c2804a 100644 --- a/examples/bluetooth/nimble/power_save/main/Kconfig.projbuild +++ b/examples/bluetooth/nimble/power_save/main/Kconfig.projbuild @@ -2,10 +2,12 @@ menu "Example Configuration" choice EXAMPLE_MAX_CPU_FREQ prompt "Maximum CPU frequency" - default EXAMPLE_MAX_CPU_FREQ_160 if !IDF_TARGET_ESP32H2 && !IDF_TARGET_ESP32C2 && !IDF_TARGET_ESP32C5 - default EXAMPLE_MAX_CPU_FREQ_96 if IDF_TARGET_ESP32H2 + default EXAMPLE_MAX_CPU_FREQ_160 if !IDF_TARGET_ESP32H2 && !IDF_TARGET_ESP32C2 && \ + !IDF_TARGET_ESP32C5 && !IDF_TARGET_ESP32H4 && !IDF_TARGET_ESP32S31 + default EXAMPLE_MAX_CPU_FREQ_96 if IDF_TARGET_ESP32H2 || IDF_TARGET_ESP32H4 default EXAMPLE_MAX_CPU_FREQ_120 if IDF_TARGET_ESP32C2 default EXAMPLE_MAX_CPU_FREQ_240 if IDF_TARGET_ESP32C5 + default EXAMPLE_MAX_CPU_FREQ_320 if IDF_TARGET_ESP32S31 depends on PM_ENABLE help Maximum CPU frequency to use for dynamic frequency scaling. @@ -14,7 +16,7 @@ menu "Example Configuration" bool "80 MHz" config EXAMPLE_MAX_CPU_FREQ_96 bool "96 MHz" - depends on IDF_TARGET_ESP32H2 + depends on IDF_TARGET_ESP32H2 || IDF_TARGET_ESP32H4 config EXAMPLE_MAX_CPU_FREQ_160 bool "160 MHz" config EXAMPLE_MAX_CPU_FREQ_120 @@ -23,6 +25,9 @@ menu "Example Configuration" config EXAMPLE_MAX_CPU_FREQ_240 bool "240 MHz" depends on IDF_TARGET_ESP32 || IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32C5 + config EXAMPLE_MAX_CPU_FREQ_320 + bool "320 MHz" + depends on IDF_TARGET_ESP32S31 endchoice config EXAMPLE_MAX_CPU_FREQ_MHZ @@ -32,12 +37,14 @@ menu "Example Configuration" default 120 if EXAMPLE_MAX_CPU_FREQ_120 default 160 if EXAMPLE_MAX_CPU_FREQ_160 default 240 if EXAMPLE_MAX_CPU_FREQ_240 + default 320 if EXAMPLE_MAX_CPU_FREQ_320 choice EXAMPLE_MIN_CPU_FREQ prompt "Minimum CPU frequency" - default EXAMPLE_MIN_CPU_FREQ_40M if !IDF_TARGET_ESP32H2 && !IDF_TARGET_ESP32C2 && !IDF_TARGET_ESP32C5 + default EXAMPLE_MIN_CPU_FREQ_40M if !IDF_TARGET_ESP32H2 && !IDF_TARGET_ESP32C2 && \ + !IDF_TARGET_ESP32C5 && !IDF_TARGET_ESP32H4 default EXAMPLE_MIN_CPU_FREQ_48M if IDF_TARGET_ESP32C5 - default EXAMPLE_MIN_CPU_FREQ_32M if IDF_TARGET_ESP32H2 + default EXAMPLE_MIN_CPU_FREQ_32M if IDF_TARGET_ESP32H2 || IDF_TARGET_ESP32H4 default EXAMPLE_MIN_CPU_FREQ_26M if IDF_TARGET_ESP32C2 depends on PM_ENABLE help @@ -61,7 +68,7 @@ menu "Example Configuration" depends on XTAL_FREQ_40 || XTAL_FREQ_AUTO config EXAMPLE_MIN_CPU_FREQ_32M bool "32 MHz (use with 32MHz XTAL)" - depends on IDF_TARGET_ESP32H2 + depends on IDF_TARGET_ESP32H2 || IDF_TARGET_ESP32H4 depends on XTAL_FREQ_32 || XTAL_FREQ_AUTO config EXAMPLE_MIN_CPU_FREQ_26M bool "26 MHz (use with 26MHz XTAL)" diff --git a/examples/bluetooth/nimble/power_save/main/main.c b/examples/bluetooth/nimble/power_save/main/main.c index e71beeaded4..1c9b2dd6a62 100644 --- a/examples/bluetooth/nimble/power_save/main/main.c +++ b/examples/bluetooth/nimble/power_save/main/main.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -17,32 +17,6 @@ #include "services/gap/ble_svc_gap.h" #include "bleprph.h" -#if CONFIG_EXAMPLE_USE_CI_ADDRESS -#ifdef CONFIG_IDF_TARGET_ESP32 -#define TEST_CI_ADDRESS_CHIP_OFFSET (0) -#elif CONFIG_IDF_TARGET_ESP32C2 -#define TEST_CI_ADDRESS_CHIP_OFFSET (1) -#elif CONFIG_IDF_TARGET_ESP32C3 -#define TEST_CI_ADDRESS_CHIP_OFFSET (2) -#elif CONFIG_IDF_TARGET_ESP32C6 -#define TEST_CI_ADDRESS_CHIP_OFFSET (3) -#elif CONFIG_IDF_TARGET_ESP32C5 -#define TEST_CI_ADDRESS_CHIP_OFFSET (4) -#elif CONFIG_IDF_TARGET_ESP32H2 -#define TEST_CI_ADDRESS_CHIP_OFFSET (5) -#elif CONFIG_IDF_TARGET_ESP32P4 -#define TEST_CI_ADDRESS_CHIP_OFFSET (6) -#elif CONFIG_IDF_TARGET_ESP32S3 -#define TEST_CI_ADDRESS_CHIP_OFFSET (7) -#elif CONFIG_IDF_TARGET_ESP32C61 -#define TEST_CI_ADDRESS_CHIP_OFFSET (8) -#elif CONFIG_IDF_TARGET_ESP32H4 -#define TEST_CI_ADDRESS_CHIP_OFFSET (9) -#elif CONFIG_IDF_TARGET_ESP32S31 -#define TEST_CI_ADDRESS_CHIP_OFFSET (10) -#endif -#endif - #if CONFIG_EXAMPLE_EXTENDED_ADV static uint8_t ext_adv_pattern_1[] = { 0x02, BLE_HS_ADV_TYPE_FLAGS, 0x06, @@ -535,7 +509,7 @@ bleprph_on_sync(void) uint32_t *offset = (uint32_t *)&addr[1]; *offset = atoi(CONFIG_EXAMPLE_CI_ADDRESS_OFFSET); addr[5] = 0xC3; - addr[0] = TEST_CI_ADDRESS_CHIP_OFFSET; + addr[0] = CONFIG_IDF_FIRMWARE_CHIP_ID; rc = ble_hs_id_set_rnd(addr); assert(rc == 0); } diff --git a/examples/bluetooth/nimble/power_save/sdkconfig.32m.esp32h4 b/examples/bluetooth/nimble/power_save/sdkconfig.32m.esp32h4 new file mode 100644 index 00000000000..2b80206b234 --- /dev/null +++ b/examples/bluetooth/nimble/power_save/sdkconfig.32m.esp32h4 @@ -0,0 +1,23 @@ +CONFIG_IDF_TARGET="esp32h4" + +# Bluetooth Low Power Config +CONFIG_BT_CTRL_SLEEP_ENABLE=y +CONFIG_BT_LE_LP_CLK_SRC_MAIN_XTAL=y + +# +# Power Management +# +CONFIG_PM_ENABLE=y +CONFIG_PM_DFS_INIT_AUTO=y +CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y +# end of Power Management + +CONFIG_FREERTOS_USE_TICKLESS_IDLE=y +CONFIG_ESP_MODEM_CLOCK_ENABLE_CHECKING=y + +# +# Sleep Config +# +CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y +CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y +# end of Sleep Config diff --git a/examples/bluetooth/nimble/power_save/sdkconfig.40m.esp32s31 b/examples/bluetooth/nimble/power_save/sdkconfig.40m.esp32s31 new file mode 100644 index 00000000000..04ec97e7476 --- /dev/null +++ b/examples/bluetooth/nimble/power_save/sdkconfig.40m.esp32s31 @@ -0,0 +1,23 @@ +CONFIG_IDF_TARGET="esp32s31" + +# Bluetooth Low Power Config +CONFIG_BT_CTRL_SLEEP_ENABLE=y +CONFIG_BT_LE_LP_CLK_SRC_MAIN_XTAL=y + +# +# Power Management +# +CONFIG_PM_ENABLE=y +CONFIG_PM_DFS_INIT_AUTO=y +CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y +# end of Power Management + +CONFIG_FREERTOS_USE_TICKLESS_IDLE=y +CONFIG_ESP_MODEM_CLOCK_ENABLE_CHECKING=y + +# +# Sleep Config +# +CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y +CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y +# end of Sleep Config diff --git a/examples/bluetooth/nimble/power_save/sdkconfig.defaults.esp32h4 b/examples/bluetooth/nimble/power_save/sdkconfig.defaults.esp32h4 new file mode 100644 index 00000000000..9ae22dda16e --- /dev/null +++ b/examples/bluetooth/nimble/power_save/sdkconfig.defaults.esp32h4 @@ -0,0 +1,29 @@ +CONFIG_IDF_TARGET="esp32h4" + +# Bluetooth Low Power Config +CONFIG_BT_CTRL_SLEEP_ENABLE=y +CONFIG_BT_LE_LP_CLK_SRC_DEFAULT=y + +# +# Power Management +# +CONFIG_PM_ENABLE=y +CONFIG_PM_DFS_INIT_AUTO=y +CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y +CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y +# end of Power Management + +CONFIG_ESP_MODEM_CLOCK_ENABLE_CHECKING=y + +# +# Sleep Config +# +CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y +CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y +# end of Sleep Config + +# +# RTC Clock Config +# +CONFIG_RTC_CLK_SRC_EXT_CRYS=y +# end of RTC Clock Config diff --git a/examples/bluetooth/nimble/power_save/sdkconfig.defaults.esp32s31 b/examples/bluetooth/nimble/power_save/sdkconfig.defaults.esp32s31 new file mode 100644 index 00000000000..f177cb44ca6 --- /dev/null +++ b/examples/bluetooth/nimble/power_save/sdkconfig.defaults.esp32s31 @@ -0,0 +1,30 @@ +CONFIG_IDF_TARGET="esp32s31" + +# Bluetooth Low Power Config +CONFIG_BT_CTRL_SLEEP_ENABLE=y +CONFIG_BT_LE_LP_CLK_SRC_DEFAULT=y + +# +# Power Management +# +CONFIG_PM_ENABLE=y +CONFIG_PM_DFS_INIT_AUTO=y +CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y +CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y +# end of Power Management + +CONFIG_FREERTOS_USE_TICKLESS_IDLE=y +CONFIG_ESP_MODEM_CLOCK_ENABLE_CHECKING=y + +# +# Sleep Config +# +CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y +CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y +# end of Sleep Config + +# +# RTC Clock Config +# +CONFIG_RTC_CLK_SRC_EXT_CRYS=y +# end of RTC Clock Config diff --git a/examples/bluetooth/nimble/pytest_nimble_test.py b/examples/bluetooth/nimble/pytest_nimble_test.py index 064aa858fb1..7672a98093f 100644 --- a/examples/bluetooth/nimble/pytest_nimble_test.py +++ b/examples/bluetooth/nimble/pytest_nimble_test.py @@ -27,7 +27,7 @@ CUR_DIR = Path(__file__).parent.resolve() ['esp32c6', 'esp32h2', 'esp32c3', 'esp32s3', 'esp32c5', 'esp32c61', 'esp32'], indirect=['target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='s31 light sleep not supported yet') +@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runners') def test_power_save_conn(app_path: str, dut: tuple[IdfDut, IdfDut]) -> None: peripheral = dut[0] central = dut[1]