From b44abfce5703068e4f2c66c57c542ecee1b094f4 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 29 Nov 2025 03:18:39 -0600 Subject: [PATCH] [esp32] Place ring buffer functions in flash by default (prep for IDF 6.0) --- esphome/components/esp32/__init__.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/esphome/components/esp32/__init__.py b/esphome/components/esp32/__init__.py index 0c1ea316f2..6c5aaca869 100644 --- a/esphome/components/esp32/__init__.py +++ b/esphome/components/esp32/__init__.py @@ -585,6 +585,7 @@ CONF_DISABLE_VFS_SUPPORT_TERMIOS = "disable_vfs_support_termios" CONF_DISABLE_VFS_SUPPORT_SELECT = "disable_vfs_support_select" CONF_DISABLE_VFS_SUPPORT_DIR = "disable_vfs_support_dir" CONF_FREERTOS_IN_IRAM = "freertos_in_iram" +CONF_RINGBUF_IN_IRAM = "ringbuf_in_iram" CONF_LOOP_TASK_STACK_SIZE = "loop_task_stack_size" # VFS requirement tracking @@ -693,6 +694,7 @@ FRAMEWORK_SCHEMA = cv.Schema( cv.Optional(CONF_DISABLE_VFS_SUPPORT_SELECT, default=True): cv.boolean, cv.Optional(CONF_DISABLE_VFS_SUPPORT_DIR, default=True): cv.boolean, cv.Optional(CONF_FREERTOS_IN_IRAM, default=False): cv.boolean, + cv.Optional(CONF_RINGBUF_IN_IRAM, default=False): cv.boolean, cv.Optional(CONF_EXECUTE_FROM_PSRAM, default=False): cv.boolean, cv.Optional(CONF_LOOP_TASK_STACK_SIZE, default=8192): cv.int_range( min=8192, max=32768 @@ -1038,9 +1040,12 @@ async def to_code(config): # Place ring buffer functions into flash instead of IRAM by default # This saves IRAM but may impact performance for audio/voice components. # Components that need ring buffer in IRAM call enable_ringbuf_in_iram(). + # Users can also set ringbuf_in_iram: true to force IRAM placement. # In ESP-IDF 6.0 flash placement becomes the default. - if CORE.data.get(KEY_RINGBUF_IN_IRAM, False): - # Component requires ring buffer in IRAM for performance + if conf[CONF_ADVANCED][CONF_RINGBUF_IN_IRAM] or CORE.data.get( + KEY_RINGBUF_IN_IRAM, False + ): + # User config or component requires ring buffer in IRAM for performance # IDF 6.0+: will need CONFIG_RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH=n add_idf_sdkconfig_option("CONFIG_RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH", False) else: