mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-31 19:24:33 +02:00
Merge branch 'feat/spi_flash_override_size_v4.1' into 'release/v4.1'
spi_flash: add config option to override flash size in bootloader header (v4.1) See merge request espressif/esp-idf!12457
This commit is contained in:
@@ -27,6 +27,14 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
void bootloader_flash_update_id(void);
|
void bootloader_flash_update_id(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Update the flash size in g_rom_flashchip (global esp_rom_spiflash_chip_t structure).
|
||||||
|
*
|
||||||
|
* @param size The size to store, in bytes.
|
||||||
|
* @return None
|
||||||
|
*/
|
||||||
|
void bootloader_flash_update_size(uint32_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set the flash CS setup and hold time.
|
* @brief Set the flash CS setup and hold time.
|
||||||
*
|
*
|
||||||
|
@@ -169,6 +169,14 @@ esp_err_t esp_image_verify_bootloader(uint32_t *length);
|
|||||||
*/
|
*/
|
||||||
esp_err_t esp_image_verify_bootloader_data(esp_image_metadata_t *data);
|
esp_err_t esp_image_verify_bootloader_data(esp_image_metadata_t *data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the flash size of the image
|
||||||
|
*
|
||||||
|
* @param app_flash_size The value configured in the image header
|
||||||
|
* @return Actual size, in bytes.
|
||||||
|
*/
|
||||||
|
int esp_image_get_flash_size(esp_image_flash_size_t app_flash_size);
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t drom_addr;
|
uint32_t drom_addr;
|
||||||
|
@@ -32,6 +32,11 @@ void bootloader_flash_update_id(void)
|
|||||||
g_rom_flashchip.device_id = bootloader_read_flash_id();
|
g_rom_flashchip.device_id = bootloader_read_flash_id();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bootloader_flash_update_size(uint32_t size)
|
||||||
|
{
|
||||||
|
g_rom_flashchip.chip_size = size;
|
||||||
|
}
|
||||||
|
|
||||||
void IRAM_ATTR bootloader_flash_cs_timing_config(void)
|
void IRAM_ATTR bootloader_flash_cs_timing_config(void)
|
||||||
{
|
{
|
||||||
SET_PERI_REG_MASK(SPI_USER_REG(0), SPI_CS_HOLD_M | SPI_CS_SETUP_M);
|
SET_PERI_REG_MASK(SPI_USER_REG(0), SPI_CS_HOLD_M | SPI_CS_SETUP_M);
|
||||||
|
@@ -851,3 +851,21 @@ static esp_err_t verify_simple_hash(bootloader_sha256_handle_t sha_handle, esp_i
|
|||||||
bootloader_munmap(hash);
|
bootloader_munmap(hash);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int esp_image_get_flash_size(esp_image_flash_size_t app_flash_size)
|
||||||
|
{
|
||||||
|
switch (app_flash_size) {
|
||||||
|
case ESP_IMAGE_FLASH_SIZE_1MB:
|
||||||
|
return 1 * 1024 * 1024;
|
||||||
|
case ESP_IMAGE_FLASH_SIZE_2MB:
|
||||||
|
return 2 * 1024 * 1024;
|
||||||
|
case ESP_IMAGE_FLASH_SIZE_4MB:
|
||||||
|
return 4 * 1024 * 1024;
|
||||||
|
case ESP_IMAGE_FLASH_SIZE_8MB:
|
||||||
|
return 8 * 1024 * 1024;
|
||||||
|
case ESP_IMAGE_FLASH_SIZE_16MB:
|
||||||
|
return 16 * 1024 * 1024;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
@@ -421,9 +421,8 @@ void start_cpu0_default(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
bootloader_flash_update_id();
|
bootloader_flash_update_id();
|
||||||
#if !CONFIG_SPIRAM_BOOT_INIT
|
|
||||||
// Read the application binary image header. This will also decrypt the header if the image is encrypted.
|
// Read the application binary image header. This will also decrypt the header if the image is encrypted.
|
||||||
esp_image_header_t fhdr = {0};
|
__attribute__((unused)) esp_image_header_t fhdr = {0};
|
||||||
#ifdef CONFIG_APP_BUILD_TYPE_ELF_RAM
|
#ifdef CONFIG_APP_BUILD_TYPE_ELF_RAM
|
||||||
fhdr.spi_mode = ESP_IMAGE_SPI_MODE_DIO;
|
fhdr.spi_mode = ESP_IMAGE_SPI_MODE_DIO;
|
||||||
fhdr.spi_speed = ESP_IMAGE_SPI_SPEED_40M;
|
fhdr.spi_speed = ESP_IMAGE_SPI_SPEED_40M;
|
||||||
@@ -438,6 +437,7 @@ void start_cpu0_default(void)
|
|||||||
memcpy(&fhdr, (void*) SOC_DROM_LOW, sizeof(fhdr));
|
memcpy(&fhdr, (void*) SOC_DROM_LOW, sizeof(fhdr));
|
||||||
#endif // CONFIG_APP_BUILD_TYPE_ELF_RAM
|
#endif // CONFIG_APP_BUILD_TYPE_ELF_RAM
|
||||||
|
|
||||||
|
#if !CONFIG_SPIRAM_BOOT_INIT
|
||||||
// If psram is uninitialized, we need to improve some flash configuration.
|
// If psram is uninitialized, we need to improve some flash configuration.
|
||||||
bootloader_flash_clock_config(&fhdr);
|
bootloader_flash_clock_config(&fhdr);
|
||||||
bootloader_flash_gpio_config(&fhdr);
|
bootloader_flash_gpio_config(&fhdr);
|
||||||
@@ -445,6 +445,15 @@ void start_cpu0_default(void)
|
|||||||
bootloader_flash_cs_timing_config();
|
bootloader_flash_cs_timing_config();
|
||||||
#endif //!CONFIG_SPIRAM_BOOT_INIT
|
#endif //!CONFIG_SPIRAM_BOOT_INIT
|
||||||
|
|
||||||
|
#if CONFIG_SPI_FLASH_SIZE_OVERRIDE
|
||||||
|
int app_flash_size = esp_image_get_flash_size(fhdr.spi_size);
|
||||||
|
if (app_flash_size < 1 * 1024 * 1024) {
|
||||||
|
ESP_LOGE(TAG, "Invalid flash size in app image header.");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
bootloader_flash_update_size(app_flash_size);
|
||||||
|
#endif //CONFIG_SPI_FLASH_SIZE_OVERRIDE
|
||||||
|
|
||||||
spi_flash_init();
|
spi_flash_init();
|
||||||
/* init default OS-aware flash access critical section */
|
/* init default OS-aware flash access critical section */
|
||||||
spi_flash_guard_set(&g_flash_guard_default_ops);
|
spi_flash_guard_set(&g_flash_guard_default_ops);
|
||||||
|
@@ -114,6 +114,14 @@ menu "SPI Flash driver"
|
|||||||
help
|
help
|
||||||
Defines how many ticks will be before returning to continue a erasing.
|
Defines how many ticks will be before returning to continue a erasing.
|
||||||
|
|
||||||
|
config SPI_FLASH_SIZE_OVERRIDE
|
||||||
|
bool "Override flash size in bootloader header by ESPTOOLPY_FLASHSIZE"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
SPI Flash driver uses the flash size configured in bootloader header by default.
|
||||||
|
Enable this option to override flash size with latest ESPTOOLPY_FLASHSIZE value from
|
||||||
|
the app header if the size in the bootloader header is incorrect.
|
||||||
|
|
||||||
menu "Auto-detect flash chips"
|
menu "Auto-detect flash chips"
|
||||||
|
|
||||||
config SPI_FLASH_SUPPORT_ISSI_CHIP
|
config SPI_FLASH_SUPPORT_ISSI_CHIP
|
||||||
|
Reference in New Issue
Block a user