Skip to content

Commit d8246cd

Browse files
committed
mpsl: Make init SoC config extensible and feature-based
Today, MPSL init hard-codes per-soc-series IRQs, timers, channel masks and so on, inside mpsl_init.c. That prevents from extending the MPSL confiuration from out-of-tree modules. This change separates concerns: MSPL init keep the initializaiton flow and safety checks; the common SoC conifguration is supplied with mpsl_init_soc.h. The new header file is unconditionally included in mpsl_init.c but the include directory path depends on the SoC series. That allows to override the include directory path from out-of-tree modules. In case unknown SoC series is used the compilation will fail. Changed MPSL init library definition in CMakelist.txt, using the zephyr_library_get_current_dir_lib_name() based on the ZEPHYR_NRF_MODULE_DIR, allows to use zephyr_library_amend() and modify the library in similar way e.g. sdk-nrf/drviers amed their counterpart in zephyr/drivers. MPSL init configuration should not ask “which nRF series is this?” when the real question is “does this hardware have for example: TIMER10 / GRTC?”. Where possible, series checks are replaced by existing HW Kconfig (CONFIG_NRFX_POWER, CONFIG_NRFX_GRTC) or an explicit MPSL feature (MPSL_LOW_LATENCY_CALLBACKS), so compatible SoCs opt in by capability, not by pretending to be another series. Signed-off-by: Piotr Pryga <piotr.pryga@nordicsemi.no>
1 parent 54d22ce commit d8246cd

5 files changed

Lines changed: 144 additions & 80 deletions

File tree

drivers/mpsl/flash_sync/flash_sync_mpsl.c

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -57,24 +57,21 @@ struct mpsl_context {
5757

5858
static struct mpsl_context _context;
5959

60+
/* The get_timeslot_time_us() is supported only for nRF52 and nRF53 series. Check for existence
61+
* of timer0 node in the device tree is enough to figure out whether the function is supported.
62+
*/
63+
#if DT_NODE_EXISTS(DT_NODELABEL(timer0))
6064
/**
6165
* Get time in microseconds since the beginning of the timeslot.
6266
*
6367
* This should only be called inside the timeslot.
6468
*/
6569
static uint32_t get_timeslot_time_us(void)
6670
{
67-
#ifdef CONFIG_SOC_COMPATIBLE_NRF54LX
68-
nrf_timer_task_trigger(NRF_TIMER10, NRF_TIMER_TASK_CAPTURE0);
69-
return nrf_timer_cc_get(NRF_TIMER10, NRF_TIMER_CC_CHANNEL0);
70-
#elif CONFIG_SOC_NRF54H20
71-
/* Unused */
72-
return 0;
73-
#else
74-
nrf_timer_task_trigger(NRF_TIMER0, NRF_TIMER_TASK_CAPTURE0);
75-
return nrf_timer_cc_get(NRF_TIMER0, NRF_TIMER_CC_CHANNEL0);
76-
#endif /* CONFIG_SOC_COMPATIBLE_NRF54LX */
71+
nrf_timer_task_trigger(MPSL_TIMER0, NRF_TIMER_TASK_CAPTURE0);
72+
return nrf_timer_cc_get(MPSL_TIMER0, NRF_TIMER_CC_CHANNEL0);
7773
}
74+
#endif /* DT_NODE_EXISTS(DT_NODELABEL(timer0)) */
7875

7976
static void reschedule_next_timeslot(void)
8077
{
@@ -246,19 +243,22 @@ void nrf_flash_sync_get_timestamp_begin(void)
246243

247244
bool nrf_flash_sync_check_time_limit(uint32_t iteration)
248245
{
249-
#if defined(CONFIG_SOC_COMPATIBLE_NRF54LX) || defined(CONFIG_SOC_NRF54H20)
246+
#if DT_NODE_EXISTS(DT_NODELABEL(timer0))
247+
/* The get_timeslot_time_us() is supported only for nRF52 and nRF53 series. Check for
248+
* existence of timer0 node in the device tree is enough to figure out whether the function
249+
* is supported.
250+
*/
251+
uint32_t now_us = get_timeslot_time_us();
252+
uint32_t time_per_iteration_us = now_us / iteration;
253+
254+
return now_us + time_per_iteration_us >= _context.request_length_us;
255+
#else
250256
/* The time taken in a previous write is not a predictor of the time taken
251257
* for the next write. Writing the same value as is already stored is much
252258
* faster than writing a different value. If the first few writes are fast
253259
* and the later ones are slow we may get an overstay assert. The configured
254260
* event length is only guaranteed to fit one write block.
255261
*/
256-
257-
(void)get_timeslot_time_us; /* Needed to avoid build time warning: unused static function*/
258262
return true;
259-
#else
260-
uint32_t now_us = get_timeslot_time_us();
261-
uint32_t time_per_iteration_us = now_us / iteration;
262-
return now_us + time_per_iteration_us >= _context.request_length_us;
263-
#endif /* CONFIG_SOC_COMPATIBLE_NRF54LX || CONFIG_SOC_NRF54H20 */
263+
#endif /* DT_NODE_EXISTS(DT_NODELABEL(timer0)) */
264264
}

subsys/mpsl/init/CMakeLists.txt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,18 @@
44
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
55
#
66

7-
zephyr_library()
7+
# Create the library name based on the $ZEPHYR_NRF_MODULE_DIR path.
8+
# This removes the `nrf` part from the library name. It allows to amend library with
9+
# zephyr_library_amend() from out-of-tree modules.
10+
zephyr_library_get_current_dir_lib_name(${ZEPHYR_NRF_MODULE_DIR} lib_name)
11+
zephyr_library_named(${lib_name})
812

913
zephyr_library_sources(mpsl_init.c)
14+
15+
if(CONFIG_SOC_COMPATIBLE_NRF52X OR
16+
CONFIG_SOC_COMPATIBLE_NRF53X OR
17+
CONFIG_SOC_COMPATIBLE_NRF54LX OR
18+
CONFIG_SOC_SERIES_NRF54H OR
19+
CONFIG_SOC_SERIES_NRF71)
20+
zephyr_library_include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
21+
endif()

subsys/mpsl/init/Kconfig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,14 @@ config MPSL_FORCE_RRAM_ON_ALL_THE_TIME
128128
This is not needed when only basic bluetooth features are used.
129129
Only needed when for example LLPM, Frame space update, ISO or Channel Sounding is used.
130130

131+
config MPSL_LOW_LATENCY_CALLBACKS
132+
bool
133+
default y if SOC_COMPATIBLE_NRF54LX
134+
help
135+
This option enables the use of low latency callbacks implemented in the MPSL subsystem.
136+
These callbacks are used to acquire and release low latency settings to the system when
137+
time-critical code is executed (for example around radio activity).
138+
131139
module=MPSL
132140
module-str=MPSL
133141
source "$(ZEPHYR_BASE)/subsys/logging/Kconfig.template.log_config"
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Copyright (c) 2025 Nordic Semiconductor ASA
3+
*
4+
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5+
*/
6+
7+
/**
8+
* @file mpsl_init_soc.h
9+
*
10+
* @brief SoC-specific parameters for MPSL init.
11+
*
12+
*/
13+
14+
#ifndef MPSL_INIT_SOC_H__
15+
#define MPSL_INIT_SOC_H__
16+
17+
#if defined(CONFIG_SOC_COMPATIBLE_NRF52X) || defined(CONFIG_SOC_COMPATIBLE_NRF53X)
18+
#define MPSL_INIT_SOC_COUNTER_RESERVED_NODES rtc0, timer0
19+
#define MPSL_TIMER_IRQn TIMER0_IRQn
20+
#define MPSL_RTC_IRQn RTC0_IRQn
21+
#define MPSL_RADIO_IRQn RADIO_IRQn
22+
23+
#elif defined(CONFIG_SOC_COMPATIBLE_NRF54LX) || defined(CONFIG_SOC_SERIES_NRF71)
24+
#define MPSL_INIT_SOC_COUNTER_RESERVED_NODES timer10
25+
#define MPSL_TIMER_IRQn TIMER10_IRQn
26+
#define MPSL_RTC_IRQn GRTC_3_IRQn
27+
#define MPSL_RADIO_IRQn RADIO_0_IRQn
28+
29+
#define MPSL_RESERVED_GRTC_CHANNELS ((1U << 7) | (1U << 8) | (1U << 9) | (1U << 10) | (1U << 11))
30+
31+
#elif defined(CONFIG_SOC_SERIES_NRF54H)
32+
#define MPSL_INIT_SOC_COUNTER_RESERVED_NODES timer020
33+
#define MPSL_TIMER_IRQn TIMER020_IRQn
34+
#define MPSL_RTC_IRQn GRTC_2_IRQn
35+
#define MPSL_RADIO_IRQn RADIO_0_IRQn
36+
#define MPSL_RESERVED_IPCT_SOURCE_CHANNELS (1U << 0)
37+
#define MPSL_RESERVED_DPPI_SOURCE_CHANNELS (1U << 0)
38+
#define MPSL_RESERVED_DPPI_SINK_CHANNELS (1U << 0)
39+
40+
#define MPSL_RESERVED_GRTC_CHANNELS ((1U << 8) | (1U << 9) | (1U << 10) | (1U << 11) | (1U << 12))
41+
#endif /* CONFIG_SOC_COMPATIBLE_NRF52X || CONFIG_SOC_NRF5340_CPUNET */
42+
43+
#if defined(CONFIG_SOC_SERIES_NRF54L)
44+
#define MPSL_INIT_SOC_CPU_FREQ_MHZ 128
45+
#endif
46+
47+
#endif /* MPSL_INIT_SOC_H__ */

subsys/mpsl/init/mpsl_init.c

Lines changed: 58 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,23 @@
2222
#include "tfm_platform_api.h"
2323
#include "tfm_ioctl_core_api.h"
2424
#endif
25-
#if IS_ENABLED(CONFIG_SOC_COMPATIBLE_NRF54LX)
25+
26+
#if IS_ENABLED(CONFIG_MPSL_LOW_LATENCY_CALLBACKS)
27+
#if IS_ENABLED(CONFIG_NRFX_POWER)
2628
#include <nrfx_power.h>
27-
#endif
28-
#if IS_ENABLED(CONFIG_SOC_SERIES_NRF54L)
29+
#else
30+
#include <hal/nrf_power.h>
31+
#endif /* CONFIG_NRFX_POWER */
32+
33+
#if IS_ENABLED(CONFIG_NRF_SYS_EVENT)
2934
#include <nrf_sys_event.h>
30-
#endif
35+
#endif /* CONFIG_NRF_SYS_EVENT */
36+
#endif /* IS_ENABLED(CONFIG_MPSL_LOW_LATENCY_CALLBACKS) */
37+
38+
/* Include SoC-specific parameters for MPSL init.
39+
* Keep this include as is to do not break the overload functionality.
40+
*/
41+
#include <mpsl_init_soc.h>
3142

3243
#if defined(CONFIG_SOC_SERIES_NRF54H)
3344
#include <hal/nrf_dppi.h>
@@ -61,47 +72,20 @@ extern void rtc_pretick_rtc0_isr_hook(void);
6172
#endif
6273

6374
#if IS_ENABLED(CONFIG_COUNTER)
64-
#if IS_ENABLED(CONFIG_SOC_COMPATIBLE_NRF52X) || IS_ENABLED(CONFIG_SOC_NRF5340_CPUNET)
65-
BUILD_ASSERT(!DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(rtc0)),
66-
"MPSL reserves RTC0 on this SoC.");
67-
BUILD_ASSERT(!DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(timer0)),
68-
"MPSL reserves TIMER0 on this SoC.");
69-
#elif IS_ENABLED(CONFIG_SOC_COMPATIBLE_NRF54LX) || IS_ENABLED(CONFIG_SOC_SERIES_NRF71)
70-
BUILD_ASSERT(!DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(timer10)),
71-
"MPSL reserves TIMER10 on this SoC.");
72-
#elif IS_ENABLED(CONFIG_SOC_SERIES_NRF54H)
73-
BUILD_ASSERT(!DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(timer020)),
74-
"MPSL reserves TIMER020 on this SoC.");
75+
/* Macros used below are declared in mpsl_init_soc.h */
76+
#if defined(MPSL_INIT_SOC_COUNTER_RESERVED_NODES)
77+
#define MPSL_BUILD_ASSERT_COUNTER_NODE_NOT_OKAY(node) \
78+
BUILD_ASSERT(!DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(node)), \
79+
"MPSL reserves " #node " on this SoC. Please disable this node in device tree")
80+
FOR_EACH(MPSL_BUILD_ASSERT_COUNTER_NODE_NOT_OKAY, (;),
81+
MPSL_INIT_SOC_COUNTER_RESERVED_NODES)
82+
#undef MPSL_BUILD_ASSERT_COUNTER_NODE_NOT_OKAY
7583
#else
76-
#error
84+
#error "Counter DTS nodes reserved for MPSL are missing"
7785
#endif
7886
#endif /* IS_ENABLED(CONFIG_COUNTER) */
7987

80-
#if defined(CONFIG_SOC_COMPATIBLE_NRF52X) || defined(CONFIG_SOC_COMPATIBLE_NRF53X)
81-
#define MPSL_TIMER_IRQn TIMER0_IRQn
82-
#define MPSL_RTC_IRQn RTC0_IRQn
83-
#define MPSL_RADIO_IRQn RADIO_IRQn
84-
#elif defined(CONFIG_SOC_COMPATIBLE_NRF54LX) || defined(CONFIG_SOC_SERIES_NRF71)
85-
#define MPSL_TIMER_IRQn TIMER10_IRQn
86-
#define MPSL_RTC_IRQn GRTC_3_IRQn
87-
#define MPSL_RADIO_IRQn RADIO_0_IRQn
88-
#elif defined(CONFIG_SOC_SERIES_NRF54H)
89-
#define MPSL_TIMER_IRQn TIMER020_IRQn
90-
#define MPSL_RTC_IRQn GRTC_2_IRQn
91-
#define MPSL_RADIO_IRQn RADIO_0_IRQn
92-
#endif
93-
94-
#if defined(CONFIG_SOC_SERIES_NRF54H)
95-
/* Basic build time sanity checking */
96-
#define MPSL_RESERVED_GRTC_CHANNELS ((1U << 8) | (1U << 9) | (1U << 10) | (1U << 11) | (1U << 12))
97-
#elif defined(CONFIG_SOC_COMPATIBLE_NRF54LX) || defined(CONFIG_SOC_SERIES_NRF71)
98-
#define MPSL_RESERVED_GRTC_CHANNELS ((1U << 7) | (1U << 8) | (1U << 9) | (1U << 10) | (1U << 11))
99-
#endif
100-
101-
#if defined(CONFIG_SOC_SERIES_NRF54H) || \
102-
defined(CONFIG_SOC_COMPATIBLE_NRF54LX) || \
103-
defined(CONFIG_SOC_SERIES_NRF71)
104-
88+
#if IS_ENABLED(CONFIG_NRFX_GRTC)
10589
BUILD_ASSERT(MPSL_RTC_IRQn != DT_IRQN(DT_NODELABEL(grtc)), "MPSL requires a dedicated GRTC IRQ");
10690

10791
#define CHECK_IRQ(val, _) (DT_IRQ_BY_IDX(DT_NODELABEL(grtc), val, irq) == MPSL_RTC_IRQn)
@@ -116,12 +100,9 @@ BUILD_ASSERT(MPSL_IRQ_IN_DT, "The MPSL GRTC IRQ is not in the device tree");
116100
BUILD_ASSERT((NRFX_CONFIG_MASK_DT(DT_NODELABEL(grtc), child_owned_channels) &
117101
MPSL_RESERVED_GRTC_CHANNELS) == MPSL_RESERVED_GRTC_CHANNELS,
118102
"The GRTC channels used by MPSL must not be used by zephyr");
119-
#endif
103+
#endif /* IS_ENABLED(CONFIG_NRFX_GRTC) */
120104

121-
#if defined(CONFIG_SOC_SERIES_NRF54H)
122-
#define MPSL_RESERVED_IPCT_SOURCE_CHANNELS (1U << 0)
123-
#define MPSL_RESERVED_DPPI_SOURCE_CHANNELS (1U << 0)
124-
#define MPSL_RESERVED_DPPI_SINK_CHANNELS (1U << 0)
105+
#if IS_ENABLED(CONFIG_SOC_SERIES_NRF54H) /* IPCT is relevant for nRF54H only */
125106
/* check the GRTC source channels.
126107
* i.e. ensure something similar to this is present in the DT
127108
* &dppic132 {
@@ -173,11 +154,11 @@ BUILD_ASSERT((IPCT_SOURCE_CHANNELS & MPSL_RESERVED_IPCT_SOURCE_CHANNELS) ==
173154
MPSL_RESERVED_IPCT_SOURCE_CHANNELS,
174155
"The required IPCT source channels are not reserved");
175156

176-
#endif
157+
#endif /* CONFIG_SOC_SERIES_NRF54H */
177158

178-
#if defined(CONFIG_SOC_SERIES_NRF54L)
179-
BUILD_ASSERT(NRF_CONFIG_CPU_FREQ_MHZ == 128, "Currently mpsl only works when frequency is 128MHz");
180-
#endif
159+
#ifdef MPSL_INIT_SOC_CPU_FREQ_MHZ
160+
BUILD_ASSERT(NRF_CONFIG_CPU_FREQ_MHZ == MPSL_INIT_SOC_CPU_FREQ_MHZ, "Unsupported CPU frequency");
161+
#endif /* MPSL_INIT_SOC_CPU_FREQ_MHZ */
181162

182163
#if IS_ENABLED(CONFIG_NRF_GRTC_TIMER) && !defined(CONFIG_SOC_SERIES_NRF54H)
183164
BUILD_ASSERT(IS_ENABLED(CONFIG_NRF_GRTC_TIMER_AUTO_KEEP_ALIVE),
@@ -196,13 +177,26 @@ static struct k_work mpsl_low_prio_work;
196177
struct k_work_q mpsl_work_q;
197178
static K_THREAD_STACK_DEFINE(mpsl_work_stack, CONFIG_MPSL_WORK_STACK_SIZE);
198179

199-
#if IS_ENABLED(CONFIG_SOC_SERIES_NRF54L) && !IS_ENABLED(CONFIG_TRUSTED_EXECUTION_NONSECURE)
180+
#if IS_ENABLED(CONFIG_MPSL_LOW_LATENCY_CALLBACKS) && !IS_ENABLED(CONFIG_TRUSTED_EXECUTION_NONSECURE)
181+
/* Check existence of rram_controller node in the device tree to figure out whether RRAMC is
182+
* supported.
183+
*
184+
* Note: The standard CONFIG_HAS_HW_NRF_RRAMC expects the DTS node to be set (okay).
185+
* The CONFIG_NRFX_RRAMC informs if the node is in DTS but it is not selected by default
186+
* so it is not defined for preprocessor.
187+
*/
188+
#if DT_NODE_EXISTS(DT_NODELABEL(rram_controller))
189+
#define MPSL_HW_HAS_RRAMC 1
190+
#endif /* DT_NODE_EXISTS(DT_NODELABEL(rram_controller)) */
191+
200192
#if IS_ENABLED(CONFIG_NRF_SYS_EVENT_IRQ_LATENCY)
201193
static int m_nvm_low_latency_event_handle = -1;
202194
#else
203195
static uint32_t m_rram_lowpower_config;
204196
#endif /* IS_ENABLED(CONFIG_NRF_SYS_EVENT_IRQ_LATENCY) */
205-
#endif /* IS_ENABLED(CONFIG_SOC_SERIES_NRF54L) && !IS_ENABLED(CONFIG_TRUSTED_EXECUTION_NONSECURE) */
197+
#endif /* IS_ENABLED(CONFIG_MPSL_LOW_LATENCY_CALLBACKS) &&
198+
* !IS_ENABLED(CONFIG_TRUSTED_EXECUTION_NONSECURE)
199+
*/
206200

207201
#define MPSL_TIMESLOT_SESSION_COUNT (\
208202
CONFIG_MPSL_TIMESLOT_SESSION_COUNT + \
@@ -621,10 +615,13 @@ int32_t mpsl_lib_uninit(void)
621615
#endif /* IS_ENABLED(CONFIG_MPSL_DYNAMIC_INTERRUPTS) */
622616
}
623617

624-
#if defined(CONFIG_SOC_COMPATIBLE_NRF54LX)
618+
#if defined(CONFIG_MPSL_LOW_LATENCY_CALLBACKS)
625619
void mpsl_low_latency_acquire_callback(void)
626620
{
627-
#if IS_ENABLED(CONFIG_SOC_SERIES_NRF54L)
621+
/* We need to know whether RRAMC is supported on the platform. The IS_ENABLED() returns true if the
622+
* KConfig is set. In this case it is enough to check whether there is
623+
*/
624+
#if defined(MPSL_HW_HAS_RRAMC)
628625
#if IS_ENABLED(CONFIG_NRF_SYS_EVENT)
629626
int err;
630627

@@ -633,10 +630,10 @@ void mpsl_low_latency_acquire_callback(void)
633630
LOG_ERR("NVM low latency request has failed (%d)", err);
634631
}
635632
#elif IS_ENABLED(CONFIG_NRFX_POWER)
636-
nrfx_power_constlat_mode_request();
633+
(void)nrfx_power_constlat_mode_request();
637634
#else
638635
nrf_power_task_trigger(NRF_POWER, NRF_POWER_TASK_CONSTLAT);
639-
#endif /* IS_ENABLED(CONFIG_NRF_SYS_EVENT) */
636+
#endif /* NRF_POWER_HAS_CONST_LATENCY && NRF_POWER_HAS_LOW_POWER */
640637

641638
#if !IS_ENABLED(CONFIG_TRUSTED_EXECUTION_NONSECURE)
642639
#if IS_ENABLED(CONFIG_NRF_SYS_EVENT_IRQ_LATENCY)
@@ -654,12 +651,12 @@ void mpsl_low_latency_acquire_callback(void)
654651
<< RRAMC_POWER_LOWPOWERCONFIG_MODE_Pos;
655652
#endif /* IS_ENABLED(CONFIG_NRF_SYS_EVENT_IRQ_LATENCY) */
656653
#endif /* !IS_ENABLED(CONFIG_TRUSTED_EXECUTION_NONSECURE) */
657-
#endif /* IS_ENABLED(CONFIG_SOC_SERIES_NRF54L) */
654+
#endif /* defined(MPSL_HW_HAS_RRAMC) */
658655
}
659656

660657
void mpsl_low_latency_release_callback(void)
661658
{
662-
#if IS_ENABLED(CONFIG_SOC_SERIES_NRF54L)
659+
#if defined(MPSL_HW_HAS_RRAMC)
663660
#if IS_ENABLED(CONFIG_NRF_SYS_EVENT)
664661
int ret;
665662

@@ -668,7 +665,7 @@ void mpsl_low_latency_release_callback(void)
668665
LOG_ERR("NVM low latency release has failed (%d)", ret);
669666
}
670667
#elif IS_ENABLED(CONFIG_NRFX_POWER)
671-
nrfx_power_constlat_mode_free();
668+
(void)nrfx_power_constlat_mode_free();
672669
#else
673670
nrf_power_task_trigger(NRF_POWER, NRF_POWER_TASK_LOWPWR);
674671
#endif /* IS_ENABLED(CONFIG_NRF_SYS_EVENT) */
@@ -685,9 +682,9 @@ void mpsl_low_latency_release_callback(void)
685682
NRF_RRAMC->POWER.LOWPOWERCONFIG = m_rram_lowpower_config;
686683
#endif /* IS_ENABLED(CONFIG_NRF_SYS_EVENT_IRQ_LATENCY) */
687684
#endif /* !IS_ENABLED(CONFIG_TRUSTED_EXECUTION_NONSECURE) */
688-
#endif /* IS_ENABLED(CONFIG_SOC_SERIES_NRF54L) */
685+
#endif /* defined(MPSL_HW_HAS_RRAMC) */
689686
}
690-
#endif /* defined(CONFIG_SOC_COMPATIBLE_NRF54LX) */
687+
#endif /* defined(CONFIG_MPSL_LOW_LATENCY_CALLBACKS) */
691688

692689
#if defined(CONFIG_MPSL_USE_EXTERNAL_CLOCK_CONTROL)
693690
#define MPSL_INIT_LEVEL POST_KERNEL

0 commit comments

Comments
 (0)