[PATCH] clocksource/drivers/timer-ti-dm: Register clocksource/event only for am654

From: Markus Schneider-Pargmann (TI)

Date: Fri Aug 28 2026 - 14:50:19 EST


Registering clocksource/clockevent for the older platforms breaks
booting them. The older platforms have their own implementation in early
boot that is used to register clocksource/clockevent in
timer-ti-dm-systimer.c.

With am654, the timer is much more complex with more dependencies so
doing this in early boot with the other driver is very difficult and
gets ugly. Instead it is implemented in the platform driver for am654.
However the old platforms may not register clocksource/clockevent in
this driver as that would break the boot.

Add a system_timer_capable flag that is only set for am654-timer that
gates the clocksource/clockevent registration.

Reported-by: H. Nikolaus Schaller <hns@xxxxxxxxxxxxx>
Closes: https://lore.kernel.org/r/2013A99A-0502-4128-ACFA-B04886224393@xxxxxxxxxxxxx
Fixes: b8eeeca55456 ("clocksource/drivers/timer-ti-dm: Add clocksource support")
Signed-off-by: Markus Schneider-Pargmann (TI) <msp@xxxxxxxxxxxx>
---
drivers/clocksource/timer-ti-dm.c | 4 +++-
include/linux/platform_data/dmtimer-omap.h | 2 ++
2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/clocksource/timer-ti-dm.c b/drivers/clocksource/timer-ti-dm.c
index 6787acac9a43..ae8777d03215 100644
--- a/drivers/clocksource/timer-ti-dm.c
+++ b/drivers/clocksource/timer-ti-dm.c
@@ -1475,7 +1475,8 @@ static int omap_dm_timer_probe(struct platform_device *pdev)

timer->pdev = pdev;

- if (timer->capability & OMAP_TIMER_ALWON && !IS_ERR_OR_NULL(timer->fclk)) {
+ if (pdata->system_timer_capable &&
+ timer->capability & OMAP_TIMER_ALWON && !IS_ERR_OR_NULL(timer->fclk)) {
if (!omap_dm_timer_sched_clock_counter) {
ret = omap_dm_timer_setup_clocksource(timer);
if (ret)
@@ -1585,6 +1586,7 @@ static const struct dmtimer_platform_data omap3plus_pdata = {

static const struct dmtimer_platform_data am6_pdata = {
.timer_ops = &dmtimer_ops,
+ .system_timer_capable = true,
};

static const struct of_device_id omap_timer_match[] = {
diff --git a/include/linux/platform_data/dmtimer-omap.h b/include/linux/platform_data/dmtimer-omap.h
index 726d89143842..b78ee4676b98 100644
--- a/include/linux/platform_data/dmtimer-omap.h
+++ b/include/linux/platform_data/dmtimer-omap.h
@@ -57,6 +57,8 @@ struct dmtimer_platform_data {
u32 timer_errata;
int (*get_context_loss_count)(struct device *);
const struct omap_dm_timer_ops *timer_ops;
+ /* always-on timers can be used for clocksource/clockevent */
+ bool system_timer_capable;
};

#endif /* __PLATFORM_DATA_DMTIMER_OMAP_H__ */

---
base-commit: e30626823a406725ce29bc75cb8ec467d3e1e326
change-id: 20260828-v7-3-next-topic-ti-timer-dm-clocksource-omap-fix-418786f115bc

Best regards,
--
Markus Schneider-Pargmann (TI) <msp@xxxxxxxxxxxx>