From c862edb946cbe53fd5742c5bf49772a6bc1fc8db 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 +++++ components/esp_hal_mspi/spi_flash_hal_common.inc | 1 + components/spi_flash/linker.lf | 5 +++++ 12 files changed, 58 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 da92f82c40c..78866ca7f37 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; @@ -373,6 +376,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; @@ -553,6 +557,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 95931b6cd80..48d31b49e8d 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; @@ -373,6 +376,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; @@ -553,6 +557,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 738160fa51e..aa84cf3dca9 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; @@ -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; @@ -598,6 +602,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 7dcde206b5d..46ce12b6220 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; @@ -374,6 +377,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; @@ -566,6 +570,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 9b59d1d100c..19226eb8b20 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; @@ -365,6 +368,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 @@ -387,6 +391,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; @@ -591,6 +596,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 d39bdf008c2..73d509d9a8d 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; @@ -375,6 +378,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; @@ -566,6 +570,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 15b7d7c01f3..22a435e62fb 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; @@ -373,6 +376,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; @@ -539,6 +543,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); @@ -563,6 +568,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 7bf08153acd..8ef8652136f 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 @@ -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; @@ -373,6 +376,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; @@ -564,6 +568,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/esp32p4/include/hal/spimem_flash_ll.h b/components/esp_hal_mspi/esp32p4/include/hal/spimem_flash_ll.h index d887f1ad2e9..d7d506de5c6 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 @@ -77,6 +77,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; @@ -87,6 +88,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; @@ -98,6 +100,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_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; @@ -596,6 +600,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 5158b5ba1e4..646931f26ce 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; @@ -377,6 +380,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; @@ -574,6 +578,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/spi_flash_hal_common.inc b/components/esp_hal_mspi/spi_flash_hal_common.inc index 9e2cc64a65c..e44868fa869 100644 --- a/components/esp_hal_mspi/spi_flash_hal_common.inc +++ b/components/esp_hal_mspi/spi_flash_hal_common.inc @@ -23,6 +23,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 055be7e3512..12add967bfc 100644 --- a/components/spi_flash/linker.lf +++ b/components/spi_flash/linker.lf @@ -88,3 +88,8 @@ 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)