ARM: OMAP2+: omap_device: drop broken RPM status update from suspend_noirq
Since commita8636c8964
("PM / Runtime: Don't allow to suspend a device with an active child"), which went into 4.10, it is no longer permitted to set RPM_SUSPENDED state for a device with active children (unless power.ignore_children is set). This specifically means that the attempts to do just that from the omap pm-domain suspend_noirq callback have since been failing whenever a child is active, for example: am335x-usb-childs 47400000.usb: runtime PM trying to suspend device but active child Silence this warning by dropping the broken pm_runtime_set_suspended() call from the omap suspend_noirq callback along with the redundant pm_runtime_set_active() in resume_noirq. This effectively reverts commit3522bf7bfa
("ARM: OMAP2+: omap_device: maintain sane runtime pm status around suspend/resume"), which started updating the RPM state after the runtime_suspend callback (!) for active omap devices had been called during system suspend. The rationale was that a later pm_runtime_get_sync() would then fail (even after runtime pm had been disabled) and that this in turn would avoid any external aborts when accessing registers with clocks disabled. (See also commit6f3c77b040
("PM / Runtime: let rpm_resume() succeed if RPM_ACTIVE, even when disabled, v2"). But during the suspend_noirq phase all children would already have been suspended and their drivers would specifically not attempt any further register accesses. And if this was all just a workaround for random device drivers doing cross-tree calls during system suspend, those drivers should be fixed and updated to explicitly model such dependencies using device-links instead (and either way, any such calls have been causing crashes since 4.10). Fixes:3522bf7bfa
("ARM: OMAP2+: omap_device: maintain sane runtime pm status around suspend/resume") Fixes:a8636c8964
("PM / Runtime: Don't allow to suspend a device with an active child") Cc: Alan Stern <stern@rowland.harvard.edu> Cc: Dave Gerlach <d-gerlach@ti.com> Cc: Kevin Hilman <khilman@baylibre.com> Cc: Nishanth Menon <nm@ti.com> Cc: Rafael J. Wysocki <rjw@rjwysocki.net> Cc: Tony Lindgren <tony@atomide.com> Cc: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Johan Hovold <johan@kernel.org> Tested-by: Grygorii Strashko <grygorii.strashko@ti.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
Родитель
672647afab
Коммит
90de9634a5
|
@ -672,7 +672,6 @@ static int _od_suspend_noirq(struct device *dev)
|
|||
|
||||
if (!ret && !pm_runtime_status_suspended(dev)) {
|
||||
if (pm_generic_runtime_suspend(dev) == 0) {
|
||||
pm_runtime_set_suspended(dev);
|
||||
omap_device_idle(pdev);
|
||||
od->flags |= OMAP_DEVICE_SUSPENDED;
|
||||
}
|
||||
|
@ -689,15 +688,6 @@ static int _od_resume_noirq(struct device *dev)
|
|||
if (od->flags & OMAP_DEVICE_SUSPENDED) {
|
||||
od->flags &= ~OMAP_DEVICE_SUSPENDED;
|
||||
omap_device_enable(pdev);
|
||||
/*
|
||||
* XXX: we run before core runtime pm has resumed itself. At
|
||||
* this point in time, we just restore the runtime pm state and
|
||||
* considering symmetric operations in resume, we donot expect
|
||||
* to fail. If we failed, something changed in core runtime_pm
|
||||
* framework OR some device driver messed things up, hence, WARN
|
||||
*/
|
||||
WARN(pm_runtime_set_active(dev),
|
||||
"Could not set %s runtime state active\n", dev_name(dev));
|
||||
pm_generic_runtime_resume(dev);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче