This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 60ca804b561c160d93a2cc0d55403cd091140f8a
Author: Tiago Medicci Serrano <tiago.medi...@espressif.com>
AuthorDate: Tue Jul 15 14:43:33 2025 -0300

    esp32s3: Fix bug related to the PSRAM-allocated task stack
    
    If both SPI Flash support (`CONFIG_ESP32S3_SPIFLASH`) and PSRAM
    (`CONFIG_ESP32S3_SPIRAM`) are enabled, the PSRAM can only be
    assigned to the user's heap (`CONFIG_ESP32S3_SPIRAM_USER_HEAP`).
    Additionaly, `CONFIG_ESP32S3_SPI_FLASH_SUPPORT_PSRAM_STACK` must be
    set because the system will end up allocating tasks' stacks from
    the external PSRAM. This has an impact when dealing with SPI flash
    operations because the cache must be disabled and the running task
    should not rely on any data from the PSRAM. To accomplish that, It
    offloads the SPI flash operation to a work queue (which, by
    definition, allocates its heap from the kernel heap).
    
    The same (assigning the PSRAM to the user's heap) is valid when the
    Wi-Fi is enabled because the lower-half driver requires data being
    allocated from the internal memory (which can only be achieved by
    allocating from the kernel heap when both the kernel and user heaps
    exists).
    
    Signed-off-by: Tiago Medicci Serrano <tiago.medi...@espressif.com>
---
 arch/xtensa/src/esp32s3/Kconfig                                   | 8 ++++----
 boards/xtensa/esp32s3/esp32s3-devkit/configs/mbedtls/defconfig    | 4 ++--
 .../xtensa/esp32s3/esp32s3-devkit/configs/psram_usrheap/defconfig | 3 +--
 boards/xtensa/esp32s3/esp32s3-devkit/configs/toywasm/defconfig    | 2 +-
 4 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/arch/xtensa/src/esp32s3/Kconfig b/arch/xtensa/src/esp32s3/Kconfig
index f1e577e33c2..f21c8302c86 100644
--- a/arch/xtensa/src/esp32s3/Kconfig
+++ b/arch/xtensa/src/esp32s3/Kconfig
@@ -1090,9 +1090,12 @@ choice ESP32S3_SPIRAM_HEAP
 
 config ESP32S3_SPIRAM_COMMON_HEAP
        bool "Additional region to kernel heap"
+       depends on !ESP32S3_SPIFLASH && !ESPRESSIF_WIFI && !BUILD_PROTECTED
 
 config ESP32S3_SPIRAM_USER_HEAP
        bool "Separated userspace heap"
+       depends on SCHED_LPWORK
+       select ESP32S3_SPI_FLASH_SUPPORT_PSRAM_STACK if ESP32S3_SPIFLASH
        select MM_KERNEL_HEAP
 
 endchoice # ESP32S3_SPIRAM_HEAP
@@ -1949,10 +1952,7 @@ config ESP32S3_SPIFLASH_OP_TASK_STACKSIZE
                to be finished.
 
 config ESP32S3_SPI_FLASH_SUPPORT_PSRAM_STACK
-       bool "Support PSRAM As Task Stack"
-       default n
-       depends on ESP32S3_SPIRAM
-       select SCHED_LPWORK
+       bool
        ---help---
                Enable this option, Tasks which use PSRAM as stack
                can do SPI Flash read/write/erase/map/unmap. Otherwise,
diff --git a/boards/xtensa/esp32s3/esp32s3-devkit/configs/mbedtls/defconfig 
b/boards/xtensa/esp32s3/esp32s3-devkit/configs/mbedtls/defconfig
index 771449d691a..8e228daff1d 100644
--- a/boards/xtensa/esp32s3/esp32s3-devkit/configs/mbedtls/defconfig
+++ b/boards/xtensa/esp32s3/esp32s3-devkit/configs/mbedtls/defconfig
@@ -33,7 +33,6 @@ CONFIG_ESP32S3_RT_TIMER_TASK_STACK_SIZE=4096
 CONFIG_ESP32S3_SPIFLASH=y
 CONFIG_ESP32S3_SPIRAM=y
 CONFIG_ESP32S3_SPIRAM_MODE_OCT=y
-CONFIG_ESP32S3_SPI_FLASH_SUPPORT_PSRAM_STACK=y
 CONFIG_ESP32S3_STORAGE_MTD_SIZE=0x1e80000
 CONFIG_ESP32S3_UART0=y
 CONFIG_ESPRESSIF_WIFI=y
@@ -43,7 +42,6 @@ CONFIG_FS_LITTLEFS=y
 CONFIG_FS_LITTLEFS_MULTI_VERSION=y
 CONFIG_FS_LITTLEFS_VERSION="v2.10.1"
 CONFIG_FS_PROCFS=y
-CONFIG_HOST_MACOS=y
 CONFIG_IDLETHREAD_STACKSIZE=3072
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INIT_STACKSIZE=8192
@@ -64,6 +62,7 @@ CONFIG_NETDB_DNSCLIENT=y
 CONFIG_NETDEV_LATEINIT=y
 CONFIG_NETDEV_PHY_IOCTL=y
 CONFIG_NETDEV_WIRELESS_IOCTL=y
+CONFIG_NETDEV_WORK_THREAD=y
 CONFIG_NETUTILS_CJSON=y
 CONFIG_NETUTILS_IPERF=y
 CONFIG_NET_BROADCAST=y
@@ -85,6 +84,7 @@ CONFIG_PTHREAD_MUTEX_TYPES=y
 CONFIG_RAM_SIZE=114688
 CONFIG_RAM_START=0x20000000
 CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_LPWORK=y
 CONFIG_SCHED_WAITPID=y
 CONFIG_SIG_DEFAULT=y
 CONFIG_SMP=y
diff --git 
a/boards/xtensa/esp32s3/esp32s3-devkit/configs/psram_usrheap/defconfig 
b/boards/xtensa/esp32s3/esp32s3-devkit/configs/psram_usrheap/defconfig
index 40c9d02f65a..8863a99ef80 100644
--- a/boards/xtensa/esp32s3/esp32s3-devkit/configs/psram_usrheap/defconfig
+++ b/boards/xtensa/esp32s3/esp32s3-devkit/configs/psram_usrheap/defconfig
@@ -23,8 +23,6 @@ CONFIG_BUILTIN=y
 CONFIG_ESP32S3_FLASH_FREQ_80M=y
 CONFIG_ESP32S3_SPIFLASH=y
 CONFIG_ESP32S3_SPIRAM=y
-CONFIG_ESP32S3_SPIRAM_USER_HEAP=y
-CONFIG_ESP32S3_SPI_FLASH_SUPPORT_PSRAM_STACK=y
 CONFIG_ESP32S3_UART0=y
 CONFIG_FS_PROCFS=y
 CONFIG_HAVE_CXX=y
@@ -47,6 +45,7 @@ CONFIG_PREALLOC_TIMERS=4
 CONFIG_RAM_SIZE=114688
 CONFIG_RAM_START=0x20000000
 CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_LPWORK=y
 CONFIG_SCHED_WAITPID=y
 CONFIG_START_DAY=6
 CONFIG_START_MONTH=12
diff --git a/boards/xtensa/esp32s3/esp32s3-devkit/configs/toywasm/defconfig 
b/boards/xtensa/esp32s3/esp32s3-devkit/configs/toywasm/defconfig
index e4abb1dbc4b..88650e1dd06 100644
--- a/boards/xtensa/esp32s3/esp32s3-devkit/configs/toywasm/defconfig
+++ b/boards/xtensa/esp32s3/esp32s3-devkit/configs/toywasm/defconfig
@@ -30,7 +30,6 @@ CONFIG_ESP32S3_RT_TIMER_TASK_STACK_SIZE=4096
 CONFIG_ESP32S3_SPIFLASH=y
 CONFIG_ESP32S3_SPIRAM=y
 CONFIG_ESP32S3_SPIRAM_MODE_OCT=y
-CONFIG_ESP32S3_SPI_FLASH_SUPPORT_PSRAM_STACK=y
 CONFIG_ESP32S3_STORAGE_MTD_SIZE=0x1e80000
 CONFIG_ESP32S3_UART0=y
 CONFIG_ESPRESSIF_WIFI=y
@@ -75,6 +74,7 @@ CONFIG_PTHREAD_MUTEX_TYPES=y
 CONFIG_RAM_SIZE=114688
 CONFIG_RAM_START=0x20000000
 CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_LPWORK=y
 CONFIG_SCHED_WAITPID=y
 CONFIG_SIG_DEFAULT=y
 CONFIG_SMP=y

Reply via email to