]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge tag 'samsung-drivers' of http://git.kernel.org/pub/scm/linux/kernel/git/kgene...
authorOlof Johansson <olof@lixom.net>
Thu, 22 May 2014 05:32:57 +0000 (22:32 -0700)
committerOlof Johansson <olof@lixom.net>
Thu, 22 May 2014 05:32:57 +0000 (22:32 -0700)
Merge "Samsung driver update for 3.16" from Kukjin Kim:

exynos_mct update for v3.16

- register sched_clock callback to use clocksource mct-frc

* tag 'samsung-drivers' of http://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung:
  clocksource: exynos_mct: register sched_clock callback

Signed-off-by: Olof Johansson <olof@lixom.net>
1  2 
drivers/clocksource/exynos_mct.c

index acf5a329d5387653b4359d27feb772afe389a92b,ea4dfc09779090ec35776b30f006a053f3d36650..8d6420013a04cabc8a9920bcf09780dde98b4d66
@@@ -24,6 -24,7 +24,7 @@@
  #include <linux/of_irq.h>
  #include <linux/of_address.h>
  #include <linux/clocksource.h>
+ #include <linux/sched_clock.h>
  
  #define EXYNOS4_MCTREG(x)             (x)
  #define EXYNOS4_MCT_G_CNT_L           EXYNOS4_MCTREG(0x100)
@@@ -192,12 -193,19 +193,19 @@@ struct clocksource mct_frc = 
        .resume         = exynos4_frc_resume,
  };
  
+ static u64 notrace exynos4_read_sched_clock(void)
+ {
+       return exynos4_frc_read(&mct_frc);
+ }
  static void __init exynos4_clocksource_init(void)
  {
        exynos4_mct_frc_start(0, 0);
  
        if (clocksource_register_hz(&mct_frc, clk_rate))
                panic("%s: can't register clocksource\n", mct_frc.name);
+       sched_clock_register(exynos4_read_sched_clock, 64, clk_rate);
  }
  
  static void exynos4_mct_comp0_stop(void)
@@@ -416,6 -424,8 +424,6 @@@ static int exynos4_local_timer_setup(st
        evt->set_mode = exynos4_tick_set_mode;
        evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
        evt->rating = 450;
 -      clockevents_config_and_register(evt, clk_rate / (TICK_BASE_CNT + 1),
 -                                      0xf, 0x7fffffff);
  
        exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET);
  
                                evt->irq);
                        return -EIO;
                }
 +              irq_force_affinity(mct_irqs[MCT_L0_IRQ + cpu], cpumask_of(cpu));
        } else {
                enable_percpu_irq(mct_irqs[MCT_L0_IRQ], 0);
        }
 +      clockevents_config_and_register(evt, clk_rate / (TICK_BASE_CNT + 1),
 +                                      0xf, 0x7fffffff);
  
        return 0;
  }
@@@ -451,6 -458,7 +459,6 @@@ static int exynos4_mct_cpu_notify(struc
                                           unsigned long action, void *hcpu)
  {
        struct mct_clock_event_device *mevt;
 -      unsigned int cpu;
  
        /*
         * Grab cpu pointer in each case to avoid spurious
                mevt = this_cpu_ptr(&percpu_mct_tick);
                exynos4_local_timer_setup(&mevt->evt);
                break;
 -      case CPU_ONLINE:
 -              cpu = (unsigned long)hcpu;
 -              if (mct_int_type == MCT_INT_SPI)
 -                      irq_set_affinity(mct_irqs[MCT_L0_IRQ + cpu],
 -                                              cpumask_of(cpu));
 -              break;
        case CPU_DYING:
                mevt = this_cpu_ptr(&percpu_mct_tick);
                exynos4_local_timer_stop(&mevt->evt);