drivers: timer: nrf_rtc_timer: Add Lock Zero Latency IRQs Kconfig

Add an explicit Kconfig option to enable use of
__disable_irq() in nRF RTC timer driver to prevent higher
priority contexts (including ZLIs) that might preempt the
handler and call nrf_rtc_timer API from destroying the
internal state in nrf_rtc_timer.

Relates to commit fcda8699cb ("drivers: timer: extend
nrf_rtc_timer").

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2022-03-03 13:27:39 +05:30 committed by Carles Cufí
commit 4eb5c375e1
2 changed files with 13 additions and 2 deletions

View file

@ -23,6 +23,17 @@ config NRF_RTC_TIMER_USER_CHAN_COUNT
help
Use nrf_rtc_timer.h API. Driver is not managing allocation of channels.
config NRF_RTC_TIMER_LOCK_ZERO_LATENCY_IRQS
# hidden option
bool
depends on ZERO_LATENCY_IRQS
default y
help
Enable use of __disable_irq() to disable Zero Latency IRQs to prevent
higher priority contexts (including ZLIs) that might preempt the
handler and call nrf_rtc_timer API from destroying the internal state
in nrf_rtc_timer.
choice
prompt "Clock startup policy"
default SYSTEM_CLOCK_WAIT_FOR_STABILITY

View file

@ -98,7 +98,7 @@ static uint32_t full_int_lock(void)
{
uint32_t mcu_critical_state;
if (IS_ENABLED(CONFIG_ZERO_LATENCY_IRQS)) {
if (IS_ENABLED(CONFIG_NRF_RTC_TIMER_LOCK_ZERO_LATENCY_IRQS)) {
mcu_critical_state = __get_PRIMASK();
__disable_irq();
} else {
@ -110,7 +110,7 @@ static uint32_t full_int_lock(void)
static void full_int_unlock(uint32_t mcu_critical_state)
{
if (IS_ENABLED(CONFIG_ZERO_LATENCY_IRQS)) {
if (IS_ENABLED(CONFIG_NRF_RTC_TIMER_LOCK_ZERO_LATENCY_IRQS)) {
__set_PRIMASK(mcu_critical_state);
} else {
irq_unlock(mcu_critical_state);