mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
feat(spi_flash): Enable auto suspend on when flash works under 120M
This commit is contained in:
parent
ff8a6a5bf9
commit
e3a854769a
@ -245,6 +245,19 @@ static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool
|
||||
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to set dummy phase when auto suspend is enabled.
|
||||
*
|
||||
* @note This function is only used when timing tuning is enabled.
|
||||
*
|
||||
* @param dev Beginning address of the peripheral registers.
|
||||
* @param extra_dummy extra dummy length. Get from timing tuning.
|
||||
*/
|
||||
static inline void spimem_flash_ll_set_wait_idle_dummy_phase(spi_mem_dev_t *dev, uint32_t extra_dummy)
|
||||
{
|
||||
// Not supported on this chip.
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the suspend status of erase or program operations.
|
||||
*
|
||||
|
@ -247,6 +247,19 @@ static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool
|
||||
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to set dummy phase when auto suspend is enabled.
|
||||
*
|
||||
* @note This function is only used when timing tuning is enabled.
|
||||
*
|
||||
* @param dev Beginning address of the peripheral registers.
|
||||
* @param extra_dummy extra dummy length. Get from timing tuning.
|
||||
*/
|
||||
static inline void spimem_flash_ll_set_wait_idle_dummy_phase(spi_mem_dev_t *dev, uint32_t extra_dummy)
|
||||
{
|
||||
// Not supported on this chip.
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the suspend status of erase or program operations.
|
||||
*
|
||||
|
@ -248,6 +248,19 @@ static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool
|
||||
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to set dummy phase when auto suspend is enabled.
|
||||
*
|
||||
* @note This function is only used when timing tuning is enabled.
|
||||
*
|
||||
* @param dev Beginning address of the peripheral registers.
|
||||
* @param extra_dummy extra dummy length. Get from timing tuning.
|
||||
*/
|
||||
static inline void spimem_flash_ll_set_wait_idle_dummy_phase(spi_mem_dev_t *dev, uint32_t extra_dummy)
|
||||
{
|
||||
// Not supported on this chip.
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the suspend status of erase or program operations.
|
||||
*
|
||||
|
@ -249,6 +249,19 @@ static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool
|
||||
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to set dummy phase when auto suspend is enabled.
|
||||
*
|
||||
* @note This function is only used when timing tuning is enabled.
|
||||
*
|
||||
* @param dev Beginning address of the peripheral registers.
|
||||
* @param extra_dummy extra dummy length. Get from timing tuning.
|
||||
*/
|
||||
static inline void spimem_flash_ll_set_wait_idle_dummy_phase(spi_mem_dev_t *dev, uint32_t extra_dummy)
|
||||
{
|
||||
// Not supported on this chip.
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the suspend status of erase or program operations.
|
||||
*
|
||||
|
@ -251,6 +251,24 @@ static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool
|
||||
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to set dummy phase when auto suspend is enabled.
|
||||
*
|
||||
* @note This function is only used when timing tuning is enabled. This function is only used in quad flash
|
||||
*
|
||||
* @param dev Beginning address of the peripheral registers.
|
||||
* @param extra_dummy extra dummy length. Get from timing tuning.
|
||||
*/
|
||||
static inline void spimem_flash_ll_set_wait_idle_dummy_phase(spi_mem_dev_t *dev, uint32_t extra_dummy)
|
||||
{
|
||||
if (extra_dummy > 0) {
|
||||
dev->flash_waiti_ctrl.waiti_dummy_cyclelen = extra_dummy - 1;
|
||||
dev->flash_waiti_ctrl.waiti_dummy = 1;
|
||||
} else {
|
||||
dev->flash_waiti_ctrl.waiti_dummy = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the suspend status of erase or program operations.
|
||||
*
|
||||
|
@ -217,6 +217,19 @@ static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool
|
||||
dev->flash_waiti_ctrl.waiti_en = auto_waiti; // enable auto wait-idle function.
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to set dummy phase when auto suspend is enabled.
|
||||
*
|
||||
* @note This function is only used when timing tuning is enabled.
|
||||
*
|
||||
* @param dev Beginning address of the peripheral registers.
|
||||
* @param extra_dummy extra dummy length. Get from timing tuning.
|
||||
*/
|
||||
static inline void spimem_flash_ll_set_wait_idle_dummy_phase(spi_mem_dev_t *dev, uint32_t extra_dummy)
|
||||
{
|
||||
// Not supported on this chip.
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the suspend status of erase or program operations.
|
||||
*
|
||||
|
@ -274,6 +274,24 @@ static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool
|
||||
dev->flash_sus_cmd.flash_pes_wait_en = 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to set dummy phase when auto suspend is enabled.
|
||||
*
|
||||
* @note This function is only used when timing tuning is enabled. This function is only used in quad flash
|
||||
*
|
||||
* @param dev Beginning address of the peripheral registers.
|
||||
* @param extra_dummy extra dummy length. Get from timing tuning.
|
||||
*/
|
||||
static inline void spimem_flash_ll_set_wait_idle_dummy_phase(spi_mem_dev_t *dev, uint32_t extra_dummy)
|
||||
{
|
||||
if (extra_dummy > 0) {
|
||||
dev->flash_waiti_ctrl.waiti_dummy_cyclelen = extra_dummy - 1;
|
||||
dev->flash_waiti_ctrl.waiti_dummy = 1;
|
||||
} else {
|
||||
dev->flash_waiti_ctrl.waiti_dummy = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the suspend status of erase or program operations.
|
||||
*
|
||||
|
@ -147,6 +147,9 @@ void spi_flash_hal_setup_auto_suspend_mode(spi_flash_host_inst_t *host)
|
||||
spi_mem_dev_t *dev = (spi_mem_dev_t*)spi_flash_ll_get_hw(SPI1_HOST);
|
||||
spi_flash_hal_context_t* ctx = (spi_flash_hal_context_t*)host;
|
||||
spimem_flash_ll_auto_wait_idle_init(dev, true);
|
||||
if (ctx->freq_mhz == 120) {
|
||||
spimem_flash_ll_set_wait_idle_dummy_phase(dev, ctx->extra_dummy);
|
||||
}
|
||||
spimem_flash_ll_auto_suspend_init(dev, true);
|
||||
// tsus = ceil(SPI_FLASH_TSUS_SAFE_VAL_US * ctx->freq_mhz / spimem_flash_ll_get_tsus_unit_in_cycles);
|
||||
uint32_t tsus = (SPI_FLASH_TSUS_SAFE_VAL_US * ctx->freq_mhz / spimem_flash_ll_get_tsus_unit_in_cycles(dev)) + ((SPI_FLASH_TSUS_SAFE_VAL_US * ctx->freq_mhz) % spimem_flash_ll_get_tsus_unit_in_cycles(dev) != 0);
|
||||
|
Loading…
Reference in New Issue
Block a user