Time running

Balaji Rao balaji at raobalaji.com
Mon Oct 6 00:12:16 CEST 2008

On Wed, 01 Oct 2008 15:05:22 +0100
Andy Green <andy at openmoko.com> wrote:

> Hash: SHA1
> Somebody in the thread at some point said:
> | Hi,
> |
> | I've noticed that time runs ~6x slower when using a stable-tracking
> | kernel and it makes booting _really_ slow!
> |
> | How do I fix this ? I've noticed that the number of timer interrupts
> | received is ~6x lesser. I wonder what the problem really is. Are the
> | interrupts not delivered at the required rate and is there a way I
> can | test this ?
> |
> | Suggestions welcome.
> I'm working on adding the andy-2.6.26 stuff to andy-tracking right now
> and seeing the same.
> Previously (some weeks ago) on tracking there was trouble with hdq
> that I put down to PWM init affecting the timer used for FIQ
> generation.  I moved the FIQ timer to another PWM unit and the
> problems went away. Since then FIQ is trashed by later changes
> upstream I am trying to figure out now.
> Anyway I would dump the PWM-related registers from CPU on 2.6.24 or
> 2.6.26 and current tracking and compare them, it seems it might give
> a clue.


I've narrowed down the problem to the following change upstream.

commit b999f0db941f56bb0f68ebf455f6e2960cfd5804
Author: Ben Dooks <ben-linux at fluff.org>
Date:   Thu Jul 3 11:24:27 2008 +0100

    [ARM] S3C24XX: Support for PWM timer clocks via clk_* API
    Add support for the PWM timer clock routing via the
    standard clk_ API.
    Signed-off-by: Ben Dooks <ben-linux at fluff.org>

I'm able to temporarily fix the problem by a little patch which
prevents the TCFG1 register from being overwritten.

The actual fix is to use the clk_* api (I have no idea what it is!). We
can start worrying about it when we are looking to send our timer code
upstream. :)

diff --git a/arch/arm/plat-s3c24xx/pwm-clock.c
index 306cc9c..de7b91d 100644
--- a/arch/arm/plat-s3c24xx/pwm-clock.c
+++ b/arch/arm/plat-s3c24xx/pwm-clock.c
@@ -325,7 +325,7 @@ static int clk_pwm_tin_set_parent(struct clk *clk,
struct clk *parent)
        tcfg1 = __raw_readl(S3C2410_TCFG1);
        tcfg1 &= ~(S3C2410_TCFG1_MUX_MASK << shift);
-       __raw_writel(tcfg1 | bits, S3C2410_TCFG1);
+       //__raw_writel(tcfg1 | bits, S3C2410_TCFG1);
Does that remotely help the FIQ problem in any way ?

	- Balaji

More information about the openmoko-kernel mailing list