diff options
| author | Olof Johansson <olof@lixom.net> | 2013-04-17 10:10:01 -0700 | 
|---|---|---|
| committer | Olof Johansson <olof@lixom.net> | 2013-04-17 10:10:01 -0700 | 
| commit | c3e0c873d0653e6e7628b5a8a9fcb3745444ca9e (patch) | |
| tree | dd7448d5515c56604cd8e57f3d6399f5640d57a3 /drivers/clocksource/arm_arch_timer.c | |
| parent | 228e3023eb0430b4b9ed0736f8f87c96a6cd9c7a (diff) | |
| parent | 69a517b2471bcd1c5a175aad82647c1e2c24f08b (diff) | |
| download | olio-linux-3.10-c3e0c873d0653e6e7628b5a8a9fcb3745444ca9e.tar.xz olio-linux-3.10-c3e0c873d0653e6e7628b5a8a9fcb3745444ca9e.zip  | |
Merge tag 'clksrc-cleanup-for-3.10-part2' of git://sources.calxeda.com/kernel/linux into late/clksrc
This is the 2nd part of ARM timer clean-ups for 3.10. This series has
the following changes:
- Add sched_clock selection logic to select the highest frequency clock
- Use full 64-bit arch timer counter for sched_clock
- Convert arch timer, sp804 and integrator-cp timers to CLKSRC_OF and
adapt all users to use clocksource_of_init
* tag 'clksrc-cleanup-for-3.10-part2' of git://sources.calxeda.com/kernel/linux:
  devtree: add binding documentation for sp804
  ARM: integrator-cp: convert use CLKSRC_OF for timer init
  ARM: versatile: use OF init for sp804 timer
  ARM: versatile: add versatile dtbs to dtbs target
  ARM: vexpress: remove extra timer-sp control register clearing
  ARM: dts: vexpress: disable CA9 core tile sp804 timer
  ARM: vexpress: remove sp804 OF init
  ARM: highbank: use OF init for sp804 timer
  ARM: timer-sp: convert to use CLKSRC_OF init
  OF: add empty of_device_is_available for !OF
  ARM: convert arm/arm64 arch timer to use CLKSRC_OF init
  ARM: make machine_desc->init_time default to clocksource_of_init
  ARM: arch_timer: use full 64-bit counter for sched_clock
  ARM: make sched_clock just call a function pointer
  ARM: sched_clock: allow changing to higher frequency counter
Signed-off-by: Olof Johansson <olof@lixom.net>
This has a nasty set of conflicts with the exynos MCT code, which was
moved in a separate branch, and then fixed up when merged in, but still
conflicts a bit here. It should have been sorted out by this merge though.
Diffstat (limited to 'drivers/clocksource/arm_arch_timer.c')
| -rw-r--r-- | drivers/clocksource/arm_arch_timer.c | 23 | 
1 files changed, 9 insertions, 14 deletions
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);  |