1. 23 Apr, 2013 3 commits
    • Daniel Lezcano's avatar
      cpuidle: make a single register function for all · 4c637b21
      Daniel Lezcano authored
      The usual scheme to initialize a cpuidle driver on a SMP is:
      
      	cpuidle_register_driver(drv);
      	for_each_possible_cpu(cpu) {
      		device = &per_cpu(cpuidle_dev, cpu);
      		cpuidle_register_device(device);
      	}
      
      This code is duplicated in each cpuidle driver.
      
      On UP systems, it is done this way:
      
      	cpuidle_register_driver(drv);
      	device = &per_cpu(cpuidle_dev, cpu);
      	cpuidle_register_device(device);
      
      On UP, the macro 'for_each_cpu' does one iteration:
      
      #define for_each_cpu(cpu, mask)                 \
              for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
      
      Hence, the initialization loop is the same for UP than SMP.
      
      Beside, we saw different bugs / mis-initialization / return code unchecked in
      the different drivers, the code is duplicated including bugs. After fixing all
      these ones, it appears the initialization pattern is the same for everyone.
      
      Please note, some drivers are doing dev->state_count = drv->state_count. This is
      not necessary because it is done by the cpuidle_enable_device function in the
      cpuidle framework. This is true, until you have the same states for all your
      devices. Otherwise, the 'low level' API should be used instead with the specific
      initialization for the driver.
      
      Let's add a wrapper function doing this initialization with a cpumask parameter
      for the coupled idle states and use it for all the drivers.
      
      That will save a lot of LOC, consolidate the code, and the modifications in the
      future could be done in a single place. Another benefit is the consolidation of
      the cpuidle_device variable which is now in the cpuidle framework and no longer
      spread accross the different arch specific drivers.
      Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      4c637b21
    • Daniel Lezcano's avatar
      ARM: ux500: cpuidle: replace for_each_online_cpu by for_each_possible_cpu · 80b1c199
      Daniel Lezcano authored
      All the drivers are using, in their initialization function, the
      for_each_possible_cpu macro.
      
      Using for_each_online_cpu means the driver must handle the initialization
      of the cpuidle device when a cpu is up which is not the case here.
      
      Change the macro to for_each_possible_cpu as that fix the hotplug
      initialization and make the initialization routine consistent with the
      rest of the code in the different drivers.
      Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
      Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      80b1c199
    • Daniel Lezcano's avatar
      cpuidle: remove en_core_tk_irqen flag · 554c06ba
      Daniel Lezcano authored
      The en_core_tk_irqen flag is set in all the cpuidle driver which
      means it is not necessary to specify this flag.
      
      Remove the flag and the code related to it.
      Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
      Acked-by: Kevin Hilman <khilman@linaro.org>  # for mach-omap2/*
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      554c06ba
  2. 21 Apr, 2013 8 commits
  3. 10 Apr, 2013 1 commit
  4. 09 Apr, 2013 6 commits
  5. 08 Apr, 2013 14 commits
  6. 07 Apr, 2013 7 commits
  7. 06 Apr, 2013 1 commit