From: heiko@sntech.de (Heiko Stübner)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 8/9] clocksource: dw_apb_timer_of: add quirk handling
Date: Sat, 6 Jul 2013 00:56:03 +0200 [thread overview]
Message-ID: <201307060056.03543.heiko@sntech.de> (raw)
In-Reply-To: <201307060051.09716.heiko@sntech.de>
timer_get_base_and_rate now also can extract informations about present
hardware-quirks from the devicetree node and transmit it to the
clocksource / clockevent init function.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/clocksource/dw_apb_timer_of.c | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/drivers/clocksource/dw_apb_timer_of.c b/drivers/clocksource/dw_apb_timer_of.c
index b5412af..4bcc1c1 100644
--- a/drivers/clocksource/dw_apb_timer_of.c
+++ b/drivers/clocksource/dw_apb_timer_of.c
@@ -26,7 +26,7 @@
#include <asm/sched_clock.h>
static void timer_get_base_and_rate(struct device_node *np,
- void __iomem **base, u32 *rate)
+ void __iomem **base, u32 *rate, int *quirks)
{
struct clk *timer_clk;
struct clk *pclk;
@@ -36,6 +36,8 @@ static void timer_get_base_and_rate(struct device_node *np,
if (!*base)
panic("Unable to map regs for %s", np->name);
+ *quirks = 0;
+
/*
* Not all implementations use a periphal clock, so don't panic
* if it's not present
@@ -66,15 +68,16 @@ static void add_clockevent(struct device_node *event_timer)
void __iomem *iobase;
struct dw_apb_clock_event_device *ced;
u32 irq, rate;
+ int quirks;
irq = irq_of_parse_and_map(event_timer, 0);
if (irq == NO_IRQ)
panic("No IRQ for clock event timer");
- timer_get_base_and_rate(event_timer, &iobase, &rate);
+ timer_get_base_and_rate(event_timer, &iobase, &rate, &quirks);
ced = dw_apb_clockevent_init(0, event_timer->name, 300, iobase, irq,
- rate, 0);
+ rate, quirks);
if (!ced)
panic("Unable to initialise clockevent device");
@@ -89,10 +92,12 @@ static void add_clocksource(struct device_node *source_timer)
void __iomem *iobase;
struct dw_apb_clocksource *cs;
u32 rate;
+ int quirks;
- timer_get_base_and_rate(source_timer, &iobase, &rate);
+ timer_get_base_and_rate(source_timer, &iobase, &rate, &quirks);
- cs = dw_apb_clocksource_init(300, source_timer->name, iobase, rate, 0);
+ cs = dw_apb_clocksource_init(300, source_timer->name, iobase, rate,
+ quirks);
if (!cs)
panic("Unable to initialise clocksource device");
@@ -106,6 +111,9 @@ static void add_clocksource(struct device_node *source_timer)
*/
sched_io_base = iobase + 0x04;
sched_rate = rate;
+
+ if (quirks & APBTMR_QUIRK_64BIT_COUNTER)
+ sched_io_base += 0x04;
}
static u32 read_sched_clock(void)
@@ -122,11 +130,12 @@ static const struct of_device_id sptimer_ids[] __initconst = {
static void init_sched_clock(void)
{
struct device_node *sched_timer;
+ int quirks;
sched_timer = of_find_matching_node(NULL, sptimer_ids);
if (sched_timer) {
timer_get_base_and_rate(sched_timer, &sched_io_base,
- &sched_rate);
+ &sched_rate, &quirks);
of_node_put(sched_timer);
}
--
1.7.10.4
WARNING: multiple messages have this Message-ID (diff)
From: "Heiko Stübner" <heiko@sntech.de>
To: John Stultz <john.stultz@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Jamie Iles <jamie@jamieiles.com>,
Dinh Nguyen <dinguyen@altera.com>,
Grant Likely <grant.likely@linaro.org>,
linux-arm-kernel@lists.infradead.org,
Rob Herring <rob.herring@calxeda.com>,
devicetree-discuss@lists.ozlabs.org,
linux-kernel@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>,
Olof Johansson <olof@lixom.net>,
Ulrich Prinz <ulrich.prinz@googlemail.com>
Subject: [PATCH 8/9] clocksource: dw_apb_timer_of: add quirk handling
Date: Sat, 6 Jul 2013 00:56:03 +0200 [thread overview]
Message-ID: <201307060056.03543.heiko@sntech.de> (raw)
In-Reply-To: <201307060051.09716.heiko@sntech.de>
timer_get_base_and_rate now also can extract informations about present
hardware-quirks from the devicetree node and transmit it to the
clocksource / clockevent init function.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/clocksource/dw_apb_timer_of.c | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/drivers/clocksource/dw_apb_timer_of.c b/drivers/clocksource/dw_apb_timer_of.c
index b5412af..4bcc1c1 100644
--- a/drivers/clocksource/dw_apb_timer_of.c
+++ b/drivers/clocksource/dw_apb_timer_of.c
@@ -26,7 +26,7 @@
#include <asm/sched_clock.h>
static void timer_get_base_and_rate(struct device_node *np,
- void __iomem **base, u32 *rate)
+ void __iomem **base, u32 *rate, int *quirks)
{
struct clk *timer_clk;
struct clk *pclk;
@@ -36,6 +36,8 @@ static void timer_get_base_and_rate(struct device_node *np,
if (!*base)
panic("Unable to map regs for %s", np->name);
+ *quirks = 0;
+
/*
* Not all implementations use a periphal clock, so don't panic
* if it's not present
@@ -66,15 +68,16 @@ static void add_clockevent(struct device_node *event_timer)
void __iomem *iobase;
struct dw_apb_clock_event_device *ced;
u32 irq, rate;
+ int quirks;
irq = irq_of_parse_and_map(event_timer, 0);
if (irq == NO_IRQ)
panic("No IRQ for clock event timer");
- timer_get_base_and_rate(event_timer, &iobase, &rate);
+ timer_get_base_and_rate(event_timer, &iobase, &rate, &quirks);
ced = dw_apb_clockevent_init(0, event_timer->name, 300, iobase, irq,
- rate, 0);
+ rate, quirks);
if (!ced)
panic("Unable to initialise clockevent device");
@@ -89,10 +92,12 @@ static void add_clocksource(struct device_node *source_timer)
void __iomem *iobase;
struct dw_apb_clocksource *cs;
u32 rate;
+ int quirks;
- timer_get_base_and_rate(source_timer, &iobase, &rate);
+ timer_get_base_and_rate(source_timer, &iobase, &rate, &quirks);
- cs = dw_apb_clocksource_init(300, source_timer->name, iobase, rate, 0);
+ cs = dw_apb_clocksource_init(300, source_timer->name, iobase, rate,
+ quirks);
if (!cs)
panic("Unable to initialise clocksource device");
@@ -106,6 +111,9 @@ static void add_clocksource(struct device_node *source_timer)
*/
sched_io_base = iobase + 0x04;
sched_rate = rate;
+
+ if (quirks & APBTMR_QUIRK_64BIT_COUNTER)
+ sched_io_base += 0x04;
}
static u32 read_sched_clock(void)
@@ -122,11 +130,12 @@ static const struct of_device_id sptimer_ids[] __initconst = {
static void init_sched_clock(void)
{
struct device_node *sched_timer;
+ int quirks;
sched_timer = of_find_matching_node(NULL, sptimer_ids);
if (sched_timer) {
timer_get_base_and_rate(sched_timer, &sched_io_base,
- &sched_rate);
+ &sched_rate, &quirks);
of_node_put(sched_timer);
}
--
1.7.10.4
next prev parent reply other threads:[~2013-07-05 22:56 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-05 22:51 [PATCH 0/9] clocksource: dw_apb_timer: support for timer variant used in rk3188 SoCs Heiko Stübner
2013-07-05 22:51 ` Heiko Stübner
2013-07-05 22:51 ` Heiko Stübner
2013-07-05 22:51 ` [PATCH 1/9] clocksource: dw_apb_timer: infrastructure to handle quirks Heiko Stübner
2013-07-05 22:51 ` Heiko Stübner
2013-07-05 22:52 ` [PATCH 2/9] clocksource: dw_apb_timer: flexible register addresses Heiko Stübner
2013-07-05 22:52 ` Heiko Stübner
2013-07-05 22:53 ` [PATCH 3/9] clocksource: dw_apb_timer: quirk for variants with 64bit counter Heiko Stübner
2013-07-05 22:53 ` Heiko Stübner
2013-07-05 23:45 ` Thomas Gleixner
2013-07-05 23:45 ` Thomas Gleixner
2013-07-05 23:45 ` Thomas Gleixner
2013-07-06 20:19 ` Ulrich Prinz
2013-07-06 20:19 ` Ulrich Prinz
2013-07-05 22:53 ` [PATCH 4/9] clocksource: dw_apb_timer: use the eoi callback to clear pending interrupts Heiko Stübner
2013-07-05 22:53 ` Heiko Stübner
2013-07-05 22:59 ` Heiko Stübner
2013-07-05 22:59 ` Heiko Stübner
2013-07-05 22:54 ` [PATCH 5/9] clocksource: dw_apb_timer: quirk for variants without EOI register Heiko Stübner
2013-07-05 22:54 ` Heiko Stübner
2013-07-05 22:58 ` Heiko Stübner
2013-07-05 22:58 ` Heiko Stübner
2013-07-05 22:58 ` Heiko Stübner
2013-07-05 23:49 ` Thomas Gleixner
2013-07-05 23:49 ` Thomas Gleixner
2013-07-05 23:49 ` Thomas Gleixner
2013-07-05 22:54 ` [PATCH 6/9] clocksource: dw_apb_timer: quirk for inverted int mask Heiko Stübner
2013-07-05 22:54 ` Heiko Stübner
2013-07-05 22:58 ` Heiko Stübner
2013-07-05 22:58 ` Heiko Stübner
2013-07-05 23:51 ` Thomas Gleixner
2013-07-05 23:51 ` Thomas Gleixner
2013-07-05 23:51 ` Thomas Gleixner
2013-07-05 22:55 ` [PATCH 7/9] clocksource: dw_apb_timer: quirk for inverted timer mode setting Heiko Stübner
2013-07-05 22:55 ` Heiko Stübner
2013-07-05 22:55 ` Heiko Stübner
2013-07-05 22:56 ` Heiko Stübner [this message]
2013-07-05 22:56 ` [PATCH 8/9] clocksource: dw_apb_timer_of: add quirk handling Heiko Stübner
2013-07-05 22:56 ` [PATCH 9/9] clocksource: dw_apb_timer: special variant for rockchip rk3188 timers Heiko Stübner
2013-07-05 22:56 ` Heiko Stübner
2013-07-06 0:12 ` Thomas Gleixner
2013-07-06 0:12 ` Thomas Gleixner
2013-07-06 0:12 ` Thomas Gleixner
2013-07-06 20:28 ` Ulrich Prinz
2013-07-06 20:28 ` Ulrich Prinz
2013-07-06 21:00 ` Thomas Gleixner
2013-07-06 21:00 ` Thomas Gleixner
2013-07-06 21:00 ` Thomas Gleixner
2013-07-11 22:44 ` Ulrich Prinz
2013-07-11 22:44 ` Ulrich Prinz
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=201307060056.03543.heiko@sntech.de \
--to=heiko@sntech.de \
--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 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.