diff options
Diffstat (limited to 'arch/arm/mach-omap2/timer.c')
| -rw-r--r-- | arch/arm/mach-omap2/timer.c | 23 | 
1 files changed, 20 insertions, 3 deletions
| diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index fa74a0625da1..3ca81e0ada5e 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c @@ -55,6 +55,7 @@  #include "soc.h"  #include "common.h"  #include "powerdomain.h" +#include "omap-secure.h"  #define REALTIME_COUNTER_BASE				0x48243200  #define INCREMENTER_NUMERATOR_OFFSET			0x10 @@ -66,6 +67,15 @@  static struct omap_dm_timer clkev;  static struct clock_event_device clockevent_gpt; +#ifdef CONFIG_SOC_HAS_REALTIME_COUNTER +static unsigned long arch_timer_freq; + +void set_cntfreq(void) +{ +	omap_smc1(OMAP5_DRA7_MON_SET_CNTFRQ_INDEX, arch_timer_freq); +} +#endif +  static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id)  {  	struct clock_event_device *evt = &clockevent_gpt; @@ -78,7 +88,7 @@ static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id)  static struct irqaction omap2_gp_timer_irq = {  	.name		= "gp_timer", -	.flags		= IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, +	.flags		= IRQF_TIMER | IRQF_IRQPOLL,  	.handler	= omap2_gp_timer_interrupt,  }; @@ -515,6 +525,10 @@ static void __init realtime_counter_init(void)  		num = 8;  		den = 25;  		break; +	case 20000000: +		num = 192; +		den = 625; +		break;  	case 2600000:  		num = 384;  		den = 1625; @@ -542,6 +556,9 @@ static void __init realtime_counter_init(void)  	reg |= den;  	__raw_writel(reg, base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET); +	arch_timer_freq = (rate / den) * num; +	set_cntfreq(); +  	iounmap(base);  }  #else @@ -628,7 +645,7 @@ void __init omap4_local_timer_init(void)  #endif /* CONFIG_HAVE_ARM_TWD */  #endif /* CONFIG_ARCH_OMAP4 */ -#ifdef CONFIG_SOC_OMAP5 +#if defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX)  void __init omap5_realtime_timer_init(void)  {  	omap4_sync32k_timer_init(); @@ -636,7 +653,7 @@ void __init omap5_realtime_timer_init(void)  	clocksource_of_init();  } -#endif /* CONFIG_SOC_OMAP5 */ +#endif /* CONFIG_SOC_OMAP5 || CONFIG_SOC_DRA7XX */  /**   * omap_timer_init - build and register timer device with an |