* [PATCH v4 0/4] clocksource/drivers/timer-of/renesas-ostm improvements
@ 2019-10-16 14:47 Geert Uytterhoeven
2019-10-16 14:47 ` [PATCH v4 1/4] clocksource/drivers/timer-of: Convert last full_name to %pOF Geert Uytterhoeven
` (4 more replies)
0 siblings, 5 replies; 11+ messages in thread
From: Geert Uytterhoeven @ 2019-10-16 14:47 UTC (permalink / raw)
To: Daniel Lezcano, Thomas Gleixner
Cc: Chris Brandt, Rob Herring, Jacopo Mondi, linux-renesas-soc,
linux-kernel, Geert Uytterhoeven
Hi Daniel, Thomas,
This patch series converts the Renesas OSTM driver to the timer-of
framework, and makes device names unique.
Changes compared to v3 ("[PATCH v3 0/3] clocksource/drivers/ostm:
Miscellaneous improvements",
https://lore.kernel.org/lkml/20190807084635.24173-1-geert+renesas@glider.be/):
- Dropped applied [PATCH 1/3],
- Dropped obsolete [PATCH 2/3],
- Convert to timer_of as requested by Daniel,
- Add new timer-of improvements.
Thanks!
Geert Uytterhoeven (4):
clocksource/drivers/timer-of: Convert last full_name to %pOF
clocksource/drivers/timer-of: Use unique device name instead of timer
clocksource/drivers/renesas-ostm: Convert to timer_of
clocksource/drivers/renesas-ostm: Use unique device name instead of
ostm
drivers/clocksource/Kconfig | 1 +
drivers/clocksource/renesas-ostm.c | 189 +++++++++++------------------
drivers/clocksource/timer-of.c | 6 +-
3 files changed, 76 insertions(+), 120 deletions(-)
--
2.17.1
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v4 1/4] clocksource/drivers/timer-of: Convert last full_name to %pOF
2019-10-16 14:47 [PATCH v4 0/4] clocksource/drivers/timer-of/renesas-ostm improvements Geert Uytterhoeven
@ 2019-10-16 14:47 ` Geert Uytterhoeven
2019-11-04 17:54 ` [tip: timers/core] " tip-bot2 for Geert Uytterhoeven
2019-10-16 14:47 ` [PATCH v4 2/4] clocksource/drivers/timer-of: Use unique device name instead of timer Geert Uytterhoeven
` (3 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Geert Uytterhoeven @ 2019-10-16 14:47 UTC (permalink / raw)
To: Daniel Lezcano, Thomas Gleixner
Cc: Chris Brandt, Rob Herring, Jacopo Mondi, linux-renesas-soc,
linux-kernel, Geert Uytterhoeven
Commit 469869d18a886e04 ("clocksource: Convert to using %pOF instead of
full_name") converted all but the one just added before by commit
32f2fea6e77e64cd ("clocksource/drivers/timer-of: Handle
of_irq_get_byname() result correctly").
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
- New.
---
drivers/clocksource/timer-of.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/clocksource/timer-of.c b/drivers/clocksource/timer-of.c
index 11ff701ff4bb9907..92cfb160657b81e2 100644
--- a/drivers/clocksource/timer-of.c
+++ b/drivers/clocksource/timer-of.c
@@ -57,8 +57,8 @@ static __init int timer_of_irq_init(struct device_node *np,
if (of_irq->name) {
of_irq->irq = ret = of_irq_get_byname(np, of_irq->name);
if (ret < 0) {
- pr_err("Failed to get interrupt %s for %s\n",
- of_irq->name, np->full_name);
+ pr_err("Failed to get interrupt %s for %pOF\n",
+ of_irq->name, np);
return ret;
}
} else {
--
2.17.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v4 2/4] clocksource/drivers/timer-of: Use unique device name instead of timer
2019-10-16 14:47 [PATCH v4 0/4] clocksource/drivers/timer-of/renesas-ostm improvements Geert Uytterhoeven
2019-10-16 14:47 ` [PATCH v4 1/4] clocksource/drivers/timer-of: Convert last full_name to %pOF Geert Uytterhoeven
@ 2019-10-16 14:47 ` Geert Uytterhoeven
2019-10-16 15:02 ` Rob Herring
2019-11-04 17:54 ` [tip: timers/core] " tip-bot2 for Geert Uytterhoeven
2019-10-16 14:47 ` [PATCH v4 3/4] clocksource/drivers/renesas-ostm: Convert to timer_of Geert Uytterhoeven
` (2 subsequent siblings)
4 siblings, 2 replies; 11+ messages in thread
From: Geert Uytterhoeven @ 2019-10-16 14:47 UTC (permalink / raw)
To: Daniel Lezcano, Thomas Gleixner
Cc: Chris Brandt, Rob Herring, Jacopo Mondi, linux-renesas-soc,
linux-kernel, Geert Uytterhoeven
If a hardware-specific driver does not provide a name, the timer-of core
falls back to device_node.name. Due to generic DT node naming policies,
that name is almost always "timer", and thus doesn't identify the actual
timer used.
Fix this by using device_node.full_name instead, which includes the unit
addrees.
Example impact on /proc/timer_list:
-Clock Event Device: timer
+Clock Event Device: timer@fcfec400
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
- New.
---
drivers/clocksource/timer-of.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/clocksource/timer-of.c b/drivers/clocksource/timer-of.c
index 92cfb160657b81e2..572da477c6d35c5e 100644
--- a/drivers/clocksource/timer-of.c
+++ b/drivers/clocksource/timer-of.c
@@ -192,7 +192,7 @@ int __init timer_of_init(struct device_node *np, struct timer_of *to)
}
if (!to->clkevt.name)
- to->clkevt.name = np->name;
+ to->clkevt.name = np->full_name;
to->np = np;
--
2.17.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v4 3/4] clocksource/drivers/renesas-ostm: Convert to timer_of
2019-10-16 14:47 [PATCH v4 0/4] clocksource/drivers/timer-of/renesas-ostm improvements Geert Uytterhoeven
2019-10-16 14:47 ` [PATCH v4 1/4] clocksource/drivers/timer-of: Convert last full_name to %pOF Geert Uytterhoeven
2019-10-16 14:47 ` [PATCH v4 2/4] clocksource/drivers/timer-of: Use unique device name instead of timer Geert Uytterhoeven
@ 2019-10-16 14:47 ` Geert Uytterhoeven
2019-11-04 17:54 ` [tip: timers/core] " tip-bot2 for Geert Uytterhoeven
2019-10-16 14:47 ` [PATCH v4 4/4] clocksource/drivers/renesas-ostm: Use unique device name instead of ostm Geert Uytterhoeven
2019-10-16 15:03 ` [PATCH v4 0/4] clocksource/drivers/timer-of/renesas-ostm improvements Daniel Lezcano
4 siblings, 1 reply; 11+ messages in thread
From: Geert Uytterhoeven @ 2019-10-16 14:47 UTC (permalink / raw)
To: Daniel Lezcano, Thomas Gleixner
Cc: Chris Brandt, Rob Herring, Jacopo Mondi, linux-renesas-soc,
linux-kernel, Geert Uytterhoeven
Convert the Renesas OSTM driver to use the timer_of framework.
This reduces the driver object size by 367 bytes (with gcc 7.4.0).
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
- New.
As ARCH_MULTIPLATFORM selects TIMER_OF, timer-of.o was already included,
and thus this conversion does not come with the additional cost of
including timer-of.o:
text data bss dec hex filename
1081 0 0 1081 439 drivers/clocksource/timer-of.o
However, on RZ/A SoCs, timer-of.o was unused before, so this does incur
a theoretical size increase...
Note that the OSTM driver needs TIMER_PROBE (selected by TIMER_OF)
regardless, as it relies on TIMER_OF_DECLARE().
---
drivers/clocksource/Kconfig | 1 +
drivers/clocksource/renesas-ostm.c | 189 +++++++++++------------------
2 files changed, 73 insertions(+), 117 deletions(-)
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index f35a53ce8988a80c..5fdd76cb1768117e 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -528,6 +528,7 @@ config SH_TIMER_MTU2
config RENESAS_OSTM
bool "Renesas OSTM timer driver" if COMPILE_TEST
select CLKSRC_MMIO
+ select TIMER_OF
help
Enables the support for the Renesas OSTM.
diff --git a/drivers/clocksource/renesas-ostm.c b/drivers/clocksource/renesas-ostm.c
index 37c39b901bb12b38..46012d905604bc43 100644
--- a/drivers/clocksource/renesas-ostm.c
+++ b/drivers/clocksource/renesas-ostm.c
@@ -6,14 +6,14 @@
* Copyright (C) 2017 Chris Brandt
*/
-#include <linux/of_address.h>
-#include <linux/of_irq.h>
#include <linux/clk.h>
#include <linux/clockchips.h>
#include <linux/interrupt.h>
#include <linux/sched_clock.h>
#include <linux/slab.h>
+#include "timer-of.h"
+
/*
* The OSTM contains independent channels.
* The first OSTM channel probed will be set up as a free running
@@ -24,12 +24,6 @@
* driven clock event.
*/
-struct ostm_device {
- void __iomem *base;
- unsigned long ticks_per_jiffy;
- struct clock_event_device ced;
-};
-
static void __iomem *system_clock; /* For sched_clock() */
/* OSTM REGISTERS */
@@ -47,41 +41,32 @@ static void __iomem *system_clock; /* For sched_clock() */
#define CTL_ONESHOT 0x02
#define CTL_FREERUN 0x02
-static struct ostm_device *ced_to_ostm(struct clock_event_device *ced)
-{
- return container_of(ced, struct ostm_device, ced);
-}
-
-static void ostm_timer_stop(struct ostm_device *ostm)
+static void ostm_timer_stop(struct timer_of *to)
{
- if (readb(ostm->base + OSTM_TE) & TE) {
- writeb(TT, ostm->base + OSTM_TT);
+ if (readb(timer_of_base(to) + OSTM_TE) & TE) {
+ writeb(TT, timer_of_base(to) + OSTM_TT);
/*
* Read back the register simply to confirm the write operation
* has completed since I/O writes can sometimes get queued by
* the bus architecture.
*/
- while (readb(ostm->base + OSTM_TE) & TE)
+ while (readb(timer_of_base(to) + OSTM_TE) & TE)
;
}
}
-static int __init ostm_init_clksrc(struct ostm_device *ostm, unsigned long rate)
+static int __init ostm_init_clksrc(struct timer_of *to)
{
- /*
- * irq not used (clock sources don't use interrupts)
- */
-
- ostm_timer_stop(ostm);
+ ostm_timer_stop(to);
- writel(0, ostm->base + OSTM_CMP);
- writeb(CTL_FREERUN, ostm->base + OSTM_CTL);
- writeb(TS, ostm->base + OSTM_TS);
+ writel(0, timer_of_base(to) + OSTM_CMP);
+ writeb(CTL_FREERUN, timer_of_base(to) + OSTM_CTL);
+ writeb(TS, timer_of_base(to) + OSTM_TS);
- return clocksource_mmio_init(ostm->base + OSTM_CNT,
- "ostm", rate,
- 300, 32, clocksource_mmio_readl_up);
+ return clocksource_mmio_init(timer_of_base(to) + OSTM_CNT, "ostm",
+ timer_of_rate(to), 300, 32,
+ clocksource_mmio_readl_up);
}
static u64 notrace ostm_read_sched_clock(void)
@@ -89,87 +74,75 @@ static u64 notrace ostm_read_sched_clock(void)
return readl(system_clock);
}
-static void __init ostm_init_sched_clock(struct ostm_device *ostm,
- unsigned long rate)
+static void __init ostm_init_sched_clock(struct timer_of *to)
{
- system_clock = ostm->base + OSTM_CNT;
- sched_clock_register(ostm_read_sched_clock, 32, rate);
+ system_clock = timer_of_base(to) + OSTM_CNT;
+ sched_clock_register(ostm_read_sched_clock, 32, timer_of_rate(to));
}
static int ostm_clock_event_next(unsigned long delta,
- struct clock_event_device *ced)
+ struct clock_event_device *ced)
{
- struct ostm_device *ostm = ced_to_ostm(ced);
+ struct timer_of *to = to_timer_of(ced);
- ostm_timer_stop(ostm);
+ ostm_timer_stop(to);
- writel(delta, ostm->base + OSTM_CMP);
- writeb(CTL_ONESHOT, ostm->base + OSTM_CTL);
- writeb(TS, ostm->base + OSTM_TS);
+ writel(delta, timer_of_base(to) + OSTM_CMP);
+ writeb(CTL_ONESHOT, timer_of_base(to) + OSTM_CTL);
+ writeb(TS, timer_of_base(to) + OSTM_TS);
return 0;
}
static int ostm_shutdown(struct clock_event_device *ced)
{
- struct ostm_device *ostm = ced_to_ostm(ced);
+ struct timer_of *to = to_timer_of(ced);
- ostm_timer_stop(ostm);
+ ostm_timer_stop(to);
return 0;
}
static int ostm_set_periodic(struct clock_event_device *ced)
{
- struct ostm_device *ostm = ced_to_ostm(ced);
+ struct timer_of *to = to_timer_of(ced);
if (clockevent_state_oneshot(ced) || clockevent_state_periodic(ced))
- ostm_timer_stop(ostm);
+ ostm_timer_stop(to);
- writel(ostm->ticks_per_jiffy - 1, ostm->base + OSTM_CMP);
- writeb(CTL_PERIODIC, ostm->base + OSTM_CTL);
- writeb(TS, ostm->base + OSTM_TS);
+ writel(timer_of_period(to) - 1, timer_of_base(to) + OSTM_CMP);
+ writeb(CTL_PERIODIC, timer_of_base(to) + OSTM_CTL);
+ writeb(TS, timer_of_base(to) + OSTM_TS);
return 0;
}
static int ostm_set_oneshot(struct clock_event_device *ced)
{
- struct ostm_device *ostm = ced_to_ostm(ced);
+ struct timer_of *to = to_timer_of(ced);
- ostm_timer_stop(ostm);
+ ostm_timer_stop(to);
return 0;
}
static irqreturn_t ostm_timer_interrupt(int irq, void *dev_id)
{
- struct ostm_device *ostm = dev_id;
+ struct clock_event_device *ced = dev_id;
- if (clockevent_state_oneshot(&ostm->ced))
- ostm_timer_stop(ostm);
+ if (clockevent_state_oneshot(ced))
+ ostm_timer_stop(to_timer_of(ced));
/* notify clockevent layer */
- if (ostm->ced.event_handler)
- ostm->ced.event_handler(&ostm->ced);
+ if (ced->event_handler)
+ ced->event_handler(ced);
return IRQ_HANDLED;
}
-static int __init ostm_init_clkevt(struct ostm_device *ostm, int irq,
- unsigned long rate)
+static int __init ostm_init_clkevt(struct timer_of *to)
{
- struct clock_event_device *ced = &ostm->ced;
- int ret = -ENXIO;
-
- ret = request_irq(irq, ostm_timer_interrupt,
- IRQF_TIMER | IRQF_IRQPOLL,
- "ostm", ostm);
- if (ret) {
- pr_err("ostm: failed to request irq\n");
- return ret;
- }
+ struct clock_event_device *ced = &to->clkevt;
- ced->name = "ostm";
ced->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC;
ced->set_state_shutdown = ostm_shutdown;
ced->set_state_periodic = ostm_set_periodic;
@@ -178,79 +151,61 @@ static int __init ostm_init_clkevt(struct ostm_device *ostm, int irq,
ced->shift = 32;
ced->rating = 300;
ced->cpumask = cpumask_of(0);
- clockevents_config_and_register(ced, rate, 0xf, 0xffffffff);
+ clockevents_config_and_register(ced, timer_of_rate(to), 0xf,
+ 0xffffffff);
return 0;
}
static int __init ostm_init(struct device_node *np)
{
- struct ostm_device *ostm;
- int ret = -EFAULT;
- struct clk *ostm_clk = NULL;
- int irq;
- unsigned long rate;
-
- ostm = kzalloc(sizeof(*ostm), GFP_KERNEL);
- if (!ostm)
- return -ENOMEM;
-
- ostm->base = of_iomap(np, 0);
- if (!ostm->base) {
- pr_err("ostm: failed to remap I/O memory\n");
- goto err;
- }
-
- irq = irq_of_parse_and_map(np, 0);
- if (irq < 0) {
- pr_err("ostm: Failed to get irq\n");
- goto err;
- }
+ struct timer_of *to;
+ int ret;
- ostm_clk = of_clk_get(np, 0);
- if (IS_ERR(ostm_clk)) {
- pr_err("ostm: Failed to get clock\n");
- ostm_clk = NULL;
- goto err;
- }
+ to = kzalloc(sizeof(*to), GFP_KERNEL);
+ if (!to)
+ return -ENOMEM;
- ret = clk_prepare_enable(ostm_clk);
- if (ret) {
- pr_err("ostm: Failed to enable clock\n");
- goto err;
+ to->flags = TIMER_OF_BASE | TIMER_OF_CLOCK;
+ if (system_clock) {
+ /*
+ * clock sources don't use interrupts, clock events do
+ */
+ to->flags |= TIMER_OF_IRQ;
+ to->of_irq.flags = IRQF_TIMER | IRQF_IRQPOLL;
+ to->of_irq.handler = ostm_timer_interrupt;
}
- rate = clk_get_rate(ostm_clk);
- ostm->ticks_per_jiffy = DIV_ROUND_CLOSEST(rate, HZ);
+ ret = timer_of_init(np, to);
+ if (ret)
+ goto err_free;
/*
* First probed device will be used as system clocksource. Any
* additional devices will be used as clock events.
*/
if (!system_clock) {
- ret = ostm_init_clksrc(ostm, rate);
-
- if (!ret) {
- ostm_init_sched_clock(ostm, rate);
- pr_info("ostm: used for clocksource\n");
- }
+ ret = ostm_init_clksrc(to);
+ if (ret)
+ goto err_cleanup;
+ ostm_init_sched_clock(to);
+ pr_info("ostm: used for clocksource\n");
} else {
- ret = ostm_init_clkevt(ostm, irq, rate);
+ ret = ostm_init_clkevt(to);
+ if (ret)
+ goto err_cleanup;
- if (!ret)
- pr_info("ostm: used for clock events\n");
- }
-
-err:
- if (ret) {
- clk_disable_unprepare(ostm_clk);
- iounmap(ostm->base);
- kfree(ostm);
- return ret;
+ pr_info("ostm: used for clock events\n");
}
return 0;
+
+err_cleanup:
+ timer_of_cleanup(to);
+err_free:
+ kfree(to);
+ return ret;
}
TIMER_OF_DECLARE(ostm, "renesas,ostm", ostm_init);
--
2.17.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v4 4/4] clocksource/drivers/renesas-ostm: Use unique device name instead of ostm
2019-10-16 14:47 [PATCH v4 0/4] clocksource/drivers/timer-of/renesas-ostm improvements Geert Uytterhoeven
` (2 preceding siblings ...)
2019-10-16 14:47 ` [PATCH v4 3/4] clocksource/drivers/renesas-ostm: Convert to timer_of Geert Uytterhoeven
@ 2019-10-16 14:47 ` Geert Uytterhoeven
2019-11-04 17:54 ` [tip: timers/core] " tip-bot2 for Geert Uytterhoeven
2019-10-16 15:03 ` [PATCH v4 0/4] clocksource/drivers/timer-of/renesas-ostm improvements Daniel Lezcano
4 siblings, 1 reply; 11+ messages in thread
From: Geert Uytterhoeven @ 2019-10-16 14:47 UTC (permalink / raw)
To: Daniel Lezcano, Thomas Gleixner
Cc: Chris Brandt, Rob Herring, Jacopo Mondi, linux-renesas-soc,
linux-kernel, Geert Uytterhoeven
Currently all OSTM devices are called "ostm", also in kernel messages.
As there can be multiple instances in an SoC, this can confuse the user.
Hence construct a unique name from the DT node name, like is done for
platform devices.
On RSK+RZA1, the boot log changes like:
-clocksource: ostm: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 57352151442 ns
+clocksource: timer@fcfec000: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 57352151442 ns
sched_clock: 32 bits at 33MHz, resolution 30ns, wraps every 64440619504ns
-ostm: used for clocksource
-ostm: used for clock events
+/soc/timer@fcfec000: used for clocksource
+/soc/timer@fcfec400: used for clock events
...
-clocksource: Switched to clocksource ostm
+clocksource: Switched to clocksource timer@fcfec000
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
- Rebase on top of timer_of conversion, and use np->full_name or %pOF,
like the timer-of core does,
v3:
- Make the name format similar to the one used for platform devices,
- Use kasprintf() instead of buffer size guessing,
- Use a real example from rskrza1.
v2 (by Jacopo):
- Use np->fullname.
---
drivers/clocksource/renesas-ostm.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/clocksource/renesas-ostm.c b/drivers/clocksource/renesas-ostm.c
index 46012d905604bc43..3d06ba66008c7029 100644
--- a/drivers/clocksource/renesas-ostm.c
+++ b/drivers/clocksource/renesas-ostm.c
@@ -64,9 +64,9 @@ static int __init ostm_init_clksrc(struct timer_of *to)
writeb(CTL_FREERUN, timer_of_base(to) + OSTM_CTL);
writeb(TS, timer_of_base(to) + OSTM_TS);
- return clocksource_mmio_init(timer_of_base(to) + OSTM_CNT, "ostm",
- timer_of_rate(to), 300, 32,
- clocksource_mmio_readl_up);
+ return clocksource_mmio_init(timer_of_base(to) + OSTM_CNT,
+ to->np->full_name, timer_of_rate(to), 300,
+ 32, clocksource_mmio_readl_up);
}
static u64 notrace ostm_read_sched_clock(void)
@@ -190,13 +190,13 @@ static int __init ostm_init(struct device_node *np)
goto err_cleanup;
ostm_init_sched_clock(to);
- pr_info("ostm: used for clocksource\n");
+ pr_info("%pOF: used for clocksource\n", np);
} else {
ret = ostm_init_clkevt(to);
if (ret)
goto err_cleanup;
- pr_info("ostm: used for clock events\n");
+ pr_info("%pOF: used for clock events\n", np);
}
return 0;
--
2.17.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v4 2/4] clocksource/drivers/timer-of: Use unique device name instead of timer
2019-10-16 14:47 ` [PATCH v4 2/4] clocksource/drivers/timer-of: Use unique device name instead of timer Geert Uytterhoeven
@ 2019-10-16 15:02 ` Rob Herring
2019-11-04 17:54 ` [tip: timers/core] " tip-bot2 for Geert Uytterhoeven
1 sibling, 0 replies; 11+ messages in thread
From: Rob Herring @ 2019-10-16 15:02 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Daniel Lezcano, Thomas Gleixner, Chris Brandt, Jacopo Mondi,
open list:MEDIA DRIVERS FOR RENESAS - FCP, linux-kernel
On Wed, Oct 16, 2019 at 9:52 AM Geert Uytterhoeven
<geert+renesas@glider.be> wrote:
>
> If a hardware-specific driver does not provide a name, the timer-of core
> falls back to device_node.name. Due to generic DT node naming policies,
> that name is almost always "timer", and thus doesn't identify the actual
> timer used.
>
> Fix this by using device_node.full_name instead, which includes the unit
> addrees.
>
> Example impact on /proc/timer_list:
>
> -Clock Event Device: timer
> +Clock Event Device: timer@fcfec400
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> v4:
> - New.
> ---
> drivers/clocksource/timer-of.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Good. One less device_node.name pointer use to get rid of. I want to
drop it from the struct and stop storing both node name strings.
Reviewed-by: Rob Herring <robh@kernel.org>
Rob
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 0/4] clocksource/drivers/timer-of/renesas-ostm improvements
2019-10-16 14:47 [PATCH v4 0/4] clocksource/drivers/timer-of/renesas-ostm improvements Geert Uytterhoeven
` (3 preceding siblings ...)
2019-10-16 14:47 ` [PATCH v4 4/4] clocksource/drivers/renesas-ostm: Use unique device name instead of ostm Geert Uytterhoeven
@ 2019-10-16 15:03 ` Daniel Lezcano
4 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2019-10-16 15:03 UTC (permalink / raw)
To: Geert Uytterhoeven, Thomas Gleixner
Cc: Chris Brandt, Rob Herring, Jacopo Mondi, linux-renesas-soc, linux-kernel
On 16/10/2019 16:47, Geert Uytterhoeven wrote:
> Hi Daniel, Thomas,
>
> This patch series converts the Renesas OSTM driver to the timer-of
> framework, and makes device names unique.
>
> Changes compared to v3 ("[PATCH v3 0/3] clocksource/drivers/ostm:
> Miscellaneous improvements",
> https://lore.kernel.org/lkml/20190807084635.24173-1-geert+renesas@glider.be/):
> - Dropped applied [PATCH 1/3],
> - Dropped obsolete [PATCH 2/3],
> - Convert to timer_of as requested by Daniel,
> - Add new timer-of improvements.
Applied, thanks!
--
<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
^ permalink raw reply [flat|nested] 11+ messages in thread
* [tip: timers/core] clocksource/drivers/renesas-ostm: Use unique device name instead of ostm
2019-10-16 14:47 ` [PATCH v4 4/4] clocksource/drivers/renesas-ostm: Use unique device name instead of ostm Geert Uytterhoeven
@ 2019-11-04 17:54 ` tip-bot2 for Geert Uytterhoeven
0 siblings, 0 replies; 11+ messages in thread
From: tip-bot2 for Geert Uytterhoeven @ 2019-11-04 17:54 UTC (permalink / raw)
To: linux-tip-commits
Cc: Geert Uytterhoeven, Daniel Lezcano, Ingo Molnar, Borislav Petkov,
linux-kernel
The following commit has been merged into the timers/core branch of tip:
Commit-ID: b35a5e5961f814799b75a97a16c9b51e0d477c06
Gitweb: https://git.kernel.org/tip/b35a5e5961f814799b75a97a16c9b51e0d477c06
Author: Geert Uytterhoeven <geert+renesas@glider.be>
AuthorDate: Wed, 16 Oct 2019 16:47:47 +02:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Mon, 04 Nov 2019 10:38:46 +01:00
clocksource/drivers/renesas-ostm: Use unique device name instead of ostm
Currently all OSTM devices are called "ostm", also in kernel messages.
As there can be multiple instances in an SoC, this can confuse the user.
Hence construct a unique name from the DT node name, like is done for
platform devices.
On RSK+RZA1, the boot log changes like:
-clocksource: ostm: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 57352151442 ns
+clocksource: timer@fcfec000: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 57352151442 ns
sched_clock: 32 bits at 33MHz, resolution 30ns, wraps every 64440619504ns
-ostm: used for clocksource
-ostm: used for clock events
+/soc/timer@fcfec000: used for clocksource
+/soc/timer@fcfec400: used for clock events
...
-clocksource: Switched to clocksource ostm
+clocksource: Switched to clocksource timer@fcfec000
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20191016144747.29538-5-geert+renesas@glider.be
---
drivers/clocksource/renesas-ostm.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/clocksource/renesas-ostm.c b/drivers/clocksource/renesas-ostm.c
index 46012d9..3d06ba6 100644
--- a/drivers/clocksource/renesas-ostm.c
+++ b/drivers/clocksource/renesas-ostm.c
@@ -64,9 +64,9 @@ static int __init ostm_init_clksrc(struct timer_of *to)
writeb(CTL_FREERUN, timer_of_base(to) + OSTM_CTL);
writeb(TS, timer_of_base(to) + OSTM_TS);
- return clocksource_mmio_init(timer_of_base(to) + OSTM_CNT, "ostm",
- timer_of_rate(to), 300, 32,
- clocksource_mmio_readl_up);
+ return clocksource_mmio_init(timer_of_base(to) + OSTM_CNT,
+ to->np->full_name, timer_of_rate(to), 300,
+ 32, clocksource_mmio_readl_up);
}
static u64 notrace ostm_read_sched_clock(void)
@@ -190,13 +190,13 @@ static int __init ostm_init(struct device_node *np)
goto err_cleanup;
ostm_init_sched_clock(to);
- pr_info("ostm: used for clocksource\n");
+ pr_info("%pOF: used for clocksource\n", np);
} else {
ret = ostm_init_clkevt(to);
if (ret)
goto err_cleanup;
- pr_info("ostm: used for clock events\n");
+ pr_info("%pOF: used for clock events\n", np);
}
return 0;
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [tip: timers/core] clocksource/drivers/renesas-ostm: Convert to timer_of
2019-10-16 14:47 ` [PATCH v4 3/4] clocksource/drivers/renesas-ostm: Convert to timer_of Geert Uytterhoeven
@ 2019-11-04 17:54 ` tip-bot2 for Geert Uytterhoeven
0 siblings, 0 replies; 11+ messages in thread
From: tip-bot2 for Geert Uytterhoeven @ 2019-11-04 17:54 UTC (permalink / raw)
To: linux-tip-commits
Cc: Geert Uytterhoeven, Daniel Lezcano, Ingo Molnar, Borislav Petkov,
linux-kernel
The following commit has been merged into the timers/core branch of tip:
Commit-ID: 227314239a5e87fb531cbf3bd8953b2d1d2694bd
Gitweb: https://git.kernel.org/tip/227314239a5e87fb531cbf3bd8953b2d1d2694bd
Author: Geert Uytterhoeven <geert+renesas@glider.be>
AuthorDate: Wed, 16 Oct 2019 16:47:46 +02:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Mon, 04 Nov 2019 10:38:46 +01:00
clocksource/drivers/renesas-ostm: Convert to timer_of
Convert the Renesas OSTM driver to use the timer_of framework.
This reduces the driver object size by 367 bytes (with gcc 7.4.0).
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20191016144747.29538-4-geert+renesas@glider.be
---
drivers/clocksource/Kconfig | 1 +-
drivers/clocksource/renesas-ostm.c | 189 ++++++++++------------------
2 files changed, 73 insertions(+), 117 deletions(-)
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index f35a53c..5fdd76c 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -528,6 +528,7 @@ config SH_TIMER_MTU2
config RENESAS_OSTM
bool "Renesas OSTM timer driver" if COMPILE_TEST
select CLKSRC_MMIO
+ select TIMER_OF
help
Enables the support for the Renesas OSTM.
diff --git a/drivers/clocksource/renesas-ostm.c b/drivers/clocksource/renesas-ostm.c
index 37c39b9..46012d9 100644
--- a/drivers/clocksource/renesas-ostm.c
+++ b/drivers/clocksource/renesas-ostm.c
@@ -6,14 +6,14 @@
* Copyright (C) 2017 Chris Brandt
*/
-#include <linux/of_address.h>
-#include <linux/of_irq.h>
#include <linux/clk.h>
#include <linux/clockchips.h>
#include <linux/interrupt.h>
#include <linux/sched_clock.h>
#include <linux/slab.h>
+#include "timer-of.h"
+
/*
* The OSTM contains independent channels.
* The first OSTM channel probed will be set up as a free running
@@ -24,12 +24,6 @@
* driven clock event.
*/
-struct ostm_device {
- void __iomem *base;
- unsigned long ticks_per_jiffy;
- struct clock_event_device ced;
-};
-
static void __iomem *system_clock; /* For sched_clock() */
/* OSTM REGISTERS */
@@ -47,41 +41,32 @@ static void __iomem *system_clock; /* For sched_clock() */
#define CTL_ONESHOT 0x02
#define CTL_FREERUN 0x02
-static struct ostm_device *ced_to_ostm(struct clock_event_device *ced)
-{
- return container_of(ced, struct ostm_device, ced);
-}
-
-static void ostm_timer_stop(struct ostm_device *ostm)
+static void ostm_timer_stop(struct timer_of *to)
{
- if (readb(ostm->base + OSTM_TE) & TE) {
- writeb(TT, ostm->base + OSTM_TT);
+ if (readb(timer_of_base(to) + OSTM_TE) & TE) {
+ writeb(TT, timer_of_base(to) + OSTM_TT);
/*
* Read back the register simply to confirm the write operation
* has completed since I/O writes can sometimes get queued by
* the bus architecture.
*/
- while (readb(ostm->base + OSTM_TE) & TE)
+ while (readb(timer_of_base(to) + OSTM_TE) & TE)
;
}
}
-static int __init ostm_init_clksrc(struct ostm_device *ostm, unsigned long rate)
+static int __init ostm_init_clksrc(struct timer_of *to)
{
- /*
- * irq not used (clock sources don't use interrupts)
- */
-
- ostm_timer_stop(ostm);
+ ostm_timer_stop(to);
- writel(0, ostm->base + OSTM_CMP);
- writeb(CTL_FREERUN, ostm->base + OSTM_CTL);
- writeb(TS, ostm->base + OSTM_TS);
+ writel(0, timer_of_base(to) + OSTM_CMP);
+ writeb(CTL_FREERUN, timer_of_base(to) + OSTM_CTL);
+ writeb(TS, timer_of_base(to) + OSTM_TS);
- return clocksource_mmio_init(ostm->base + OSTM_CNT,
- "ostm", rate,
- 300, 32, clocksource_mmio_readl_up);
+ return clocksource_mmio_init(timer_of_base(to) + OSTM_CNT, "ostm",
+ timer_of_rate(to), 300, 32,
+ clocksource_mmio_readl_up);
}
static u64 notrace ostm_read_sched_clock(void)
@@ -89,87 +74,75 @@ static u64 notrace ostm_read_sched_clock(void)
return readl(system_clock);
}
-static void __init ostm_init_sched_clock(struct ostm_device *ostm,
- unsigned long rate)
+static void __init ostm_init_sched_clock(struct timer_of *to)
{
- system_clock = ostm->base + OSTM_CNT;
- sched_clock_register(ostm_read_sched_clock, 32, rate);
+ system_clock = timer_of_base(to) + OSTM_CNT;
+ sched_clock_register(ostm_read_sched_clock, 32, timer_of_rate(to));
}
static int ostm_clock_event_next(unsigned long delta,
- struct clock_event_device *ced)
+ struct clock_event_device *ced)
{
- struct ostm_device *ostm = ced_to_ostm(ced);
+ struct timer_of *to = to_timer_of(ced);
- ostm_timer_stop(ostm);
+ ostm_timer_stop(to);
- writel(delta, ostm->base + OSTM_CMP);
- writeb(CTL_ONESHOT, ostm->base + OSTM_CTL);
- writeb(TS, ostm->base + OSTM_TS);
+ writel(delta, timer_of_base(to) + OSTM_CMP);
+ writeb(CTL_ONESHOT, timer_of_base(to) + OSTM_CTL);
+ writeb(TS, timer_of_base(to) + OSTM_TS);
return 0;
}
static int ostm_shutdown(struct clock_event_device *ced)
{
- struct ostm_device *ostm = ced_to_ostm(ced);
+ struct timer_of *to = to_timer_of(ced);
- ostm_timer_stop(ostm);
+ ostm_timer_stop(to);
return 0;
}
static int ostm_set_periodic(struct clock_event_device *ced)
{
- struct ostm_device *ostm = ced_to_ostm(ced);
+ struct timer_of *to = to_timer_of(ced);
if (clockevent_state_oneshot(ced) || clockevent_state_periodic(ced))
- ostm_timer_stop(ostm);
+ ostm_timer_stop(to);
- writel(ostm->ticks_per_jiffy - 1, ostm->base + OSTM_CMP);
- writeb(CTL_PERIODIC, ostm->base + OSTM_CTL);
- writeb(TS, ostm->base + OSTM_TS);
+ writel(timer_of_period(to) - 1, timer_of_base(to) + OSTM_CMP);
+ writeb(CTL_PERIODIC, timer_of_base(to) + OSTM_CTL);
+ writeb(TS, timer_of_base(to) + OSTM_TS);
return 0;
}
static int ostm_set_oneshot(struct clock_event_device *ced)
{
- struct ostm_device *ostm = ced_to_ostm(ced);
+ struct timer_of *to = to_timer_of(ced);
- ostm_timer_stop(ostm);
+ ostm_timer_stop(to);
return 0;
}
static irqreturn_t ostm_timer_interrupt(int irq, void *dev_id)
{
- struct ostm_device *ostm = dev_id;
+ struct clock_event_device *ced = dev_id;
- if (clockevent_state_oneshot(&ostm->ced))
- ostm_timer_stop(ostm);
+ if (clockevent_state_oneshot(ced))
+ ostm_timer_stop(to_timer_of(ced));
/* notify clockevent layer */
- if (ostm->ced.event_handler)
- ostm->ced.event_handler(&ostm->ced);
+ if (ced->event_handler)
+ ced->event_handler(ced);
return IRQ_HANDLED;
}
-static int __init ostm_init_clkevt(struct ostm_device *ostm, int irq,
- unsigned long rate)
+static int __init ostm_init_clkevt(struct timer_of *to)
{
- struct clock_event_device *ced = &ostm->ced;
- int ret = -ENXIO;
-
- ret = request_irq(irq, ostm_timer_interrupt,
- IRQF_TIMER | IRQF_IRQPOLL,
- "ostm", ostm);
- if (ret) {
- pr_err("ostm: failed to request irq\n");
- return ret;
- }
+ struct clock_event_device *ced = &to->clkevt;
- ced->name = "ostm";
ced->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC;
ced->set_state_shutdown = ostm_shutdown;
ced->set_state_periodic = ostm_set_periodic;
@@ -178,79 +151,61 @@ static int __init ostm_init_clkevt(struct ostm_device *ostm, int irq,
ced->shift = 32;
ced->rating = 300;
ced->cpumask = cpumask_of(0);
- clockevents_config_and_register(ced, rate, 0xf, 0xffffffff);
+ clockevents_config_and_register(ced, timer_of_rate(to), 0xf,
+ 0xffffffff);
return 0;
}
static int __init ostm_init(struct device_node *np)
{
- struct ostm_device *ostm;
- int ret = -EFAULT;
- struct clk *ostm_clk = NULL;
- int irq;
- unsigned long rate;
-
- ostm = kzalloc(sizeof(*ostm), GFP_KERNEL);
- if (!ostm)
- return -ENOMEM;
-
- ostm->base = of_iomap(np, 0);
- if (!ostm->base) {
- pr_err("ostm: failed to remap I/O memory\n");
- goto err;
- }
-
- irq = irq_of_parse_and_map(np, 0);
- if (irq < 0) {
- pr_err("ostm: Failed to get irq\n");
- goto err;
- }
+ struct timer_of *to;
+ int ret;
- ostm_clk = of_clk_get(np, 0);
- if (IS_ERR(ostm_clk)) {
- pr_err("ostm: Failed to get clock\n");
- ostm_clk = NULL;
- goto err;
- }
+ to = kzalloc(sizeof(*to), GFP_KERNEL);
+ if (!to)
+ return -ENOMEM;
- ret = clk_prepare_enable(ostm_clk);
- if (ret) {
- pr_err("ostm: Failed to enable clock\n");
- goto err;
+ to->flags = TIMER_OF_BASE | TIMER_OF_CLOCK;
+ if (system_clock) {
+ /*
+ * clock sources don't use interrupts, clock events do
+ */
+ to->flags |= TIMER_OF_IRQ;
+ to->of_irq.flags = IRQF_TIMER | IRQF_IRQPOLL;
+ to->of_irq.handler = ostm_timer_interrupt;
}
- rate = clk_get_rate(ostm_clk);
- ostm->ticks_per_jiffy = DIV_ROUND_CLOSEST(rate, HZ);
+ ret = timer_of_init(np, to);
+ if (ret)
+ goto err_free;
/*
* First probed device will be used as system clocksource. Any
* additional devices will be used as clock events.
*/
if (!system_clock) {
- ret = ostm_init_clksrc(ostm, rate);
-
- if (!ret) {
- ostm_init_sched_clock(ostm, rate);
- pr_info("ostm: used for clocksource\n");
- }
+ ret = ostm_init_clksrc(to);
+ if (ret)
+ goto err_cleanup;
+ ostm_init_sched_clock(to);
+ pr_info("ostm: used for clocksource\n");
} else {
- ret = ostm_init_clkevt(ostm, irq, rate);
+ ret = ostm_init_clkevt(to);
+ if (ret)
+ goto err_cleanup;
- if (!ret)
- pr_info("ostm: used for clock events\n");
- }
-
-err:
- if (ret) {
- clk_disable_unprepare(ostm_clk);
- iounmap(ostm->base);
- kfree(ostm);
- return ret;
+ pr_info("ostm: used for clock events\n");
}
return 0;
+
+err_cleanup:
+ timer_of_cleanup(to);
+err_free:
+ kfree(to);
+ return ret;
}
TIMER_OF_DECLARE(ostm, "renesas,ostm", ostm_init);
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [tip: timers/core] clocksource/drivers/timer-of: Use unique device name instead of timer
2019-10-16 14:47 ` [PATCH v4 2/4] clocksource/drivers/timer-of: Use unique device name instead of timer Geert Uytterhoeven
2019-10-16 15:02 ` Rob Herring
@ 2019-11-04 17:54 ` tip-bot2 for Geert Uytterhoeven
1 sibling, 0 replies; 11+ messages in thread
From: tip-bot2 for Geert Uytterhoeven @ 2019-11-04 17:54 UTC (permalink / raw)
To: linux-tip-commits
Cc: Geert Uytterhoeven, Rob Herring, Daniel Lezcano, Ingo Molnar,
Borislav Petkov, linux-kernel
The following commit has been merged into the timers/core branch of tip:
Commit-ID: 4411464d6f8b5e5759637235a6f2b2a85c2be0f1
Gitweb: https://git.kernel.org/tip/4411464d6f8b5e5759637235a6f2b2a85c2be0f1
Author: Geert Uytterhoeven <geert+renesas@glider.be>
AuthorDate: Wed, 16 Oct 2019 16:47:45 +02:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Mon, 04 Nov 2019 10:38:46 +01:00
clocksource/drivers/timer-of: Use unique device name instead of timer
If a hardware-specific driver does not provide a name, the timer-of core
falls back to device_node.name. Due to generic DT node naming policies,
that name is almost always "timer", and thus doesn't identify the actual
timer used.
Fix this by using device_node.full_name instead, which includes the unit
addrees.
Example impact on /proc/timer_list:
-Clock Event Device: timer
+Clock Event Device: timer@fcfec400
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20191016144747.29538-3-geert+renesas@glider.be
---
drivers/clocksource/timer-of.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/clocksource/timer-of.c b/drivers/clocksource/timer-of.c
index 3843942..8c11bd7 100644
--- a/drivers/clocksource/timer-of.c
+++ b/drivers/clocksource/timer-of.c
@@ -190,7 +190,7 @@ int __init timer_of_init(struct device_node *np, struct timer_of *to)
}
if (!to->clkevt.name)
- to->clkevt.name = np->name;
+ to->clkevt.name = np->full_name;
to->np = np;
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [tip: timers/core] clocksource/drivers/timer-of: Convert last full_name to %pOF
2019-10-16 14:47 ` [PATCH v4 1/4] clocksource/drivers/timer-of: Convert last full_name to %pOF Geert Uytterhoeven
@ 2019-11-04 17:54 ` tip-bot2 for Geert Uytterhoeven
0 siblings, 0 replies; 11+ messages in thread
From: tip-bot2 for Geert Uytterhoeven @ 2019-11-04 17:54 UTC (permalink / raw)
To: linux-tip-commits
Cc: Geert Uytterhoeven, Daniel Lezcano, Ingo Molnar, Borislav Petkov,
linux-kernel
The following commit has been merged into the timers/core branch of tip:
Commit-ID: ccb80012481fd8d16c7557c00bb54c42103eef9d
Gitweb: https://git.kernel.org/tip/ccb80012481fd8d16c7557c00bb54c42103eef9d
Author: Geert Uytterhoeven <geert+renesas@glider.be>
AuthorDate: Wed, 16 Oct 2019 16:47:44 +02:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Mon, 04 Nov 2019 10:38:46 +01:00
clocksource/drivers/timer-of: Convert last full_name to %pOF
Commit 469869d18a886e04 ("clocksource: Convert to using %pOF instead of
full_name") converted all but the one just added before by commit
32f2fea6e77e64cd ("clocksource/drivers/timer-of: Handle
of_irq_get_byname() result correctly").
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20191016144747.29538-2-geert+renesas@glider.be
---
drivers/clocksource/timer-of.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/clocksource/timer-of.c b/drivers/clocksource/timer-of.c
index d8c2bd4..3843942 100644
--- a/drivers/clocksource/timer-of.c
+++ b/drivers/clocksource/timer-of.c
@@ -55,8 +55,8 @@ static __init int timer_of_irq_init(struct device_node *np,
if (of_irq->name) {
of_irq->irq = ret = of_irq_get_byname(np, of_irq->name);
if (ret < 0) {
- pr_err("Failed to get interrupt %s for %s\n",
- of_irq->name, np->full_name);
+ pr_err("Failed to get interrupt %s for %pOF\n",
+ of_irq->name, np);
return ret;
}
} else {
^ permalink raw reply related [flat|nested] 11+ messages in thread
end of thread, other threads:[~2019-11-04 17:54 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-16 14:47 [PATCH v4 0/4] clocksource/drivers/timer-of/renesas-ostm improvements Geert Uytterhoeven
2019-10-16 14:47 ` [PATCH v4 1/4] clocksource/drivers/timer-of: Convert last full_name to %pOF Geert Uytterhoeven
2019-11-04 17:54 ` [tip: timers/core] " tip-bot2 for Geert Uytterhoeven
2019-10-16 14:47 ` [PATCH v4 2/4] clocksource/drivers/timer-of: Use unique device name instead of timer Geert Uytterhoeven
2019-10-16 15:02 ` Rob Herring
2019-11-04 17:54 ` [tip: timers/core] " tip-bot2 for Geert Uytterhoeven
2019-10-16 14:47 ` [PATCH v4 3/4] clocksource/drivers/renesas-ostm: Convert to timer_of Geert Uytterhoeven
2019-11-04 17:54 ` [tip: timers/core] " tip-bot2 for Geert Uytterhoeven
2019-10-16 14:47 ` [PATCH v4 4/4] clocksource/drivers/renesas-ostm: Use unique device name instead of ostm Geert Uytterhoeven
2019-11-04 17:54 ` [tip: timers/core] " tip-bot2 for Geert Uytterhoeven
2019-10-16 15:03 ` [PATCH v4 0/4] clocksource/drivers/timer-of/renesas-ostm improvements Daniel Lezcano
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).