mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 03:00:34 +03:00
feat(spi_flash): support software resume after suspend in unicore
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2010-2024 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -27,6 +27,10 @@ extern "C" {
|
||||
#define SPI_FLASH_HAL_MAX_WRITE_BYTES 64
|
||||
#define SPI_FLASH_HAL_MAX_READ_BYTES 64
|
||||
|
||||
/* spi flash state */
|
||||
#define SPI_FLASH_HAL_STATUS_BUSY BIT0
|
||||
#define SPI_FLASH_HAL_STATUS_SUSPEND BIT1
|
||||
|
||||
/**
|
||||
* Generic driver context structure for all chips using the SPI peripheral.
|
||||
* Include this into the HEAD of the driver data for other driver
|
||||
@@ -82,7 +86,7 @@ typedef struct {
|
||||
int cs_num; ///< Which cs pin is used, 0-(SOC_SPI_PERIPH_CS_NUM-1).
|
||||
bool auto_sus_en; ///< Auto suspend feature enable bit 1: enable, 0: disable.
|
||||
bool octal_mode_en; ///< Octal spi flash mode enable bit 1: enable, 0: disable.
|
||||
bool using_timing_tuning; ///< System exist SPI0/1 timing tuning, using value from system directely if set to 1.
|
||||
bool using_timing_tuning; ///< System exist SPI0/1 timing tuning, using value from system directly if set to 1.
|
||||
esp_flash_io_mode_t default_io_mode; ///< Default flash io mode.
|
||||
int freq_mhz; ///< SPI flash clock speed (MHZ).
|
||||
int clock_src_freq; ///< SPI flash clock source (MHZ).
|
||||
|
||||
@@ -128,6 +128,10 @@ esp_err_t spi_flash_hal_init(spi_flash_hal_context_t *data_out, const spi_flash_
|
||||
data_out->tsus_val = cfg->tsus_val;
|
||||
}
|
||||
|
||||
#if CONFIG_SPI_FLASH_SOFTWARE_RESUME
|
||||
data_out->flags &= ~SPI_FLASH_HOST_CONTEXT_FLAG_AUTO_RESUME;
|
||||
#endif
|
||||
|
||||
#if SOC_SPI_MEM_SUPPORT_OPI_MODE
|
||||
if (cfg->octal_mode_en) {
|
||||
data_out->flags |= SPI_FLASH_HOST_CONTEXT_FLAG_OCTAL_MODE;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -159,6 +159,7 @@ void spi_flash_hal_setup_auto_suspend_mode(spi_flash_host_inst_t *host)
|
||||
spimem_flash_ll_sus_set_spi0_lock_trans(dev, SPIMEM_FLASH_LL_SPI0_MAX_LOCK_VAL_MSPI_TICKS);
|
||||
#if SOC_SPI_MEM_SUPPORT_CHECK_SUS
|
||||
spimem_flash_ll_sus_check_sus_setup(dev, true);
|
||||
spimem_flash_ll_res_check_sus_setup(dev, true);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -166,9 +167,6 @@ void spi_flash_hal_setup_auto_resume_mode(spi_flash_host_inst_t *host)
|
||||
{
|
||||
spi_mem_dev_t *dev = (spi_mem_dev_t*)spi_flash_ll_get_hw(SPI1_HOST);
|
||||
spimem_flash_ll_auto_resume_init(dev, true);
|
||||
#if SOC_SPI_MEM_SUPPORT_CHECK_SUS
|
||||
spimem_flash_ll_res_check_sus_setup(dev, true);
|
||||
#endif
|
||||
}
|
||||
|
||||
void spi_flash_hal_disable_auto_suspend_mode(spi_flash_host_inst_t *host)
|
||||
@@ -178,6 +176,7 @@ void spi_flash_hal_disable_auto_suspend_mode(spi_flash_host_inst_t *host)
|
||||
spimem_flash_ll_auto_suspend_init(dev, false);
|
||||
#if SOC_SPI_MEM_SUPPORT_CHECK_SUS
|
||||
spimem_flash_ll_sus_check_sus_setup(dev, false);
|
||||
spimem_flash_ll_res_check_sus_setup(dev, false);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -185,9 +184,6 @@ void spi_flash_hal_disable_auto_resume_mode(spi_flash_host_inst_t *host)
|
||||
{
|
||||
spi_mem_dev_t *dev = (spi_mem_dev_t*)spi_flash_ll_get_hw(SPI1_HOST);
|
||||
spimem_flash_ll_auto_resume_init(dev, false);
|
||||
#if SOC_SPI_MEM_SUPPORT_CHECK_SUS
|
||||
spimem_flash_ll_res_check_sus_setup(dev, false);
|
||||
#endif
|
||||
}
|
||||
#endif // SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND
|
||||
|
||||
@@ -195,6 +191,7 @@ void spi_flash_hal_resume(spi_flash_host_inst_t *host)
|
||||
{
|
||||
#if SOC_SPI_MEM_SUPPORT_SW_SUSPEND
|
||||
spimem_flash_ll_resume((spi_mem_dev_t*)(((spi_flash_hal_context_t *)host)->spi));
|
||||
host->driver->poll_cmd_done(host);
|
||||
#else
|
||||
abort();
|
||||
#endif
|
||||
@@ -204,6 +201,7 @@ void spi_flash_hal_suspend(spi_flash_host_inst_t *host)
|
||||
{
|
||||
#if SOC_SPI_MEM_SUPPORT_SW_SUSPEND
|
||||
spimem_flash_ll_suspend((spi_mem_dev_t *)(((spi_flash_hal_context_t *)host)->spi));
|
||||
host->driver->poll_cmd_done(host);
|
||||
#else
|
||||
abort();
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user