[MIPS] Sibyte: Increase minimum oneshot timer interval to two ticks.
authorRalf Baechle <ralf@linux-mips.org>
Sun, 11 Nov 2007 17:24:46 +0000 (17:24 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Thu, 15 Nov 2007 23:21:50 +0000 (23:21 +0000)
For the old minimum of a single tick a value of zero would be programmed
into the init value register which in the BCM1250/BCM1125/BCM1125H User
Manual in the Timer Special Cases section is documented to have
UNPREDICTABLE effect.

Observable sympthoms of this bug were hangs of several seconds on the
console during bootup and later if both dyntick and highres timer options
were activated.

In theory contiguous mode of the timers is also affected but in an act of
hopeless lack of realism I'll assume nobody will ever configure a KERNEL
for HZ > 500kHz but if so I leave that to evolution to sort out.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/cevt-bcm1480.c
arch/mips/kernel/cevt-sb1250.c

index f6fcc62ade3acab447c2751c8479b1428393b9d5..e54410e5a2cd75a160dfd962874df9cad679c4a1 100644 (file)
@@ -122,7 +122,7 @@ void __cpuinit sb1480_clockevent_init(void)
                                  CLOCK_EVT_FEAT_ONESHOT;
        clockevent_set_clock(cd, V_SCD_TIMER_FREQ);
        cd->max_delta_ns        = clockevent_delta2ns(0x7fffff, cd);
                                  CLOCK_EVT_FEAT_ONESHOT;
        clockevent_set_clock(cd, V_SCD_TIMER_FREQ);
        cd->max_delta_ns        = clockevent_delta2ns(0x7fffff, cd);
-       cd->min_delta_ns        = clockevent_delta2ns(1, cd);
+       cd->min_delta_ns        = clockevent_delta2ns(2, cd);
        cd->rating              = 200;
        cd->irq                 = irq;
        cd->cpumask             = cpumask_of_cpu(cpu);
        cd->rating              = 200;
        cd->irq                 = irq;
        cd->cpumask             = cpumask_of_cpu(cpu);
index 194e0f726fe80618ff3022d03c9ec687966a2643..8fbb055376807de1c572dfc1ddc0dee377beecee 100644 (file)
@@ -121,7 +121,7 @@ void __cpuinit sb1250_clockevent_init(void)
                                  CLOCK_EVT_FEAT_ONESHOT;
        clockevent_set_clock(cd, V_SCD_TIMER_FREQ);
        cd->max_delta_ns        = clockevent_delta2ns(0x7fffff, cd);
                                  CLOCK_EVT_FEAT_ONESHOT;
        clockevent_set_clock(cd, V_SCD_TIMER_FREQ);
        cd->max_delta_ns        = clockevent_delta2ns(0x7fffff, cd);
-       cd->min_delta_ns        = clockevent_delta2ns(1, cd);
+       cd->min_delta_ns        = clockevent_delta2ns(2, cd);
        cd->rating              = 200;
        cd->irq                 = irq;
        cd->cpumask             = cpumask_of_cpu(cpu);
        cd->rating              = 200;
        cd->irq                 = irq;
        cd->cpumask             = cpumask_of_cpu(cpu);