This patchset series provide some code consolidation across the different
cpuidle drivers. It contains two parts, the first one is the removal of
the time keeping flag and the second one, is a common initialization routine.
All the drivers use the en_core_tk_irqen flag, which means it is not necessary
to make the time computation optional. We can remove this flag and assume the
cpuidle framework always manage this operation.
The cpuidle code initialization is duplicated across the different drivers in
the same manner.
The repeating pattern is:
SMP:
cpuidle_register_driver(drv);
for_each_possible_cpu(cpu) {
dev = per_cpu(cpuidle_device, cpu);
cpuidle_register_device(dev);
}
UP:
cpuidle_register_driver(drv);
cpuidle_register_device(dev);
As on a UP machine the macro 'for_each_cpu' is a one iteration loop, using the
initialization loop from SMP to UP works.
The patchset does some cleanup for different drivers in order to make the init
code the same. Then it introduces a generic function:
cpuidle_register(struct cpuidle_driver *drv, struct cpumask *cpumask)
The cpumask is for the coupled idle states.
The drivers are then modified to take into account this new function and
to remove the duplicated code.
The benefit is observable in the diffstat: 332 lines of code removed.
Changelog:
- V4:
* Added the different Acked-by and Reviewed-by
* Removed the patches already merged:
* ARM: shmobile: cpuidle: remove shmobile_enter_wfi function
* ARM: shmobile: cpuidle: remove shmobile_enter_wfi prototype
* ARM: OMAP3: remove cpuidle_wrap_enter
* Removed patch without acked-by (no answer from the maintainer)
* ARM: s3c64xx: cpuidle: use init/exit common routine
- V3:
* folded patch 5/19 into 19/19, they were:
* ARM: imx: cpuidle: use init/exit common routine
* ARM: imx: cpuidle: create separate drivers for imx5/imx6
* removed rule to make cpuidle.o in the imx's Makefile
* splitted patch 1/19 into two, they are:
* [V3 patch 01/19] ARM: shmobile: cpuidle: remove shmobile_enter_wfi
* [V3 patch 02/19] ARM: shmobile: cpuidle: remove shmobile_enter_wfi prototype
- V2:
* fixed cpumask NULL test for coupled state in cpuidle_register
* added comment about structure copy
* changed printk by pr_err
* folded splitted message
* fixed return code in cpuidle_register
* updated Documentation/cpuidle/drivers.txt
* added in the changelog dev->state_count is filled by cpuidle_enable_device
* fixed tag for tegra in the first line patch description
* fixed tegra2 removed tegra_tear_down_cpu = tegra20_tear_down_cpu;
- V1: Initial post
Tested-on: u8500
Tested-on: at91
Tested-on: intel i5
Tested-on: OMAP4
Tested-by: Kevin Hilman <khilman(a)linaro.org> # OMAP3, OMAP4
Tested-by: Andrew Lunn <andrew(a)lunn.ch> # Kirkwood
Compiled with and without CPU_IDLE for:
u8500, at91, davinci, exynos, imx5, imx6, kirkwood, multi_v7 (for calxeda),
omap2plus, s3c64, tegra1, tegra2, tegra3
Daniel Lezcano (15):
cpuidle: remove en_core_tk_irqen flag
ARM: ux500: cpuidle: replace for_each_online_cpu by
for_each_possible_cpu
cpuidle: make a single register function for all
ARM: ux500: cpuidle: use init/exit common routine
ARM: at91: cpuidle: use init/exit common routine
ARM: OMAP3: cpuidle: use init/exit common routine
ARM: tegra: cpuidle: use init/exit common routine
ARM: shmobile: cpuidle: use init/exit common routine
ARM: OMAP4: cpuidle: use init/exit common routine
ARM: tegra: cpuidle: use init/exit common routine for tegra2
ARM: tegra: cpuidle: use init/exit common routine for tegra3
ARM: calxeda: cpuidle: use init/exit common routine
ARM: kirkwood: cpuidle: use init/exit common routine
ARM: davinci: cpuidle: use init/exit common routine
ARM: imx: cpuidle: use init/exit common routine
Documentation/cpuidle/driver.txt | 6 +
arch/arm/mach-at91/cpuidle.c | 18 +--
arch/arm/mach-davinci/cpuidle.c | 21 +---
arch/arm/mach-exynos/cpuidle.c | 1 -
arch/arm/mach-imx/Makefile | 2 +-
arch/arm/mach-imx/cpuidle-imx5.c | 37 ++++++
arch/arm/mach-imx/cpuidle-imx6q.c | 3 +-
arch/arm/mach-imx/cpuidle.c | 80 -------------
arch/arm/mach-imx/cpuidle.h | 10 +-
arch/arm/mach-imx/pm-imx5.c | 30 +----
arch/arm/mach-omap2/cpuidle34xx.c | 23 +---
arch/arm/mach-omap2/cpuidle44xx.c | 27 +----
arch/arm/mach-s3c64xx/cpuidle.c | 1 -
arch/arm/mach-shmobile/cpuidle.c | 11 +-
arch/arm/mach-shmobile/pm-sh7372.c | 1 -
arch/arm/mach-tegra/cpuidle-tegra114.c | 27 +----
arch/arm/mach-tegra/cpuidle-tegra20.c | 31 +----
arch/arm/mach-tegra/cpuidle-tegra30.c | 28 +----
arch/arm/mach-ux500/cpuidle.c | 33 +-----
arch/powerpc/platforms/pseries/processor_idle.c | 1 -
arch/sh/kernel/cpu/shmobile/cpuidle.c | 1 -
arch/x86/kernel/apm_32.c | 1 -
drivers/acpi/processor_idle.c | 1 -
drivers/cpuidle/cpuidle-calxeda.c | 53 +--------
drivers/cpuidle/cpuidle-kirkwood.c | 18 +--
drivers/cpuidle/cpuidle.c | 144 ++++++++++++++---------
drivers/idle/intel_idle.c | 1 -
include/linux/cpuidle.h | 20 ++--
28 files changed, 162 insertions(+), 468 deletions(-)
create mode 100644 arch/arm/mach-imx/cpuidle-imx5.c
delete mode 100644 arch/arm/mach-imx/cpuidle.c
--
1.7.9.5
commit d1669912 (idle: Implement generic idle function) added a new
generic idle along with support for hlt/nohlt command line options to
override default idle loop behavior. However, the command-line
processing is never compiled.
The command-line handling is wrapped by CONFIG_GENERIC_IDLE_POLL_SETUP
and arches that use this feature select it in their Kconfigs.
However, no Kconfig definition was created for this option, so it is
never enabled, and therefore command-line override of the idle-loop
behavior is broken after migrating to the generic idle loop.
To fix, add a Kconfig definition for GENERIC_IDLE_POLL_SETUP.
Tested on ARM (OMAP4/Panda) which enables the command-line overrides
by default.
Cc: Thomas Gleixner <tglx(a)linutronix.de>
Cc: Linus Torvalds <torvalds(a)linux-foundation.org>
Cc: Rusty Russell <rusty(a)rustcorp.com.au>
Cc: Paul McKenney <paulmck(a)linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz(a)infradead.org>
Cc: Srivatsa S. Bhat <srivatsa.bhat(a)linux.vnet.ibm.com>
Cc: Magnus Damm <magnus.damm(a)gmail.com>
Signed-off-by: Kevin Hilman <khilman(a)linaro.org>
---
Applies on tip/smp/hotplug where generic idle feature is added
arch/Kconfig | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/Kconfig b/arch/Kconfig
index 1455579..e0ef57b 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -216,6 +216,9 @@ config USE_GENERIC_SMP_HELPERS
config GENERIC_SMP_IDLE_THREAD
bool
+config GENERIC_IDLE_POLL_SETUP
+ bool
+
# Select if arch init_task initializer is different to init/init_task.c
config ARCH_INIT_TASK
bool
--
1.8.2
I tested Linaro 13.04 kernel on my Exynos5250 and found that USB device is
not found (i.e. nothing in lsusb). It used to work with Linaro 13.01. dmesg
showed that s3c-usbphy can't configure phy mode (see below). Looking at the
samsung-usbphy.c file, it looks like sysreg is not defined in device tree
file. I am thinking that we are missing one parameter for usbphy-sys in the
exynos5250.dtsi, by comparing a patch from
http://comments.gmane.org/gmane.linux.usb.general/82597.
Any comment?
usbphy {
#address-cells = <1>;
#size-cells = <1>;
compatible = "samsung,exynos5250-usbphy";
reg = <0x12130000 0x100>, <0x12100000 0x100>;
ranges;
usbphy-sys {
/* USB device and host PHY_CONTROL registers */
reg = <0x10040704 0x8>;
};
};
-Wei
=== dmesg ===
samsung-usbphy s3c-usbphy: Can't get usb-phy sysreg cfg register
samsung-usbphy s3c-usbphy: Can't configure specified phy mode
samsung-usbphy s3c-usbphy: Can't configure specified phy mode
samsung-usbphy s3c-usbphy: Already power on PHY
samsung-usbphy s3c-usbphy: Can't configure specified phy mode
samsung-usbphy s3c-usbphy: Already power on PHY
=== code snip from samsung-usbphy.c ===
/*
* Not returning error code here, since this situation is not fatal.
* Few SoCs may not have this switch available
*/
if (sphy->sysreg == NULL)
dev_warn(sphy->dev, "Can't get usb-phy sysreg cfg
register\n");
hi Nico & all,
Per Samsung has released their big.LITTLE phone, and the IKS code has
been release in its kernel's source code; so may be now it's good time
for us to know status of IKS from Linaro side:
1. What's the plan for Lianro to release iks related patches?
Due now mcpm related patches are pending for mainline's merge,
unfortunately iks is based on the mcpm patches; so when will u send iks
patches to open source's mailing list?
On the other hand, do u have plan to merge iks related patches firstly
to Lianro ARM landing team's branch? if so, then it will not depend on
mainline and can be much more efficient.
2. Looked into Samsung's code, there have the cluster switching which is
based on iks (named ikcs); so now in your code base, do u have
implemented related functionality?
--
Thx,
Leo Yan
== Linus Walleij linusw ==
=== Highlights ===
* Sent a last minute revert from the GPIO tree to Torvalds and
he pulled it in for the final v3.9 kernel.
* Spent something like a working day reviewing and commenting
on the DMA 40 patches for DMA migration to Device Tree.
* Reviewed USB DT patches.
* Last minute additions and fixups in the pinctrl and GPIO tree,
some of it will probably not go in at the first pull request,
possibly I'll hold it back until v3.11 even. This includes a patch
to make the pinctrl mutex locking more fine-grained.
* Iterated U300 DT patches as a prerequisite for multiplatform
work on the U300.
=== Plans ===
* A short paternity leave 6/5->9/5 in may.
As noted elsewhere: the child is not newborn: she is 6 years
old, but we can stash this leave...
* Find all regressions for ux500 lurking in the linux-next tree.
* Convert Nomadik pinctrl driver to register GPIO ranges
from the gpiochip side.
* Test the PL08x patches on the Ericsson Research
PB11MPCore and submit platform data for using
pl08x DMA on that platform.
* Get hands dirty with regmap.
=== Issues ===
* Things have been hectic internally at ST-Ericsson diverting me
from Linaro work.
* I am spending roughly 30-60 mins every day on internal review
work on internal baseline and mainline patches-to-be.
Thanks,
Linus Walleij
=== David Long ===
=== Highlights ===
* I have a (mostly) working version of reorganized ARM uprobe support. I
have just given Tixy a monolithic patch in the hopes he can tell me if
my approach makes sense. I am continuing to clean up the code and
prepare it for a wider review.
* Completed travel arrangements for Dublin.
=== Plans ===
* Continue with uprobe/kprobe
* Start building systemtap
=== Issues ===
* None
-dl