From 79c3ec77d045b298ab22dfceea34dcf0273dac5f Mon Sep 17 00:00:00 2001 From: Chen Chen Date: Wed, 5 Aug 2026 17:42:03 +0800 Subject: [PATCH] fix(spi_flash): keep program and erase paths in IRAM --- .../esp_hal_mspi/esp32c2/include/hal/spimem_flash_ll.h | 5 +++++ .../esp_hal_mspi/esp32c3/include/hal/spimem_flash_ll.h | 5 +++++ .../esp_hal_mspi/esp32c5/include/hal/spimem_flash_ll.h | 5 +++++ .../esp_hal_mspi/esp32c6/include/hal/spimem_flash_ll.h | 5 +++++ .../esp_hal_mspi/esp32c61/include/hal/spimem_flash_ll.h | 6 ++++++ .../esp_hal_mspi/esp32h2/include/hal/spimem_flash_ll.h | 5 +++++ .../esp_hal_mspi/esp32h21/include/hal/spimem_flash_ll.h | 6 ++++++ .../esp_hal_mspi/esp32h4/include/hal/spimem_flash_ll.h | 5 +++++ .../esp_hal_mspi/esp32p4/include/hal/spimem_flash_ll.h | 5 +++++ .../esp_hal_mspi/esp32s3/include/hal/spimem_flash_ll.h | 5 +++++ .../esp_hal_mspi/esp32s31/include/hal/spimem_flash_ll.h | 4 ++++ components/esp_hal_mspi/spi_flash_hal_common.inc | 1 + components/spi_flash/linker.lf | 4 ++++ 13 files changed, 61 insertions(+) diff --git a/components/esp_hal_mspi/esp32c2/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32c2/include/hal/spimem_flash_ll.h index 63c17dcd97f..bef94d283f2 100644 --- a/components/esp_hal_mspi/esp32c2/include/hal/spimem_flash_ll.h +++ b/components/esp_hal_mspi/esp32c2/include/hal/spimem_flash_ll.h @@ -68,6 +68,7 @@ static inline bool spimem_flash_ll_cmd_is_done(const spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) { dev->cmd.flash_ce = 1; @@ -78,6 +79,7 @@ static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) { dev->ctrl.val = 0; @@ -89,6 +91,7 @@ static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_block(spi_mem_dev_t *dev) { dev->cmd.flash_be = 1; @@ -393,6 +396,7 @@ static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const voi * @param buffer Buffer holding the data to program * @param length Length to program. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_program_page(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { dev->user.usr_dummy = 0; @@ -573,6 +577,7 @@ static inline void spimem_flash_ll_set_addr_bitlen(spi_mem_dev_t *dev, uint32_t * @param dev Beginning address of the peripheral registers. * @param addr Address to send */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_address(spi_mem_dev_t *dev, uint32_t addr) { dev->addr = addr; diff --git a/components/esp_hal_mspi/esp32c3/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32c3/include/hal/spimem_flash_ll.h index 85536ec8e8b..9cc8dbe338a 100644 --- a/components/esp_hal_mspi/esp32c3/include/hal/spimem_flash_ll.h +++ b/components/esp_hal_mspi/esp32c3/include/hal/spimem_flash_ll.h @@ -68,6 +68,7 @@ static inline bool spimem_flash_ll_cmd_is_done(const spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) { dev->cmd.flash_ce = 1; @@ -78,6 +79,7 @@ static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) { dev->ctrl.val = 0; @@ -89,6 +91,7 @@ static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_block(spi_mem_dev_t *dev) { dev->cmd.flash_be = 1; @@ -393,6 +396,7 @@ static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const voi * @param buffer Buffer holding the data to program * @param length Length to program. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_program_page(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { dev->user.usr_dummy = 0; @@ -573,6 +577,7 @@ static inline void spimem_flash_ll_set_addr_bitlen(spi_mem_dev_t *dev, uint32_t * @param dev Beginning address of the peripheral registers. * @param addr Address to send */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_address(spi_mem_dev_t *dev, uint32_t addr) { dev->addr = addr; diff --git a/components/esp_hal_mspi/esp32c5/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32c5/include/hal/spimem_flash_ll.h index d67fd92ca63..79bc29b2b0b 100644 --- a/components/esp_hal_mspi/esp32c5/include/hal/spimem_flash_ll.h +++ b/components/esp_hal_mspi/esp32c5/include/hal/spimem_flash_ll.h @@ -72,6 +72,7 @@ static inline bool spimem_flash_ll_cmd_is_done(const spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) { dev->cmd.flash_ce = 1; @@ -82,6 +83,7 @@ static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) { dev->ctrl.val = 0; @@ -93,6 +95,7 @@ static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_block(spi_mem_dev_t *dev) { dev->cmd.flash_be = 1; @@ -429,6 +432,7 @@ static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const voi * @param buffer Buffer holding the data to program * @param length Length to program. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_program_page(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { dev->user.usr_dummy = 0; @@ -634,6 +638,7 @@ static inline void spimem_flash_ll_wb_mode_enable(spi_mem_dev_t *dev, bool wb_mo * @param dev Beginning address of the peripheral registers. * @param addr Address to send */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_address(spi_mem_dev_t *dev, uint32_t addr) { dev->addr = addr; diff --git a/components/esp_hal_mspi/esp32c6/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32c6/include/hal/spimem_flash_ll.h index 22e76f0847d..1a6484ffef2 100644 --- a/components/esp_hal_mspi/esp32c6/include/hal/spimem_flash_ll.h +++ b/components/esp_hal_mspi/esp32c6/include/hal/spimem_flash_ll.h @@ -69,6 +69,7 @@ static inline bool spimem_flash_ll_cmd_is_done(const spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) { dev->cmd.flash_ce = 1; @@ -79,6 +80,7 @@ static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) { dev->ctrl.val = 0; @@ -90,6 +92,7 @@ static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_block(spi_mem_dev_t *dev) { dev->cmd.flash_be = 1; @@ -394,6 +397,7 @@ static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const voi * @param buffer Buffer holding the data to program * @param length Length to program. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_program_page(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { dev->user.usr_dummy = 0; @@ -586,6 +590,7 @@ static inline void spimem_flash_ll_set_extra_address(spi_mem_dev_t *dev, uint32_ * @param dev Beginning address of the peripheral registers. * @param addr Address to send */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_address(spi_mem_dev_t *dev, uint32_t addr) { dev->addr = addr; diff --git a/components/esp_hal_mspi/esp32c61/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32c61/include/hal/spimem_flash_ll.h index 72ccb9085f1..5cefa4373ef 100644 --- a/components/esp_hal_mspi/esp32c61/include/hal/spimem_flash_ll.h +++ b/components/esp_hal_mspi/esp32c61/include/hal/spimem_flash_ll.h @@ -72,6 +72,7 @@ static inline bool spimem_flash_ll_cmd_is_done(const spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) { dev->cmd.flash_ce = 1; @@ -82,6 +83,7 @@ static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) { dev->ctrl.val = 0; @@ -93,6 +95,7 @@ static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_block(spi_mem_dev_t *dev) { dev->cmd.flash_be = 1; @@ -401,6 +404,7 @@ static inline void spimem_flash_ll_get_buffer_data(spi_mem_dev_t *dev, void *buf * @param buffer Buffer holding the data * @param length Length of data in bytes. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { // Load data registers, word at a time @@ -423,6 +427,7 @@ static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const voi * @param buffer Buffer holding the data to program * @param length Length to program. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_program_page(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { dev->user.usr_dummy = 0; @@ -627,6 +632,7 @@ static inline void spimem_flash_ll_wb_mode_enable(spi_mem_dev_t *dev, bool wb_mo * @param dev Beginning address of the peripheral registers. * @param addr Address to send */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_address(spi_mem_dev_t *dev, uint32_t addr) { dev->addr.usr_addr_value = addr; diff --git a/components/esp_hal_mspi/esp32h2/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32h2/include/hal/spimem_flash_ll.h index b305c17338d..21b15cfd555 100644 --- a/components/esp_hal_mspi/esp32h2/include/hal/spimem_flash_ll.h +++ b/components/esp_hal_mspi/esp32h2/include/hal/spimem_flash_ll.h @@ -70,6 +70,7 @@ static inline bool spimem_flash_ll_cmd_is_done(const spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) { dev->cmd.flash_ce = 1; @@ -80,6 +81,7 @@ static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) { dev->ctrl.val = 0; @@ -91,6 +93,7 @@ static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_block(spi_mem_dev_t *dev) { dev->cmd.flash_be = 1; @@ -395,6 +398,7 @@ static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const voi * @param buffer Buffer holding the data to program * @param length Length to program. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_program_page(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { dev->user.usr_dummy = 0; @@ -586,6 +590,7 @@ static inline void spimem_flash_ll_set_extra_address(spi_mem_dev_t *dev, uint32_ * @param dev Beginning address of the peripheral registers. * @param addr Address to send */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_address(spi_mem_dev_t *dev, uint32_t addr) { dev->addr = addr; diff --git a/components/esp_hal_mspi/esp32h21/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32h21/include/hal/spimem_flash_ll.h index 6af49547db8..f86f80b06c2 100644 --- a/components/esp_hal_mspi/esp32h21/include/hal/spimem_flash_ll.h +++ b/components/esp_hal_mspi/esp32h21/include/hal/spimem_flash_ll.h @@ -70,6 +70,7 @@ static inline bool spimem_flash_ll_cmd_is_done(const spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) { dev->cmd.flash_ce = 1; @@ -80,6 +81,7 @@ static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) { dev->ctrl.val = 0; @@ -91,6 +93,7 @@ static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_block(spi_mem_dev_t *dev) { dev->cmd.flash_be = 1; @@ -423,6 +426,7 @@ static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const voi * @param buffer Buffer holding the data to program * @param length Length to program. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_program_page(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { dev->user.usr_dummy = 0; @@ -589,6 +593,7 @@ static inline int spimem_flash_ll_get_addr_bitlen(spi_mem_dev_t *dev) * @param dev Beginning address of the peripheral registers. * @param bitlen Length of the address, in bits */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_addr_bitlen(spi_mem_dev_t *dev, uint32_t bitlen) { dev->user1.usr_addr_bitlen = (bitlen - 1); @@ -613,6 +618,7 @@ static inline void spimem_flash_ll_set_extra_address(spi_mem_dev_t *dev, uint32_ * @param dev Beginning address of the peripheral registers. * @param addr Address to send */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_address(spi_mem_dev_t *dev, uint32_t addr) { dev->addr.usr_addr_value = addr; diff --git a/components/esp_hal_mspi/esp32h4/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32h4/include/hal/spimem_flash_ll.h index 1aeeef2e834..6ca2520d3e5 100644 --- a/components/esp_hal_mspi/esp32h4/include/hal/spimem_flash_ll.h +++ b/components/esp_hal_mspi/esp32h4/include/hal/spimem_flash_ll.h @@ -71,6 +71,7 @@ static inline bool spimem_flash_ll_cmd_is_done(const spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) { dev->cmd.flash_ce = 1; @@ -81,6 +82,7 @@ static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) { dev->ctrl.val = 0; @@ -92,6 +94,7 @@ static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_block(spi_mem_dev_t *dev) { dev->cmd.flash_be = 1; @@ -424,6 +427,7 @@ static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const voi * @param buffer Buffer holding the data to program * @param length Length to program. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_program_page(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { dev->user.usr_dummy = 0; @@ -632,6 +636,7 @@ static inline void spimem_flash_ll_wb_mode_enable(spi_mem_dev_t *dev, bool wb_mo * @param dev Beginning address of the peripheral registers. * @param addr Address to send */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_address(spi_mem_dev_t *dev, uint32_t addr) { dev->addr.usr_addr_value = addr; diff --git a/components/esp_hal_mspi/esp32p4/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32p4/include/hal/spimem_flash_ll.h index 10273f5cd5b..7a477033289 100644 --- a/components/esp_hal_mspi/esp32p4/include/hal/spimem_flash_ll.h +++ b/components/esp_hal_mspi/esp32p4/include/hal/spimem_flash_ll.h @@ -75,6 +75,7 @@ static inline bool spimem_flash_ll_cmd_is_done(const spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) { dev->cmd.flash_ce = 1; @@ -85,6 +86,7 @@ static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) { dev->ctrl.val = 0; @@ -96,6 +98,7 @@ static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_block(spi_mem_dev_t *dev) { dev->cmd.flash_be = 1; @@ -435,6 +438,7 @@ static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const voi * @param buffer Buffer holding the data to program * @param length Length to program. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_program_page(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { dev->user.usr_dummy = 0; @@ -630,6 +634,7 @@ static inline void spimem_flash_ll_set_extra_address(spi_mem_dev_t *dev, uint32_ * @param dev Beginning address of the peripheral registers. * @param addr Address to send */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_address(spi_mem_dev_t *dev, uint32_t addr) { dev->addr = addr; diff --git a/components/esp_hal_mspi/esp32s3/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32s3/include/hal/spimem_flash_ll.h index adff2321031..e499ef166dc 100644 --- a/components/esp_hal_mspi/esp32s3/include/hal/spimem_flash_ll.h +++ b/components/esp_hal_mspi/esp32s3/include/hal/spimem_flash_ll.h @@ -69,6 +69,7 @@ static inline bool spimem_flash_ll_cmd_is_done(const spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) { dev->cmd.flash_ce = 1; @@ -79,6 +80,7 @@ static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) { dev->ctrl.val = 0; @@ -90,6 +92,7 @@ static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_block(spi_mem_dev_t *dev) { dev->cmd.flash_be = 1; @@ -397,6 +400,7 @@ static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const voi * @param buffer Buffer holding the data to program * @param length Length to program. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_program_page(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { dev->user.usr_dummy = 0; @@ -594,6 +598,7 @@ static inline void spimem_flash_ll_set_addr_bitlen(spi_mem_dev_t *dev, uint32_t * @param dev Beginning address of the peripheral registers. * @param addr Address to send */ +__attribute__((always_inline)) static inline void spimem_flash_ll_set_address(spi_mem_dev_t *dev, uint32_t addr) { dev->addr = addr; diff --git a/components/esp_hal_mspi/esp32s31/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32s31/include/hal/spimem_flash_ll.h index d01bb960711..a159d4294ef 100644 --- a/components/esp_hal_mspi/esp32s31/include/hal/spimem_flash_ll.h +++ b/components/esp_hal_mspi/esp32s31/include/hal/spimem_flash_ll.h @@ -76,6 +76,7 @@ static inline bool spimem_flash_ll_cmd_is_done(const spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) { dev->cmd.flash_ce = 1; @@ -86,6 +87,7 @@ static inline void spimem_flash_ll_erase_chip(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) { dev->ctrl.val = 0; @@ -97,6 +99,7 @@ static inline void spimem_flash_ll_erase_sector(spi_mem_dev_t *dev) * * @param dev Beginning address of the peripheral registers. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_erase_block(spi_mem_dev_t *dev) { dev->cmd.flash_be = 1; @@ -434,6 +437,7 @@ static inline void spimem_flash_ll_set_buffer_data(spi_mem_dev_t *dev, const voi * @param buffer Buffer holding the data to program * @param length Length to program. */ +__attribute__((always_inline)) static inline void spimem_flash_ll_program_page(spi_mem_dev_t *dev, const void *buffer, uint32_t length) { dev->user.usr_dummy = 0; diff --git a/components/esp_hal_mspi/spi_flash_hal_common.inc b/components/esp_hal_mspi/spi_flash_hal_common.inc index 28120a7612b..770e637c33f 100644 --- a/components/esp_hal_mspi/spi_flash_hal_common.inc +++ b/components/esp_hal_mspi/spi_flash_hal_common.inc @@ -24,6 +24,7 @@ #define ADDRESS_MASK_24BIT 0xFFFFFF #define COMPUTE_DUMMY_CYCLELEN(host, base) ((base) + ((spi_flash_hal_context_t*)host)->extra_dummy) +__attribute__((always_inline)) static inline spi_dev_t *get_spi_dev(spi_flash_host_inst_t *host) { return ((spi_flash_hal_context_t*)host)->spi; diff --git a/components/spi_flash/linker.lf b/components/spi_flash/linker.lf index 64f1d2e797b..0ce868cf029 100644 --- a/components/spi_flash/linker.lf +++ b/components/spi_flash/linker.lf @@ -97,6 +97,10 @@ entries: if SOC_GPSPI_SUPPORTED = y && IDF_TARGET_ESP32 = n: spi_flash_hal_gpspi (noflash) if SPI_FLASH_ROM_IMPL = n && APP_BUILD_TYPE_PURE_RAM_APP = n: + spi_flash_hal_iram: spi_flash_hal_program_page (noflash) + spi_flash_hal_iram: spi_flash_hal_erase_chip (noflash) + spi_flash_hal_iram: spi_flash_hal_erase_sector (noflash) + spi_flash_hal_iram: spi_flash_hal_erase_block (noflash) spi_flash_hal_iram: spi_flash_hal_enter_dpd_mode (noflash) spi_flash_hal_iram: spi_flash_hal_exit_dpd_mode (noflash) spi_flash_hal_iram: spi_flash_hal_poll_cmd_done (noflash)