diff --git a/components/esp_driver_gpio/Kconfig b/components/esp_driver_gpio/Kconfig index 36d2b13794..597b8833a6 100644 --- a/components/esp_driver_gpio/Kconfig +++ b/components/esp_driver_gpio/Kconfig @@ -1,13 +1,4 @@ menu "ESP-Driver:GPIO Configurations" - config GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL - bool "Support light sleep GPIO pullup/pulldown configuration for ESP32" - depends on IDF_TARGET_ESP32 - help - This option is intended to fix the bug that ESP32 is not able to switch to configured - pullup/pulldown mode in sleep. - If this option is selected, chip will automatically emulate the behaviour of switching, - and about 450B of source codes would be placed into IRAM. - config GPIO_CTRL_FUNC_IN_IRAM bool "Place GPIO control functions into IRAM" default n diff --git a/components/esp_driver_gpio/include/esp_private/gpio.h b/components/esp_driver_gpio/include/esp_private/gpio.h index 473991c753..daecb207a8 100644 --- a/components/esp_driver_gpio/include/esp_private/gpio.h +++ b/components/esp_driver_gpio/include/esp_private/gpio.h @@ -6,7 +6,6 @@ #pragma once -#include "sdkconfig.h" #include "esp_types.h" #include "soc/soc_caps.h" #include "soc/io_mux_reg.h" @@ -16,30 +15,6 @@ extern "C" { #endif -#if CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL -/** - * @brief Emulate ESP32S2 behaviour to backup FUN_PU, FUN_PD information - * - * @note Need to be called before sleep. - * - * @return - * - ESP_OK Success - * - ESP_ERR_INVALID_ARG GPIO number error - */ -esp_err_t gpio_sleep_pupd_config_apply(gpio_num_t gpio_num); - -/** - * @brief Emulate ESP32S2 behaviour to restore FUN_PU, FUN_PD information - * - * @note Need to be called after sleep. - * - * @return - * - ESP_OK Success - * - ESP_ERR_INVALID_ARG GPIO number error - */ -esp_err_t gpio_sleep_pupd_config_unapply(gpio_num_t gpio_num); -#endif - /** * @brief Configure a pin to perform GPIO function or an IOMUX function * diff --git a/components/esp_driver_gpio/src/gpio.c b/components/esp_driver_gpio/src/gpio.c index 677297aa97..b951025b3f 100644 --- a/components/esp_driver_gpio/src/gpio.c +++ b/components/esp_driver_gpio/src/gpio.c @@ -1011,22 +1011,6 @@ esp_err_t gpio_sleep_sel_dis(gpio_num_t gpio_num) return ESP_OK; } -#if CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL -esp_err_t gpio_sleep_pupd_config_apply(gpio_num_t gpio_num) -{ - GPIO_CHECK(GPIO_IS_VALID_GPIO(gpio_num), "GPIO number error", ESP_ERR_INVALID_ARG); - gpio_hal_sleep_pupd_config_apply(gpio_context.gpio_hal, gpio_num); - return ESP_OK; -} - -esp_err_t gpio_sleep_pupd_config_unapply(gpio_num_t gpio_num) -{ - GPIO_CHECK(GPIO_IS_VALID_GPIO(gpio_num), "GPIO number error", ESP_ERR_INVALID_ARG); - gpio_hal_sleep_pupd_config_unapply(gpio_context.gpio_hal, gpio_num); - return ESP_OK; -} -#endif // CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL - #if SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP && SOC_DEEP_SLEEP_SUPPORTED esp_err_t gpio_deep_sleep_wakeup_enable(gpio_num_t gpio_num, gpio_int_type_t intr_type) { diff --git a/components/esp_hw_support/include/esp_private/sleep_gpio.h b/components/esp_hw_support/include/esp_private/sleep_gpio.h index 4d2101ed6b..0278aba6a0 100644 --- a/components/esp_hw_support/include/esp_private/sleep_gpio.h +++ b/components/esp_hw_support/include/esp_private/sleep_gpio.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -18,8 +18,7 @@ extern "C" { * This file contains declarations of GPIO related functions in sleep modes. */ -#if CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL - +#if CONFIG_IDF_TARGET_ESP32 /** * @brief Save GPIO pull-up and pull-down configuration information in the wake-up state * @@ -29,7 +28,7 @@ extern "C" { * of all GPIO pull-up and pull-down resistors and disable the pull-up and * pull-down resistors of GPIO before the system enters sleep. */ -void gpio_sleep_mode_config_apply(void); +void esp_sleep_gpio_pupd_config_workaround_apply(void); /** * @brief Restore GPIO pull-up and pull-down configuration information in the wake-up state @@ -37,9 +36,9 @@ void gpio_sleep_mode_config_apply(void); * In light sleep mode, after the system wakes up, it needs to restore all GPIO * pull-up and pull-down configurations before the last sleep. */ -void gpio_sleep_mode_config_unapply(void); +void esp_sleep_gpio_pupd_config_workaround_unapply(void); -#endif // CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL +#endif // CONFIG_IDF_TARGET_ESP32 /** * @brief Call once in startup to disable the wakeup IO pins and release their holding state after waking up from Deep-sleep diff --git a/components/esp_hw_support/sleep_gpio.c b/components/esp_hw_support/sleep_gpio.c index 14685ed0e1..c0bf8d5d57 100644 --- a/components/esp_hw_support/sleep_gpio.c +++ b/components/esp_hw_support/sleep_gpio.c @@ -34,21 +34,64 @@ static const char *TAG = "sleep_gpio"; -#if CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL -void gpio_sleep_mode_config_apply(void) +#if CONFIG_IDF_TARGET_ESP32 +/* On ESP32, for IOs with RTC functionality, setting SLP_PU, SLP_PD couldn't change IO status + * from FUN_PU, FUN_PD to SLP_PU, SLP_PD at sleep. + */ +typedef struct gpio_slp_mode_cfg { + volatile uint32_t fun_pu; + volatile uint32_t fun_pd; +} gpio_slp_mode_cfg_t; + +static DRAM_ATTR gpio_slp_mode_cfg_t gpio_cfg = {}; + +void esp_sleep_gpio_pupd_config_workaround_apply(void) { + /* Record fun_pu and fun_pd state in bitmap */ for (gpio_num_t gpio_num = GPIO_NUM_0; gpio_num < GPIO_NUM_MAX; gpio_num++) { - if (GPIO_IS_VALID_GPIO(gpio_num)) { - gpio_sleep_pupd_config_apply(gpio_num); + int rtcio_num = rtc_io_num_map[gpio_num]; + if (rtcio_num >= 0 && gpio_ll_sleep_sel_is_enabled(&GPIO, gpio_num)) { + if (rtcio_ll_is_pullup_enabled(rtcio_num)) { + gpio_cfg.fun_pu |= BIT(rtcio_num); + } else { + gpio_cfg.fun_pu &= ~BIT(rtcio_num); + } + if (rtcio_ll_is_pulldown_enabled(rtcio_num)) { + gpio_cfg.fun_pd |= BIT(rtcio_num); + } else { + gpio_cfg.fun_pd &= ~BIT(rtcio_num); + } + + if (gpio_ll_sleep_pullup_is_enabled(&GPIO, gpio_num)) { + rtcio_ll_pullup_enable(rtcio_num); + } else { + rtcio_ll_pullup_disable(rtcio_num); + } + if (gpio_ll_sleep_pulldown_is_enabled(&GPIO, gpio_num)) { + rtcio_ll_pulldown_enable(rtcio_num); + } else { + rtcio_ll_pulldown_disable(rtcio_num); + } } } } -IRAM_ATTR void gpio_sleep_mode_config_unapply(void) +void esp_sleep_gpio_pupd_config_workaround_unapply(void) { + /* Restore fun_pu and fun_pd state from bitmap */ for (gpio_num_t gpio_num = GPIO_NUM_0; gpio_num < GPIO_NUM_MAX; gpio_num++) { - if (GPIO_IS_VALID_GPIO(gpio_num)) { - gpio_sleep_pupd_config_unapply(gpio_num); + int rtcio_num = rtc_io_num_map[gpio_num]; + if (rtcio_num >= 0 && gpio_ll_sleep_sel_is_enabled(&GPIO, gpio_num)) { + if (gpio_cfg.fun_pu & BIT(rtcio_num)) { + rtcio_ll_pullup_enable(rtcio_num); + } else { + rtcio_ll_pullup_disable(rtcio_num); + } + if (gpio_cfg.fun_pd & BIT(rtcio_num)) { + rtcio_ll_pulldown_enable(rtcio_num); + } else { + rtcio_ll_pulldown_disable(rtcio_num); + } } } } diff --git a/components/esp_hw_support/sleep_modes.c b/components/esp_hw_support/sleep_modes.c index 471f172874..5f39c56aa8 100644 --- a/components/esp_hw_support/sleep_modes.c +++ b/components/esp_hw_support/sleep_modes.c @@ -733,8 +733,8 @@ static SLEEP_FN_ATTR void misc_modules_sleep_prepare(uint32_t sleep_flags, bool # endif mac_bb_power_down_cb_execute(); #endif -#if CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL - gpio_sleep_mode_config_apply(); +#if CONFIG_IDF_TARGET_ESP32 + esp_sleep_gpio_pupd_config_workaround_apply(); #endif #if CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP && SOC_PM_CPU_RETENTION_BY_RTCCNTL sleep_enable_cpu_retention(); @@ -801,8 +801,8 @@ static SLEEP_FN_ATTR void misc_modules_wake_prepare(uint32_t sleep_flags) #if CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP && SOC_PM_CPU_RETENTION_BY_RTCCNTL sleep_disable_cpu_retention(); #endif -#if CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL - gpio_sleep_mode_config_unapply(); +#if CONFIG_IDF_TARGET_ESP32 + esp_sleep_gpio_pupd_config_workaround_unapply(); #endif #if CONFIG_MAC_BB_PD mac_bb_power_up_cb_execute(); diff --git a/components/esp_pm/Kconfig b/components/esp_pm/Kconfig index 012bca0a22..0c7591b799 100644 --- a/components/esp_pm/Kconfig +++ b/components/esp_pm/Kconfig @@ -86,8 +86,6 @@ menu "Power Management" you can call 'gpio_sleep_sel_dis' to disable this feature on those pins. You can also keep this feature on and call 'gpio_sleep_set_direction' and 'gpio_sleep_set_pull_mode' to have a different GPIO configuration at sleep. - Warning: If you want to enable this option on ESP32, you should enable `GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL` - at first, otherwise you will not be able to switch pullup/pulldown mode. config PM_SLP_DEFAULT_PARAMS_OPT bool diff --git a/components/esp_pm/linker.lf b/components/esp_pm/linker.lf index 95a192d0c6..71984c2ab6 100644 --- a/components/esp_pm/linker.lf +++ b/components/esp_pm/linker.lf @@ -23,8 +23,9 @@ entries: if ESP_PHY_MAC_BB_PD = y: sleep_modem:mac_bb_power_down_cb_execute (noflash) sleep_modem:mac_bb_power_up_cb_execute (noflash) - if GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL = y: - sleep_gpio:gpio_sleep_mode_config_apply (noflash) + if IDF_TARGET_ESP32 = y: + sleep_gpio:esp_sleep_gpio_pupd_config_workaround_apply (noflash) + sleep_gpio:esp_sleep_gpio_pupd_config_workaround_unapply (noflash) if SOC_PM_SUPPORT_TOP_PD = y: sleep_clock:clock_domain_pd_allowed (noflash) sleep_system_peripheral:peripheral_domain_pd_allowed (noflash) @@ -80,24 +81,9 @@ entries: esp_time_impl:esp_time_impl_get_boot_time (noflash) esp_time_impl:esp_set_time_from_rtc (noflash) -[mapping:driver_pm] -archive: libesp_driver_gpio.a -entries: - if GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL = y: - gpio:gpio_sleep_pupd_config_unapply (noflash) - if PM_SLP_IRAM_OPT = y: - gpio:gpio_sleep_pupd_config_apply (noflash) - [mapping:hal_pm] archive: libhal.a entries: - if GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL = y: - if PM_SLP_IRAM_OPT = y: - gpio_hal_workaround (noflash) - else: - gpio_hal_workaround:gpio_hal_sleep_pupd_config_unapply (noflash) - gpio_hal_workaround:gpio_hal_sleep_mode_setup_wrapper (noflash) - gpio_hal_workaround:gpio_hal_fun_pupd_restore (noflash) if SOC_PM_CPU_RETENTION_BY_RTCCNTL = y: if PM_SLP_IRAM_OPT = y && PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP = y: rtc_cntl_hal:rtc_cntl_hal_enable_cpu_retention (noflash) diff --git a/components/hal/CMakeLists.txt b/components/hal/CMakeLists.txt index 02a5bab4ba..6b31fca5ad 100644 --- a/components/hal/CMakeLists.txt +++ b/components/hal/CMakeLists.txt @@ -325,11 +325,6 @@ elseif(NOT BOOTLOADER_BUILD) list(APPEND srcs "touch_sens_hal.c") endif() - if(${target} STREQUAL "esp32") - list(APPEND srcs - "esp32/gpio_hal_workaround.c") - endif() - if(${target} STREQUAL "esp32s2") list(APPEND srcs "xt_wdt_hal.c" diff --git a/components/hal/esp32/gpio_hal_workaround.c b/components/hal/esp32/gpio_hal_workaround.c deleted file mode 100644 index b56189d16c..0000000000 --- a/components/hal/esp32/gpio_hal_workaround.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -// The HAL layer for GPIO (common part) -// -#include "esp_attr.h" -#include "soc/soc.h" -#include "hal/gpio_hal.h" -#include "soc/soc_caps.h" - -#if CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL -typedef struct gpio_slp_mode_cfg { - volatile uint16_t fun_pu[((SOC_GPIO_PIN_COUNT-1) >> 4) + 1]; - volatile uint16_t fun_pd[((SOC_GPIO_PIN_COUNT-1) >> 4) + 1]; -} gpio_slp_mode_cfg_t; - -static void gpio_hal_sleep_mode_setup_wrapper( - gpio_hal_context_t *hal, - uint32_t gpio_num, - void (*opt)(gpio_hal_context_t *, uint32_t, void *) - ) -{ - static DRAM_ATTR gpio_slp_mode_cfg_t gpio_cfg; - if (opt) { - (*opt)(hal, gpio_num, (void *)&gpio_cfg); - } -} - -/** - * @brief GPIO pu/pd information backup function - * @param hal gpio hal - * @param gpio_num gpio num - * @param args pointer for bitmap to backup GPIO pu/pd information - */ -static void gpio_hal_fun_pupd_backup(gpio_hal_context_t *hal, uint32_t gpio_num, void *args) -{ - /* On ESP32, setting SLP_PU, SLP_PD couldn`t change GPIO status - * from FUN_PU, FUN_PD to SLP_PU, SLP_PD at sleep. - * On the ESP32S2, it does. - * The following code emulates ESP32S2`s behavior: - */ - gpio_slp_mode_cfg_t *pcfg = (gpio_slp_mode_cfg_t *)args; - - if (gpio_ll_sleep_sel_is_enabled(hal->dev, gpio_num)) { - /* Record fun_pu and fun_pd state in bitmap */ - if (gpio_ll_pullup_is_enabled(hal->dev, gpio_num)) { - pcfg->fun_pu[gpio_num >> 4] |= BIT(gpio_num & 0xf); - } else { - pcfg->fun_pu[gpio_num >> 4] &= ~BIT(gpio_num & 0xf); - } - if (gpio_ll_pulldown_is_enabled(hal->dev, gpio_num)) { - pcfg->fun_pd[gpio_num >> 4] |= BIT(gpio_num & 0xf); - } else { - pcfg->fun_pd[gpio_num >> 4] &= ~BIT(gpio_num & 0xf); - } - - if (gpio_ll_sleep_pullup_is_enabled(hal->dev, gpio_num)) { - gpio_ll_pullup_en(hal->dev, gpio_num); - } else { - gpio_ll_pullup_dis(hal->dev, gpio_num); - } - if (gpio_ll_sleep_pulldown_is_enabled(hal->dev, gpio_num)) { - gpio_ll_pulldown_en(hal->dev, gpio_num); - } else { - gpio_ll_pulldown_dis(hal->dev, gpio_num); - } - } -} - -/** - * @brief GPIO pu/pd information backup function - * @param hal gpio hal - * @param gpio_num gpio num - * @param args pointer for bitmap to restore GPIO pu/pd information - */ -static void gpio_hal_fun_pupd_restore(gpio_hal_context_t *hal, uint32_t gpio_num, void *args) -{ - /* On ESP32, setting SLP_PU, SLP_PD couldn`t change GPIO status - * from SLP_PU, SLP_PD to FUN_PU, FUN_PD when it wakes up. - * On the ESP32S2, it does. - * The following code emulates ESP32S2`s behavior: - */ - gpio_slp_mode_cfg_t *pcfg = (gpio_slp_mode_cfg_t *)args; - - if (gpio_ll_sleep_sel_is_enabled(hal->dev, gpio_num)) { - if (pcfg->fun_pu[gpio_num >> 4] & BIT(gpio_num & 0xf)) { - gpio_ll_pullup_en(hal->dev, gpio_num); - } else { - gpio_ll_pullup_dis(hal->dev, gpio_num); - } - if (pcfg->fun_pd[gpio_num >> 4] & BIT(gpio_num & 0xf)) { - gpio_ll_pulldown_en(hal->dev, gpio_num); - } else { - gpio_ll_pulldown_dis(hal->dev, gpio_num); - } - } -} - -void gpio_hal_sleep_pupd_config_apply(gpio_hal_context_t *hal, uint32_t gpio_num) -{ - gpio_hal_sleep_mode_setup_wrapper(hal, gpio_num, gpio_hal_fun_pupd_backup); -} - -void gpio_hal_sleep_pupd_config_unapply(gpio_hal_context_t *hal, uint32_t gpio_num) -{ - gpio_hal_sleep_mode_setup_wrapper(hal, gpio_num, gpio_hal_fun_pupd_restore); -} -#endif diff --git a/components/hal/esp32/include/hal/gpio_ll.h b/components/hal/esp32/include/hal/gpio_ll.h index 0e3da444d9..d10a4c9b8c 100644 --- a/components/hal/esp32/include/hal/gpio_ll.h +++ b/components/hal/esp32/include/hal/gpio_ll.h @@ -173,7 +173,7 @@ static inline void gpio_ll_sleep_sel_dis(gpio_dev_t *hw, uint32_t gpio_num) __attribute__((always_inline)) static inline bool gpio_ll_sleep_sel_is_enabled(gpio_dev_t *hw, uint32_t gpio_num) { - return REG_GET_BIT(GPIO_PIN_MUX_REG[gpio_num], SLP_SEL) ? true : false; + return REG_GET_BIT(DR_REG_IO_MUX_BASE + GPIO_PIN_MUX_REG_OFFSET[gpio_num], SLP_SEL) ? true : false; } /** @@ -210,7 +210,7 @@ static inline void gpio_ll_sleep_pullup_en(gpio_dev_t *hw, uint32_t gpio_num) __attribute__((always_inline)) static inline bool gpio_ll_sleep_pullup_is_enabled(gpio_dev_t *hw, uint32_t gpio_num) { - return REG_GET_BIT(GPIO_PIN_MUX_REG[gpio_num], SLP_PU) ? true : false; + return REG_GET_BIT(DR_REG_IO_MUX_BASE + GPIO_PIN_MUX_REG_OFFSET[gpio_num], SLP_PU) ? true : false; } /** @@ -247,7 +247,7 @@ static inline void gpio_ll_sleep_pulldown_dis(gpio_dev_t *hw, uint32_t gpio_num) __attribute__((always_inline)) static inline bool gpio_ll_sleep_pulldown_is_enabled(gpio_dev_t *hw, uint32_t gpio_num) { - return REG_GET_BIT(GPIO_PIN_MUX_REG[gpio_num], SLP_PD) ? true : false; + return REG_GET_BIT(DR_REG_IO_MUX_BASE + GPIO_PIN_MUX_REG_OFFSET[gpio_num], SLP_PD) ? true : false; } /** diff --git a/components/hal/esp32/include/hal/rtc_io_ll.h b/components/hal/esp32/include/hal/rtc_io_ll.h index 3c8a21ed19..7b0fef6b1c 100644 --- a/components/hal/esp32/include/hal/rtc_io_ll.h +++ b/components/hal/esp32/include/hal/rtc_io_ll.h @@ -168,10 +168,11 @@ static inline void rtcio_ll_output_mode_set(int rtcio_num, rtcio_ll_out_mode_t m } /** - * RTC GPIO pullup enable. + * @brief RTC GPIO pullup enable. * * @param rtcio_num The index of rtcio. 0 ~ MAX(rtcio). */ +__attribute__((always_inline)) static inline void rtcio_ll_pullup_enable(int rtcio_num) { if (rtc_io_desc[rtcio_num].pullup) { @@ -180,10 +181,11 @@ static inline void rtcio_ll_pullup_enable(int rtcio_num) } /** - * RTC GPIO pullup disable. + * @brief RTC GPIO pullup disable. * * @param rtcio_num The index of rtcio. 0 ~ MAX(rtcio). */ +__attribute__((always_inline)) static inline void rtcio_ll_pullup_disable(int rtcio_num) { if (rtc_io_desc[rtcio_num].pullup) { @@ -197,6 +199,7 @@ static inline void rtcio_ll_pullup_disable(int rtcio_num) * @param rtcio_num The index of rtcio. 0 ~ MAX(rtcio). * @return Whether the pullup of the pad is enabled or not. */ +__attribute__((always_inline)) static inline bool rtcio_ll_is_pullup_enabled(int rtcio_num) { if (rtc_io_desc[rtcio_num].pullup) { @@ -207,10 +210,11 @@ static inline bool rtcio_ll_is_pullup_enabled(int rtcio_num) } /** - * RTC GPIO pulldown enable. + * @brief RTC GPIO pulldown enable. * * @param rtcio_num The index of rtcio. 0 ~ MAX(rtcio). */ +__attribute__((always_inline)) static inline void rtcio_ll_pulldown_enable(int rtcio_num) { if (rtc_io_desc[rtcio_num].pulldown) { @@ -219,10 +223,11 @@ static inline void rtcio_ll_pulldown_enable(int rtcio_num) } /** - * RTC GPIO pulldown disable. + * @brief RTC GPIO pulldown disable. * * @param rtcio_num The index of rtcio. 0 ~ MAX(rtcio). */ +__attribute__((always_inline)) static inline void rtcio_ll_pulldown_disable(int rtcio_num) { if (rtc_io_desc[rtcio_num].pulldown) { @@ -236,6 +241,7 @@ static inline void rtcio_ll_pulldown_disable(int rtcio_num) * @param rtcio_num The index of rtcio. 0 ~ MAX(rtcio). * @return Whether the pulldown of the pad is enabled or not. */ +__attribute__((always_inline)) static inline bool rtcio_ll_is_pulldown_enabled(int rtcio_num) { if (rtc_io_desc[rtcio_num].pulldown) { diff --git a/components/hal/include/hal/gpio_hal.h b/components/hal/include/hal/gpio_hal.h index 2d6eb171b7..e3adeb4326 100644 --- a/components/hal/include/hal/gpio_hal.h +++ b/components/hal/include/hal/gpio_hal.h @@ -497,24 +497,6 @@ void gpio_hal_matrix_out(gpio_hal_context_t *hal, uint32_t gpio_num, uint32_t si */ #define gpio_hal_sleep_output_enable(hal, gpio_num) gpio_ll_sleep_output_enable((hal)->dev, gpio_num) -#if CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL -/** - * @brief Apply slp_pu/slp_pd configuration to fun_pu/fun_pd when system sleep. - * - * @param hal Context of the HAL layer - * @param gpio_num GPIO number. - */ -void gpio_hal_sleep_pupd_config_apply(gpio_hal_context_t *hal, uint32_t gpio_num); - -/** - * @brief Restore fun_pu/fun_pd configuration when system wakeup. - * - * @param hal Context of the HAL layer - * @param gpio_num GPIO number. - */ -void gpio_hal_sleep_pupd_config_unapply(gpio_hal_context_t *hal, uint32_t gpio_num); -#endif // CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL - #if SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP && (SOC_RTCIO_PIN_COUNT == 0) && SOC_DEEP_SLEEP_SUPPORTED /** * @brief Enable GPIO deep-sleep wake-up function. diff --git a/components/soc/esp32/rtc_io_periph.c b/components/soc/esp32/rtc_io_periph.c index 899dabda75..73e7651af9 100644 --- a/components/soc/esp32/rtc_io_periph.c +++ b/components/soc/esp32/rtc_io_periph.c @@ -6,8 +6,9 @@ #include "soc/rtc_periph.h" #include "soc/rtc_io_reg.h" +#include "esp_attr.h" -const int rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { +const int8_t DRAM_ATTR rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { RTCIO_GPIO0_CHANNEL, //GPIO0 -1,//GPIO1 RTCIO_GPIO2_CHANNEL, //GPIO2 diff --git a/components/soc/esp32c5/rtc_io_periph.c b/components/soc/esp32c5/rtc_io_periph.c index 7a9cd8d407..c680c6a34d 100644 --- a/components/soc/esp32c5/rtc_io_periph.c +++ b/components/soc/esp32c5/rtc_io_periph.c @@ -6,7 +6,7 @@ #include "soc/rtc_io_periph.h" -const int rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { +const int8_t rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { RTCIO_GPIO0_CHANNEL, //GPIO0 RTCIO_GPIO1_CHANNEL, //GPIO1 RTCIO_GPIO2_CHANNEL, //GPIO2 diff --git a/components/soc/esp32c6/rtc_io_periph.c b/components/soc/esp32c6/rtc_io_periph.c index a55e1f5303..bb0ac718f8 100644 --- a/components/soc/esp32c6/rtc_io_periph.c +++ b/components/soc/esp32c6/rtc_io_periph.c @@ -6,7 +6,7 @@ #include "soc/rtc_io_periph.h" -const int rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { +const int8_t rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { RTCIO_GPIO0_CHANNEL, //GPIO0 RTCIO_GPIO1_CHANNEL, //GPIO1 RTCIO_GPIO2_CHANNEL, //GPIO2 diff --git a/components/soc/esp32c61/rtc_io_periph.c b/components/soc/esp32c61/rtc_io_periph.c index 3f94474184..00068fc48c 100644 --- a/components/soc/esp32c61/rtc_io_periph.c +++ b/components/soc/esp32c61/rtc_io_periph.c @@ -6,7 +6,7 @@ #include "soc/rtc_io_periph.h" -const int rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { +const int8_t rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { RTCIO_GPIO0_CHANNEL, //GPIO0 RTCIO_GPIO1_CHANNEL, //GPIO1 RTCIO_GPIO2_CHANNEL, //GPIO2 diff --git a/components/soc/esp32h2/rtc_io_periph.c b/components/soc/esp32h2/rtc_io_periph.c index c0085da2fd..58184cc585 100644 --- a/components/soc/esp32h2/rtc_io_periph.c +++ b/components/soc/esp32h2/rtc_io_periph.c @@ -5,7 +5,7 @@ */ #include "soc/rtc_io_periph.h" -const int rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { +const int8_t rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { -1,//GPIO0 -1,//GPIO1 -1,//GPIO2 diff --git a/components/soc/esp32h21/rtc_io_periph.c b/components/soc/esp32h21/rtc_io_periph.c index edb07c52a0..10cb7c83c6 100644 --- a/components/soc/esp32h21/rtc_io_periph.c +++ b/components/soc/esp32h21/rtc_io_periph.c @@ -6,7 +6,7 @@ #include "soc/rtc_io_periph.h" -const int rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { +const int8_t rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { -1,//GPIO0 -1,//GPIO1 -1,//GPIO2 diff --git a/components/soc/esp32h4/rtc_io_periph.c b/components/soc/esp32h4/rtc_io_periph.c index 23353c97fd..2eb045373f 100644 --- a/components/soc/esp32h4/rtc_io_periph.c +++ b/components/soc/esp32h4/rtc_io_periph.c @@ -6,7 +6,7 @@ #include "soc/rtc_io_periph.h" -const int rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { +const int8_t rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { RTCIO_GPIO0_CHANNEL, //GPIO0 RTCIO_GPIO1_CHANNEL, //GPIO1 RTCIO_GPIO2_CHANNEL, //GPIO2 diff --git a/components/soc/esp32p4/rtc_io_periph.c b/components/soc/esp32p4/rtc_io_periph.c index 41285055e4..db6827ea57 100644 --- a/components/soc/esp32p4/rtc_io_periph.c +++ b/components/soc/esp32p4/rtc_io_periph.c @@ -6,7 +6,7 @@ #include "soc/rtc_periph.h" -const int rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { +const int8_t rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { RTCIO_GPIO0_CHANNEL, //GPIO0 RTCIO_GPIO1_CHANNEL, //GPIO1 RTCIO_GPIO2_CHANNEL, //GPIO2 diff --git a/components/soc/esp32s2/rtc_io_periph.c b/components/soc/esp32s2/rtc_io_periph.c index e19d22a691..6980852b65 100644 --- a/components/soc/esp32s2/rtc_io_periph.c +++ b/components/soc/esp32s2/rtc_io_periph.c @@ -7,7 +7,7 @@ #include "soc/rtc_periph.h" #include "soc/rtc_io_reg.h" -const int rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { +const int8_t rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { RTCIO_GPIO0_CHANNEL, //GPIO0 RTCIO_GPIO1_CHANNEL, //GPIO1 RTCIO_GPIO2_CHANNEL, //GPIO2 diff --git a/components/soc/esp32s3/rtc_io_periph.c b/components/soc/esp32s3/rtc_io_periph.c index cf2484a911..7523759f1f 100644 --- a/components/soc/esp32s3/rtc_io_periph.c +++ b/components/soc/esp32s3/rtc_io_periph.c @@ -7,7 +7,7 @@ #include "soc/rtc_periph.h" #include "soc/rtc_io_reg.h" -const int rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { +const int8_t rtc_io_num_map[SOC_GPIO_PIN_COUNT] = { RTCIO_GPIO0_CHANNEL, //GPIO0 RTCIO_GPIO1_CHANNEL, //GPIO1 RTCIO_GPIO2_CHANNEL, //GPIO2 diff --git a/components/soc/include/soc/rtc_io_periph.h b/components/soc/include/soc/rtc_io_periph.h index 37a8d6696c..49ddd10ffc 100644 --- a/components/soc/include/soc/rtc_io_periph.h +++ b/components/soc/include/soc/rtc_io_periph.h @@ -63,7 +63,7 @@ extern const rtc_io_desc_t rtc_io_desc[SOC_RTCIO_PIN_COUNT]; * This is an internal function of the driver, and is not usually useful * for external use. */ -extern const int rtc_io_num_map[SOC_GPIO_PIN_COUNT]; +extern const int8_t rtc_io_num_map[SOC_GPIO_PIN_COUNT]; #endif //SOC_RTCIO_PIN_COUNT > 0 #ifdef __cplusplus diff --git a/examples/wifi/itwt/sdkconfig.defaults b/examples/wifi/itwt/sdkconfig.defaults index bb37a95544..dfa88a1367 100644 --- a/examples/wifi/itwt/sdkconfig.defaults +++ b/examples/wifi/itwt/sdkconfig.defaults @@ -8,12 +8,10 @@ CONFIG_FREERTOS_USE_TICKLESS_IDLE=y CONFIG_PM_SLP_IRAM_OPT=y CONFIG_PM_RTOS_IDLE_OPT=y # Disable all GPIO at light sleep -CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL=y CONFIG_PM_SLP_DISABLE_GPIO=y # Enable wifi sleep iram optimization CONFIG_ESP_WIFI_SLP_IRAM_OPT=y -CONFIG_ESP_GRATUITOUS_ARP=n CONFIG_LWIP_ESP_GRATUITOUS_ARP=n CONFIG_FREERTOS_HZ=1000 diff --git a/examples/wifi/power_save/sdkconfig.defaults b/examples/wifi/power_save/sdkconfig.defaults index cb1a0a7317..7ee327c44d 100644 --- a/examples/wifi/power_save/sdkconfig.defaults +++ b/examples/wifi/power_save/sdkconfig.defaults @@ -8,7 +8,6 @@ CONFIG_FREERTOS_USE_TICKLESS_IDLE=y CONFIG_PM_SLP_IRAM_OPT=y CONFIG_PM_RTOS_IDLE_OPT=y # Disable all GPIO at light sleep -CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL=y CONFIG_PM_SLP_DISABLE_GPIO=y # Enable wifi sleep iram optimization CONFIG_ESP_WIFI_SLP_IRAM_OPT=y diff --git a/tools/ci/sg_rules/no_kconfig_in_hal_component.yml b/tools/ci/sg_rules/no_kconfig_in_hal_component.yml index c5f3181bdc..53d17e1e4b 100644 --- a/tools/ci/sg_rules/no_kconfig_in_hal_component.yml +++ b/tools/ci/sg_rules/no_kconfig_in_hal_component.yml @@ -15,10 +15,8 @@ ignores: - "components/hal/cache_hal.c" - "components/hal/mmu_hal.c" - "components/hal/twai_hal_sja1000.c" - - "components/hal/esp32/gpio_hal_workaround.c" - "components/hal/esp32/include/hal/twai_ll.h" - "components/hal/esp32/include/hal/uart_ll.h" - - "components/hal/include/hal/gpio_hal.h" - "components/hal/include/hal/twai_types_deprecated.h" rule: any: