Subject: [PATCH V2 4/4] ARM: OMAP2+: AM43x: Use gptimer as clocksource

From: [email-masked] (Lokesh Vutla)
Date: Mon, 24 Feb 2014 18:35:21 +0530

Hi Tony,
On Friday 14 February 2014 02:16 PM, Rajendra Nayak wrote:
> On Friday 14 February 2014 04:49 AM, Tony Lindgren wrote:
>> * Lokesh Vutla <[email-masked]> [140207 02:24]:
>>> From: Rajendra Nayak <[email-masked]>
>>>
>>> The SyncTimer in AM43x is clocked using the following two sources:
>>> 1) An inaccuarte 32k clock (CLK_32KHZ) derived from PER DPLL, causing system
>>>    time to go slowly (~10% deviation).
>>> 2) external 32KHz RTC clock, which may not always be available on board like
>>>    in the case of ePOS EVM
>>>
>>> Use gptimer as clocksource instead, as is done in the case of AM335x
>>> (which does not have a SyncTimer). With this, system time keeping works
>>> accurately.
>>
>> Hmm doesn't this also mean that PM for any deeper idle states won't
>> work properly?
> 
> Thats true. This would mean we cannot put the peripheral/core domain down
> in idle. Suspend however can still work if suspend/resume callbacks are added
> to the clockevent and clocksource code to shut the non-wakeup domain timer.
This is a platform level limitation that only MPU domain can be put down in idle, just like AM335x.

Thanks and regards,
Lokesh
> 
> regards,
> Rajendra
> 
>>
>> Regards,
>>
>> Tony
>>  
>>> Signed-off-by: Rajendra Nayak <[email-masked]>
>>> Signed-off-by: Lokesh Vutla <[email-masked]>
>>> ---
>>>  arch/arm/mach-omap2/board-generic.c |    2 +-
>>>  arch/arm/mach-omap2/timer.c         |    3 ++-
>>>  2 files changed, 3 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
>>> index 8e3daa1..5679464a 100644
>>> --- a/arch/arm/mach-omap2/board-generic.c
>>> +++ b/arch/arm/mach-omap2/board-generic.c
>>> @@ -229,7 +229,7 @@ DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)")
>>>  	.init_late	= am43xx_init_late,
>>>  	.init_irq	= omap_gic_of_init,
>>>  	.init_machine	= omap_generic_init,
>>> -	.init_time	= omap3_sync32k_timer_init,
>>> +	.init_time	= omap3_gptimer_timer_init,
>>>  	.dt_compat	= am43_boards_compat,
>>>  MACHINE_END
>>>  #endif
>>> diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
>>> index 74044aa..b62de9f 100644
>>> --- a/arch/arm/mach-omap2/timer.c
>>> +++ b/arch/arm/mach-omap2/timer.c
>>> @@ -604,7 +604,8 @@ OMAP_SYS_32K_TIMER_INIT(3_secure, 12, "secure_32k_fck", "ti,timer-secure",
>>>  			2, "timer_sys_ck", NULL);
>>>  #endif /* CONFIG_ARCH_OMAP3 */
>>>  
>>> -#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX)
>>> +#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX) || \
>>> +	defined(CONFIG_SOC_AM43XX)
>>>  OMAP_SYS_GP_TIMER_INIT(3, 2, "timer_sys_ck", NULL,
>>>  		       1, "timer_sys_ck", "ti,timer-alwon");
>>>  #endif
>>> -- 
>>> 1.7.9.5
>>>
>