[PATCH 2/2] clocksource: dw_apb_timer_of: Fix read_sched_clock

Dinh Nguyen dinguyen at altera.com
Thu Jul 25 10:29:28 EDT 2013


Hi Heiko,

On Thu, 2013-07-25 at 11:02 +0200, Heiko Stübner wrote:
> Am Donnerstag, 25. Juli 2013, 05:43:17 schrieb dinguyen at altera.com:
> > From: Dinh Nguyen <dinguyen at altera.com>
> > 
> > The read_sched_clock should return the ~value because the clock is a
> > countdown implementation. read_sched_clock() should be the same as
> > __apbt_read_clocksource().
> > 
> > If a separate timer for the sched_clock exist, then read_sched_clock()
> > will return an incorrect value. The (sched_io_base + 0x4) needs to be in
> > the function for both cases.
> > 
> > Also, remove the use of "dw-apb-timer-sp" and "dw-apb-timer-osc" since
> > they are the same DW clock.
> > 
> > Signed-off-by: Dinh Nguyen <dinguyen at altera.com>
> > Acked-by: Jamie Iles <jamie at jamieiles.com>
> > CC: Rob Herring <rob.herring at calxeda.com>
> > CC: Arnd Bergmann <arnd at arndb.de>
> > Cc: Olof Johansson <olof at lixom.net>
> > CC: Jamie Iles <jamie at jamieiles.com>
> > Cc: John Stultz <john.stultz at linaro.org>
> > Cc: Thomas Gleixner <tglx at linutronix.de>
> > Cc: Linus Walleij <linus.walleij at linaro.org>
> > Cc: Pavel Machek <pavel at denx.de>
> > Cc: Heiko Stuebner <heiko at sntech.de>
> > Cc: linux-arm-kernel at lists.infradead.org
> > ---
> >  drivers/clocksource/dw_apb_timer_of.c |    7 +++----
> >  1 file changed, 3 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/clocksource/dw_apb_timer_of.c
> > b/drivers/clocksource/dw_apb_timer_of.c index 4cbae4f..8e00929 100644
> > --- a/drivers/clocksource/dw_apb_timer_of.c
> > +++ b/drivers/clocksource/dw_apb_timer_of.c
> > @@ -102,18 +102,17 @@ static void add_clocksource(struct device_node
> > *source_timer) * timer is found. sched_io_base then points to the
> > current_value * register of the clocksource timer.
> >  	 */
> > -	sched_io_base = iobase + 0x04;
> > +	sched_io_base = iobase;
> >  	sched_rate = rate;
> >  }
> > 
> >  static u32 read_sched_clock(void)
> >  {
> > -	return __raw_readl(sched_io_base);
> > +	return ~__raw_readl(sched_io_base + 0x4);
> >  }
> > 
> 
> 
> 
> >  static const struct of_device_id sptimer_ids[] __initconst = {
> >  	{ .compatible = "picochip,pc3x2-rtc" },
> > -	{ .compatible = "snps,dw-apb-timer-sp" },
> >  	{ /* Sentinel */ },
> >  };
> 
> I'm not 100% sure, but maybe the same explaination as below applies to this - 
> with it better being part of the first patch.
> 
> 
> > @@ -153,4 +152,4 @@ static void __init dw_apb_timer_init(struct device_node
> > *timer) num_called++;
> >  }
> >  CLOCKSOURCE_OF_DECLARE(pc3x2_timer, "picochip,pc3x2-timer",
> > dw_apb_timer_init); -CLOCKSOURCE_OF_DECLARE(apb_timer,
> > "snps,dw-apb-timer-osc", dw_apb_timer_init);
> > +CLOCKSOURCE_OF_DECLARE(apb_timer, "snps,dw-apb-timer",
> > dw_apb_timer_init);
> 
> I think this hunk would better be part of the first patch, as you rename the 
> devices in the dtsi files there and it has nothing to do with the sched_clock 
> fix.
> 
> Changing the clocksource name here also breaks bisectability on the affected 
> platforms because they wouldn't be able to add the clocksources when only the 
> first patch is applied.

I agree with you, but I was under the impression that Arnd wanted to
keep DTS changes in a separate commit.

Dinh
> 
> 
> Heiko
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> 






More information about the linux-arm-kernel mailing list