Explorar el Código

Merge branch 'refactor/move_periph_ctrl_hw_support' into 'master'

hw_support: move periph_ctrl from driver to hw_support

Closes IDF-4796

See merge request espressif/esp-idf!17583
morris hace 3 años
padre
commit
6f538b1c95

+ 0 - 1
components/driver/CMakeLists.txt

@@ -6,7 +6,6 @@ set(srcs
     "i2c.c"
     "ledc.c"
     "legacy_new_driver_coexist.c"
-    "periph_ctrl.c"
     "rtc_io.c"
     "rtc_module.c"
     "sdspi_crc.c"

+ 1 - 0
components/driver/Kconfig

@@ -90,6 +90,7 @@ menu "Driver configurations"
         config TWAI_ISR_IN_IRAM
             bool "Place TWAI ISR function into IRAM"
             default n
+            select PERIPH_CTRL_FUNC_IN_IRAM if TWAI_ERRATA_FIX_RX_FRAME_INVALID || TWAI_ERRATA_FIX_RX_FIFO_CORRUPT
             help
                 Place the TWAI ISR in to IRAM. This will allow the ISR to avoid
                 cache misses, and also be able to run whilst the cache is disabled

+ 0 - 4
components/driver/include/driver/gpio.h

@@ -10,11 +10,7 @@
 #include "sdkconfig.h"
 #include "esp_err.h"
 #include "esp_intr_alloc.h"
-#if !CONFIG_IDF_TARGET_LINUX
-#include "esp_attr.h"
-#include "esp_types.h"
 #include "soc/soc_caps.h"
-#endif // !CONFIG_IDF_TARGET_LINUX
 #include "hal/gpio_types.h"
 #include "esp_rom_gpio.h"
 

+ 6 - 5
components/driver/include/driver/sigmadelta.h

@@ -6,7 +6,8 @@
 
 #pragma once
 
-#include "esp_types.h"
+#include <stdint.h>
+#include "esp_err.h"
 #include "driver/gpio.h"
 #include "hal/sigmadelta_types.h"
 
@@ -18,10 +19,10 @@ extern "C" {
  * @brief Sigma-delta configure struct
  */
 typedef struct {
-    sigmadelta_channel_t channel;    /*!< Sigma-delta channel number */
-    int8_t sigmadelta_duty;          /*!< Sigma-delta duty, duty ranges from -128 to 127. */
-    uint8_t sigmadelta_prescale;     /*!< Sigma-delta prescale, prescale ranges from 0 to 255. */
-    uint8_t  sigmadelta_gpio;        /*!< Sigma-delta output io number, refer to gpio.h for more details. */
+    sigmadelta_channel_t channel; /*!< Sigma-delta channel number */
+    int8_t sigmadelta_duty;       /*!< Sigma-delta duty, duty ranges from -128 to 127. */
+    uint8_t sigmadelta_prescale;  /*!< Sigma-delta prescale, prescale ranges from 0 to 255. */
+    gpio_num_t sigmadelta_gpio;   /*!< Sigma-delta output io number, refer to gpio.h for more details. */
 } sigmadelta_config_t;
 
 /**

+ 0 - 6
components/driver/linker.lf

@@ -1,12 +1,6 @@
-
 [mapping:driver]
 archive: libdriver.a
 entries:
-    # TWAI workarounds that require periph_module_reset() won't work if cache is disabled due to the use of switch jump
-    # tables in periph_module_reset(). We prevent any part of periph_module_reset() (either text or RO data) from being
-    # placed in flash.
-    if TWAI_ISR_IN_IRAM = y  && (TWAI_ERRATA_FIX_RX_FRAME_INVALID = y || TWAI_ERRATA_FIX_RX_FIFO_CORRUPT = y):
-        periph_ctrl: periph_module_reset (noflash)
     if GPTIMER_CTRL_FUNC_IN_IRAM = y:
         gptimer: gptimer_set_raw_count (noflash)
         gptimer: gptimer_get_raw_count (noflash)

+ 1 - 0
components/esp_hw_support/CMakeLists.txt

@@ -11,6 +11,7 @@ if(NOT BOOTLOADER_BUILD)
                      "hw_random.c"
                      "intr_alloc.c"
                      "mac_addr.c"
+                     "periph_ctrl.c"
                      "sleep_modes.c"
                      "sleep_gpio.c"
                      "sleep_mac_bb.c"

+ 9 - 0
components/esp_hw_support/Kconfig

@@ -85,4 +85,13 @@ menu "Hardware Settings"
                 If you want to use USB_SERIAL_JTAG under sw_reset case or sleep-wakeup case, you shoule select
                 this option. But be aware that this might increase the power consumption.
     endmenu
+
+    menu "Peripheral Control"
+        config PERIPH_CTRL_FUNC_IN_IRAM
+            bool "Place peripheral control functions into IRAM"
+            default n
+            help
+                Place peripheral control functions (e.g. periph_module_reset) into IRAM,
+                so that these functions can be IRAM-safe and able to be called in the other IRAM interrupt context.
+    endmenu
 endmenu

+ 0 - 0
components/driver/include/esp_private/periph_ctrl.h → components/esp_hw_support/include/esp_private/periph_ctrl.h


+ 4 - 0
components/esp_hw_support/linker.lf

@@ -16,3 +16,7 @@ entries:
             opiram_psram (noflash)
     if IDF_TARGET_ESP32S2 = y:
         mmu_psram (noflash)
+    if PERIPH_CTRL_FUNC_IN_IRAM = y:
+        periph_ctrl: periph_module_reset (noflash)
+        periph_ctrl: wifi_module_enable (noflash)
+        periph_ctrl: wifi_module_disable (noflash)

+ 0 - 0
components/driver/periph_ctrl.c → components/esp_hw_support/periph_ctrl.c


+ 2 - 3
components/esp_phy/CMakeLists.txt

@@ -28,18 +28,17 @@ if(CONFIG_ESP_PHY_MULTIPLE_INIT_DATA_BIN)
     endif()
 endif()
 
-# [refactor-todo]: requires "driver" component for periph_ctrl header file
 if(CONFIG_ESP_PHY_MULTIPLE_INIT_DATA_BIN_EMBED)
     idf_component_register(SRCS "${srcs}"
                         INCLUDE_DIRS "include" "${idf_target}/include"
-                        PRIV_REQUIRES nvs_flash driver
+                        PRIV_REQUIRES nvs_flash
                         LDFRAGMENTS "${ldfragments}"
                         EMBED_FILES "${build_dir}/phy_multiple_init_data.bin"
                         )
 else()
     idf_component_register(SRCS "${srcs}"
                         INCLUDE_DIRS "include" "${idf_target}/include"
-                        PRIV_REQUIRES nvs_flash driver
+                        PRIV_REQUIRES nvs_flash
                         LDFRAGMENTS "${ldfragments}"
                         )
 endif()

+ 1 - 1
components/esp_pm/pm_trace.c

@@ -4,7 +4,7 @@
  * SPDX-License-Identifier: Apache-2.0
  */
 
-
+#include "esp_attr.h"
 #include "esp_private/pm_trace.h"
 #include "driver/gpio.h"
 #include "soc/soc.h"

+ 0 - 1
components/esp_system/CMakeLists.txt

@@ -41,7 +41,6 @@ else()
                                     # should be removable once using component init functions
                                     # link-time registration is used.
                                     # [refactor-todo] requires "driver" for headers:
-                                    # - periph_ctrl.h
                                     # - rtc_cntl.h
                                     # - spi_common_internal.h
                                     pthread bootloader_support efuse driver

+ 1 - 0
components/esp_wifi/Kconfig

@@ -254,6 +254,7 @@ menu "Wi-Fi"
     config ESP_WIFI_SLP_IRAM_OPT
         bool "WiFi SLP IRAM speed optimization"
         select PM_SLP_DEFAULT_PARAMS_OPT
+        select PERIPH_CTRL_FUNC_IN_IRAM
         help
             Select this option to place called Wi-Fi library TBTT process and receive beacon functions in IRAM.
             Some functions can be put in IRAM either by ESP32_WIFI_IRAM_OPT and ESP32_WIFI_RX_IRAM_OPT, or this one.

+ 0 - 7
components/esp_wifi/linker.lf

@@ -150,13 +150,6 @@ entries:
         wifi_init:wifi_apb80m_request (noflash)
         wifi_init:wifi_apb80m_release (noflash)
 
-[mapping:driver_wifi_pm]
-archive: libdriver.a
-entries:
-    if ESP_WIFI_SLP_IRAM_OPT =y:
-        periph_ctrl:wifi_module_enable (noflash)
-        periph_ctrl:wifi_module_disable (noflash)
-
 [mapping:esp_timer_wifi_pm]
 archive: libesp_timer.a
 entries:

+ 1 - 2
components/usb/CMakeLists.txt

@@ -4,8 +4,7 @@ set(priv_include)
 # As CONFIG_USB_OTG_SUPPORTED comes from Kconfig, it is not evaluated yet
 # when components are being registered.
 # Thus, always add the (private) requirements, regardless of Kconfig
-# [refactor-todo]: requires "driver" because "periph_ctrl.h" is used in "hcd.c"
-set(priv_require hal driver)
+set(priv_require driver) # usb_phy driver relies on gpio driver API
 
 if(CONFIG_USB_OTG_SUPPORTED)
     list(APPEND srcs "hcd.c"

+ 1 - 0
examples/bluetooth/esp_ble_mesh/common_components/light_driver/iot_led.c

@@ -14,6 +14,7 @@
 #include "soc/ledc_struct.h"
 #include "driver/gptimer.h"
 #include "driver/ledc.h"
+#include "esp_attr.h"
 #include "iot_led.h"
 #include "esp_log.h"