spi_flash: Expose an accessor the current SPI flash guard functions

Change places which uses g_flash_guard_default_ops to use this. Probably exact same data, but a bit
cleaner.
This commit is contained in:
Angus Gratton 2017-11-17 15:00:51 +11:00 committed by Angus Gratton
parent e72e5a9706
commit 7a924bd85a
5 changed files with 23 additions and 9 deletions

View File

@ -212,27 +212,27 @@ IRAM_ATTR TEST_CASE("ETSTimers arm & disarm run from IRAM", "[ets_timer]")
/* arm a disabled timer, then disarm a live timer */
g_flash_guard_default_ops.start(); // Disables flash cache
spi_flash_guard_get()->start(); // Disables flash cache
ets_timer_arm(&timer1, INTERVAL, false);
// redundant call is deliberate (test code path if already armed)
ets_timer_arm(&timer1, INTERVAL, false);
ets_timer_disarm(&timer1);
g_flash_guard_default_ops.end(); // Re-enables flash cache
spi_flash_guard_get()->end(); // Re-enables flash cache
TEST_ASSERT_FALSE(flag); // didn't expire yet
/* do the same thing but wait for the timer to expire */
g_flash_guard_default_ops.start();
spi_flash_guard_get()->start();
ets_timer_arm(&timer1, INTERVAL, false);
g_flash_guard_default_ops.end();
spi_flash_guard_get()->end();
vTaskDelay(2 * INTERVAL / portTICK_PERIOD_MS);
TEST_ASSERT_TRUE(flag);
g_flash_guard_default_ops.start();
spi_flash_guard_get()->start();
ets_timer_disarm(&timer1);
g_flash_guard_default_ops.end();
spi_flash_guard_get()->end();
}

View File

@ -105,7 +105,7 @@ TEST_CASE("heap_caps metadata test", "[heap]")
*/
static IRAM_ATTR __attribute__((noinline)) bool iram_malloc_test()
{
g_flash_guard_default_ops.start(); // Disables flash cache
spi_flash_guard_get()->start(); // Disables flash cache
bool result = true;
void *x = heap_caps_malloc(64, MALLOC_CAP_32BIT);
@ -114,7 +114,7 @@ static IRAM_ATTR __attribute__((noinline)) bool iram_malloc_test()
result = result && (y != NULL);
heap_caps_free(y);
g_flash_guard_default_ops.end(); // Re-enables flash cache
spi_flash_guard_get()->end(); // Re-enables flash cache
return result;
}

View File

@ -214,7 +214,7 @@ void spi_flash_op_unlock()
void IRAM_ATTR spi_flash_disable_interrupts_caches_and_other_cpu()
{
spi_flash_op_lockspi_flash_op_lock();
spi_flash_op_lock();
esp_intr_noniram_disable();
spi_flash_disable_cache(0, &s_flash_op_cache_state[0]);
}

View File

@ -137,6 +137,11 @@ void IRAM_ATTR spi_flash_guard_set(const spi_flash_guard_funcs_t *funcs)
s_flash_guard_ops = funcs;
}
const spi_flash_guard_funcs_t *IRAM_ATTR spi_flash_guard_get()
{
return s_flash_guard_ops;
}
size_t IRAM_ATTR spi_flash_get_chip_size()
{
return g_rom_flashchip.chip_size;

View File

@ -324,6 +324,15 @@ typedef struct {
*/
void spi_flash_guard_set(const spi_flash_guard_funcs_t* funcs);
/**
* @brief Get the guard functions used for flash access
*
* @return The guard functions that were set via spi_flash_guard_set(). These functions
* can be called if implementing custom low-level SPI flash operations.
*/
const spi_flash_guard_funcs_t *spi_flash_guard_get();
/**
* @brief Default OS-aware flash access guard functions
*/