* [POWER DOMAIN suspend callbacks] Observation.
@ 2011-08-23 14:19 Santosh
2011-08-23 15:01 ` Govindraj
2011-08-23 17:06 ` Kevin Hilman
0 siblings, 2 replies; 5+ messages in thread
From: Santosh @ 2011-08-23 14:19 UTC (permalink / raw)
To: Rafael J. Wysocki, Kevin Hilman, Linux PM mailing list,
linux-omap
Cc: Govindraj R
Rafael, Kevin,
On latest kernel( V3.1-rc1+), the subsystem(driver) suspend
callbacks are not getting called because power domain callbcaks
are populated.
And as per commit 4d27e9dc{PM: Make power domain callbacks take
precedence over subsystem ones}, it's expected bahavior.
Who is suppose to call the driver suspend callback?
Some drivers/subsystem would have state machine which needs to
be suspended.
Is the power domain suspend callback, suppose to take care of
it ? If yes, then that seems to be missing for OMAP.
Thanks for clarification.
Regards
Santosh
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [POWER DOMAIN suspend callbacks] Observation. 2011-08-23 14:19 [POWER DOMAIN suspend callbacks] Observation Santosh @ 2011-08-23 15:01 ` Govindraj 2011-08-23 17:06 ` Kevin Hilman 1 sibling, 0 replies; 5+ messages in thread From: Govindraj @ 2011-08-23 15:01 UTC (permalink / raw) To: Santosh Cc: Rafael J. Wysocki, Kevin Hilman, Linux PM mailing list, linux-omap, Govindraj R, Sripathy, Vishwanath, Basak, Partha On Tue, Aug 23, 2011 at 7:49 PM, Santosh <santosh.shilimkar@ti.com> wrote: > Rafael, Kevin, > > On latest kernel( V3.1-rc1+), the subsystem(driver) suspend > callbacks are not getting called because power domain callbcaks > are populated. > > And as per commit 4d27e9dc{PM: Make power domain callbacks take > precedence over subsystem ones}, it's expected bahavior. > > Who is suppose to call the driver suspend callback? > Some drivers/subsystem would have state machine which needs to > be suspended. > > Is the power domain suspend callback, suppose to take care of > it ? If yes, then that seems to be missing for OMAP. > Looks like from _od_suspend_noirq -> pm_generic_suspend_noirq -> __pm_generic_call(dev, PM_EVENT_SUSPEND, true); --> [..] case PM_EVENT_SUSPEND: callback = noirq ? pm->suspend_noirq : pm->suspend; shouldn't we call pm_generic_suspend from _od_suspend_noirq rather than calling pm_generic_suspend_noirq? Since _noirq seems to call .suspend_noirq hook which most of the them have not populated. pm_generic_suspend* calls may fail to call legacy platform .suspend hooks? Looks like we need below change for driver .suspend hook to be called. diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index b6b4097..c2a18ae 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c @@ -584,9 +584,9 @@ static int _od_suspend_noirq(struct device *dev) int ret; if (od->flags & OMAP_DEVICE_NO_IDLE_ON_SUSPEND) - return pm_generic_suspend_noirq(dev); + return pm_generic_suspend(dev); - ret = pm_generic_suspend_noirq(dev); + ret = pm_generic_suspend(dev); if (!ret && !pm_runtime_status_suspended(dev)) { if (pm_generic_runtime_suspend(dev) == 0) { @@ -604,7 +604,7 @@ static int _od_resume_noirq(struct device *dev) struct omap_device *od = to_omap_device(pdev); if (od->flags & OMAP_DEVICE_NO_IDLE_ON_SUSPEND) - return pm_generic_resume_noirq(dev); + return pm_generic_resume(dev); if ((od->flags & OMAP_DEVICE_SUSPENDED) && !pm_runtime_status_suspended(dev)) { @@ -613,7 +613,7 @@ static int _od_resume_noirq(struct device *dev) pm_generic_runtime_resume(dev); } - return pm_generic_resume_noirq(dev); + return pm_generic_resume(dev); } #endif -- Thanks, Govindraj.R ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [POWER DOMAIN suspend callbacks] Observation. 2011-08-23 14:19 [POWER DOMAIN suspend callbacks] Observation Santosh 2011-08-23 15:01 ` Govindraj @ 2011-08-23 17:06 ` Kevin Hilman 2011-08-24 6:17 ` Santosh 1 sibling, 1 reply; 5+ messages in thread From: Kevin Hilman @ 2011-08-23 17:06 UTC (permalink / raw) To: Santosh; +Cc: Rafael J. Wysocki, Linux PM mailing list, linux-omap, Govindraj R Hi Santosh, Santosh <santosh.shilimkar@ti.com> writes: > Rafael, Kevin, > > On latest kernel( V3.1-rc1+), the subsystem(driver) suspend > callbacks are not getting called because power domain callbcaks > are populated. > > And as per commit 4d27e9dc{PM: Make power domain callbacks take > precedence over subsystem ones}, it's expected bahavior. Correct. > Who is suppose to call the driver suspend callback? If populated, the PM domain callbacks should call the driver callbacks. If there are no PM domain callbacks, then the subsystem (in this case, the platform_bus) should be calling the driver callbacks. > Some drivers/subsystem would have state machine which needs to > be suspended. > > Is the power domain suspend callback, suppose to take care of > it ? If yes, then that seems to be missing for OMAP. Yup, there's a bug. They're not missing, just misplaced. ;) When adding the noirq callbacks to ensure devices are idled late in suspend by omap_device, I the patch commited mistakenly uses SET_SYSTEM_SLEEP_PM_OPS(), which sets the "normal" suspend/resume handlers and not the noirq handlers. Can you try the patch below? I only briefly tested it on omap3/n900 so far. This populates most of the PM domain methods with the same ones used by the subystem (platform_bus) and only overrides the noirq methods with custom versions. This patch should make all the driver's suspend/resume methods be called as expected. After a bit more sanitiy testing, I'll post a real patch for the -rc series. Kevin diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index d8f2299..7a0d248 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c @@ -626,7 +626,8 @@ static struct dev_pm_domain omap_device_pm_domain = { SET_RUNTIME_PM_OPS(_od_runtime_suspend, _od_runtime_resume, _od_runtime_idle) USE_PLATFORM_PM_SLEEP_OPS - SET_SYSTEM_SLEEP_PM_OPS(_od_suspend_noirq, _od_resume_noirq) + .suspend_noirq = _od_suspend_noirq, + .resume_noirq = _od_resume_noirq, } }; ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [POWER DOMAIN suspend callbacks] Observation. 2011-08-23 17:06 ` Kevin Hilman @ 2011-08-24 6:17 ` Santosh 2011-08-24 23:38 ` Kevin Hilman 0 siblings, 1 reply; 5+ messages in thread From: Santosh @ 2011-08-24 6:17 UTC (permalink / raw) To: Kevin Hilman Cc: Rafael J. Wysocki, Linux PM mailing list, linux-omap, Govindraj R On Tuesday 23 August 2011 10:36 PM, Kevin Hilman wrote: > Hi Santosh, > > Santosh<santosh.shilimkar@ti.com> writes: > >> Rafael, Kevin, >> >> On latest kernel( V3.1-rc1+), the subsystem(driver) suspend >> callbacks are not getting called because power domain callbcaks >> are populated. >> >> And as per commit 4d27e9dc{PM: Make power domain callbacks take >> precedence over subsystem ones}, it's expected bahavior. > > Correct. > >> Who is suppose to call the driver suspend callback? > > If populated, the PM domain callbacks should call the driver callbacks. > If there are no PM domain callbacks, then the subsystem (in this case, > the platform_bus) should be calling the driver callbacks. > >> Some drivers/subsystem would have state machine which needs to >> be suspended. >> >> Is the power domain suspend callback, suppose to take care of >> it ? If yes, then that seems to be missing for OMAP. > > Yup, there's a bug. They're not missing, just misplaced. ;) > > When adding the noirq callbacks to ensure devices are idled late in > suspend by omap_device, I the patch commited mistakenly uses > SET_SYSTEM_SLEEP_PM_OPS(), which sets the "normal" suspend/resume > handlers and not the noirq handlers. > > Can you try the patch below? I only briefly tested it on omap3/n900 so > far. > The patch works like charm. > This populates most of the PM domain methods with the same ones used by > the subystem (platform_bus) and only overrides the noirq methods with > custom versions. This patch should make all the driver's suspend/resume > methods be called as expected. > > After a bit more sanitiy testing, I'll post a real patch for the -rc > series. > Great. Regards Santosh ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [POWER DOMAIN suspend callbacks] Observation. 2011-08-24 6:17 ` Santosh @ 2011-08-24 23:38 ` Kevin Hilman 0 siblings, 0 replies; 5+ messages in thread From: Kevin Hilman @ 2011-08-24 23:38 UTC (permalink / raw) To: Santosh; +Cc: Rafael J. Wysocki, Linux PM mailing list, linux-omap, Govindraj R Santosh <santosh.shilimkar@ti.com> writes: > On Tuesday 23 August 2011 10:36 PM, Kevin Hilman wrote: >> Hi Santosh, >> >> Santosh<santosh.shilimkar@ti.com> writes: >> >>> Rafael, Kevin, >>> >>> On latest kernel( V3.1-rc1+), the subsystem(driver) suspend >>> callbacks are not getting called because power domain callbcaks >>> are populated. >>> >>> And as per commit 4d27e9dc{PM: Make power domain callbacks take >>> precedence over subsystem ones}, it's expected bahavior. >> >> Correct. >> >>> Who is suppose to call the driver suspend callback? >> >> If populated, the PM domain callbacks should call the driver callbacks. >> If there are no PM domain callbacks, then the subsystem (in this case, >> the platform_bus) should be calling the driver callbacks. >> >>> Some drivers/subsystem would have state machine which needs to >>> be suspended. >>> >>> Is the power domain suspend callback, suppose to take care of >>> it ? If yes, then that seems to be missing for OMAP. >> >> Yup, there's a bug. They're not missing, just misplaced. ;) >> >> When adding the noirq callbacks to ensure devices are idled late in >> suspend by omap_device, I the patch commited mistakenly uses >> SET_SYSTEM_SLEEP_PM_OPS(), which sets the "normal" suspend/resume >> handlers and not the noirq handlers. >> >> Can you try the patch below? I only briefly tested it on omap3/n900 so >> far. >> > The patch works like charm. Thanks, I'll add a tested-by for you. Kevin ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-08-24 23:38 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-08-23 14:19 [POWER DOMAIN suspend callbacks] Observation Santosh 2011-08-23 15:01 ` Govindraj 2011-08-23 17:06 ` Kevin Hilman 2011-08-24 6:17 ` Santosh 2011-08-24 23:38 ` Kevin Hilman
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox