From: benjamin.gaignard@linaro.org (Benjamin Gaignard)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v9 3/6] clocksource: stm32: only use 32 bits timers
Date: Fri, 8 Dec 2017 12:32:47 +0100 [thread overview]
Message-ID: <20171208113250.359-4-benjamin.gaignard@st.com> (raw)
In-Reply-To: <20171208113250.359-1-benjamin.gaignard@st.com>
From: Benjamin Gaignard <benjamin.gaignard@linaro.org>
The clock driving counters is at 90MHz so the maximum period
for 16 bis counters is around 728us (2^16 / 90.000.000).
For 32 bits counters this period is close 47 secondes which is
more acceptable.
When using 16 bits counters the kernel may not be able to boot
because it has a too high overhead compare to the clockevent period.
Downgrading the rating of 16bits counter won't change anything
to this problem so this patch remove 16 bits counters support
and makes sure that they won't be probed anymore.
Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
---
drivers/clocksource/timer-stm32.c | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/drivers/clocksource/timer-stm32.c b/drivers/clocksource/timer-stm32.c
index a45f1f1cd040..707808d91bf0 100644
--- a/drivers/clocksource/timer-stm32.c
+++ b/drivers/clocksource/timer-stm32.c
@@ -84,12 +84,16 @@ static irqreturn_t stm32_clock_event_handler(int irq, void *dev_id)
return IRQ_HANDLED;
}
+static bool stm32_timer_is_32bits(struct timer_of *to)
+{
+ return readl_relaxed(timer_of_base(to) + TIM_ARR) == ~0UL;
+}
+
static int __init stm32_clockevent_init(struct device_node *node)
{
struct reset_control *rstc;
- unsigned long max_delta;
- int ret, bits, prescaler = 1;
struct timer_of *to;
+ int ret;
to = kzalloc(sizeof(*to), GFP_KERNEL);
if (!to)
@@ -118,31 +122,27 @@ static int __init stm32_clockevent_init(struct device_node *node)
}
/* Detect whether the timer is 16 or 32 bits */
- writel_relaxed(~0U, timer_of_base(to) + TIM_ARR);
- max_delta = readl_relaxed(timer_of_base(to) + TIM_ARR);
- if (max_delta == ~0U) {
- prescaler = 1;
- bits = 32;
- } else {
- prescaler = 1024;
- bits = 16;
+ if (!stm32_timer_is_32bits(to)) {
+ pr_warn("Timer %pOF is a 16 bits timer\n", node);
+ ret = -EINVAL;
+ goto deinit;
}
+
writel_relaxed(0, timer_of_base(to) + TIM_ARR);
- writel_relaxed(prescaler - 1, timer_of_base(to) + TIM_PSC);
+ writel_relaxed(0, timer_of_base(to) + TIM_PSC);
writel_relaxed(TIM_EGR_UG, timer_of_base(to) + TIM_EGR);
writel_relaxed(TIM_DIER_UIE, timer_of_base(to) + TIM_DIER);
writel_relaxed(0, timer_of_base(to) + TIM_SR);
clockevents_config_and_register(&to->clkevt,
timer_of_period(to),
- MIN_DELTA, max_delta);
-
- pr_info("%pOF: STM32 clockevent driver initialized (%d bits)\n",
- node, bits);
+ MIN_DELTA, ~0U);
return 0;
+deinit:
+ timer_of_cleanup(to);
err:
kfree(to);
return ret;
--
2.15.0
next prev parent reply other threads:[~2017-12-08 11:32 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-08 11:32 [PATCH v9 0/6] stm32 clocksource driver rework Benjamin Gaignard
2017-12-08 11:32 ` [PATCH v9 1/6] clocksource: stm32: convert driver to timer_of Benjamin Gaignard
2017-12-08 11:32 ` [PATCH v9 2/6] clocksource: stm32: increase min delta value Benjamin Gaignard
2017-12-08 11:32 ` Benjamin Gaignard [this message]
2017-12-08 12:51 ` [PATCH v9 3/6] clocksource: stm32: only use 32 bits timers Daniel Lezcano
2017-12-08 13:05 ` Benjamin Gaignard
2017-12-08 13:47 ` Daniel Lezcano
2017-12-08 11:32 ` [PATCH v9 4/6] clocksource: stm32: add clocksource support Benjamin Gaignard
2017-12-08 13:46 ` Daniel Lezcano
2017-12-08 14:04 ` Benjamin Gaignard
2017-12-08 14:08 ` Daniel Lezcano
2017-12-08 14:19 ` Benjamin Gaignard
2017-12-08 11:32 ` [PATCH v9 5/6] clocksource: stm32: Update license and copyright Benjamin Gaignard
2017-12-08 13:46 ` Philippe Ombredanne
2017-12-08 11:32 ` [PATCH v9 6/6] arm: dts: stm32: remove useless clocksource nodes Benjamin Gaignard
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=20171208113250.359-4-benjamin.gaignard@st.com \
--to=benjamin.gaignard@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).