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
2 changed files with 24 additions and 20 deletions
|
@ -36,26 +36,12 @@
|
|||
static int arm_enter_idle_state(struct cpuidle_device *dev,
|
||||
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
|
||||
* call the CPU ops suspend protocol with idle index as a
|
||||
* parameter.
|
||||
*/
|
||||
ret = arm_cpuidle_suspend(idx);
|
||||
|
||||
cpu_pm_exit();
|
||||
}
|
||||
|
||||
return ret ? -1 : idx;
|
||||
/*
|
||||
* Pass idle state index to arm_cpuidle_suspend which in turn
|
||||
* will call the CPU ops suspend protocol with idle index as a
|
||||
* parameter.
|
||||
*/
|
||||
return CPU_PM_CPU_IDLE_ENTER(arm_cpuidle_suspend, idx);
|
||||
}
|
||||
|
||||
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
|
||||
#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 */
|
||||
|
|
Loading…
Reference in a new issue