On 20/03/15 16:57, Grygorii.Strashko@xxxxxxxxxx wrote: > Hi Tomi, > > On 03/20/2015 02:20 PM, Tomi Valkeinen wrote: >> On 25/02/15 19:03, grygorii.strashko@xxxxxxxxxx wrote: >>> From: Grygorii Strashko <Grygorii.Strashko@xxxxxxxxxx> >>> >>> Add handling of missed events in omap_dss_pm_notif which are >>> needed to support hibernation (suspend to disk). >>> >>> Signed-off-by: Grygorii Strashko <Grygorii.Strashko@xxxxxxxxxx> >>> --- >>> drivers/video/fbdev/omap2/dss/core.c | 4 ++++ >>> 1 file changed, 4 insertions(+) >>> >>> diff --git a/drivers/video/fbdev/omap2/dss/core.c b/drivers/video/fbdev/omap2/dss/core.c >>> index 6b74f73..e60976a 100644 >>> --- a/drivers/video/fbdev/omap2/dss/core.c >>> +++ b/drivers/video/fbdev/omap2/dss/core.c >>> @@ -178,11 +178,15 @@ static int omap_dss_pm_notif(struct notifier_block *b, unsigned long v, void *d) >>> DSSDBG("pm notif %lu\n", v); >>> >>> switch (v) { >>> + case PM_HIBERNATION_PREPARE: >>> case PM_SUSPEND_PREPARE: >>> + case PM_RESTORE_PREPARE: >>> DSSDBG("suspending displays\n"); >>> return dss_suspend_all_devices(); >>> >>> case PM_POST_SUSPEND: >>> + case PM_POST_HIBERNATION: >>> + case PM_POST_RESTORE: >>> DSSDBG("resuming displays\n"); >>> return dss_resume_all_devices(); >>> >> >> Why suspend displays when PM_RESTORE_PREPARE happens? Why resume when >> PM_POST_RESTORE happens? > > We have following sequence when system is restored from hibernation: > - original kernel booted; > - late_initcall_sync(software_resume); > - pm_notifier_call_chain(PM_RESTORE_PREPARE); > - freeze_processes > - check & read hibernation image > - suspend all devices (.freeze()) > - jump to stored kernel > - restore devices > ... > > So, all devices should be in frozen/suspended state when we will jump to stored kernel > (device's state should be the same as before creating hib image). > > Without this patch I can see a lot of log messages like below: Yes, I am sure a fix is needed for hibernation. But I still don't quite understand PM_RESTORE_PREPARE and PM_POST_RESTORE. When we enter hibernation, there's only PM_HIBERNATION_PREPARE? When waking from hibernation, there's first PM_RESTORE_PREPARE, where we need to disable displays that were enabled during boot. Then either PM_POST_HIBERNATION if all went well, or PM_POST_RESTORE if there was an error, and in both cases we want to enable the displays? Tomi
Attachment:
signature.asc
Description: OpenPGP digital signature