On 10 November 2016 at 08:24, Sudeep Holla <[email protected]> wrote: > 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. > > Cc: "Rafael J. Wysocki" <[email protected]> > Signed-off-by: Sudeep Holla <[email protected]>
Tested this on a Qualcomm 410c dragonboard. Worked great. Thanks for the patch! Tested-by: Andy Gross <[email protected]>

