From: Jindong Yue <jindong.yue@nxp.com>
Change defconfig as tristate type and add platform driver
to support building it as a module.
Signed-off-by: Jindong Yue <jindong.yue@nxp.com>
Signed-off-by: Zhipeng Wang <zhipeng.wang_1@nxp.com>
---
drivers/clocksource/Kconfig | 2 +-
drivers/clocksource/timer-imx-tpm.c | 36 ++++++++++++++++++++++++++---
2 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 7d0d55c91c3f..511aedf52a32 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -612,7 +612,7 @@ config CLKSRC_IMX_GPT
select CLKSRC_MMIO
config CLKSRC_IMX_TPM
- bool "Clocksource using i.MX TPM" if COMPILE_TEST
+ tristate "Clocksource using i.MX TPM"
depends on (ARM || ARM64) && HAVE_CLK
select CLKSRC_MMIO
select TIMER_OF
diff --git a/drivers/clocksource/timer-imx-tpm.c b/drivers/clocksource/timer-imx-tpm.c
index 92c025b70eb6..419d094459b2 100644
--- a/drivers/clocksource/timer-imx-tpm.c
+++ b/drivers/clocksource/timer-imx-tpm.c
@@ -8,6 +8,8 @@
#include <linux/clocksource.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
#include <linux/sched_clock.h>
#include "timer-of.h"
@@ -152,7 +154,7 @@ static struct timer_of to_tpm = {
},
};
-static int __init tpm_clocksource_init(void)
+static int tpm_clocksource_init(void)
{
#if defined(CONFIG_ARM)
tpm_delay_timer.read_current_timer = &tpm_read_current_timer;
@@ -171,7 +173,7 @@ static int __init tpm_clocksource_init(void)
clocksource_mmio_readl_up);
}
-static void __init tpm_clockevent_init(void)
+static void tpm_clockevent_init(void)
{
clockevents_config_and_register(&to_tpm.clkevt,
timer_of_rate(&to_tpm) >> 3,
@@ -180,7 +182,7 @@ static void __init tpm_clockevent_init(void)
1));
}
-static int __init tpm_timer_init(struct device_node *np)
+static int tpm_timer_init(struct device_node *np)
{
struct clk *ipg;
int ret;
@@ -241,4 +243,32 @@ static int __init tpm_timer_init(struct device_node *np)
return tpm_clocksource_init();
}
+#ifdef MODULE
+static int tpm_timer_probe(struct platform_device *pdev)
+{
+ struct device_node *np = pdev->dev.of_node;
+
+ return tpm_timer_init(np);
+}
+
+static const struct of_device_id tpm_timer_match_table[] = {
+ { .compatible = "fsl,imx7ulp-tpm" },
+ { }
+};
+MODULE_DEVICE_TABLE(of, tpm_timer_match_table);
+
+static struct platform_driver tpm_timer_driver = {
+ .probe = tpm_timer_probe,
+ .driver = {
+ .name = "tpm-timer",
+ .of_match_table = tpm_timer_match_table,
+ },
+};
+module_platform_driver(tpm_timer_driver);
+
+#else
TIMER_OF_DECLARE(imx7ulp, "fsl,imx7ulp-tpm", tpm_timer_init);
+#endif
+
+MODULE_DESCRIPTION("i.MX TPM Timer Driver");
+MODULE_LICENSE("GPL");
--
2.34.1
On Mon, Jan 19, 2026 at 11:56 AM Zhipeng Wang <zhipeng.wang_1@nxp.com> wrote: > > From: Jindong Yue <jindong.yue@nxp.com> > > Change defconfig as tristate type and add platform driver > to support building it as a module. > > Signed-off-by: Jindong Yue <jindong.yue@nxp.com> > Signed-off-by: Zhipeng Wang <zhipeng.wang_1@nxp.com> Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com> So you can now select the driver Y/M/n even if no COMPILE_TEST present. I wonder why we needed the `if COMPILE_TEST` in the first place. But anyhow, this change looks good.
On 1/19/26 11:38, Daniel Baluta wrote: > On Mon, Jan 19, 2026 at 11:56 AM Zhipeng Wang <zhipeng.wang_1@nxp.com> wrote: >> >> From: Jindong Yue <jindong.yue@nxp.com> >> >> Change defconfig as tristate type and add platform driver >> to support building it as a module. >> >> Signed-off-by: Jindong Yue <jindong.yue@nxp.com> >> Signed-off-by: Zhipeng Wang <zhipeng.wang_1@nxp.com> > > Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com> > > So you can now select the driver Y/M/n even if no COMPILE_TEST present. > > I wonder why we needed the `if COMPILE_TEST` in the first place. But anyhow, > this change looks good. The logic is to keep the timer option silent and let the platform's Kconfig to select the timer driver when enabling the platform. Then we wanted to be able to compile-test those drivers even if the platform is not selected. Now we want to choose between module or compiled-in. I'm not sure if we really want to manually select the timer driver or switch to module. -- <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog
© 2016 - 2026 Red Hat, Inc.