]> asedeno.scripts.mit.edu Git - linux.git/commit
cpuidle: dt: assign ->enter_freeze to same as ->enter callback function
authorSudeep Holla <Sudeep.Holla@arm.com>
Thu, 10 Nov 2016 14:24:33 +0000 (14:24 +0000)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 23 Nov 2016 01:03:11 +0000 (02:03 +0100)
commita94e502c22b61072f808f53392a8433bc948b03d
tree65a32d8d85b61a9e9b4b4a22a5398cee8e9cc2f5
parente5f1b245870d59be0e6cc3b33edf5406a3b59648
cpuidle: dt: assign ->enter_freeze to same as ->enter callback function

enter_freeze() callback is expected atleast to do the same as enter()
but it has to guarantee that interrupts aren't enabled at any point
in its execution, as the tick is frozen.

CPUs execute ->enter_freeze with the local tick or entire timekeeping
suspended, so it must not re-enable interrupts at any point (even
temporarily) or attempt to change states of clock event devices.

It will be called when the system goes to suspend-to-idle and will
reduce power usage because CPUs won't be awaken for unnecessary IRQs
(i.e. woken up only on IRQs from "wakeup sources")

We can reuse the same code for both the enter() and enter_freeze()
callbacks as along as they don't re-enable interrupts. Only "coupled"
cpuidle mechanism enables interrupts and doing that with timekeeping
suspended is generally not safe.

Since this generic DT based idle driver doesn't support "coupled"
states, it is safe to assume that the interrupts are not re-enabled.

This patch assign enter_freeze to same as enter callback function which
helps to save power without any intermittent spurious wakeups from
suspend-to-idle.

Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Tested-by: Andy Gross <andy.gross@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpuidle/dt_idle_states.c