Skip to content

Commit

Permalink
Merge branch 'bugfix/esp32_light_sleep_crash_4.4' into 'release/v4.4'
Browse files Browse the repository at this point in the history
Fix crash caused by bluetooth high level interrupt (v4.4)

See merge request espressif/esp-idf!15872
  • Loading branch information
jack0c committed Nov 11, 2021
2 parents bd9d8c3 + 44b9e6e commit f6db715
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
4 changes: 4 additions & 0 deletions components/esp_pm/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,8 @@ menu "Power Management"
If enabled, the I/D-cache tag memory will be retained in light sleep. Depending on the the
cache configuration, if this option is enabled, it will consume up to 9 KB of internal RAM.

config PM_UPDATE_CCOMPARE_HLI_WORKAROUND
bool
default y if PM_ENABLE && BTDM_CTRL_HLI

endmenu # "Power Management"
7 changes: 7 additions & 0 deletions components/esp_pm/pm_impl.c
Original file line number Diff line number Diff line change
Expand Up @@ -528,6 +528,10 @@ static void IRAM_ATTR do_switch(pm_mode_t new_mode)
*/
static void IRAM_ATTR update_ccompare(void)
{
#if CONFIG_PM_UPDATE_CCOMPARE_HLI_WORKAROUND
/* disable level 4 and below */
uint32_t irq_status = XTOS_SET_INTLEVEL(XCHAL_DEBUGLEVEL - 2);
#endif
uint32_t ccount = cpu_hal_get_cycle_count();
uint32_t ccompare = XTHAL_GET_CCOMPARE(XT_TIMER_INDEX);
if ((ccompare - CCOMPARE_MIN_CYCLES_IN_FUTURE) - ccount < UINT32_MAX / 2) {
Expand All @@ -538,6 +542,9 @@ static void IRAM_ATTR update_ccompare(void)
XTHAL_SET_CCOMPARE(XT_TIMER_INDEX, new_ccompare);
}
}
#if CONFIG_PM_UPDATE_CCOMPARE_HLI_WORKAROUND
XTOS_RESTORE_INTLEVEL(irq_status);
#endif
}
#endif // CONFIG_FREERTOS_SYSTICK_USES_CCOUNT

Expand Down

0 comments on commit f6db715

Please sign in to comment.