diff options
| author | Rob Herring <rob.herring@calxeda.com> | 2013-04-10 18:27:51 -0500 | 
|---|---|---|
| committer | Rob Herring <rob.herring@calxeda.com> | 2013-04-11 15:11:15 -0500 | 
| commit | 0583fe478a7d93be2c814b7e50d6e81c287edfe8 (patch) | |
| tree | 1fedae32e915a0caf60fa20be32824a67262cf99 /drivers/clocksource | |
| parent | f414f13f2fd0d8bb12a87268a55827cda771d42b (diff) | |
| download | olio-linux-3.10-0583fe478a7d93be2c814b7e50d6e81c287edfe8.tar.xz olio-linux-3.10-0583fe478a7d93be2c814b7e50d6e81c287edfe8.zip | |
ARM: convert arm/arm64 arch timer to use CLKSRC_OF init
This converts arm and arm64 to use CLKSRC_OF DT based initialization for
the arch timer. A new function arch_timer_arch_init is added to allow for
arch specific setup.
This has a side effect of enabling sched_clock on omap5 and exynos5. There
should not be any reason not to use the arch timers for sched_clock.
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Kukjin Kim <kgene.kim@samsung.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Simon Horman <horms@verge.net.au>
Cc: Magnus Damm <magnus.damm@gmail.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-samsung-soc@vger.kernel.org
Cc: linux-omap@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Diffstat (limited to 'drivers/clocksource')
| -rw-r--r-- | drivers/clocksource/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/clocksource/arm_arch_timer.c | 23 | 
2 files changed, 10 insertions, 14 deletions
| diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig index e507ab7df60..d98e7e1ee59 100644 --- a/drivers/clocksource/Kconfig +++ b/drivers/clocksource/Kconfig @@ -62,6 +62,7 @@ config CLKSRC_DBX500_PRCMU_SCHED_CLOCK  config ARM_ARCH_TIMER  	bool +	select CLKSRC_OF if OF  config CLKSRC_METAG_GENERIC  	def_bool y if METAG diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c index d7ad425ab9b..122ff05628b 100644 --- a/drivers/clocksource/arm_arch_timer.c +++ b/drivers/clocksource/arm_arch_timer.c @@ -337,22 +337,14 @@ out:  	return err;  } -static const struct of_device_id arch_timer_of_match[] __initconst = { -	{ .compatible	= "arm,armv7-timer",	}, -	{ .compatible	= "arm,armv8-timer",	}, -	{}, -}; - -int __init arch_timer_init(void) +static void __init arch_timer_init(struct device_node *np)  { -	struct device_node *np;  	u32 freq;  	int i; -	np = of_find_matching_node(NULL, arch_timer_of_match); -	if (!np) { -		pr_err("arch_timer: can't find DT node\n"); -		return -ENODEV; +	if (arch_timer_get_rate()) { +		pr_warn("arch_timer: multiple nodes in dt, skipping\n"); +		return;  	}  	/* Try to determine the frequency from the device tree or CNTFRQ */ @@ -378,7 +370,7 @@ int __init arch_timer_init(void)  		if (!arch_timer_ppi[PHYS_SECURE_PPI] ||  		    !arch_timer_ppi[PHYS_NONSECURE_PPI]) {  			pr_warn("arch_timer: No interrupt available, giving up\n"); -			return -EINVAL; +			return;  		}  	} @@ -387,5 +379,8 @@ int __init arch_timer_init(void)  	else  		arch_timer_read_counter = arch_counter_get_cntpct; -	return arch_timer_register(); +	arch_timer_register(); +	arch_timer_arch_init();  } +CLOCKSOURCE_OF_DECLARE(armv7_arch_timer, "arm,armv7-timer", arch_timer_init); +CLOCKSOURCE_OF_DECLARE(armv8_arch_timer, "arm,armv8-timer", arch_timer_init); |