Patchwork ARM: davinci: convert to clockevents_config_and_register

login
register
mail settings
Submitter Uwe Kleine-König
Date Sept. 24, 2013, 10:02 p.m.
Message ID <1380060159-12008-1-git-send-email-u.kleine-koenig@pengutronix.de>
Download mbox | patch
Permalink /patch/277637/
State New
Headers show

Comments

Uwe Kleine-König - Sept. 24, 2013, 10:02 p.m.
clockevents_config_and_register is superior compared to setting
shift/mult and {min,max}_delta_ns by hand.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
Hello,

I wonder where the 50 us limit comes from. This is not a hardware limit,
is it?

Best regards
Uwe

 arch/arm/mach-davinci/time.c | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)
Uwe Kleine-König - Oct. 8, 2013, 2:57 p.m.
Hello,

On Wed, Sep 25, 2013 at 12:02:39AM +0200, Uwe Kleine-König wrote:
> clockevents_config_and_register is superior compared to setting
> shift/mult and {min,max}_delta_ns by hand.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

> ---
> Hello,
> 
> I wonder where the 50 us limit comes from. This is not a hardware limit,
> is it?
ping; I didn't get any feedback on this yet, also it's not in next.

Best regards
Uwe

>  arch/arm/mach-davinci/time.c | 10 +++-------
>  1 file changed, 3 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c
> index 7a55b5c..627bf8b 100644
> --- a/arch/arm/mach-davinci/time.c
> +++ b/arch/arm/mach-davinci/time.c
> @@ -331,7 +331,6 @@ static void davinci_set_mode(enum clock_event_mode mode,
>  
>  static struct clock_event_device clockevent_davinci = {
>  	.features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
> -	.shift		= 32,
>  	.set_next_event	= davinci_set_next_event,
>  	.set_mode	= davinci_set_mode,
>  };
> @@ -397,14 +396,11 @@ void __init davinci_timer_init(void)
>  
>  	/* setup clockevent */
>  	clockevent_davinci.name = id_to_name[timers[TID_CLOCKEVENT].id];
> -	clockevent_davinci.mult = div_sc(davinci_clock_tick_rate, NSEC_PER_SEC,
> -					 clockevent_davinci.shift);
> -	clockevent_davinci.max_delta_ns =
> -		clockevent_delta2ns(0xfffffffe, &clockevent_davinci);
> -	clockevent_davinci.min_delta_ns = 50000; /* 50 usec */
>  
>  	clockevent_davinci.cpumask = cpumask_of(0);
> -	clockevents_register_device(&clockevent_davinci);
> +	/* min tick corresponds to 50 usec assuming a 24 MHz clock */
> +	clockevents_config_and_register(&clockevent_davinci,
> +		davinci_clock_tick_rate, 1200, 0xfffffffe);
>  
>  	for (i=0; i< ARRAY_SIZE(timers); i++)
>  		timer32_config(&timers[i]);
> -- 
> 1.8.4.rc3
> 
>
Sekhar Nori - Oct. 8, 2013, 3:07 p.m.
Uwe,

On Tuesday 08 October 2013 08:27 PM, Uwe Kleine-König wrote:
> Hello,
> 
> On Wed, Sep 25, 2013 at 12:02:39AM +0200, Uwe Kleine-König wrote:
>> clockevents_config_and_register is superior compared to setting
>> shift/mult and {min,max}_delta_ns by hand.
>>
>> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> 
>> ---
>> Hello,
>>
>> I wonder where the 50 us limit comes from. This is not a hardware limit,
>> is it?
> ping; I didn't get any feedback on this yet, also it's not in next.

Apologies for the delay. I am yet to look at it because I am traveling
ATM. I will look at it during this week and provide feedback.

Thanks,
Sekhar
Sekhar Nori - Oct. 12, 2013, 4:22 p.m.
On Wednesday 25 September 2013 03:32 AM, Uwe Kleine-König wrote:
> clockevents_config_and_register is superior compared to setting
> shift/mult and {min,max}_delta_ns by hand.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
> Hello,
> 
> I wonder where the 50 us limit comes from. This is not a hardware limit,
> is it?
> 
> Best regards
> Uwe
> 
>  arch/arm/mach-davinci/time.c | 10 +++-------
>  1 file changed, 3 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c
> index 7a55b5c..627bf8b 100644
> --- a/arch/arm/mach-davinci/time.c
> +++ b/arch/arm/mach-davinci/time.c
> @@ -331,7 +331,6 @@ static void davinci_set_mode(enum clock_event_mode mode,
>  
>  static struct clock_event_device clockevent_davinci = {
>  	.features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
> -	.shift		= 32,
>  	.set_next_event	= davinci_set_next_event,
>  	.set_mode	= davinci_set_mode,
>  };
> @@ -397,14 +396,11 @@ void __init davinci_timer_init(void)
>  
>  	/* setup clockevent */
>  	clockevent_davinci.name = id_to_name[timers[TID_CLOCKEVENT].id];
> -	clockevent_davinci.mult = div_sc(davinci_clock_tick_rate, NSEC_PER_SEC,
> -					 clockevent_davinci.shift);
> -	clockevent_davinci.max_delta_ns =
> -		clockevent_delta2ns(0xfffffffe, &clockevent_davinci);
> -	clockevent_davinci.min_delta_ns = 50000; /* 50 usec */
>  
>  	clockevent_davinci.cpumask = cpumask_of(0);
> -	clockevents_register_device(&clockevent_davinci);
> +	/* min tick corresponds to 50 usec assuming a 24 MHz clock */
> +	clockevents_config_and_register(&clockevent_davinci,
> +		davinci_clock_tick_rate, 1200, 0xfffffffe);

Min ticks can be set to 1, IMO. I think the 50usec limit used earlier
should have actually been 50ns assuming a 24MHz clock.

Prabhakar,

Can you please test this patch on a DaVinci platform you have with 1200
replaced with 1. I currently do not have access to a board.

Thanks,
Sekhar
prabhakar.csengg@gmail.com - Oct. 13, 2013, 6:55 a.m.
Hi Sekhar,

On 10/12/13, Sekhar Nori <nsekhar@ti.com> wrote:
> On Wednesday 25 September 2013 03:32 AM, Uwe Kleine-König wrote:
>> clockevents_config_and_register is superior compared to setting
>> shift/mult and {min,max}_delta_ns by hand.
[snip]
>>
>> +		davinci_clock_tick_rate, 1200, 0xfffffffe);
>
> Min ticks can be set to 1, IMO. I think the 50usec limit used earlier
> should have actually been 50ns assuming a 24MHz clock.
>
> Prabhakar,
>
> Can you please test this patch on a DaVinci platform you have with 1200
> replaced with 1. I currently do not have access to a board.
>

I have boot tested this patch on OMAP-L138 and tested the uptime
(with min ticks set to 1), should that be enough ?

Thanks,
--Prabhakar Lad

Patch

diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c
index 7a55b5c..627bf8b 100644
--- a/arch/arm/mach-davinci/time.c
+++ b/arch/arm/mach-davinci/time.c
@@ -331,7 +331,6 @@  static void davinci_set_mode(enum clock_event_mode mode,
 
 static struct clock_event_device clockevent_davinci = {
 	.features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.shift		= 32,
 	.set_next_event	= davinci_set_next_event,
 	.set_mode	= davinci_set_mode,
 };
@@ -397,14 +396,11 @@  void __init davinci_timer_init(void)
 
 	/* setup clockevent */
 	clockevent_davinci.name = id_to_name[timers[TID_CLOCKEVENT].id];
-	clockevent_davinci.mult = div_sc(davinci_clock_tick_rate, NSEC_PER_SEC,
-					 clockevent_davinci.shift);
-	clockevent_davinci.max_delta_ns =
-		clockevent_delta2ns(0xfffffffe, &clockevent_davinci);
-	clockevent_davinci.min_delta_ns = 50000; /* 50 usec */
 
 	clockevent_davinci.cpumask = cpumask_of(0);
-	clockevents_register_device(&clockevent_davinci);
+	/* min tick corresponds to 50 usec assuming a 24 MHz clock */
+	clockevents_config_and_register(&clockevent_davinci,
+		davinci_clock_tick_rate, 1200, 0xfffffffe);
 
 	for (i=0; i< ARRAY_SIZE(timers); i++)
 		timer32_config(&timers[i]);