mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 03:00:34 +03:00
feat(spi_flash): Adjust flash clock to real 80M clock, and support 32bit address on eco1
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
#include "esp_spi_flash_counters.h"
|
||||
#include "esp_rom_spiflash.h"
|
||||
#include "bootloader_flash.h"
|
||||
#include "esp_check.h"
|
||||
|
||||
__attribute__((unused)) static const char TAG[] = "spi_flash";
|
||||
|
||||
@@ -317,14 +318,14 @@ static void s_esp_flash_choose_correct_mode(memspi_host_config_t *cfg)
|
||||
static const char *mode = FLASH_MODE_STRING;
|
||||
if (bootloader_flash_is_octal_mode_enabled()) {
|
||||
#if !CONFIG_ESPTOOLPY_FLASHMODE_OPI
|
||||
ESP_EARLY_LOGW(TAG, "Octal flash chip is using but %s mode is selected, will automatically swich to Octal mode", mode);
|
||||
ESP_EARLY_LOGW(TAG, "Octal flash chip is using but %s mode is selected, will automatically switch to Octal mode", mode);
|
||||
cfg->octal_mode_en = 1;
|
||||
cfg->default_io_mode = SPI_FLASH_OPI_STR;
|
||||
default_chip.read_mode = SPI_FLASH_OPI_STR;
|
||||
#endif
|
||||
} else {
|
||||
#if CONFIG_ESPTOOLPY_FLASHMODE_OPI
|
||||
ESP_EARLY_LOGW(TAG, "Quad flash chip is using but %s flash mode is selected, will automatically swich to DIO mode", mode);
|
||||
ESP_EARLY_LOGW(TAG, "Quad flash chip is using but %s flash mode is selected, will automatically switch to DIO mode", mode);
|
||||
cfg->octal_mode_en = 0;
|
||||
cfg->default_io_mode = SPI_FLASH_DIO;
|
||||
default_chip.read_mode = SPI_FLASH_DIO;
|
||||
@@ -357,7 +358,7 @@ esp_err_t esp_flash_init_default_chip(void)
|
||||
#endif
|
||||
|
||||
|
||||
// For chips need time tuning, get value directely from system here.
|
||||
// For chips need time tuning, get value directly from system here.
|
||||
#if SOC_SPI_MEM_SUPPORT_TIMING_TUNING
|
||||
if (spi_flash_timing_is_tuned()) {
|
||||
cfg.using_timing_tuning = 1;
|
||||
@@ -396,6 +397,11 @@ esp_err_t esp_flash_init_default_chip(void)
|
||||
if (default_chip.size > legacy_chip->chip_size) {
|
||||
ESP_EARLY_LOGW(TAG, "Detected size(%dk) larger than the size in the binary image header(%dk). Using the size in the binary image header.", default_chip.size/1024, legacy_chip->chip_size/1024);
|
||||
}
|
||||
#if !CONFIG_IDF_TARGET_ESP32P4 || !CONFIG_APP_BUILD_TYPE_RAM // IDF-10019
|
||||
if (legacy_chip->chip_size > 16 * 1024 * 1024) {
|
||||
ESP_RETURN_ON_ERROR_ISR(esp_mspi_32bit_address_flash_feature_check(), TAG, "32bit address feature check failed");
|
||||
}
|
||||
#endif // !CONFIG_IDF_TARGET_ESP32P4 || !CONFIG_APP_BUILD_TYPE_RAM
|
||||
// Set chip->size equal to ROM flash size(also equal to the size in binary image header), which means the available size that can be used
|
||||
default_chip.size = legacy_chip->chip_size;
|
||||
|
||||
|
||||
@@ -54,6 +54,8 @@
|
||||
#include "bootloader_flash_config.h"
|
||||
#include "esp_compiler.h"
|
||||
#include "esp_rom_efuse.h"
|
||||
#include "soc/chip_revision.h"
|
||||
#include "hal/efuse_hal.h"
|
||||
#if CONFIG_SPIRAM
|
||||
#include "esp_private/esp_psram_io.h"
|
||||
#endif
|
||||
@@ -288,3 +290,19 @@ uint8_t esp_mspi_get_io(esp_mspi_io_t io)
|
||||
return s_mspi_io_num_default[io];
|
||||
#endif // SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE
|
||||
}
|
||||
|
||||
#if !CONFIG_IDF_TARGET_ESP32P4 || !CONFIG_APP_BUILD_TYPE_RAM // IDF-10019
|
||||
esp_err_t IRAM_ATTR esp_mspi_32bit_address_flash_feature_check(void)
|
||||
{
|
||||
#if CONFIG_IDF_TARGET_ESP32P4
|
||||
// IDF-10019
|
||||
unsigned chip_version = efuse_hal_chip_revision();
|
||||
if (unlikely(!ESP_CHIP_REV_ABOVE(chip_version, 1))) {
|
||||
ESP_EARLY_LOGE(TAG, "32bit address (flash over 16MB) has high risk on ESP32P4 ECO0");
|
||||
return ESP_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
#endif
|
||||
|
||||
return ESP_OK;
|
||||
}
|
||||
#endif // !CONFIG_IDF_TARGET_ESP32P4 || !CONFIG_APP_BUILD_TYPE_RAM
|
||||
|
||||
@@ -119,6 +119,13 @@ void spi_flash_set_erasing_flag(bool status);
|
||||
*/
|
||||
bool spi_flash_brownout_need_reset(void);
|
||||
|
||||
/**
|
||||
* @brief Check whether esp-chip supports 32bit address properly
|
||||
*
|
||||
* @return ESP_OK for supported, ESP_ERR_NOT_SUPPORTED for not supported
|
||||
*/
|
||||
esp_err_t esp_mspi_32bit_address_flash_feature_check(void);
|
||||
|
||||
#if CONFIG_SPI_FLASH_HPM_ON
|
||||
/**
|
||||
* @brief Enable SPI flash high performance mode.
|
||||
|
||||
@@ -75,7 +75,11 @@ static bool IRAM_ATTR gptimer_alarm_suspend_cb(gptimer_handle_t timer, const gpt
|
||||
#if CONFIG_IDF_TARGET_ESP32S3
|
||||
Cache_Invalidate_DCache_All();
|
||||
#endif
|
||||
#if CONFIG_IDF_TARGET_ESP32P4
|
||||
Cache_Invalidate_All(CACHE_MAP_L2_CACHE);
|
||||
#else
|
||||
Cache_Invalidate_ICache_All();
|
||||
#endif
|
||||
s_flash_func_t1 = esp_cpu_get_cycle_count();
|
||||
func_in_flash();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user