All of lore.kernel.org
 help / color / mirror / Atom feed
From: a.hajda@samsung.com (Andrzej Hajda)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2] imx-drm: imx-drm-core: add suspend/resume support
Date: Mon, 18 Aug 2014 15:11:54 +0200	[thread overview]
Message-ID: <53F1FB9A.4070305@samsung.com> (raw)
In-Reply-To: <53F1F866.1@samsung.com>

On 08/18/2014 02:58 PM, Andrzej Hajda wrote:
> On 08/18/2014 02:38 PM, Shawn Guo wrote:
>> Hi Andrzej,
>>
>> On Mon, Aug 18, 2014 at 09:43:19AM +0200, Andrzej Hajda wrote:
>>>> diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c
>>>> index def8280d7ee6..ab41152089a3 100644
>>>> --- a/drivers/staging/imx-drm/imx-drm-core.c
>>>> +++ b/drivers/staging/imx-drm/imx-drm-core.c
>>>> @@ -696,6 +696,29 @@ static int imx_drm_platform_remove(struct platform_device *pdev)
>>>>  	return 0;
>>>>  }
>>>>  
>>>> +#ifdef CONFIG_PM_SLEEP
>>>> +static int imx_drm_suspend(struct device *dev)
>>>> +{
>>>> +	struct drm_device *drm_dev = dev_get_drvdata(dev);
>>>> +
>>>> +	drm_kms_helper_poll_disable(drm_dev);
>>> drm_dev can be NULL here. You should add check before.
>> The drvdata is set to drm_dev in drm_driver .load() hook.  So are you
>> saying that .suspend() hook could possibly be called before the .load()
>> hook gets called?
> .load hook is called after all components are attached to the master.
> So if suspend happen after probe of the master and before attaching the last
> component you will have NULL here, I guess.

Probably you can test it by disabling driver for one of drm components
and putting board in sleep mode.

Moreover I guess drvdata should be cleaned in .unload callback,
otherwise if for some reason one of components will be detached and suspend
happens drvdata will contain invalid pointer.

Regards
Andrzej

>
> Regards
> Andrzej
>
>> Shawn
>>
>>>> +
>>>> +	return 0;
>>>> +}
>>>> +
>>>> +static int imx_drm_resume(struct device *dev)
>>>> +{
>>>> +	struct drm_device *drm_dev = dev_get_drvdata(dev);
>>>> +
>>>> +	drm_helper_resume_force_mode(drm_dev);
>>> ditto

WARNING: multiple messages have this Message-ID (diff)
From: Andrzej Hajda <a.hajda@samsung.com>
To: Shawn Guo <shawn.guo@freescale.com>
Cc: Russell King <linux@arm.linux.org.uk>,
	dri-devel@lists.freedesktop.org, kernel@pengutronix.de,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2] imx-drm: imx-drm-core: add suspend/resume support
Date: Mon, 18 Aug 2014 15:11:54 +0200	[thread overview]
Message-ID: <53F1FB9A.4070305@samsung.com> (raw)
In-Reply-To: <53F1F866.1@samsung.com>

On 08/18/2014 02:58 PM, Andrzej Hajda wrote:
> On 08/18/2014 02:38 PM, Shawn Guo wrote:
>> Hi Andrzej,
>>
>> On Mon, Aug 18, 2014 at 09:43:19AM +0200, Andrzej Hajda wrote:
>>>> diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c
>>>> index def8280d7ee6..ab41152089a3 100644
>>>> --- a/drivers/staging/imx-drm/imx-drm-core.c
>>>> +++ b/drivers/staging/imx-drm/imx-drm-core.c
>>>> @@ -696,6 +696,29 @@ static int imx_drm_platform_remove(struct platform_device *pdev)
>>>>  	return 0;
>>>>  }
>>>>  
>>>> +#ifdef CONFIG_PM_SLEEP
>>>> +static int imx_drm_suspend(struct device *dev)
>>>> +{
>>>> +	struct drm_device *drm_dev = dev_get_drvdata(dev);
>>>> +
>>>> +	drm_kms_helper_poll_disable(drm_dev);
>>> drm_dev can be NULL here. You should add check before.
>> The drvdata is set to drm_dev in drm_driver .load() hook.  So are you
>> saying that .suspend() hook could possibly be called before the .load()
>> hook gets called?
> .load hook is called after all components are attached to the master.
> So if suspend happen after probe of the master and before attaching the last
> component you will have NULL here, I guess.

Probably you can test it by disabling driver for one of drm components
and putting board in sleep mode.

Moreover I guess drvdata should be cleaned in .unload callback,
otherwise if for some reason one of components will be detached and suspend
happens drvdata will contain invalid pointer.

Regards
Andrzej

>
> Regards
> Andrzej
>
>> Shawn
>>
>>>> +
>>>> +	return 0;
>>>> +}
>>>> +
>>>> +static int imx_drm_resume(struct device *dev)
>>>> +{
>>>> +	struct drm_device *drm_dev = dev_get_drvdata(dev);
>>>> +
>>>> +	drm_helper_resume_force_mode(drm_dev);
>>> ditto

  reply	other threads:[~2014-08-18 13:11 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-25  6:20 [PATCH v2] imx-drm: imx-drm-core: add suspend/resume support Shawn Guo
2014-07-25  6:20 ` Shawn Guo
2014-08-18  6:25 ` Shawn Guo
2014-08-18  6:25   ` Shawn Guo
2014-08-19  8:08   ` Russell King - ARM Linux
2014-08-19  8:08     ` Russell King - ARM Linux
2014-08-19  9:16     ` Greg KH
2014-08-19  9:16       ` Greg KH
2014-08-19  9:42       ` Russell King - ARM Linux
2014-08-19  9:42         ` Russell King - ARM Linux
2014-08-18  7:43 ` Andrzej Hajda
2014-08-18  7:43   ` Andrzej Hajda
2014-08-18 12:38   ` Shawn Guo
2014-08-18 12:38     ` Shawn Guo
2014-08-18 12:58     ` Andrzej Hajda
2014-08-18 12:58       ` Andrzej Hajda
2014-08-18 13:11       ` Andrzej Hajda [this message]
2014-08-18 13:11         ` Andrzej Hajda
2014-08-19  7:21         ` Shawn Guo
2014-08-19  7:21           ` Shawn Guo

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=53F1FB9A.4070305@samsung.com \
    --to=a.hajda@samsung.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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.