On Thu, Nov 28, 2019 at 5:03 PM Thierry Reding <thierry.reding@xxxxxxxxx> wrote: > > From: Thierry Reding <treding@xxxxxxxxxx> > > This is a result of looking into a more formal way of doing what was > proposed here: > > http://patchwork.ozlabs.org/patch/1145363/ > > The Tegra DRM driver is written such that runtime PM controls all > aspects of bringing up and shutting down the hardware associated with a > display pipeline. This works very nicely with the DRM/KMS atomic mode- > setting framework that has very rigorous call sequences. There are also > suspend/resume helpers for system sleep that are built on top of these > generic helpers and that cause the same code sequences to be run as if > users had simply chosen to disable all display pipelines at normal > runtime. > > The current behaviour of the PM core to disallow runtime suspend/resume > during system sleep gets in the way of this because the devices do not > in fact runtime suspend/resume during that time. Most of the time this > causes display outputs to malfunction upon resume. > > Now, there are good reasons for preventing runtime suspend during system > sleep, as given in commit eea3fc0357eb ("PCI / PM: Detect early wakeup > in pci_pm_prepare()") that originally introduced this mechanism. There > can, however, also be cases, like the one described above, where it is > safe to allow this. Add a flag and a set of helpers to set or clear that > new flag so that drivers that know it will be safe to runtime suspend a > device at system sleep time can mark the device as such. > > If a device has the flag set, the PM core will no longer take a runtime > PM reference for it, thus allowing the device to runtime suspend at the > expected time. What about sprinkling tons of device_links all over this to make sure system suspend/resume is done in the same order too? Slightly less neat from a driver pov, but I think that should get the job done. Maybe could even do a convenience function which converts a dt phandle (or whatever that was called again) into a device_link? -Daniel > Thierry > > Thierry Reding (2): > PM / runtime: Allow drivers to override runtime PM behaviour on sleep > drm/tegra: Allow runtime suspend on system sleep > > drivers/base/power/main.c | 6 ++++-- > drivers/base/power/runtime.c | 16 ++++++++++++++++ > drivers/gpu/drm/tegra/dc.c | 1 + > drivers/gpu/drm/tegra/dsi.c | 1 + > drivers/gpu/drm/tegra/hdmi.c | 1 + > drivers/gpu/drm/tegra/hub.c | 1 + > drivers/gpu/drm/tegra/sor.c | 1 + > include/linux/pm.h | 1 + > include/linux/pm_runtime.h | 2 ++ > 9 files changed, 28 insertions(+), 2 deletions(-) > > -- > 2.23.0 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch