diff --git a/components/hal/esp32c2/include/hal/spimem_flash_ll.h b/components/hal/esp32c2/include/hal/spimem_flash_ll.h index 3a06593bdae..8ed347feab4 100644 --- a/components/hal/esp32c2/include/hal/spimem_flash_ll.h +++ b/components/hal/esp32c2/include/hal/spimem_flash_ll.h @@ -66,6 +66,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; @@ -76,6 +77,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; @@ -87,6 +89,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; @@ -372,6 +375,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/hal/esp32c3/include/hal/spimem_flash_ll.h b/components/hal/esp32c3/include/hal/spimem_flash_ll.h index e412d11413f..cc4b59b45db 100644 --- a/components/hal/esp32c3/include/hal/spimem_flash_ll.h +++ b/components/hal/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; @@ -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; @@ -555,6 +559,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/hal/esp32c5/include/hal/spimem_flash_ll.h b/components/hal/esp32c5/include/hal/spimem_flash_ll.h index 390aa8d7b62..70dd5c9cfe6 100644 --- a/components/hal/esp32c5/include/hal/spimem_flash_ll.h +++ b/components/hal/esp32c5/include/hal/spimem_flash_ll.h @@ -73,6 +73,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; @@ -83,6 +84,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; @@ -94,6 +96,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; @@ -601,6 +605,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/hal/esp32c6/include/hal/spimem_flash_ll.h b/components/hal/esp32c6/include/hal/spimem_flash_ll.h index b4a70499990..89ee228caec 100644 --- a/components/hal/esp32c6/include/hal/spimem_flash_ll.h +++ b/components/hal/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; @@ -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; @@ -568,6 +572,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/hal/esp32c61/include/hal/spimem_flash_ll.h b/components/hal/esp32c61/include/hal/spimem_flash_ll.h index 82c2f5296fb..76f2b5e12d3 100644 --- a/components/hal/esp32c61/include/hal/spimem_flash_ll.h +++ b/components/hal/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 @@ -388,6 +392,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; @@ -593,6 +598,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/hal/esp32h2/include/hal/spimem_flash_ll.h b/components/hal/esp32h2/include/hal/spimem_flash_ll.h index 63457e00056..75629988444 100644 --- a/components/hal/esp32h2/include/hal/spimem_flash_ll.h +++ b/components/hal/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; @@ -376,6 +379,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; @@ -568,6 +572,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/hal/esp32h21/include/hal/spimem_flash_ll.h b/components/hal/esp32h21/include/hal/spimem_flash_ll.h index 272d6c2aabb..13b522d192d 100644 --- a/components/hal/esp32h21/include/hal/spimem_flash_ll.h +++ b/components/hal/esp32h21/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; @@ -376,6 +379,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; @@ -542,6 +546,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); @@ -566,6 +571,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/hal/esp32h4/include/hal/spimem_flash_ll.h b/components/hal/esp32h4/include/hal/spimem_flash_ll.h index beecacae871..24f7536d9ce 100644 --- a/components/hal/esp32h4/include/hal/spimem_flash_ll.h +++ b/components/hal/esp32h4/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; @@ -376,6 +379,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; @@ -570,6 +574,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/hal/esp32p4/include/hal/spimem_flash_ll.h b/components/hal/esp32p4/include/hal/spimem_flash_ll.h index f0d54bce2d9..4ca87727264 100644 --- a/components/hal/esp32p4/include/hal/spimem_flash_ll.h +++ b/components/hal/esp32p4/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; @@ -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; @@ -597,6 +601,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/hal/esp32s3/include/hal/spimem_flash_ll.h b/components/hal/esp32s3/include/hal/spimem_flash_ll.h index 120d2df2e6a..26f33e5765c 100644 --- a/components/hal/esp32s3/include/hal/spimem_flash_ll.h +++ b/components/hal/esp32s3/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; @@ -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; @@ -575,6 +579,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/hal/spi_flash_hal_common.inc b/components/hal/spi_flash_hal_common.inc index 01b0b815086..99aaf8d973a 100644 --- a/components/hal/spi_flash_hal_common.inc +++ b/components/hal/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 4e278f762d4..be958d88b62 100644 --- a/components/spi_flash/linker.lf +++ b/components/spi_flash/linker.lf @@ -87,3 +87,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)