| 
									
										
										
										
											2012-01-11 17:25:17 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  linux/arch/arm/kernel/arch_timer.c | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Copyright (C) 2011 ARM Ltd. | 
					
						
							|  |  |  |  *  All Rights Reserved | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU General Public License version 2 as | 
					
						
							|  |  |  |  * published by the Free Software Foundation. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #include <linux/init.h>
 | 
					
						
							| 
									
										
										
										
											2012-11-12 14:33:44 +00:00
										 |  |  | #include <linux/types.h>
 | 
					
						
							| 
									
										
										
										
											2013-02-14 17:45:25 +01:00
										 |  |  | #include <linux/errno.h>
 | 
					
						
							| 
									
										
										
										
											2012-01-11 17:25:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-21 18:51:44 +01:00
										 |  |  | #include <asm/delay.h>
 | 
					
						
							| 
									
										
										
										
											2012-01-11 17:25:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-12 14:33:44 +00:00
										 |  |  | #include <clocksource/arm_arch_timer.h>
 | 
					
						
							| 
									
										
										
										
											2012-09-07 18:09:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-12 14:33:44 +00:00
										 |  |  | static unsigned long arch_timer_read_counter_long(void) | 
					
						
							| 
									
										
										
										
											2012-01-11 17:25:17 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-11-14 09:50:19 +00:00
										 |  |  | 	return arch_timer_read_counter(); | 
					
						
							| 
									
										
										
										
											2012-01-11 17:25:17 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-12 14:33:44 +00:00
										 |  |  | static struct delay_timer arch_delay_timer; | 
					
						
							| 
									
										
										
										
											2012-01-20 10:47:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-12 14:33:44 +00:00
										 |  |  | static void __init arch_timer_delay_timer_register(void) | 
					
						
							| 
									
										
										
										
											2012-01-11 17:25:17 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-09-21 18:51:44 +01:00
										 |  |  | 	/* Use the architected timer for the delay loop. */ | 
					
						
							| 
									
										
										
										
											2012-11-12 14:33:44 +00:00
										 |  |  | 	arch_delay_timer.read_current_timer = arch_timer_read_counter_long; | 
					
						
							|  |  |  | 	arch_delay_timer.freq = arch_timer_get_rate(); | 
					
						
							| 
									
										
										
										
											2012-09-21 18:51:44 +01:00
										 |  |  | 	register_current_timer_delay(&arch_delay_timer); | 
					
						
							| 
									
										
										
										
											2012-01-11 17:25:17 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2011-01-14 15:32:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-10 18:27:51 -05:00
										 |  |  | int __init arch_timer_arch_init(void) | 
					
						
							| 
									
										
										
										
											2011-01-14 15:32:36 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2013-03-11 16:23:46 -05:00
										 |  |  |         u32 arch_timer_rate = arch_timer_get_rate(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (arch_timer_rate == 0) | 
					
						
							| 
									
										
										
										
											2012-11-12 14:33:44 +00:00
										 |  |  | 		return -ENXIO; | 
					
						
							| 
									
										
										
										
											2011-01-14 15:32:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-10 18:27:51 -05:00
										 |  |  | 	arch_timer_delay_timer_register(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-14 15:32:36 +00:00
										 |  |  | 	return 0; | 
					
						
							|  |  |  | } |