diff --git a/components/esp32/pm_esp32.c b/components/esp32/pm_esp32.c index 80008b745d..241bd13d7f 100644 --- a/components/esp32/pm_esp32.c +++ b/components/esp32/pm_esp32.c @@ -68,8 +68,6 @@ static portMUX_TYPE s_switch_lock = portMUX_INITIALIZER_UNLOCKED; static pm_mode_t s_mode = PM_MODE_CPU_MAX; /* True when switch is in progress */ static volatile bool s_is_switching; -/* When switch is in progress, this is the mode we are switching into */ -static pm_mode_t s_new_mode = PM_MODE_CPU_MAX; /* Number of times each mode was locked */ static size_t s_mode_lock_counts[PM_MODE_COUNT]; /* Bit mask of locked modes. BIT(i) is set iff s_mode_lock_counts[i] > 0. */ @@ -284,7 +282,7 @@ void IRAM_ATTR esp_pm_impl_switch_mode(pm_mode_t mode, #endif // WITH_PROFILING } portEXIT_CRITICAL_SAFE(&s_switch_lock); - if (need_switch && new_mode != s_mode) { + if (need_switch) { do_switch(new_mode); } } @@ -355,16 +353,15 @@ static void IRAM_ATTR do_switch(pm_mode_t new_mode) if (!s_is_switching) { break; } - if (s_new_mode <= new_mode) { - portEXIT_CRITICAL_ISR(&s_switch_lock); - return; - } if (s_need_update_ccompare[core_id]) { s_need_update_ccompare[core_id] = false; } portEXIT_CRITICAL_ISR(&s_switch_lock); } while (true); - s_new_mode = new_mode; + if (new_mode == s_mode) { + portEXIT_CRITICAL_ISR(&s_switch_lock); + return; + } s_is_switching = true; bool config_changed = s_config_changed; s_config_changed = false; diff --git a/components/esp32s2beta/pm_esp32s2beta.c b/components/esp32s2beta/pm_esp32s2beta.c index e3e5180af5..84b5e46c67 100644 --- a/components/esp32s2beta/pm_esp32s2beta.c +++ b/components/esp32s2beta/pm_esp32s2beta.c @@ -62,8 +62,6 @@ static portMUX_TYPE s_switch_lock = portMUX_INITIALIZER_UNLOCKED; static pm_mode_t s_mode = PM_MODE_CPU_MAX; /* True when switch is in progress */ static volatile bool s_is_switching; -/* When switch is in progress, this is the mode we are switching into */ -static pm_mode_t s_new_mode = PM_MODE_CPU_MAX; /* Number of times each mode was locked */ static size_t s_mode_lock_counts[PM_MODE_COUNT]; /* Bit mask of locked modes. BIT(i) is set iff s_mode_lock_counts[i] > 0. */ @@ -289,7 +287,7 @@ void IRAM_ATTR esp_pm_impl_switch_mode(pm_mode_t mode, #endif // WITH_PROFILING } portEXIT_CRITICAL(&s_switch_lock); - if (need_switch && new_mode != s_mode) { + if (need_switch) { do_switch(new_mode); } } @@ -360,16 +358,15 @@ static void IRAM_ATTR do_switch(pm_mode_t new_mode) if (!s_is_switching) { break; } - if (s_new_mode <= new_mode) { - portEXIT_CRITICAL_ISR(&s_switch_lock); - return; - } if (s_need_update_ccompare[core_id]) { s_need_update_ccompare[core_id] = false; } portEXIT_CRITICAL_ISR(&s_switch_lock); } while (true); - s_new_mode = new_mode; + if (new_mode == s_mode) { + portEXIT_CRITICAL_ISR(&s_switch_lock); + return; + } s_is_switching = true; bool config_changed = s_config_changed; s_config_changed = false;