mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
spi_flash: No CPU release time for an erase operation when OS is not running
During the early start, the virtual eFuse mode can call erase operations when OS is not yet running. Possible workaround: CONFIG_SPI_FLASH_YIELD_DURING_ERASE=n Fixed for the legacy flash driver as well.
This commit is contained in:
parent
2606f3101b
commit
884a6b17cc
@ -51,6 +51,7 @@
|
||||
#include "esp_flash.h"
|
||||
#include "esp_attr.h"
|
||||
#include "bootloader_flash.h"
|
||||
#include "esp_compiler.h"
|
||||
|
||||
esp_rom_spiflash_result_t IRAM_ATTR spi_flash_write_encrypted_chip(size_t dest_addr, const void *src, size_t size);
|
||||
|
||||
@ -254,7 +255,9 @@ static inline void IRAM_ATTR spi_flash_guard_op_unlock(void)
|
||||
static void IRAM_ATTR spi_flash_os_yield(void)
|
||||
{
|
||||
#ifdef CONFIG_SPI_FLASH_YIELD_DURING_ERASE
|
||||
vTaskDelay(CONFIG_SPI_FLASH_ERASE_YIELD_TICKS);
|
||||
if (likely(xTaskGetSchedulerState() == taskSCHEDULER_RUNNING)) {
|
||||
vTaskDelay(CONFIG_SPI_FLASH_ERASE_YIELD_TICKS);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1,16 +1,8 @@
|
||||
// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <sys/param.h> //For max/min
|
||||
@ -24,7 +16,7 @@
|
||||
#include "hal/spi_types.h"
|
||||
#include "sdkconfig.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
#include "esp_compiler.h"
|
||||
#include "esp_rom_sys.h"
|
||||
|
||||
#include "driver/spi_common_internal.h"
|
||||
@ -140,11 +132,13 @@ static IRAM_ATTR esp_err_t spi1_flash_os_check_yield(void *arg, uint32_t chip_st
|
||||
|
||||
static IRAM_ATTR esp_err_t spi1_flash_os_yield(void *arg, uint32_t* out_status)
|
||||
{
|
||||
if (likely(xTaskGetSchedulerState() == taskSCHEDULER_RUNNING)) {
|
||||
#ifdef CONFIG_SPI_FLASH_ERASE_YIELD_TICKS
|
||||
vTaskDelay(CONFIG_SPI_FLASH_ERASE_YIELD_TICKS);
|
||||
vTaskDelay(CONFIG_SPI_FLASH_ERASE_YIELD_TICKS);
|
||||
#else
|
||||
vTaskDelay(1);
|
||||
vTaskDelay(1);
|
||||
#endif
|
||||
}
|
||||
on_spi1_yielded((spi1_app_func_arg_t*)arg);
|
||||
return ESP_OK;
|
||||
}
|
||||
|
@ -2450,7 +2450,6 @@ components/spi_flash/spi_flash_chip_issi.c
|
||||
components/spi_flash/spi_flash_chip_mxic.c
|
||||
components/spi_flash/spi_flash_chip_mxic_opi.c
|
||||
components/spi_flash/spi_flash_chip_winbond.c
|
||||
components/spi_flash/spi_flash_os_func_app.c
|
||||
components/spi_flash/spi_flash_os_func_noos.c
|
||||
components/spi_flash/test/test_esp_flash.c
|
||||
components/spi_flash/test/test_flash_encryption.c
|
||||
|
Loading…
x
Reference in New Issue
Block a user