[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-arm-kernel
Subject:    Re: [PATCH 05/10] omap2+: Use dmtimer macros for clockevent
From:       Tony Lindgren <tony () atomide ! com>
Date:       2011-03-31 22:04:26
Message-ID: 20110331220426.GC21887 () atomide ! com
[Download RAW message or body]

* Kevin Hilman <khilman@ti.com> [110331 14:32]:
> Tony Lindgren <tony@atomide.com> writes:
> 
> > This patch makes timer-gp.c to use only a subset of dmtimer
> > functions without the need to initialize dmtimer code early.
> >
> > Note that omap_dmtimer_init_one can eventually be moved to
> > omap2+ specific dmtimer.c.
> >
> > Also note that now with the inline functions, timer_set_next_event
> > becomes more efficient in the lines of assembly code.
> >
> > Signed-off-by: Tony Lindgren <tony@atomide.com>
> 
> In looking closer at this patch, I have a few questions.
> 
> [...]
> 
> > @@ -75,7 +97,8 @@ static struct irqaction omap2_gp_timer_irq = {
> >  static int omap2_gp_timer_set_next_event(unsigned long cycles,
> >  					 struct clock_event_device *evt)
> >  {
> > -	omap_dm_timer_set_load_start(gptimer, 0, 0xffffffff - cycles);
> > +	__omap_dm_timer_load_start(clkev.io_base, OMAP_TIMER_CTRL_ST,
> > +						0xffffffff - cycles, 1);
> >  
> >  	return 0;
> 
> The creation of macros is causing some readability concern, at least for
> me...
> 
> In creating the macro versions of some of the functions, the macro
> version actually has different behavior which makes reading the code a
> little confusing.
> 
> I just noticed that the macro version of _load_start() doesn't actually
> do the "start", so you added the OMAP_TIMER_CTRL_ST when calling it.
> To do this, the macro version takes a 'ctrl' argument where as the
> "real" version only takes the autoreload argument.
> 
> If you're going to keep the same function name (but just add the __
> prefix, I would expect that the functionality of the function doesn't
> change.
> 
> If the functionality of the macro is different from the "real" function,
> it should probably just be given a different name.   In this case,
> probably dropping the _start suffix is probably enough.

OK good point.
 
> >  }
> > @@ -85,13 +108,13 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode,
> >  {
> >  	u32 period;
> >  
> > -	omap_dm_timer_stop(gptimer);
> > +	omap_dm_timer_stop(&clkev);
> >  
> >  	switch (mode) {
> >  	case CLOCK_EVT_MODE_PERIODIC:
> > -		period = clk_get_rate(omap_dm_timer_get_fclk(gptimer)) / HZ;
> > +		period = clkev.rate / HZ;
> >  		period -= 1;
> > -		omap_dm_timer_set_load_start(gptimer, 1, 0xffffffff - period);
> > +		omap_dm_timer_set_load_start(&clkev, 1, 0xffffffff - period);
> 
> Hmm, you're using the driver function here not the macro.  Is that
> intended?
> 
> Why not use the macro version here with OMAP_TIMER_CTRL_AR |
> OMAP_TIMER_CTRL_ST.

Hmm I guess I tried to change as little as possible here when I noticed
that there's some weirdness with the autoreload mode in the original
omap_dm_timer_set_load_start function that requires writing twice in
the autoreload case. Looks like that's not needed for the one-shot case.

Anyways, you're right, this should not be using the driver function to move
the rest of the timers to be under drivers/ eventually. Will post an
updated version after taking another look at the dmtimer hwmod series.

Regards,

Tony


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic