From: "Grygorii.Strashko@linaro.org" <grygorii.strashko@linaro.org>
To: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>,
nm@ti.com, sumit.semwal@linaro.org, linux-omap@vger.kernel.org,
kishon@ti.com, linux-fbdev@vger.kernel.org
Subject: Re: [PATCH] omapdss: extend pm notifier to handle hibernation
Date: Fri, 20 Mar 2015 14:57:09 +0000 [thread overview]
Message-ID: <550C3545.8060702@linaro.org> (raw)
In-Reply-To: <550C108E.3020907@ti.com>
Hi Tomi,
On 03/20/2015 02:20 PM, Tomi Valkeinen wrote:
> On 25/02/15 19:03, grygorii.strashko@linaro.org wrote:
>> From: Grygorii Strashko <Grygorii.Strashko@linaro.org>
>>
>> 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@linaro.org>
>> ---
>> 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:
[ 3.642499] Freezing user space processes ...
[ 3.647029] mmcblk1boot1: unknown partition table
[ 3.647043] (elapsed 0.000 seconds) done.
[ 3.686414] mmcblk1boot0: unknown partition table
[ 3.714552] PM: Using 1 thread(s) for decompression.
[ 3.714552] PM: Loading and decompressing image data (144641 pages)...
[ 4.520388] PM: Image loading progress: 0%
[ 5.153715] PM: Image loading progress: 10%
[ 5.847731] PM: Image loading progress: 20%
[ 6.622024] PM: Image loading progress: 30%
[ 7.023830] PM: Image loading progress: 40%
[ 7.455959] PM: Image loading progress: 50%
[ 8.137186] PM: Image loading progress: 60%
[ 8.567899] PM: Image loading progress: 70%
[ 9.670371] PM: Image loading progress: 80%
[ 10.130646] PM: Image loading progress: 90%
[ 10.525035] PM: Image loading progress: 100%
[ 10.529565] PM: Image loading done.
[ 10.533262] PM: Read 578564 kbytes in 6.80 seconds (85.08 MB/s)
[ 10.545313] Suspending console(s) (use no_console_suspend to debug)
[ 193.721284] PM: freeze of devices complete after 7.891 msecs
[ 193.722618] PM: late freeze of devices complete after 1.325 msecs
[ 193.723969] PM: noirq freeze of devices complete after 1.343 msecs
[ 193.724133] Disabling non-boot CPUs ...
[ 193.724792] CPU1: shutdown
[ 193.725387] PM: Creating hibernation image:
[ 193.725387] PM: Need to copy 144499 pages
[ 193.725439] Enabling non-boot CPUs ...
[ 193.725783] CPU1: smp_ops.cpu_die() returned, trying to resuscitate
[ 193.725790] CPU1: Booted secondary processor
[ 193.726069] CPU1 is up
[ 193.743772] PM: noirq restore of devices complete after 17.693 msecs
[ 193.744691] PM: early restore of devices complete after 0.634 msecs
[ 193.951382] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951389] [drm:omap_plane_error_irq] *ERROR* gfx: errors: 00000040
[ 193.951402] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951413] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951424] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951435] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951445] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951455] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951465] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951475] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951484] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951567] omap_l3_noc 44000000.ocp: L3 application error: target 2 mod:1 (unclearable)
[ 193.951605] omap_l3_noc 44000000.ocp: L3 debug error: target 2 mod:1 (unclearable)
[ 194.293226] ata1: SATA link down (SStatus 0 SControl 300)
[ 194.560684] PM: restore of devices complete after 610.740 msecs
--
regards,
-grygorii
WARNING: multiple messages have this Message-ID (diff)
From: "Grygorii.Strashko@linaro.org" <grygorii.strashko@linaro.org>
To: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>,
nm@ti.com, sumit.semwal@linaro.org, linux-omap@vger.kernel.org,
kishon@ti.com, linux-fbdev@vger.kernel.org
Subject: Re: [PATCH] omapdss: extend pm notifier to handle hibernation
Date: Fri, 20 Mar 2015 16:57:09 +0200 [thread overview]
Message-ID: <550C3545.8060702@linaro.org> (raw)
In-Reply-To: <550C108E.3020907@ti.com>
Hi Tomi,
On 03/20/2015 02:20 PM, Tomi Valkeinen wrote:
> On 25/02/15 19:03, grygorii.strashko@linaro.org wrote:
>> From: Grygorii Strashko <Grygorii.Strashko@linaro.org>
>>
>> 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@linaro.org>
>> ---
>> 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:
[ 3.642499] Freezing user space processes ...
[ 3.647029] mmcblk1boot1: unknown partition table
[ 3.647043] (elapsed 0.000 seconds) done.
[ 3.686414] mmcblk1boot0: unknown partition table
[ 3.714552] PM: Using 1 thread(s) for decompression.
[ 3.714552] PM: Loading and decompressing image data (144641 pages)...
[ 4.520388] PM: Image loading progress: 0%
[ 5.153715] PM: Image loading progress: 10%
[ 5.847731] PM: Image loading progress: 20%
[ 6.622024] PM: Image loading progress: 30%
[ 7.023830] PM: Image loading progress: 40%
[ 7.455959] PM: Image loading progress: 50%
[ 8.137186] PM: Image loading progress: 60%
[ 8.567899] PM: Image loading progress: 70%
[ 9.670371] PM: Image loading progress: 80%
[ 10.130646] PM: Image loading progress: 90%
[ 10.525035] PM: Image loading progress: 100%
[ 10.529565] PM: Image loading done.
[ 10.533262] PM: Read 578564 kbytes in 6.80 seconds (85.08 MB/s)
[ 10.545313] Suspending console(s) (use no_console_suspend to debug)
[ 193.721284] PM: freeze of devices complete after 7.891 msecs
[ 193.722618] PM: late freeze of devices complete after 1.325 msecs
[ 193.723969] PM: noirq freeze of devices complete after 1.343 msecs
[ 193.724133] Disabling non-boot CPUs ...
[ 193.724792] CPU1: shutdown
[ 193.725387] PM: Creating hibernation image:
[ 193.725387] PM: Need to copy 144499 pages
[ 193.725439] Enabling non-boot CPUs ...
[ 193.725783] CPU1: smp_ops.cpu_die() returned, trying to resuscitate
[ 193.725790] CPU1: Booted secondary processor
[ 193.726069] CPU1 is up
[ 193.743772] PM: noirq restore of devices complete after 17.693 msecs
[ 193.744691] PM: early restore of devices complete after 0.634 msecs
[ 193.951382] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951389] [drm:omap_plane_error_irq] *ERROR* gfx: errors: 00000040
[ 193.951402] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951413] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951424] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951435] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951445] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951455] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951465] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951475] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951484] [drm:omap_crtc_error_irq] *ERROR* tv: errors: 00008000
[ 193.951567] omap_l3_noc 44000000.ocp: L3 application error: target 2 mod:1 (unclearable)
[ 193.951605] omap_l3_noc 44000000.ocp: L3 debug error: target 2 mod:1 (unclearable)
[ 194.293226] ata1: SATA link down (SStatus 0 SControl 300)
[ 194.560684] PM: restore of devices complete after 610.740 msecs
--
regards,
-grygorii
next prev parent reply other threads:[~2015-03-20 14:57 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-25 17:03 [PATCH] omapdss: extend pm notifier to handle hibernation grygorii.strashko
2015-02-25 17:03 ` grygorii.strashko
2015-03-20 12:20 ` Tomi Valkeinen
2015-03-20 12:20 ` Tomi Valkeinen
2015-03-20 14:57 ` Grygorii.Strashko@linaro.org [this message]
2015-03-20 14:57 ` Grygorii.Strashko@linaro.org
2015-03-20 15:21 ` Tomi Valkeinen
2015-03-20 15:21 ` Tomi Valkeinen
2015-03-20 17:19 ` Grygorii.Strashko@linaro.org
2015-03-20 17:19 ` Grygorii.Strashko@linaro.org
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=550C3545.8060702@linaro.org \
--to=grygorii.strashko@linaro.org \
--cc=kishon@ti.com \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=nm@ti.com \
--cc=plagnioj@jcrosoft.com \
--cc=sumit.semwal@linaro.org \
--cc=tomi.valkeinen@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.