Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] clocksource/drivers/nxp-stm: Register sched_clock once
@ 2026-10-15 11:37 Juhee Kang
  2026-10-15 11:40 ` Ghennadi Procopciuc
  0 siblings, 1 reply; 2+ messages in thread
From: Juhee Kang @ 2026-10-15 11:37 UTC (permalink / raw)
  To: Daniel Lezcano, Thomas Gleixner
  Cc: linux-kernel, linux-arm-kernel, Ghennadi Procopciuc,
	NXP S32 Linux Team, Dustin Black, stable, Juhee Kang

Each probe updates stm_sched_clock before calling sched_clock_register()
again. The call then subtracts the counter value saved during the
previous registration from the new STM's counter. If the new counter is
smaller, the subtraction wraps and the timestamp jumps forward.
(e.g. from 0.4 to 32.9 seconds below)

  [    0.403653] sched_clock: 32 bits at 132MHz, resolution 7ns, wraps every 16243448316ns
  [    0.404056] clocksource: timer@40120000: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 14456668980 ns
  [   32.890509] sched_clock: 32 bits at 132MHz, resolution 7ns, wraps every 16243448316ns
  [   32.890882] clocksource: timer@40124000: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 14456668980 ns

To fix this, register sched_clock once at the end of the first
successful probe. Clocksource and per-CPU clockevent registration
remain unchanged.

Fixes: cec32ac75827 ("clocksource/drivers/nxp-timer: Add the System Timer Module for the s32gx platforms")
Reported-by: Dustin Black <dblack@redhat.com>
Signed-off-by: Juhee Kang <juhee.kang@redhat.com>
Reviewed-by: Ghennadi Procopciuc <ghennadi.procopciuc@oss.nxp.com>
---
Changes in v2:
  - add the comment
---
 drivers/clocksource/timer-nxp-stm.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/clocksource/timer-nxp-stm.c b/drivers/clocksource/timer-nxp-stm.c
index 6fe098a4a33f..23b2d44e4b78 100644
--- a/drivers/clocksource/timer-nxp-stm.c
+++ b/drivers/clocksource/timer-nxp-stm.c
@@ -211,10 +211,6 @@ static int nxp_stm_clocksource_init(struct device *dev, struct stm_timer *stm_ti
 	if (ret)
 		return ret;
 
-	stm_sched_clock = stm_timer;
-
-	sched_clock_register(nxp_stm_read_sched_clock, 32, stm_timer->rate);
-
 	dev_dbg(dev, "Registered clocksource %s\n", name);
 
 	return 0;
@@ -473,6 +469,15 @@ static int nxp_stm_timer_probe(struct platform_device *pdev)
 			return ret;
 	}
 
+	/*
+	 * STM counters run independently at the same rate. Use the first
+	 * probed instance for sched_clock to avoid timestamp jumps.
+	 */
+	if (!stm_sched_clock) {
+		stm_sched_clock = stm_timer;
+		sched_clock_register(nxp_stm_read_sched_clock, 32, stm_timer->rate);
+	}
+
 	return 0;
 }
 
-- 
2.55.0



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v2] clocksource/drivers/nxp-stm: Register sched_clock once
  2026-10-15 11:37 [PATCH v2] clocksource/drivers/nxp-stm: Register sched_clock once Juhee Kang
@ 2026-10-15 11:40 ` Ghennadi Procopciuc
  0 siblings, 0 replies; 2+ messages in thread
From: Ghennadi Procopciuc @ 2026-10-15 11:40 UTC (permalink / raw)
  To: Juhee Kang, Daniel Lezcano, Thomas Gleixner
  Cc: linux-kernel, linux-arm-kernel, NXP S32 Linux Team, Dustin Black,
	stable

On 10/15/2026 2:37 PM, Juhee Kang wrote:
> [You don't often get email from juhee.kang@redhat.com. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]
> 
> Each probe updates stm_sched_clock before calling sched_clock_register()
> again. The call then subtracts the counter value saved during the
> previous registration from the new STM's counter. If the new counter is
> smaller, the subtraction wraps and the timestamp jumps forward.
> (e.g. from 0.4 to 32.9 seconds below)
> 
>   [    0.403653] sched_clock: 32 bits at 132MHz, resolution 7ns, wraps every 16243448316ns
>   [    0.404056] clocksource: timer@40120000: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 14456668980 ns
>   [   32.890509] sched_clock: 32 bits at 132MHz, resolution 7ns, wraps every 16243448316ns
>   [   32.890882] clocksource: timer@40124000: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 14456668980 ns
> 
> To fix this, register sched_clock once at the end of the first
> successful probe. Clocksource and per-CPU clockevent registration
> remain unchanged.
> 
> Fixes: cec32ac75827 ("clocksource/drivers/nxp-timer: Add the System Timer Module for the s32gx platforms")
> Reported-by: Dustin Black <dblack@redhat.com>
> Signed-off-by: Juhee Kang <juhee.kang@redhat.com>
> Reviewed-by: Ghennadi Procopciuc <ghennadi.procopciuc@oss.nxp.com>
> ---
> Changes in v2:
>   - add the comment
> ---
>  drivers/clocksource/timer-nxp-stm.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/clocksource/timer-nxp-stm.c b/drivers/clocksource/timer-nxp-stm.c
> index 6fe098a4a33f..23b2d44e4b78 100644
> --- a/drivers/clocksource/timer-nxp-stm.c
> +++ b/drivers/clocksource/timer-nxp-stm.c
> @@ -211,10 +211,6 @@ static int nxp_stm_clocksource_init(struct device *dev, struct stm_timer *stm_ti
>         if (ret)
>                 return ret;
> 
> -       stm_sched_clock = stm_timer;
> -
> -       sched_clock_register(nxp_stm_read_sched_clock, 32, stm_timer->rate);
> -
>         dev_dbg(dev, "Registered clocksource %s\n", name);
> 
>         return 0;
> @@ -473,6 +469,15 @@ static int nxp_stm_timer_probe(struct platform_device *pdev)
>                         return ret;
>         }
> 
> +       /*
> +        * STM counters run independently at the same rate. Use the first
> +        * probed instance for sched_clock to avoid timestamp jumps.
> +        */
> +       if (!stm_sched_clock) {
> +               stm_sched_clock = stm_timer;
> +               sched_clock_register(nxp_stm_read_sched_clock, 32, stm_timer->rate);
> +       }
> +
>         return 0;
>  }
> 
> --
> 2.55.0

Thank you for addressing this issue!

Tested-by: Ghennadi Procopciuc <ghennadi.procopciuc@oss.nxp.com>

-- 
Regards,
Ghennadi


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-10-15 11:40 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-15 11:37 [PATCH v2] clocksource/drivers/nxp-stm: Register sched_clock once Juhee Kang
2026-10-15 11:40 ` Ghennadi Procopciuc

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox