diff --git a/components/esp_driver_gpio/test_apps/gpio/main/test_rtcio.c b/components/esp_driver_gpio/test_apps/gpio/main/test_rtcio.c index fcc12b8a97..44d93165a9 100644 --- a/components/esp_driver_gpio/test_apps/gpio/main/test_rtcio.c +++ b/components/esp_driver_gpio/test_apps/gpio/main/test_rtcio.c @@ -235,7 +235,7 @@ TEST_CASE("RTCIO_output_hold_test", "[rtcio]") #endif //SOC_RTCIO_HOLD_SUPPORTED #endif //SOC_RTCIO_INPUT_OUTPUT_SUPPORTED -#if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32P4) // TODO: IDF-7529 +#if SOC_DEEP_SLEEP_SUPPORTED // It is not necessary to test every rtcio pin, it will take too much ci testing time for deep sleep // Only tests on s_test_map[TEST_RTCIO_DEEP_SLEEP_PIN_INDEX] pin // (ESP32: IO25, ESP32S2, S3: IO6, C6: IO5, H2: IO12) these pads' default configuration is low level @@ -284,4 +284,4 @@ static void rtcio_deep_sleep_hold_test_second_stage(void) TEST_CASE_MULTIPLE_STAGES("RTCIO_deep_sleep_output_hold_test", "[rtcio]", rtcio_deep_sleep_hold_test_first_stage, rtcio_deep_sleep_hold_test_second_stage) -#endif // !TEMPORARY_DISABLED_FOR_TARGETS(ESP32P4) +#endif // SOC_DEEP_SLEEP_SUPPORTED diff --git a/components/esp_hw_support/sleep_modes.c b/components/esp_hw_support/sleep_modes.c index 17f3beb032..bfcd94ca20 100644 --- a/components/esp_hw_support/sleep_modes.c +++ b/components/esp_hw_support/sleep_modes.c @@ -10,6 +10,7 @@ #include #include "esp_attr.h" +#include "esp_rom_caps.h" #include "esp_memory_utils.h" #include "esp_sleep.h" #include "esp_private/esp_sleep_internal.h" @@ -287,7 +288,7 @@ static void touch_wakeup_prepare(void); static void gpio_deep_sleep_wakeup_prepare(void); #endif -#if SOC_RTC_FAST_MEM_SUPPORTED && !CONFIG_IDF_TARGET_ESP32P4 // TODO: IDF-7529 +#if ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB && SOC_DEEP_SLEEP_SUPPORTED #if SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY static RTC_FAST_ATTR esp_deep_sleep_wake_stub_fn_t wake_stub_fn_handler = NULL; @@ -842,28 +843,26 @@ static esp_err_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags, esp_sleep_mode_t m esp_sleep_isolate_digital_gpio(); #endif +#if ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB #if SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY -#if !CONFIG_IDF_TARGET_ESP32P4 // TODO: IDF-7529 esp_set_deep_sleep_wake_stub_default_entry(); +#elif !CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP && SOC_RTC_FAST_MEM_SUPPORTED + /* If not possible stack is in RTC FAST memory, use the ROM function to calculate the CRC and save ~140 bytes IRAM */ + set_rtc_memory_crc(); +#endif // SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY #endif + // Enter Deep Sleep +#if!ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB || SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY || !CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP #if SOC_PMU_SUPPORTED result = call_rtc_sleep_start(reject_triggers, config.power.hp_sys.dig_power.mem_dslp, deep_sleep); #else result = call_rtc_sleep_start(reject_triggers, config.lslp_mem_inf_fpu, deep_sleep); #endif -#else -#if !CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP - /* If not possible stack is in RTC FAST memory, use the ROM function to calculate the CRC and save ~140 bytes IRAM */ -#if SOC_RTC_FAST_MEM_SUPPORTED - set_rtc_memory_crc(); -#endif - result = call_rtc_sleep_start(reject_triggers, config.lslp_mem_inf_fpu, deep_sleep); #else /* Otherwise, need to call the dedicated soc function for this */ result = rtc_deep_sleep_start(s_config.wakeup_triggers, reject_triggers); #endif -#endif // SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY } else { /* Cache Suspend 1: will wait cache idle in cache suspend */ suspend_cache(); @@ -992,12 +991,12 @@ static esp_err_t IRAM_ATTR deep_sleep_start(bool allow_sleep_rejection) // record current RTC time s_config.rtc_ticks_at_sleep_start = rtc_time_get(); -#if SOC_RTC_FAST_MEM_SUPPORTED +#if ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB // Configure wake stub if (esp_get_deep_sleep_wake_stub() == NULL) { esp_set_deep_sleep_wake_stub(esp_wake_deep_sleep); } -#endif // SOC_RTC_FAST_MEM_SUPPORTED +#endif // ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB // Decide which power domains can be powered down uint32_t pd_flags = get_power_down_flags(); @@ -1014,6 +1013,9 @@ static esp_err_t IRAM_ATTR deep_sleep_start(bool allow_sleep_rejection) #if SOC_PM_SUPPORT_HP_AON_PD force_pd_flags |= PMU_SLEEP_PD_HP_AON; #endif +#if SOC_PM_SUPPORT_CNNT_PD + force_pd_flags |= PMU_SLEEP_PD_CNNT; +#endif #else uint32_t force_pd_flags = RTC_SLEEP_PD_DIG | RTC_SLEEP_PD_VDDSDIO | RTC_SLEEP_PD_INT_8M | RTC_SLEEP_PD_XTAL; #endif diff --git a/components/esp_rom/include/esp32p4/rom/rtc.h b/components/esp_rom/include/esp32p4/rom/rtc.h index 52b4f6835c..d47d202a35 100644 --- a/components/esp_rom/include/esp32p4/rom/rtc.h +++ b/components/esp_rom/include/esp32p4/rom/rtc.h @@ -195,8 +195,7 @@ static inline void rtc_suppress_rom_log(void) * you need to write to this register in the same format. * Namely, the upper 16 bits and lower should be the same. */ - // REG_SET_BIT(LP_SYS_LP_STORE4_REG, RTC_DISABLE_ROM_LOG); - abort(); + REG_SET_BIT(LP_SYSTEM_REG_LP_STORE4_REG, RTC_DISABLE_ROM_LOG); } /** diff --git a/components/esp_system/port/cpu_start.c b/components/esp_system/port/cpu_start.c index 2c2d80fe7a..edcd1e6d98 100644 --- a/components/esp_system/port/cpu_start.c +++ b/components/esp_system/port/cpu_start.c @@ -703,7 +703,7 @@ void IRAM_ATTR call_start_cpu0(void) #endif #endif -#if SOC_DEEP_SLEEP_SUPPORTED //TODO: IDF-7529, IDF-8638, IDF-9245 +#if SOC_DEEP_SLEEP_SUPPORTED //TODO: IDF-8638, IDF-9245 // Need to unhold the IOs that were hold right before entering deep sleep, which are used as wakeup pins if (rst_reas[0] == RESET_REASON_CORE_DEEP_SLEEP) { esp_deep_sleep_wakeup_io_reset(); diff --git a/components/esp_system/port/soc/esp32p4/reset_reason.c b/components/esp_system/port/soc/esp32p4/reset_reason.c index 008345d5f0..cdeff083ab 100644 --- a/components/esp_system/port/soc/esp32p4/reset_reason.c +++ b/components/esp_system/port/soc/esp32p4/reset_reason.c @@ -31,7 +31,6 @@ static esp_reset_reason_t get_reset_reason(soc_reset_reason_t rtc_reset_reason, return ESP_RST_SW; case RESET_REASON_CORE_PMU_PWR_DOWN: - /* Check when doing sleep bringup TODO IDF-7529 */ return ESP_RST_DEEPSLEEP; case RESET_REASON_CPU_MWDT: diff --git a/components/esp_system/test_apps/esp_system_unity_tests/main/test_reset_reason.c b/components/esp_system/test_apps/esp_system_unity_tests/main/test_reset_reason.c index 68eb591372..1a1275c87b 100644 --- a/components/esp_system/test_apps/esp_system_unity_tests/main/test_reset_reason.c +++ b/components/esp_system/test_apps/esp_system_unity_tests/main/test_reset_reason.c @@ -141,8 +141,7 @@ static void setup_values(void) #endif } -#if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32P4) // TODO IDF-7529 - +#if SOC_DEEP_SLEEP_SUPPORTED static void do_deep_sleep(void) { setup_values(); @@ -169,7 +168,7 @@ TEST_CASE_MULTIPLE_STAGES("reset reason ESP_RST_DEEPSLEEP", "[reset_reason][rese do_deep_sleep, check_reset_reason_deep_sleep); -#endif //!TEMPORARY_DISABLED_FOR_TARGETS(...) +#endif // SOC_DEEP_SLEEP_SUPPORTED static void do_exception(void) { diff --git a/components/esp_system/test_apps/esp_system_unity_tests/main/test_sleep.c b/components/esp_system/test_apps/esp_system_unity_tests/main/test_sleep.c index c5f925c418..99c02b1a9c 100644 --- a/components/esp_system/test_apps/esp_system_unity_tests/main/test_sleep.c +++ b/components/esp_system/test_apps/esp_system_unity_tests/main/test_sleep.c @@ -31,8 +31,7 @@ #include "nvs_flash.h" #include "nvs.h" -#if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32P4) // TODO IDF-7529 - +#if SOC_DEEP_SLEEP_SUPPORTED #if SOC_PMU_SUPPORTED #include "esp_private/esp_pmu.h" #else @@ -288,7 +287,7 @@ TEST_CASE_MULTIPLE_STAGES("enter deep sleep after abort", "[deepsleep][reset=abo check_abort_reset_and_sleep, check_sleep_reset); -#if SOC_RTC_FAST_MEM_SUPPORTED +#if SOC_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB static RTC_DATA_ATTR uint32_t s_wake_stub_var; static RTC_IRAM_ATTR void wake_stub(void) @@ -317,7 +316,6 @@ static void check_wake_stub(void) TEST_CASE_MULTIPLE_STAGES("can set sleep wake stub", "[deepsleep][reset=DEEPSLEEP_RESET]", prepare_wake_stub, check_wake_stub); -#endif // SOC_RTC_FAST_MEM_SUPPORTED #if CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP @@ -382,6 +380,7 @@ TEST_CASE_MULTIPLE_STAGES("can set sleep wake stub from stack in RTC RAM", "[dee check_wake_stub); #endif // CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP +#endif // SOC_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB #if SOC_RTCIO_INPUT_OUTPUT_SUPPORTED @@ -404,7 +403,7 @@ __attribute__((unused)) static uint32_t get_cause(void) return wakeup_cause; } -#if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32S2, ESP32S3, ESP32C6, ESP32H2) +#if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32S2, ESP32S3) && SOC_PM_SUPPORT_EXT0_WAKEUP // Fails on S2 IDF-2903 // This test case verifies deactivation of trigger for wake up sources @@ -575,4 +574,4 @@ static void check_time_deepsleep(void) TEST_CASE_MULTIPLE_STAGES("check a time after wakeup from deep sleep", "[deepsleep][reset=DEEPSLEEP_RESET]", trigger_deepsleep, check_time_deepsleep); -#endif //!TEMPORARY_DISABLED_FOR_TARGETS(ESP32P4) +#endif // SOC_DEEP_SLEEP_SUPPORTED diff --git a/examples/system/deep_sleep/pytest_deep_sleep.py b/examples/system/deep_sleep/pytest_deep_sleep.py index 83536fc452..883dd2f89b 100644 --- a/examples/system/deep_sleep/pytest_deep_sleep.py +++ b/examples/system/deep_sleep/pytest_deep_sleep.py @@ -1,6 +1,5 @@ # SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 - import logging import time @@ -21,6 +20,7 @@ CONFIGS = [ pytest.mark.esp32c3, pytest.mark.esp32c6, pytest.mark.esp32h2, + pytest.mark.esp32p4, pytest.mark.esp32c2, ], ),