From: Daniel Lezcano <daniel.lezcano@linaro.org>
To: daniel.lezcano@linaro.org, tglx@linutronix.de
Cc: ghennadi.procopciuc@oss.nxp.com, S32@nxp.com,
linux-kernel@vger.kernel.org
Subject: [PATCH 07/20] clocksource/drivers/vf-pit: Allocate the struct timer at init time
Date: Sat, 5 Jul 2025 18:01:13 +0200 [thread overview]
Message-ID: <20250705160129.3688026-7-daniel.lezcano@linaro.org> (raw)
In-Reply-To: <20250705160129.3688026-1-daniel.lezcano@linaro.org>
Instead of having a static global structure for a timer, let's
allocate it dynamically so we can create multiple instances in the
future to support multiple timers. At the same time, add the
rollbacking code in case of error.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/timer-vf-pit.c | 48 +++++++++++++++++++++++-------
1 file changed, 37 insertions(+), 11 deletions(-)
diff --git a/drivers/clocksource/timer-vf-pit.c b/drivers/clocksource/timer-vf-pit.c
index 3c1ac05626de..e1f1e66a2664 100644
--- a/drivers/clocksource/timer-vf-pit.c
+++ b/drivers/clocksource/timer-vf-pit.c
@@ -37,8 +37,6 @@ struct pit_timer {
struct clocksource cs;
};
-static struct pit_timer pit_timer;
-
static void __iomem *clksrc_base;
static inline struct pit_timer *ced_to_pit(struct clock_event_device *ced)
@@ -189,38 +187,66 @@ static int __init pit_clockevent_init(struct pit_timer *pit, void __iomem *base,
static int __init pit_timer_init(struct device_node *np)
{
+ struct pit_timer *pit;
struct clk *pit_clk;
void __iomem *timer_base;
unsigned long clk_rate;
int irq, ret;
+ pit = kzalloc(sizeof(*pit), GFP_KERNEL);
+ if (!pit)
+ return -ENOMEM;
+
+ ret = -ENXIO;
timer_base = of_iomap(np, 0);
if (!timer_base) {
pr_err("Failed to iomap\n");
- return -ENXIO;
+ goto out_kfree;
}
+ ret = -EINVAL;
irq = irq_of_parse_and_map(np, 0);
- if (irq <= 0)
- return -EINVAL;
+ if (irq <= 0) {
+ pr_err("Failed to irq_of_parse_and_map\n");
+ goto out_iounmap;
+ }
pit_clk = of_clk_get(np, 0);
- if (IS_ERR(pit_clk))
- return PTR_ERR(pit_clk);
+ if (IS_ERR(pit_clk)) {
+ ret = PTR_ERR(pit_clk);
+ goto out_iounmap;
+ }
ret = clk_prepare_enable(pit_clk);
if (ret)
- return ret;
+ goto out_clk_put;
clk_rate = clk_get_rate(pit_clk);
/* enable the pit module */
writel(~PITMCR_MDIS, timer_base + PITMCR);
- ret = pit_clocksource_init(&pit_timer, timer_base, clk_rate);
+ ret = pit_clocksource_init(pit, timer_base, clk_rate);
if (ret)
- return ret;
+ goto out_disable_unprepare;
+
+ ret = pit_clockevent_init(pit, timer_base, clk_rate, irq, 0);
+ if (ret)
+ goto out_pit_clocksource_unregister;
+
+ return 0;
- return pit_clockevent_init(&pit_timer, timer_base, clk_rate, irq, 0);
+out_pit_clocksource_unregister:
+ clocksource_unregister(&pit->cs);
+out_disable_unprepare:
+ clk_disable_unprepare(pit_clk);
+out_clk_put:
+ clk_put(pit_clk);
+out_iounmap:
+ iounmap(timer_base);
+out_kfree:
+ kfree(pit);
+
+ return ret;
}
TIMER_OF_DECLARE(vf610, "fsl,vf610-pit", pit_timer_init);
--
2.43.0
next prev parent reply other threads:[~2025-07-05 16:01 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-05 16:01 [PATCH 01/20] clocksource/drivers/vf-pit: Replace raw_readl/writel to reald/writel Daniel Lezcano
2025-07-05 16:01 ` [PATCH 02/20] clocksource/drivers/vf_pit: Add COMPILE_TEST option Daniel Lezcano
2025-07-05 16:01 ` [PATCH 03/20] clocksource/drivers/vf_pit: Set the scene for multiple timers Daniel Lezcano
2025-07-07 12:04 ` Ghennadi Procopciuc
2025-07-05 16:01 ` [PATCH 04/20] clocksource/drivers/vf_pit: Rework the base address usage Daniel Lezcano
2025-07-07 12:03 ` Ghennadi Procopciuc
2025-07-24 17:29 ` Daniel Lezcano
2025-07-25 5:10 ` Ghennadi Procopciuc
2025-07-05 16:01 ` [PATCH 05/20] clocksource/drivers/vf_pit: Pass the cpu number as parameter Daniel Lezcano
2025-07-07 9:33 ` Ghennadi Procopciuc
2025-07-24 17:30 ` Daniel Lezcano
2025-07-05 16:01 ` [PATCH 06/20] clocksource/drivers/vf_pit: Encapsulate the initialization of the cycles_per_jiffy Daniel Lezcano
2025-07-05 16:01 ` Daniel Lezcano [this message]
2025-07-05 16:01 ` [PATCH 08/20] clocksource/drivers/vf-pit: Convert raw values to BIT macros Daniel Lezcano
2025-07-05 16:01 ` [PATCH 09/20] clocksource/drivers/vf-pit: Register the clocksource from the driver Daniel Lezcano
2025-07-07 12:02 ` Ghennadi Procopciuc
2025-07-26 19:37 ` Daniel Lezcano
2025-07-05 16:01 ` [PATCH 10/20] clocksource/drivers/vf-pit: Encapsulate the macros Daniel Lezcano
2025-07-07 12:03 ` Ghennadi Procopciuc
2025-07-28 8:35 ` Daniel Lezcano
2025-07-05 16:01 ` [PATCH 11/20] clocksource/drivers/vf-pit: Encapsulate the PTLCVAL macro Daniel Lezcano
2025-07-05 16:01 ` [PATCH 12/20] clocksource/drivers/vf-pit: Use the node name for the interrupt and timer names Daniel Lezcano
2025-07-25 5:12 ` Ghennadi Procopciuc
2025-07-05 16:01 ` [PATCH 13/20] clocksource/drivers/vf-pit: Encapsulate clocksource enable / disable Daniel Lezcano
2025-07-05 16:01 ` [PATCH 14/20] clocksource/drivers/vf-pit: Enable and disable module on error Daniel Lezcano
2025-07-05 16:01 ` [PATCH 15/20] clocksource/drivers/vf-pit: Encapsulate set counter function Daniel Lezcano
2025-07-05 16:01 ` [PATCH 16/20] clocksource/drivers/vf-pit: Consolidate calls to pit_*_disable/enable Daniel Lezcano
2025-07-07 10:28 ` Ghennadi Procopciuc
2025-07-05 16:01 ` [PATCH 17/20] clocksource/drivers/vf-pit: Unify the function name for irq ack Daniel Lezcano
2025-07-05 16:01 ` [PATCH 18/20] clocksource/drivers/pit: Rename the VF PIT to NXP PIT Daniel Lezcano
2025-07-05 16:01 ` [PATCH 19/20] clocksource/drivers/nxp-pit: Add NXP Automotive s32g2 / s32g3 support Daniel Lezcano
2025-07-06 22:13 ` kernel test robot
2025-07-07 12:02 ` Ghennadi Procopciuc
2025-07-28 8:31 ` Daniel Lezcano
2025-07-05 16:01 ` [PATCH 20/20] dt: bindings: fsl,vf610-pit: Add compatible for s32g2 and s32g3 Daniel Lezcano
2025-07-08 17:27 ` Rob Herring
2025-07-07 9:11 ` [PATCH 01/20] clocksource/drivers/vf-pit: Replace raw_readl/writel to reald/writel Ghennadi Procopciuc
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250705160129.3688026-7-daniel.lezcano@linaro.org \
--to=daniel.lezcano@linaro.org \
--cc=S32@nxp.com \
--cc=ghennadi.procopciuc@oss.nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.