cpuidle: introduce CPU_PM_CPU_IDLE_ENTER macro for ARM{32, 64}
The function arm_enter_idle_state is exactly the same in both generic ARM{32,64} CPUIdle driver and will be the same even on ARM64 backend for ACPI processor idle driver. So we can unify it and move it to a common place by introducing CPU_PM_CPU_IDLE_ENTER macro that can be used in all places avoiding duplication. This is in preparation of reuse of the generic cpuidle entry function for ACPI LPI support on ARM64. Suggested-by: Rafael J. Wysocki <rjw@rjwysocki.net> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
ce3ad71026
commit
220276e09b
|
@ -36,26 +36,12 @@
|
||||||
static int arm_enter_idle_state(struct cpuidle_device *dev,
|
static int arm_enter_idle_state(struct cpuidle_device *dev,
|
||||||
struct cpuidle_driver *drv, int idx)
|
struct cpuidle_driver *drv, int idx)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (!idx) {
|
|
||||||
cpu_do_idle();
|
|
||||||
return idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = cpu_pm_enter();
|
|
||||||
if (!ret) {
|
|
||||||
/*
|
/*
|
||||||
* Pass idle state index to cpu_suspend which in turn will
|
* Pass idle state index to arm_cpuidle_suspend which in turn
|
||||||
* call the CPU ops suspend protocol with idle index as a
|
* will call the CPU ops suspend protocol with idle index as a
|
||||||
* parameter.
|
* parameter.
|
||||||
*/
|
*/
|
||||||
ret = arm_cpuidle_suspend(idx);
|
return CPU_PM_CPU_IDLE_ENTER(arm_cpuidle_suspend, idx);
|
||||||
|
|
||||||
cpu_pm_exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret ? -1 : idx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct cpuidle_driver arm_idle_driver = {
|
static struct cpuidle_driver arm_idle_driver = {
|
||||||
|
|
|
@ -252,4 +252,22 @@ static inline int cpuidle_register_governor(struct cpuidle_governor *gov)
|
||||||
#define CPUIDLE_DRIVER_STATE_START 0
|
#define CPUIDLE_DRIVER_STATE_START 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define CPU_PM_CPU_IDLE_ENTER(low_level_idle_enter, idx) \
|
||||||
|
({ \
|
||||||
|
int __ret; \
|
||||||
|
\
|
||||||
|
if (!idx) { \
|
||||||
|
cpu_do_idle(); \
|
||||||
|
return idx; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
__ret = cpu_pm_enter(); \
|
||||||
|
if (!__ret) { \
|
||||||
|
__ret = low_level_idle_enter(idx); \
|
||||||
|
cpu_pm_exit(); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
__ret ? -1 : idx; \
|
||||||
|
})
|
||||||
|
|
||||||
#endif /* _LINUX_CPUIDLE_H */
|
#endif /* _LINUX_CPUIDLE_H */
|
||||||
|
|
Loading…
Reference in New Issue