From 170b04df01c1e05093230d4299893faa3f4f9c41 Mon Sep 17 00:00:00 2001 From: Eren Terzioglu Date: Fri, 17 Apr 2026 14:57:26 +0200 Subject: [PATCH] arch/risc-v/espressif: Fix PM wakeup sources Fix PM wakeup sources for esp32[-c6|-h2|-p4] Signed-off-by: Eren Terzioglu --- .../src/common/espressif/CMakeLists.txt | 2 +- arch/risc-v/src/common/espressif/Kconfig | 40 +++++++++++-------- arch/risc-v/src/common/espressif/Make.defs | 2 +- arch/risc-v/src/common/espressif/esp_pm.c | 7 +++- arch/risc-v/src/common/espressif/esp_ulp.mk | 2 +- 5 files changed, 32 insertions(+), 21 deletions(-) diff --git a/arch/risc-v/src/common/espressif/CMakeLists.txt b/arch/risc-v/src/common/espressif/CMakeLists.txt index 10e1415e0c9..ccb926cedb8 100644 --- a/arch/risc-v/src/common/espressif/CMakeLists.txt +++ b/arch/risc-v/src/common/espressif/CMakeLists.txt @@ -209,7 +209,7 @@ if(DEFINED ENV{ESP_HAL_3RDPARTY_VERSION}) CACHE STRING "ESP HAL 3rdparty version") else() set(ESP_HAL_3RDPARTY_VERSION - d41c921a724da2b4955832ca9d4b117b004b61c6 + 8630b6b82cb84838f86332e00f39ab72a64cf186 CACHE STRING "ESP HAL 3rdparty version") endif() diff --git a/arch/risc-v/src/common/espressif/Kconfig b/arch/risc-v/src/common/espressif/Kconfig index 22990f6eaad..7e73d90e6d1 100644 --- a/arch/risc-v/src/common/espressif/Kconfig +++ b/arch/risc-v/src/common/espressif/Kconfig @@ -944,109 +944,116 @@ menu "PM EXT1 Wakeup Sources" config PM_EXT1_WAKEUP_RTC_GPIO0 bool "RTC_GPIO0" - depends on ARCH_CHIP_ESP32C6 + depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO0 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO1 bool "RTC_GPIO1" - depends on ARCH_CHIP_ESP32C6 + depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO1 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO2 bool "RTC_GPIO2" - depends on ARCH_CHIP_ESP32C6 + depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO2 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO3 bool "RTC_GPIO3" - depends on ARCH_CHIP_ESP32C6 + depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO3 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO4 bool "RTC_GPIO4" - depends on ARCH_CHIP_ESP32C6 + depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO4 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO5 bool "RTC_GPIO5" - depends on ARCH_CHIP_ESP32C6 + depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO5 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO6 bool "RTC_GPIO6" - depends on ARCH_CHIP_ESP32C6 + depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO6 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO7 bool "RTC_GPIO7" - depends on ARCH_CHIP_ESP32C6 + depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO7 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO8 bool "RTC_GPIO8" - depends on ARCH_CHIP_ESP32H2 + depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO8 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO9 bool "RTC_GPIO9" - depends on ARCH_CHIP_ESP32H2 + depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO9 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO10 bool "RTC_GPIO10" - depends on ARCH_CHIP_ESP32H2 + depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO10 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO11 bool "RTC_GPIO11" - depends on ARCH_CHIP_ESP32H2 + depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO11 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO12 bool "RTC_GPIO12" - depends on ARCH_CHIP_ESP32H2 + depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO12 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO13 bool "RTC_GPIO13" - depends on ARCH_CHIP_ESP32H2 + depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO13 as an EXT1 wakeup source. config PM_EXT1_WAKEUP_RTC_GPIO14 bool "RTC_GPIO14" - depends on ARCH_CHIP_ESP32H2 + depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4 default n ---help--- Enable RTC GPIO14 as an EXT1 wakeup source. +config PM_EXT1_WAKEUP_RTC_GPIO15 + bool "RTC_GPIO15" + depends on ARCH_CHIP_ESP32P4 + default n + ---help--- + Enable RTC GPIO15 as an EXT1 wakeup source. + choice PM_EXT1_WAKEUP_TRIGGER_MODE prompt "PM EXT1 Wakeup Trigger Mode" default PM_EXT1_WAKEUP_TRIGGER_ANY_LOW @@ -1063,7 +1070,7 @@ endmenu # PM_EXT1_WAKEUP_SOURCES config PM_ULP_WAKEUP bool "PM ULP Wakeup" - depends on ARCH_CHIP_ESP32C6 && ESPRESSIF_USE_LP_CORE + depends on ESPRESSIF_USE_LP_CORE default n ---help--- Enable ULP coprocessor wakeup functionality. @@ -1074,7 +1081,6 @@ config PM_ULP_WAKEUP config PM_GPIO_WAKEUP bool "PM GPIO Wakeup" default n - depends on ARCH_CHIP_ESP32C3 ---help--- Enable GPIO wakeup functionality. This allows the system to wake up from PM_STANDBY diff --git a/arch/risc-v/src/common/espressif/Make.defs b/arch/risc-v/src/common/espressif/Make.defs index 0415b73b409..8e27bde0839 100644 --- a/arch/risc-v/src/common/espressif/Make.defs +++ b/arch/risc-v/src/common/espressif/Make.defs @@ -217,7 +217,7 @@ endif ESP_HAL_3RDPARTY_REPO = esp-hal-3rdparty ifndef ESP_HAL_3RDPARTY_VERSION - ESP_HAL_3RDPARTY_VERSION = d41c921a724da2b4955832ca9d4b117b004b61c6 + ESP_HAL_3RDPARTY_VERSION = 8630b6b82cb84838f86332e00f39ab72a64cf186 endif ifndef ESP_HAL_3RDPARTY_URL diff --git a/arch/risc-v/src/common/espressif/esp_pm.c b/arch/risc-v/src/common/espressif/esp_pm.c index 9ee082a8ce9..9b114b988de 100644 --- a/arch/risc-v/src/common/espressif/esp_pm.c +++ b/arch/risc-v/src/common/espressif/esp_pm.c @@ -51,6 +51,7 @@ # include "driver/gpio.h" # include "espressif/esp_gpio.h" # include "hal/gpio_types.h" +# include "soc/soc_caps.h" #endif #ifdef CONFIG_PM_UART_WAKEUP # include "driver/uart_wakeup.h" @@ -827,7 +828,8 @@ void esp_pmstandby(uint64_t time_in_us) } #endif -#ifdef CONFIG_PM_GPIO_WAKEUP +#if defined(CONFIG_PM_GPIO_WAKEUP) && \ + defined(SOC_GPIO_SUPPORT_HP_PERIPH_PD_SLEEP_WAKEUP) if (cause == ESP_SLEEP_WAKEUP_GPIO) { gpio_mask = esp_sleep_get_gpio_wakeup_status(); @@ -915,6 +917,9 @@ int esp_pmconfigure(void) esp_pm_gpio_wakeup_prepare(); #endif #ifdef CONFIG_PM_UART_WAKEUP +# ifdef SOC_UART_SUPPORT_XTAL_CLK + esp_sleep_pd_config(ESP_PD_DOMAIN_XTAL, ESP_PD_OPTION_ON); +# endif esp_pm_uart_wakeup_prepare(); #endif /* CONFIG_PM_UART_WAKEUP */ diff --git a/arch/risc-v/src/common/espressif/esp_ulp.mk b/arch/risc-v/src/common/espressif/esp_ulp.mk index 12398cb1def..26db0f2d42b 100644 --- a/arch/risc-v/src/common/espressif/esp_ulp.mk +++ b/arch/risc-v/src/common/espressif/esp_ulp.mk @@ -85,7 +85,7 @@ ULP_INCLUDES += $(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)c ULP_INCLUDES += $(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)ulp$(DELIM)lp_core$(DELIM)shared$(DELIM)include ULP_INCLUDES += $(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)upper_hal_uart$(DELIM)include ifeq ($(CONFIG_ARCH_CHIP_ESP32P4),y) - ifeq ($(CONFIG_ESP32P4_REV_MIN_300),y) + ifneq ($(CONFIG_ESP32P4_SELECTS_REV_LESS_V3),y) ULP_INCLUDES += $(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)register$(DELIM)hw_ver3 ULP_INCLUDES += $(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)register$(DELIM)soc$(DELIM) else