Skip to content

Commit 870e292

Browse files
author
Rob Herring
committed
ARM: integrator-cp: convert use CLKSRC_OF for timer init
Move the integrator-cp timer init to timer-sp.c and use CLKSRC_OF. There is no reason to use the aliases, so drop them from the init code. The integrator-cp timers are mistakenly called sp804 timers in the dts, but in fact they are not sp804 dual timers, but single timers with the same programming model. Fix the dts to reflect this. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Acked-by: Linus Walleij <linus.walleij@linaro.org>
1 parent 818270d commit 870e292

File tree

3 files changed

+38
-37
lines changed

3 files changed

+38
-37
lines changed

arch/arm/boot/dts/integratorcp.dts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@
2424
};
2525

2626
timer0: timer@13000000 {
27-
compatible = "arm,sp804", "arm,primecell";
27+
compatible = "arm,integrator-cp-timer";
2828
};
2929

3030
timer1: timer@13000100 {
31-
compatible = "arm,sp804", "arm,primecell";
31+
compatible = "arm,integrator-cp-timer";
3232
};
3333

3434
timer2: timer@13000200 {
35-
compatible = "arm,sp804", "arm,primecell";
35+
compatible = "arm,integrator-cp-timer";
3636
};
3737

3838
pic: pic@14000000 {

arch/arm/common/timer-sp.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
#include <asm/sched_clock.h>
3333
#include <asm/hardware/arm_timer.h>
34+
#include <asm/hardware/timer-sp.h>
3435

3536
static long __init sp804_get_clock_rate(struct clk *clk)
3637
{
@@ -262,3 +263,37 @@ static void __init sp804_of_init(struct device_node *np)
262263
iounmap(base);
263264
}
264265
CLOCKSOURCE_OF_DECLARE(sp804, "arm,sp804", sp804_of_init);
266+
267+
static void __init integrator_cp_of_init(struct device_node *np)
268+
{
269+
static int init_count = 0;
270+
void __iomem *base;
271+
int irq;
272+
const char *name = of_get_property(np, "compatible", NULL);
273+
274+
base = of_iomap(np, 0);
275+
if (WARN_ON(!base))
276+
return;
277+
278+
/* Ensure timer is disabled */
279+
writel(0, base + TIMER_CTRL);
280+
281+
if (init_count == 2 || !of_device_is_available(np))
282+
goto err;
283+
284+
if (!init_count)
285+
sp804_clocksource_init(base, name);
286+
else {
287+
irq = irq_of_parse_and_map(np, 0);
288+
if (irq <= 0)
289+
goto err;
290+
291+
sp804_clockevents_init(base, irq, name);
292+
}
293+
294+
init_count++;
295+
return;
296+
err:
297+
iounmap(base);
298+
}
299+
CLOCKSOURCE_OF_DECLARE(intcp, "arm,integrator-cp-timer", integrator_cp_of_init);

arch/arm/mach-integrator/integrator_cp.c

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -250,39 +250,6 @@ static void __init intcp_init_early(void)
250250
}
251251

252252
#ifdef CONFIG_OF
253-
254-
static void __init cp_of_timer_init(void)
255-
{
256-
struct device_node *node;
257-
const char *path;
258-
void __iomem *base;
259-
int err;
260-
int irq;
261-
262-
err = of_property_read_string(of_aliases,
263-
"arm,timer-primary", &path);
264-
if (WARN_ON(err))
265-
return;
266-
node = of_find_node_by_path(path);
267-
base = of_iomap(node, 0);
268-
if (WARN_ON(!base))
269-
return;
270-
writel(0, base + TIMER_CTRL);
271-
sp804_clocksource_init(base, node->name);
272-
273-
err = of_property_read_string(of_aliases,
274-
"arm,timer-secondary", &path);
275-
if (WARN_ON(err))
276-
return;
277-
node = of_find_node_by_path(path);
278-
base = of_iomap(node, 0);
279-
if (WARN_ON(!base))
280-
return;
281-
irq = irq_of_parse_and_map(node, 0);
282-
writel(0, base + TIMER_CTRL);
283-
sp804_clockevents_init(base, irq, node->name);
284-
}
285-
286253
static const struct of_device_id fpga_irq_of_match[] __initconst = {
287254
{ .compatible = "arm,versatile-fpga-irq", .data = fpga_irq_of_init, },
288255
{ /* Sentinel */ }
@@ -386,7 +353,6 @@ DT_MACHINE_START(INTEGRATOR_CP_DT, "ARM Integrator/CP (Device Tree)")
386353
.init_early = intcp_init_early,
387354
.init_irq = intcp_init_irq_of,
388355
.handle_irq = fpga_handle_irq,
389-
.init_time = cp_of_timer_init,
390356
.init_machine = intcp_init_of,
391357
.restart = integrator_restart,
392358
.dt_compat = intcp_dt_board_compat,

0 commit comments

Comments
 (0)