forked from espressif/esp-idf
spi_flash: replace flash clock src change API with mspi timing API
This commit is contained in:
@@ -59,8 +59,8 @@
|
|||||||
#include "esp_private/sleep_modem.h"
|
#include "esp_private/sleep_modem.h"
|
||||||
#include "esp_private/esp_clk.h"
|
#include "esp_private/esp_clk.h"
|
||||||
#include "esp_private/esp_task_wdt.h"
|
#include "esp_private/esp_task_wdt.h"
|
||||||
#include "esp_private/spi_flash_os.h"
|
|
||||||
#include "esp_private/sar_periph_ctrl.h"
|
#include "esp_private/sar_periph_ctrl.h"
|
||||||
|
#include "esp_private/mspi_timing_tuning.h"
|
||||||
|
|
||||||
#ifdef CONFIG_IDF_TARGET_ESP32
|
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||||
#include "esp32/rom/cache.h"
|
#include "esp32/rom/cache.h"
|
||||||
@@ -500,15 +500,8 @@ static uint32_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags, esp_sleep_mode_t mo
|
|||||||
pd_flags &= ~RTC_SLEEP_PD_INT_8M;
|
pd_flags &= ~RTC_SLEEP_PD_INT_8M;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn down mspi clock speed
|
//turn down MSPI speed
|
||||||
#if SOC_SPI_MEM_SUPPORT_TIME_TUNING
|
|
||||||
mspi_timing_change_speed_mode_cache_safe(true);
|
mspi_timing_change_speed_mode_cache_safe(true);
|
||||||
#endif
|
|
||||||
|
|
||||||
// Set mspi clock to a low-power one.
|
|
||||||
#if SOC_MEMSPI_CLOCK_IS_INDEPENDENT
|
|
||||||
spi_flash_set_clock_src(MSPI_CLK_SRC_ROM_DEFAULT);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Save current frequency and switch to XTAL
|
// Save current frequency and switch to XTAL
|
||||||
rtc_cpu_freq_config_t cpu_freq_config;
|
rtc_cpu_freq_config_t cpu_freq_config;
|
||||||
@@ -686,15 +679,8 @@ static uint32_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags, esp_sleep_mode_t mo
|
|||||||
rtc_clk_cpu_freq_set_config(&cpu_freq_config);
|
rtc_clk_cpu_freq_set_config(&cpu_freq_config);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set mspi clock to ROM default one.
|
//restore MSPI speed
|
||||||
#if SOC_MEMSPI_CLOCK_IS_INDEPENDENT
|
|
||||||
spi_flash_set_clock_src(MSPI_CLK_SRC_DEFAULT);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Speed up mspi clock freq
|
|
||||||
#if SOC_SPI_MEM_SUPPORT_TIME_TUNING
|
|
||||||
mspi_timing_change_speed_mode_cache_safe(false);
|
mspi_timing_change_speed_mode_cache_safe(false);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!deep_sleep) {
|
if (!deep_sleep) {
|
||||||
s_config.ccount_ticks_record = esp_cpu_get_cycle_count();
|
s_config.ccount_ticks_record = esp_cpu_get_cycle_count();
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
#include "esp_private/rtc_clk.h"
|
#include "esp_private/rtc_clk.h"
|
||||||
#include "esp_private/panic_internal.h"
|
#include "esp_private/panic_internal.h"
|
||||||
#include "esp_private/system_internal.h"
|
#include "esp_private/system_internal.h"
|
||||||
#include "esp_private/spi_flash_os.h"
|
#include "esp_private/mspi_timing_tuning.h"
|
||||||
#include "esp_heap_caps.h"
|
#include "esp_heap_caps.h"
|
||||||
#include "esp_rom_uart.h"
|
#include "esp_rom_uart.h"
|
||||||
#include "esp_rom_sys.h"
|
#include "esp_rom_sys.h"
|
||||||
@@ -33,9 +33,15 @@ void IRAM_ATTR esp_restart_noos_dig(void)
|
|||||||
esp_rom_uart_tx_wait_idle(CONFIG_ESP_CONSOLE_UART_NUM);
|
esp_rom_uart_tx_wait_idle(CONFIG_ESP_CONSOLE_UART_NUM);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SOC_MEMSPI_CLOCK_IS_INDEPENDENT
|
#if !CONFIG_APP_BUILD_TYPE_PURE_RAM_APP
|
||||||
spi_flash_set_clock_src(MSPI_CLK_SRC_ROM_DEFAULT);
|
/**
|
||||||
#endif
|
* Turn down MSPI speed
|
||||||
|
*
|
||||||
|
* We set MSPI clock to a high speed one before, ROM doesn't have such high speed clock source option.
|
||||||
|
* This function will change clock source to a ROM supported one when system restarts.
|
||||||
|
*/
|
||||||
|
mspi_timing_change_speed_mode_cache_safe(true);
|
||||||
|
#endif //#if !CONFIG_APP_BUILD_TYPE_PURE_RAM_APP
|
||||||
|
|
||||||
// switch to XTAL (otherwise we will keep running from the PLL)
|
// switch to XTAL (otherwise we will keep running from the PLL)
|
||||||
rtc_clk_cpu_set_to_default_config();
|
rtc_clk_cpu_set_to_default_config();
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
#include "hal/wdt_hal.h"
|
#include "hal/wdt_hal.h"
|
||||||
#include "hal/spimem_flash_ll.h"
|
#include "hal/spimem_flash_ll.h"
|
||||||
#include "esp_private/cache_err_int.h"
|
#include "esp_private/cache_err_int.h"
|
||||||
#include "esp_private/spi_flash_os.h"
|
#include "esp_private/mspi_timing_tuning.h"
|
||||||
|
|
||||||
#include "esp32h2/rom/cache.h"
|
#include "esp32h2/rom/cache.h"
|
||||||
#include "esp32h2/rom/rtc.h"
|
#include "esp32h2/rom/rtc.h"
|
||||||
@@ -89,8 +89,15 @@ void IRAM_ATTR esp_restart_noos(void)
|
|||||||
CLEAR_PERI_REG_MASK(PCR_GDMA_CONF_REG, PCR_GDMA_RST_EN);
|
CLEAR_PERI_REG_MASK(PCR_GDMA_CONF_REG, PCR_GDMA_RST_EN);
|
||||||
CLEAR_PERI_REG_MASK(PCR_MODEM_CONF_REG, PCR_MODEM_RST_EN);
|
CLEAR_PERI_REG_MASK(PCR_MODEM_CONF_REG, PCR_MODEM_RST_EN);
|
||||||
|
|
||||||
// If we set mspi clock frequency to PLL, but ROM does not have such clock source option. So reset the clock to XTAL when software restart.
|
#if !CONFIG_APP_BUILD_TYPE_PURE_RAM_APP
|
||||||
spi_flash_set_clock_src(MSPI_CLK_SRC_ROM_DEFAULT);
|
/**
|
||||||
|
* Turn down MSPI speed
|
||||||
|
*
|
||||||
|
* We set MSPI clock to a high speed one before, ROM doesn't have such high speed clock source option.
|
||||||
|
* This function will change clock source to a ROM supported one when system restarts.
|
||||||
|
*/
|
||||||
|
mspi_timing_change_speed_mode_cache_safe(true);
|
||||||
|
#endif //#if !CONFIG_APP_BUILD_TYPE_PURE_RAM_APP
|
||||||
|
|
||||||
// Set CPU back to XTAL source, same as hard reset, but keep BBPLL on so that USB Serial JTAG can log at 1st stage bootloader.
|
// Set CPU back to XTAL source, same as hard reset, but keep BBPLL on so that USB Serial JTAG can log at 1st stage bootloader.
|
||||||
#if !CONFIG_IDF_ENV_FPGA
|
#if !CONFIG_IDF_ENV_FPGA
|
||||||
|
@@ -287,13 +287,3 @@ uint8_t esp_mspi_get_io(esp_mspi_io_t io)
|
|||||||
return s_mspi_io_num_default[io];
|
return s_mspi_io_num_default[io];
|
||||||
#endif // SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE
|
#endif // SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SOC_MEMSPI_CLOCK_IS_INDEPENDENT
|
|
||||||
|
|
||||||
IRAM_ATTR void spi_flash_set_clock_src(soc_periph_mspi_clk_src_t clk_src)
|
|
||||||
{
|
|
||||||
cache_hal_freeze(CACHE_TYPE_INSTRUCTION);
|
|
||||||
spimem_flash_ll_set_clock_source(clk_src);
|
|
||||||
cache_hal_unfreeze(CACHE_TYPE_INSTRUCTION);
|
|
||||||
}
|
|
||||||
#endif // SOC_MEMSPI_CLOCK_IS_INDEPENDENT
|
|
||||||
|
@@ -246,16 +246,7 @@ extern const spi_flash_guard_funcs_t g_flash_guard_no_os_ops;
|
|||||||
*/
|
*/
|
||||||
void spi_flash_rom_impl_init(void);
|
void spi_flash_rom_impl_init(void);
|
||||||
|
|
||||||
#if SOC_MEMSPI_CLOCK_IS_INDEPENDENT
|
|
||||||
/**
|
|
||||||
* @brief This functions is used to change spi flash clock source between PLL and others, which is used after system wake up from a low power mode or
|
|
||||||
* enter low-power mode like sleep.
|
|
||||||
* @param clk_src mspi(flash) clock source.
|
|
||||||
*
|
|
||||||
* @note Only called in startup. User should not call this function.
|
|
||||||
*/
|
|
||||||
void spi_flash_set_clock_src(soc_periph_mspi_clk_src_t clk_src);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user