From 2f9456bf511855f5033a625156eed14d3f9ee379 Mon Sep 17 00:00:00 2001 From: wanckl Date: Tue, 22 Oct 2024 15:07:17 +0800 Subject: [PATCH] fix(esp_timer): fix isr safe when CONFIG_FREERTOS_USE_TICKLESS_IDLE and PM_ENABLE --- components/esp_driver_spi/src/gpspi/spi_common.c | 1 + components/esp_timer/src/esp_timer_impl_lac.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/components/esp_driver_spi/src/gpspi/spi_common.c b/components/esp_driver_spi/src/gpspi/spi_common.c index 7e2ed7cc52..1b51593d57 100644 --- a/components/esp_driver_spi/src/gpspi/spi_common.c +++ b/components/esp_driver_spi/src/gpspi/spi_common.c @@ -979,6 +979,7 @@ esp_err_t spi_bus_free(spi_host_device_t host_id) sleep_retention_module_deinit(retention_id); } _lock_release(&ctx->mutex); + _lock_close(&ctx->mutex); #endif #ifdef CONFIG_PM_ENABLE diff --git a/components/esp_timer/src/esp_timer_impl_lac.c b/components/esp_timer/src/esp_timer_impl_lac.c index d557716e65..79503303af 100644 --- a/components/esp_timer/src/esp_timer_impl_lac.c +++ b/components/esp_timer/src/esp_timer_impl_lac.c @@ -222,11 +222,11 @@ static void IRAM_ATTR timer_alarm_isr(void *arg) void IRAM_ATTR esp_timer_impl_update_apb_freq(uint32_t apb_ticks_per_us) { - portENTER_CRITICAL(&s_time_update_lock); + portENTER_CRITICAL_SAFE(&s_time_update_lock); assert(apb_ticks_per_us >= 3 && "divider value too low"); assert(apb_ticks_per_us % TICKS_PER_US == 0 && "APB frequency (in MHz) should be divisible by TICK_PER_US"); REG_SET_FIELD(CONFIG_REG, TIMG_LACT_DIVIDER, apb_ticks_per_us / TICKS_PER_US); - portEXIT_CRITICAL(&s_time_update_lock); + portEXIT_CRITICAL_SAFE(&s_time_update_lock); } void esp_timer_impl_set(uint64_t new_us)