From 225dc3a410e7cf2eef9ef540117528848c1ed829 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Chru=C5=9Bci=C5=84ski?= Date: Mon, 17 Feb 2025 15:12:56 +0100 Subject: [PATCH] [nrf fromtree] drivers: clock_control: nrf: Add workaround for XO start anomaly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add workaround to HFCLK start and stop in nrf54l. In future workaround will be in nrfx driver. Signed-off-by: Krzysztof Chruściński (cherry picked from commit 2cb2cf226c0254d662794b8158dd05688eb8e57b) --- drivers/clock_control/clock_control_nrf.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/clock_control/clock_control_nrf.c b/drivers/clock_control/clock_control_nrf.c index 03955d3fb7d..f807bdbb805 100644 --- a/drivers/clock_control/clock_control_nrf.c +++ b/drivers/clock_control/clock_control_nrf.c @@ -48,6 +48,14 @@ LOG_MODULE_REGISTER(clock_control, CONFIG_CLOCK_CONTROL_LOG_LEVEL); #define INF(dev, subsys, ...) CLOCK_LOG(INF, dev, subsys, __VA_ARGS__) #define DBG(dev, subsys, ...) CLOCK_LOG(DBG, dev, subsys, __VA_ARGS__) +#if defined(NRF54L05_XXAA) || defined(NRF54L10_XXAA) || defined(NRF54L15_XXAA) +#if NRFX_RELEASE_VER_AT_LEAST(3, 11, 0) +#error "Remove workaround for XOSTART as it is already done in the nrfx clock" +#endif + +#define USE_WORKAROUND_FOR_CLOCK_XOSTART_ANOMALY 1 +#endif + /* Clock subsys structure */ struct nrf_clock_control_sub_data { clock_control_cb_t cb; @@ -235,6 +243,9 @@ static void hfclk_start(void) hf_start_tstamp = k_uptime_get(); } +#ifdef USE_WORKAROUND_FOR_CLOCK_XOSTART_ANOMALY + nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_PLLSTART); +#endif nrfx_clock_hfclk_start(); } @@ -245,6 +256,9 @@ static void hfclk_stop(void) } nrfx_clock_hfclk_stop(); +#ifdef USE_WORKAROUND_FOR_CLOCK_XOSTART_ANOMALY + nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_PLLSTOP); +#endif } #if NRF_CLOCK_HAS_HFCLK192M