From 7a924bd85ae28863724f9c46eb348b378c5ef680 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Fri, 17 Nov 2017 15:00:51 +1100 Subject: [PATCH] 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. --- components/esp32/test/test_ets_timer.c | 12 ++++++------ components/heap/test/test_malloc_caps.c | 4 ++-- components/spi_flash/cache_utils.c | 2 +- components/spi_flash/flash_ops.c | 5 +++++ components/spi_flash/include/esp_spi_flash.h | 9 +++++++++ 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/components/esp32/test/test_ets_timer.c b/components/esp32/test/test_ets_timer.c index fa79bea8cb..33f633ff69 100644 --- a/components/esp32/test/test_ets_timer.c +++ b/components/esp32/test/test_ets_timer.c @@ -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(); } diff --git a/components/heap/test/test_malloc_caps.c b/components/heap/test/test_malloc_caps.c index a41bf59583..0be5f6a6ca 100644 --- a/components/heap/test/test_malloc_caps.c +++ b/components/heap/test/test_malloc_caps.c @@ -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; } diff --git a/components/spi_flash/cache_utils.c b/components/spi_flash/cache_utils.c index 63c6692cee..bc4e8885eb 100644 --- a/components/spi_flash/cache_utils.c +++ b/components/spi_flash/cache_utils.c @@ -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]); } diff --git a/components/spi_flash/flash_ops.c b/components/spi_flash/flash_ops.c index 4b811d1151..7fd47dcca4 100644 --- a/components/spi_flash/flash_ops.c +++ b/components/spi_flash/flash_ops.c @@ -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; diff --git a/components/spi_flash/include/esp_spi_flash.h b/components/spi_flash/include/esp_spi_flash.h index 7d6a03612b..8dee9d341e 100644 --- a/components/spi_flash/include/esp_spi_flash.h +++ b/components/spi_flash/include/esp_spi_flash.h @@ -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 */