diff options
| author | Rob Herring <rob.herring@calxeda.com> | 2013-02-06 22:17:47 -0500 |
|---|---|---|
| committer | Rob Herring <rob.herring@calxeda.com> | 2013-03-11 09:42:08 -0400 |
| commit | da4a686a2cfb077a8bfc1697f597e7f86235b822 (patch) | |
| tree | a705ed178357d4adaf82218407f27b6b74b341ad | |
| parent | 1d16cfb3aeba71bc6ecf2d19ccbabed0426e5c22 (diff) | |
ARM: smp_twd: convert to use CLKSRC_OF init
Now that we have OF based init with CLKSRC_OF, convert smp_twd init
function to use it and covert all callers of
twd_local_timer_of_register.
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Cc: Shawn Guo <shawn.guo@linaro.org>
Cc: Sascha Hauer <kernel@pengutronix.de>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Viresh Kumar <viresh.linux@gmail.com>
Cc: Shiraz Hashim <shiraz.hashim@st.com>
Cc: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
Cc: John Stultz <johnstul@us.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-omap@vger.kernel.org
Cc: spear-devel@list.st.com
Reviewed-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
| -rw-r--r-- | arch/arm/Kconfig | 1 | ||||
| -rw-r--r-- | arch/arm/include/asm/smp_twd.h | 8 | ||||
| -rw-r--r-- | arch/arm/kernel/smp_twd.c | 17 | ||||
| -rw-r--r-- | arch/arm/mach-highbank/highbank.c | 5 | ||||
| -rw-r--r-- | arch/arm/mach-imx/mach-imx6q.c | 5 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/timer.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-spear13xx/spear13xx.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-ux500/timer.c | 3 | ||||
| -rw-r--r-- | arch/arm/mach-vexpress/v2m.c | 6 | ||||
| -rw-r--r-- | drivers/clocksource/tegra20_timer.c | 3 |
10 files changed, 17 insertions, 37 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 5b714695b01b..5bfd584929c8 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -1597,6 +1597,7 @@ config HAVE_ARM_ARCH_TIMER | |||
| 1597 | config HAVE_ARM_TWD | 1597 | config HAVE_ARM_TWD |
| 1598 | bool | 1598 | bool |
| 1599 | depends on SMP | 1599 | depends on SMP |
| 1600 | select CLKSRC_OF if OF | ||
| 1600 | help | 1601 | help |
| 1601 | This options enables support for the ARM timer and watchdog unit | 1602 | This options enables support for the ARM timer and watchdog unit |
| 1602 | 1603 | ||
diff --git a/arch/arm/include/asm/smp_twd.h b/arch/arm/include/asm/smp_twd.h index 0f01f4677bd2..7b2899c2f7fc 100644 --- a/arch/arm/include/asm/smp_twd.h +++ b/arch/arm/include/asm/smp_twd.h | |||
| @@ -34,12 +34,4 @@ struct twd_local_timer name __initdata = { \ | |||
| 34 | 34 | ||
| 35 | int twd_local_timer_register(struct twd_local_timer *); | 35 | int twd_local_timer_register(struct twd_local_timer *); |
| 36 | 36 | ||
| 37 | #ifdef CONFIG_HAVE_ARM_TWD | ||
| 38 | void twd_local_timer_of_register(void); | ||
| 39 | #else | ||
| 40 | static inline void twd_local_timer_of_register(void) | ||
| 41 | { | ||
| 42 | } | ||
| 43 | #endif | ||
| 44 | |||
| 45 | #endif | 37 | #endif |
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index 3f2565037480..90525d9d290b 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c | |||
| @@ -362,25 +362,13 @@ int __init twd_local_timer_register(struct twd_local_timer *tlt) | |||
| 362 | } | 362 | } |
| 363 | 363 | ||
| 364 | #ifdef CONFIG_OF | 364 | #ifdef CONFIG_OF |
| 365 | const static struct of_device_id twd_of_match[] __initconst = { | 365 | static void __init twd_local_timer_of_register(struct device_node *np) |
| 366 | { .compatible = "arm,cortex-a9-twd-timer", }, | ||
| 367 | { .compatible = "arm,cortex-a5-twd-timer", }, | ||
| 368 | { .compatible = "arm,arm11mp-twd-timer", }, | ||
| 369 | { }, | ||
| 370 | }; | ||
| 371 | |||
| 372 | void __init twd_local_timer_of_register(void) | ||
| 373 | { | 366 | { |
| 374 | struct device_node *np; | ||
| 375 | int err; | 367 | int err; |
| 376 | 368 | ||
| 377 | if (!is_smp() || !setup_max_cpus) | 369 | if (!is_smp() || !setup_max_cpus) |
| 378 | return; | 370 | return; |
| 379 | 371 | ||
| 380 | np = of_find_matching_node(NULL, twd_of_match); | ||
| 381 | if (!np) | ||
| 382 | return; | ||
| 383 | |||
| 384 | twd_ppi = irq_of_parse_and_map(np, 0); | 372 | twd_ppi = irq_of_parse_and_map(np, 0); |
| 385 | if (!twd_ppi) { | 373 | if (!twd_ppi) { |
| 386 | err = -EINVAL; | 374 | err = -EINVAL; |
| @@ -398,4 +386,7 @@ void __init twd_local_timer_of_register(void) | |||
| 398 | out: | 386 | out: |
| 399 | WARN(err, "twd_local_timer_of_register failed (%d)\n", err); | 387 | WARN(err, "twd_local_timer_of_register failed (%d)\n", err); |
| 400 | } | 388 | } |
| 389 | CLOCKSOURCE_OF_DECLARE(arm_twd_a9, "arm,cortex-a9-twd-timer", twd_local_timer_of_register); | ||
| 390 | CLOCKSOURCE_OF_DECLARE(arm_twd_a5, "arm,cortex-a5-twd-timer", twd_local_timer_of_register); | ||
| 391 | CLOCKSOURCE_OF_DECLARE(arm_twd_11mp, "arm,arm11mp-twd-timer", twd_local_timer_of_register); | ||
| 401 | #endif | 392 | #endif |
diff --git a/arch/arm/mach-highbank/highbank.c b/arch/arm/mach-highbank/highbank.c index a4f9f50247d4..76c1170b3528 100644 --- a/arch/arm/mach-highbank/highbank.c +++ b/arch/arm/mach-highbank/highbank.c | |||
| @@ -32,7 +32,6 @@ | |||
| 32 | #include <asm/cacheflush.h> | 32 | #include <asm/cacheflush.h> |
| 33 | #include <asm/cputype.h> | 33 | #include <asm/cputype.h> |
| 34 | #include <asm/smp_plat.h> | 34 | #include <asm/smp_plat.h> |
| 35 | #include <asm/smp_twd.h> | ||
| 36 | #include <asm/hardware/arm_timer.h> | 35 | #include <asm/hardware/arm_timer.h> |
| 37 | #include <asm/hardware/timer-sp.h> | 36 | #include <asm/hardware/timer-sp.h> |
| 38 | #include <asm/hardware/cache-l2x0.h> | 37 | #include <asm/hardware/cache-l2x0.h> |
| @@ -119,10 +118,10 @@ static void __init highbank_timer_init(void) | |||
| 119 | sp804_clocksource_and_sched_clock_init(timer_base + 0x20, "timer1"); | 118 | sp804_clocksource_and_sched_clock_init(timer_base + 0x20, "timer1"); |
| 120 | sp804_clockevents_init(timer_base, irq, "timer0"); | 119 | sp804_clockevents_init(timer_base, irq, "timer0"); |
| 121 | 120 | ||
| 122 | twd_local_timer_of_register(); | ||
| 123 | |||
| 124 | arch_timer_of_register(); | 121 | arch_timer_of_register(); |
| 125 | arch_timer_sched_clock_init(); | 122 | arch_timer_sched_clock_init(); |
| 123 | |||
| 124 | clocksource_of_init(); | ||
| 126 | } | 125 | } |
| 127 | 126 | ||
| 128 | static void highbank_power_off(void) | 127 | static void highbank_power_off(void) |
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 9ffd103b27e4..b59ddcb57c78 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | #include <linux/clk.h> | 13 | #include <linux/clk.h> |
| 14 | #include <linux/clkdev.h> | 14 | #include <linux/clkdev.h> |
| 15 | #include <linux/clocksource.h> | ||
| 15 | #include <linux/cpu.h> | 16 | #include <linux/cpu.h> |
| 16 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
| 17 | #include <linux/export.h> | 18 | #include <linux/export.h> |
| @@ -28,11 +29,9 @@ | |||
| 28 | #include <linux/regmap.h> | 29 | #include <linux/regmap.h> |
| 29 | #include <linux/micrel_phy.h> | 30 | #include <linux/micrel_phy.h> |
| 30 | #include <linux/mfd/syscon.h> | 31 | #include <linux/mfd/syscon.h> |
| 31 | #include <asm/smp_twd.h> | ||
| 32 | #include <asm/hardware/cache-l2x0.h> | 32 | #include <asm/hardware/cache-l2x0.h> |
| 33 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
| 34 | #include <asm/mach/map.h> | 34 | #include <asm/mach/map.h> |
| 35 | #include <asm/mach/time.h> | ||
| 36 | #include <asm/system_misc.h> | 35 | #include <asm/system_misc.h> |
| 37 | 36 | ||
| 38 | #include "common.h" | 37 | #include "common.h" |
| @@ -292,7 +291,7 @@ static void __init imx6q_init_irq(void) | |||
| 292 | static void __init imx6q_timer_init(void) | 291 | static void __init imx6q_timer_init(void) |
| 293 | { | 292 | { |
| 294 | mx6q_clocks_init(); | 293 | mx6q_clocks_init(); |
| 295 | twd_local_timer_of_register(); | 294 | clocksource_of_init(); |
| 296 | imx_print_silicon_rev("i.MX6Q", imx6q_revision()); | 295 | imx_print_silicon_rev("i.MX6Q", imx6q_revision()); |
| 297 | } | 296 | } |
| 298 | 297 | ||
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index 2bdd4cf17a8f..4fd80257c73e 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c | |||
| @@ -597,7 +597,7 @@ void __init omap4_local_timer_init(void) | |||
| 597 | int err; | 597 | int err; |
| 598 | 598 | ||
| 599 | if (of_have_populated_dt()) { | 599 | if (of_have_populated_dt()) { |
| 600 | twd_local_timer_of_register(); | 600 | clocksource_of_init(); |
| 601 | return; | 601 | return; |
| 602 | } | 602 | } |
| 603 | 603 | ||
diff --git a/arch/arm/mach-spear13xx/spear13xx.c b/arch/arm/mach-spear13xx/spear13xx.c index c7d2b4a8d8cc..25a10191b021 100644 --- a/arch/arm/mach-spear13xx/spear13xx.c +++ b/arch/arm/mach-spear13xx/spear13xx.c | |||
| @@ -15,12 +15,12 @@ | |||
| 15 | 15 | ||
| 16 | #include <linux/amba/pl022.h> | 16 | #include <linux/amba/pl022.h> |
| 17 | #include <linux/clk.h> | 17 | #include <linux/clk.h> |
| 18 | #include <linux/clocksource.h> | ||
| 18 | #include <linux/dw_dmac.h> | 19 | #include <linux/dw_dmac.h> |
| 19 | #include <linux/err.h> | 20 | #include <linux/err.h> |
| 20 | #include <linux/of.h> | 21 | #include <linux/of.h> |
| 21 | #include <asm/hardware/cache-l2x0.h> | 22 | #include <asm/hardware/cache-l2x0.h> |
| 22 | #include <asm/mach/map.h> | 23 | #include <asm/mach/map.h> |
| 23 | #include <asm/smp_twd.h> | ||
| 24 | #include <mach/dma.h> | 24 | #include <mach/dma.h> |
| 25 | #include <mach/generic.h> | 25 | #include <mach/generic.h> |
| 26 | #include <mach/spear.h> | 26 | #include <mach/spear.h> |
| @@ -179,5 +179,5 @@ void __init spear13xx_timer_init(void) | |||
| 179 | clk_put(pclk); | 179 | clk_put(pclk); |
| 180 | 180 | ||
| 181 | spear_setup_of_timer(); | 181 | spear_setup_of_timer(); |
| 182 | twd_local_timer_of_register(); | 182 | clocksource_of_init(); |
| 183 | } | 183 | } |
diff --git a/arch/arm/mach-ux500/timer.c b/arch/arm/mach-ux500/timer.c index a6af0b8732ba..d07bbe7f04a6 100644 --- a/arch/arm/mach-ux500/timer.c +++ b/arch/arm/mach-ux500/timer.c | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #include <linux/io.h> | 7 | #include <linux/io.h> |
| 8 | #include <linux/errno.h> | 8 | #include <linux/errno.h> |
| 9 | #include <linux/clksrc-dbx500-prcmu.h> | 9 | #include <linux/clksrc-dbx500-prcmu.h> |
| 10 | #include <linux/clocksource.h> | ||
| 10 | #include <linux/of.h> | 11 | #include <linux/of.h> |
| 11 | #include <linux/of_address.h> | 12 | #include <linux/of_address.h> |
| 12 | #include <linux/platform_data/clocksource-nomadik-mtu.h> | 13 | #include <linux/platform_data/clocksource-nomadik-mtu.h> |
| @@ -32,7 +33,7 @@ static void __init ux500_twd_init(void) | |||
| 32 | twd_local_timer = &u8500_twd_local_timer; | 33 | twd_local_timer = &u8500_twd_local_timer; |
| 33 | 34 | ||
| 34 | if (of_have_populated_dt()) | 35 | if (of_have_populated_dt()) |
| 35 | twd_local_timer_of_register(); | 36 | clocksource_of_init(); |
| 36 | else { | 37 | else { |
| 37 | err = twd_local_timer_register(twd_local_timer); | 38 | err = twd_local_timer_register(twd_local_timer); |
| 38 | if (err) | 39 | if (err) |
diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c index 915683cb67d6..d0ad78998cb6 100644 --- a/arch/arm/mach-vexpress/v2m.c +++ b/arch/arm/mach-vexpress/v2m.c | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #include <linux/amba/bus.h> | 5 | #include <linux/amba/bus.h> |
| 6 | #include <linux/amba/mmci.h> | 6 | #include <linux/amba/mmci.h> |
| 7 | #include <linux/io.h> | 7 | #include <linux/io.h> |
| 8 | #include <linux/clocksource.h> | ||
| 8 | #include <linux/smp.h> | 9 | #include <linux/smp.h> |
| 9 | #include <linux/init.h> | 10 | #include <linux/init.h> |
| 10 | #include <linux/irqchip.h> | 11 | #include <linux/irqchip.h> |
| @@ -25,7 +26,6 @@ | |||
| 25 | #include <asm/arch_timer.h> | 26 | #include <asm/arch_timer.h> |
| 26 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
| 27 | #include <asm/sizes.h> | 28 | #include <asm/sizes.h> |
| 28 | #include <asm/smp_twd.h> | ||
| 29 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
| 30 | #include <asm/mach/map.h> | 30 | #include <asm/mach/map.h> |
| 31 | #include <asm/mach/time.h> | 31 | #include <asm/mach/time.h> |
| @@ -435,6 +435,7 @@ static void __init v2m_dt_timer_init(void) | |||
| 435 | 435 | ||
| 436 | vexpress_clk_of_init(); | 436 | vexpress_clk_of_init(); |
| 437 | 437 | ||
| 438 | clocksource_of_init(); | ||
| 438 | do { | 439 | do { |
| 439 | node = of_find_compatible_node(node, NULL, "arm,sp804"); | 440 | node = of_find_compatible_node(node, NULL, "arm,sp804"); |
| 440 | } while (node && vexpress_get_site_by_node(node) != VEXPRESS_SITE_MB); | 441 | } while (node && vexpress_get_site_by_node(node) != VEXPRESS_SITE_MB); |
| @@ -445,8 +446,7 @@ static void __init v2m_dt_timer_init(void) | |||
| 445 | irq_of_parse_and_map(node, 0)); | 446 | irq_of_parse_and_map(node, 0)); |
| 446 | } | 447 | } |
| 447 | 448 | ||
| 448 | if (arch_timer_of_register() != 0) | 449 | arch_timer_of_register(); |
| 449 | twd_local_timer_of_register(); | ||
| 450 | 450 | ||
| 451 | if (arch_timer_sched_clock_init() != 0) | 451 | if (arch_timer_sched_clock_init() != 0) |
| 452 | versatile_sched_clock_init(vexpress_get_24mhz_clock_base(), | 452 | versatile_sched_clock_init(vexpress_get_24mhz_clock_base(), |
diff --git a/drivers/clocksource/tegra20_timer.c b/drivers/clocksource/tegra20_timer.c index 15cc723f699f..2e4d8a666c36 100644 --- a/drivers/clocksource/tegra20_timer.c +++ b/drivers/clocksource/tegra20_timer.c | |||
| @@ -218,9 +218,6 @@ static void __init tegra20_init_timer(struct device_node *np) | |||
| 218 | tegra_clockevent.irq = tegra_timer_irq.irq; | 218 | tegra_clockevent.irq = tegra_timer_irq.irq; |
| 219 | clockevents_config_and_register(&tegra_clockevent, 1000000, | 219 | clockevents_config_and_register(&tegra_clockevent, 1000000, |
| 220 | 0x1, 0x1fffffff); | 220 | 0x1, 0x1fffffff); |
| 221 | #ifdef CONFIG_HAVE_ARM_TWD | ||
| 222 | twd_local_timer_of_register(); | ||
| 223 | #endif | ||
| 224 | } | 221 | } |
| 225 | CLOCKSOURCE_OF_DECLARE(tegra20_timer, "nvidia,tegra20-timer", tegra20_init_timer); | 222 | CLOCKSOURCE_OF_DECLARE(tegra20_timer, "nvidia,tegra20-timer", tegra20_init_timer); |
| 226 | 223 | ||
