MIPS: clockevent drivers: Set ->min_delta_ticks and ->max_delta_ticks
authorNicolai Stange <nicstange@gmail.com>
Thu, 30 Mar 2017 19:47:32 +0000 (21:47 +0200)
committerJohn Stultz <john.stultz@linaro.org>
Fri, 14 Apr 2017 20:11:16 +0000 (13:11 -0700)
In preparation for making the clockevents core NTP correction aware,
all clockevent device drivers must set ->min_delta_ticks and
->max_delta_ticks rather than ->min_delta_ns and ->max_delta_ns: a
clockevent device's rate is going to change dynamically and thus, the
ratio of ns to ticks ceases to stay invariant.

Make the MIPS arch's clockevent drivers initialize these fields properly.

This patch alone doesn't introduce any change in functionality as the
clockevents core still looks exclusively at the (untouched) ->min_delta_ns
and ->max_delta_ns. As soon as this has changed, a followup patch will
purge the initialization of ->min_delta_ns and ->max_delta_ns from these
drivers.

Cc: Ingo Molnar <mingo@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Keguang Zhang <keguang.zhang@gmail.com>
Cc: John Crispin <john@phrozen.org>
Acked-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Nicolai Stange <nicstange@gmail.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
12 files changed:
arch/mips/alchemy/common/time.c
arch/mips/jz4740/time.c
arch/mips/kernel/cevt-bcm1480.c
arch/mips/kernel/cevt-ds1287.c
arch/mips/kernel/cevt-gt641xx.c
arch/mips/kernel/cevt-sb1250.c
arch/mips/kernel/cevt-txx9.c
arch/mips/loongson32/common/time.c
arch/mips/loongson64/common/cs5536/cs5536_mfgpt.c
arch/mips/loongson64/loongson-3/hpet.c
arch/mips/ralink/cevt-rt3352.c
arch/mips/sgi-ip27/ip27-timer.c

index e1bec5a77c3941ee17cdcc114b8981a6c3c188cf..32d1333bb24334090187993fec1dd321cf63bd2f 100644 (file)
@@ -138,7 +138,9 @@ static int __init alchemy_time_init(unsigned int m2int)
        cd->shift = 32;
        cd->mult = div_sc(32768, NSEC_PER_SEC, cd->shift);
        cd->max_delta_ns = clockevent_delta2ns(0xffffffff, cd);
-       cd->min_delta_ns = clockevent_delta2ns(9, cd);  /* ~0.28ms */
+       cd->max_delta_ticks = 0xffffffff;
+       cd->min_delta_ns = clockevent_delta2ns(9, cd);
+       cd->min_delta_ticks = 9;        /* ~0.28ms */
        clockevents_register_device(cd);
        setup_irq(m2int, &au1x_rtcmatch2_irqaction);
 
index bcf8f8c6273774f63e56efcbb6e423cb7b6bf5b2..bb1ad5119da4e90f35b1bdfba16fdcbf118bb61c 100644 (file)
@@ -145,7 +145,9 @@ void __init plat_time_init(void)
 
        clockevent_set_clock(&jz4740_clockevent, clk_rate);
        jz4740_clockevent.min_delta_ns = clockevent_delta2ns(100, &jz4740_clockevent);
+       jz4740_clockevent.min_delta_ticks = 100;
        jz4740_clockevent.max_delta_ns = clockevent_delta2ns(0xffff, &jz4740_clockevent);
+       jz4740_clockevent.max_delta_ticks = 0xffff;
        jz4740_clockevent.cpumask = cpumask_of(0);
 
        clockevents_register_device(&jz4740_clockevent);
index 940ac00e9129acc261369efee579545eb8028215..8f9f2daf06a3dac91f7982ee84b4696bb91e7802 100644 (file)
@@ -123,7 +123,9 @@ void sb1480_clockevent_init(void)
                                  CLOCK_EVT_FEAT_ONESHOT;
        clockevent_set_clock(cd, V_SCD_TIMER_FREQ);
        cd->max_delta_ns        = clockevent_delta2ns(0x7fffff, cd);
+       cd->max_delta_ticks     = 0x7fffff;
        cd->min_delta_ns        = clockevent_delta2ns(2, cd);
+       cd->min_delta_ticks     = 2;
        cd->rating              = 200;
        cd->irq                 = irq;
        cd->cpumask             = cpumask_of(cpu);
index 77a5ddf53f57e50b96432897bc9b04012e57fedf..61ad9079fa16ca7cef02320b421a9c471e65d8fe 100644 (file)
@@ -128,7 +128,9 @@ int __init ds1287_clockevent_init(int irq)
        cd->irq = irq;
        clockevent_set_clock(cd, 32768);
        cd->max_delta_ns = clockevent_delta2ns(0x7fffffff, cd);
+       cd->max_delta_ticks = 0x7fffffff;
        cd->min_delta_ns = clockevent_delta2ns(0x300, cd);
+       cd->min_delta_ticks = 0x300;
        cd->cpumask = cpumask_of(0);
 
        clockevents_register_device(&ds1287_clockevent);
index 66040051151d3c0f27574627f08fb4cd17511acb..fd90c82dc17d809b8b2b6cd1d954ca528f6d51b6 100644 (file)
@@ -152,7 +152,9 @@ static int __init gt641xx_timer0_clockevent_init(void)
        cd->rating = 200 + gt641xx_base_clock / 10000000;
        clockevent_set_clock(cd, gt641xx_base_clock);
        cd->max_delta_ns = clockevent_delta2ns(0x7fffffff, cd);
+       cd->max_delta_ticks = 0x7fffffff;
        cd->min_delta_ns = clockevent_delta2ns(0x300, cd);
+       cd->min_delta_ticks = 0x300;
        cd->cpumask = cpumask_of(0);
 
        clockevents_register_device(&gt641xx_timer0_clockevent);
index 3d860efd63b97295e9c68147493cdca52a396a4f..9d1edb5938b81b3e74421b6ae7660435805dd826 100644 (file)
@@ -123,7 +123,9 @@ void sb1250_clockevent_init(void)
                                  CLOCK_EVT_FEAT_ONESHOT;
        clockevent_set_clock(cd, V_SCD_TIMER_FREQ);
        cd->max_delta_ns        = clockevent_delta2ns(0x7fffff, cd);
+       cd->max_delta_ticks     = 0x7fffff;
        cd->min_delta_ns        = clockevent_delta2ns(2, cd);
+       cd->min_delta_ticks     = 2;
        cd->rating              = 200;
        cd->irq                 = irq;
        cd->cpumask             = cpumask_of(cpu);
index aaca60d6ffc31f4320e740ac27b6b986065772b5..7b17c8f5009d017d7c57641055c4d320760efdfb 100644 (file)
@@ -196,7 +196,9 @@ void __init txx9_clockevent_init(unsigned long baseaddr, int irq,
        clockevent_set_clock(cd, TIMER_CLK(imbusclk));
        cd->max_delta_ns =
                clockevent_delta2ns(0xffffffff >> (32 - TXX9_TIMER_BITS), cd);
+       cd->max_delta_ticks = 0xffffffff >> (32 - TXX9_TIMER_BITS);
        cd->min_delta_ns = clockevent_delta2ns(0xf, cd);
+       cd->min_delta_ticks = 0xf;
        cd->irq = irq;
        cd->cpumask = cpumask_of(0),
        clockevents_register_device(cd);
index e6f972d35252cabc0c41b0e8a26bd994e5631351..1c4332a26cf1c573527f2494adf31abce6c022da 100644 (file)
@@ -199,7 +199,9 @@ static void __init ls1x_time_init(void)
 
        clockevent_set_clock(cd, mips_hpt_frequency);
        cd->max_delta_ns = clockevent_delta2ns(0xffffff, cd);
+       cd->max_delta_ticks = 0xffffff;
        cd->min_delta_ns = clockevent_delta2ns(0x000300, cd);
+       cd->min_delta_ticks = 0x000300;
        cd->cpumask = cpumask_of(smp_processor_id());
        clockevents_register_device(cd);
 
index b817d6d3a060e8715cc15f5889b2580db3fb5022..a6adcc4f89600ca774c54260a8641707d42b82fa 100644 (file)
@@ -123,7 +123,9 @@ void __init setup_mfgpt0_timer(void)
        cd->cpumask = cpumask_of(cpu);
        clockevent_set_clock(cd, MFGPT_TICK_RATE);
        cd->max_delta_ns = clockevent_delta2ns(0xffff, cd);
+       cd->max_delta_ticks = 0xffff;
        cd->min_delta_ns = clockevent_delta2ns(0xf, cd);
+       cd->min_delta_ticks = 0xf;
 
        /* Enable MFGPT0 Comparator 2 Output to the Interrupt Mapper */
        _wrmsr(DIVIL_MSR_REG(MFGPT_IRQ), 0, 0x100);
index 24afe364637bc447909329f06f8d9aa9c2e351ff..4df9d4b7356af47517c8c1dfc4f7975e387b27d7 100644 (file)
@@ -241,7 +241,9 @@ void __init setup_hpet_timer(void)
        cd->cpumask = cpumask_of(cpu);
        clockevent_set_clock(cd, HPET_FREQ);
        cd->max_delta_ns = clockevent_delta2ns(0x7fffffff, cd);
+       cd->max_delta_ticks = 0x7fffffff;
        cd->min_delta_ns = clockevent_delta2ns(HPET_MIN_PROG_DELTA, cd);
+       cd->min_delta_ticks = HPET_MIN_PROG_DELTA;
 
        clockevents_register_device(cd);
        setup_irq(HPET_T0_IRQ, &hpet_irq);
index f24eee04e16af6df0a73266d9f346de9636b33d7..b8a1376165b016bdf939257e27cf0cf9467758ae 100644 (file)
@@ -129,7 +129,9 @@ static int __init ralink_systick_init(struct device_node *np)
        systick.dev.name = np->name;
        clockevents_calc_mult_shift(&systick.dev, SYSTICK_FREQ, 60);
        systick.dev.max_delta_ns = clockevent_delta2ns(0x7fff, &systick.dev);
+       systick.dev.max_delta_ticks = 0x7fff;
        systick.dev.min_delta_ns = clockevent_delta2ns(0x3, &systick.dev);
+       systick.dev.min_delta_ticks = 0x3;
        systick.dev.irq = irq_of_parse_and_map(np, 0);
        if (!systick.dev.irq) {
                pr_err("%s: request_irq failed", np->name);
index 695c51bdd7dcb1ed84f1ce6f801c8dff3bcf874a..a53f0c8c901e71552676899397ae55d954399627 100644 (file)
@@ -113,7 +113,9 @@ void hub_rt_clock_event_init(void)
        cd->features            = CLOCK_EVT_FEAT_ONESHOT;
        clockevent_set_clock(cd, CYCLES_PER_SEC);
        cd->max_delta_ns        = clockevent_delta2ns(0xfffffffffffff, cd);
+       cd->max_delta_ticks     = 0xfffffffffffff;
        cd->min_delta_ns        = clockevent_delta2ns(0x300, cd);
+       cd->min_delta_ticks     = 0x300;
        cd->rating              = 200;
        cd->irq                 = irq;
        cd->cpumask             = cpumask_of(cpu);