diff options
Diffstat (limited to 'arch/arm/mach-omap2/timer-gp.c')
| -rw-r--r-- | arch/arm/mach-omap2/timer-gp.c | 23 | 
1 files changed, 21 insertions, 2 deletions
diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c index 4e48e786bec..0fc550e7e48 100644 --- a/arch/arm/mach-omap2/timer-gp.c +++ b/arch/arm/mach-omap2/timer-gp.c @@ -39,9 +39,12 @@  #include <asm/mach/time.h>  #include <plat/dmtimer.h>  #include <asm/localtimer.h> +#include <asm/sched_clock.h>  #include "timer-gp.h" +#include <plat/common.h> +  /* MAX_GPTIMER_ID: number of GPTIMERs on the chip */  #define MAX_GPTIMER_ID		12 @@ -176,14 +179,19 @@ static void __init omap2_gp_clockevent_init(void)  /*    * When 32k-timer is enabled, don't use GPTimer for clocksource   * instead, just leave default clocksource which uses the 32k - * sync counter.  See clocksource setup in see plat-omap/common.c.  + * sync counter.  See clocksource setup in plat-omap/counter_32k.c   */ -static inline void __init omap2_gp_clocksource_init(void) {} +static void __init omap2_gp_clocksource_init(void) +{ +	omap_init_clocksource_32k(); +} +  #else  /*   * clocksource   */ +static DEFINE_CLOCK_DATA(cd);  static struct omap_dm_timer *gpt_clocksource;  static cycle_t clocksource_read_cycles(struct clocksource *cs)  { @@ -198,6 +206,15 @@ static struct clocksource clocksource_gpt = {  	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,  }; +static void notrace dmtimer_update_sched_clock(void) +{ +	u32 cyc; + +	cyc = omap_dm_timer_read_counter(gpt_clocksource); + +	update_sched_clock(&cd, cyc, (u32)~0); +} +  /* Setup free-running counter for clocksource */  static void __init omap2_gp_clocksource_init(void)  { @@ -218,6 +235,8 @@ static void __init omap2_gp_clocksource_init(void)  	omap_dm_timer_set_load_start(gpt, 1, 0); +	init_sched_clock(&cd, dmtimer_update_sched_clock, 32, tick_rate); +  	if (clocksource_register_hz(&clocksource_gpt, tick_rate))  		printk(err2, clocksource_gpt.name);  }  |