All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Gaignard <benjamin.gaignard@linaro.org>
To: Philippe CORNU <philippe.cornu@st.com>
Cc: Yannick FERTRE <yannick.fertre@st.com>,
	Vincent ABRIOU <vincent.abriou@st.com>,
	David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
	Maxime Coquelin <mcoquelin.stm32@gmail.com>,
	Alexandre TORGUE <alexandre.torgue@st.com>,
	"dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>,
	"linux-stm32@st-md-mailman.stormreply.com" 
	<linux-stm32@st-md-mailman.stormreply.com>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] drm/stm: add sleep power management
Date: Mon, 1 Apr 2019 11:07:25 +0200	[thread overview]
Message-ID: <CA+M3ks6Pz2z7OLFDRa4BCFqYLtqo3o5h0+bCS+L45UzgnuM_qw@mail.gmail.com> (raw)
In-Reply-To: <2ebfb124-08dc-4d5f-9e12-2afc5295c0f6@st.com>

Le mar. 26 mars 2019 à 14:02, Philippe CORNU <philippe.cornu@st.com> a écrit :
>
> (+ Benjamin)
>
> Dear Yannick,
> Many thanks for your patch.
> Acked-by: Philippe Cornu <philippe.cornu@st.com>
>
> Dear Benjamin,
> May I ask you please to merge this patch + "drm/stm: dw_mipi_dsi-stm:
> add sleep power management" on drm-misc, if you agree of course and when
> you think it is the right time (next week?)
> Big thanks,

Applied on drm-misc-next.

Benjamin

>
> Philippe :-)
>
>
> On 3/21/19 9:15 AM, Yannick Fertré wrote:
> > Implements system sleep power management ops.
> >
> > Signed-off-by: Yannick Fertré <yannick.fertre@st.com>
> > ---
> >   drivers/gpu/drm/stm/drv.c  | 35 +++++++++++++++++++++++++++++++++++
> >   drivers/gpu/drm/stm/ltdc.c | 24 ++++++++++++++++++++++++
> >   drivers/gpu/drm/stm/ltdc.h |  3 +++
> >   3 files changed, 62 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
> > index 0a7f933..5834ef5 100644
> > --- a/drivers/gpu/drm/stm/drv.c
> > +++ b/drivers/gpu/drm/stm/drv.c
> > @@ -129,6 +129,40 @@ static void drv_unload(struct drm_device *ddev)
> >       drm_mode_config_cleanup(ddev);
> >   }
> >
> > +static __maybe_unused int drv_suspend(struct device *dev)
> > +{
> > +     struct drm_device *ddev = dev_get_drvdata(dev);
> > +     struct ltdc_device *ldev = ddev->dev_private;
> > +     struct drm_atomic_state *state;
> > +
> > +     drm_kms_helper_poll_disable(ddev);
> > +     state = drm_atomic_helper_suspend(ddev);
> > +     if (IS_ERR(state)) {
> > +             drm_kms_helper_poll_enable(ddev);
> > +             return PTR_ERR(state);
> > +     }
> > +     ldev->suspend_state = state;
> > +     ltdc_suspend(ddev);
> > +
> > +     return 0;
> > +}
> > +
> > +static __maybe_unused int drv_resume(struct device *dev)
> > +{
> > +     struct drm_device *ddev = dev_get_drvdata(dev);
> > +     struct ltdc_device *ldev = ddev->dev_private;
> > +
> > +     ltdc_resume(ddev);
> > +     drm_atomic_helper_resume(ddev, ldev->suspend_state);
> > +     drm_kms_helper_poll_enable(ddev);
> > +
> > +     return 0;
> > +}
> > +
> > +static const struct dev_pm_ops drv_pm_ops = {
> > +     SET_SYSTEM_SLEEP_PM_OPS(drv_suspend, drv_resume)
> > +};
> > +
> >   static int stm_drm_platform_probe(struct platform_device *pdev)
> >   {
> >       struct device *dev = &pdev->dev;
> > @@ -186,6 +220,7 @@ static struct platform_driver stm_drm_platform_driver = {
> >       .driver = {
> >               .name = "stm32-display",
> >               .of_match_table = drv_dt_ids,
> > +             .pm = &drv_pm_ops,
> >       },
> >   };
> >
> > diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> > index b1741a9..32fd6a3 100644
> > --- a/drivers/gpu/drm/stm/ltdc.c
> > +++ b/drivers/gpu/drm/stm/ltdc.c
> > @@ -1062,6 +1062,30 @@ static int ltdc_get_caps(struct drm_device *ddev)
> >       return 0;
> >   }
> >
> > +void ltdc_suspend(struct drm_device *ddev)
> > +{
> > +     struct ltdc_device *ldev = ddev->dev_private;
> > +
> > +     DRM_DEBUG_DRIVER("\n");
> > +     clk_disable_unprepare(ldev->pixel_clk);
> > +}
> > +
> > +int ltdc_resume(struct drm_device *ddev)
> > +{
> > +     struct ltdc_device *ldev = ddev->dev_private;
> > +     int ret;
> > +
> > +     DRM_DEBUG_DRIVER("\n");
> > +
> > +     ret = clk_prepare_enable(ldev->pixel_clk);
> > +     if (ret) {
> > +             DRM_ERROR("failed to enable pixel clock (%d)\n", ret);
> > +             return ret;
> > +     }
> > +
> > +     return 0;
> > +}
> > +
> >   int ltdc_load(struct drm_device *ddev)
> >   {
> >       struct platform_device *pdev = to_platform_device(ddev->dev);
> > diff --git a/drivers/gpu/drm/stm/ltdc.h b/drivers/gpu/drm/stm/ltdc.h
> > index e46f477..a1ad0ae 100644
> > --- a/drivers/gpu/drm/stm/ltdc.h
> > +++ b/drivers/gpu/drm/stm/ltdc.h
> > @@ -36,6 +36,7 @@ struct ltdc_device {
> >       u32 error_status;
> >       u32 irq_status;
> >       struct fps_info plane_fpsi[LTDC_MAX_LAYER];
> > +     struct drm_atomic_state *suspend_state;
> >   };
> >
> >   bool ltdc_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe,
> > @@ -45,5 +46,7 @@ bool ltdc_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe,
> >
> >   int ltdc_load(struct drm_device *ddev);
> >   void ltdc_unload(struct drm_device *ddev);
> > +void ltdc_suspend(struct drm_device *ddev);
> > +int ltdc_resume(struct drm_device *ddev);
> >
> >   #endif
> >

WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Gaignard <benjamin.gaignard@linaro.org>
To: Philippe CORNU <philippe.cornu@st.com>
Cc: Daniel Vetter <daniel@ffwll.ch>, David Airlie <airlied@linux.ie>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>,
	Yannick FERTRE <yannick.fertre@st.com>,
	Maxime Coquelin <mcoquelin.stm32@gmail.com>,
	Vincent ABRIOU <vincent.abriou@st.com>,
	"linux-stm32@st-md-mailman.stormreply.com"
	<linux-stm32@st-md-mailman.stormreply.com>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	Alexandre TORGUE <alexandre.torgue@st.com>
Subject: Re: [PATCH] drm/stm: add sleep power management
Date: Mon, 1 Apr 2019 11:07:25 +0200	[thread overview]
Message-ID: <CA+M3ks6Pz2z7OLFDRa4BCFqYLtqo3o5h0+bCS+L45UzgnuM_qw@mail.gmail.com> (raw)
In-Reply-To: <2ebfb124-08dc-4d5f-9e12-2afc5295c0f6@st.com>

Le mar. 26 mars 2019 à 14:02, Philippe CORNU <philippe.cornu@st.com> a écrit :
>
> (+ Benjamin)
>
> Dear Yannick,
> Many thanks for your patch.
> Acked-by: Philippe Cornu <philippe.cornu@st.com>
>
> Dear Benjamin,
> May I ask you please to merge this patch + "drm/stm: dw_mipi_dsi-stm:
> add sleep power management" on drm-misc, if you agree of course and when
> you think it is the right time (next week?)
> Big thanks,

Applied on drm-misc-next.

Benjamin

>
> Philippe :-)
>
>
> On 3/21/19 9:15 AM, Yannick Fertré wrote:
> > Implements system sleep power management ops.
> >
> > Signed-off-by: Yannick Fertré <yannick.fertre@st.com>
> > ---
> >   drivers/gpu/drm/stm/drv.c  | 35 +++++++++++++++++++++++++++++++++++
> >   drivers/gpu/drm/stm/ltdc.c | 24 ++++++++++++++++++++++++
> >   drivers/gpu/drm/stm/ltdc.h |  3 +++
> >   3 files changed, 62 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
> > index 0a7f933..5834ef5 100644
> > --- a/drivers/gpu/drm/stm/drv.c
> > +++ b/drivers/gpu/drm/stm/drv.c
> > @@ -129,6 +129,40 @@ static void drv_unload(struct drm_device *ddev)
> >       drm_mode_config_cleanup(ddev);
> >   }
> >
> > +static __maybe_unused int drv_suspend(struct device *dev)
> > +{
> > +     struct drm_device *ddev = dev_get_drvdata(dev);
> > +     struct ltdc_device *ldev = ddev->dev_private;
> > +     struct drm_atomic_state *state;
> > +
> > +     drm_kms_helper_poll_disable(ddev);
> > +     state = drm_atomic_helper_suspend(ddev);
> > +     if (IS_ERR(state)) {
> > +             drm_kms_helper_poll_enable(ddev);
> > +             return PTR_ERR(state);
> > +     }
> > +     ldev->suspend_state = state;
> > +     ltdc_suspend(ddev);
> > +
> > +     return 0;
> > +}
> > +
> > +static __maybe_unused int drv_resume(struct device *dev)
> > +{
> > +     struct drm_device *ddev = dev_get_drvdata(dev);
> > +     struct ltdc_device *ldev = ddev->dev_private;
> > +
> > +     ltdc_resume(ddev);
> > +     drm_atomic_helper_resume(ddev, ldev->suspend_state);
> > +     drm_kms_helper_poll_enable(ddev);
> > +
> > +     return 0;
> > +}
> > +
> > +static const struct dev_pm_ops drv_pm_ops = {
> > +     SET_SYSTEM_SLEEP_PM_OPS(drv_suspend, drv_resume)
> > +};
> > +
> >   static int stm_drm_platform_probe(struct platform_device *pdev)
> >   {
> >       struct device *dev = &pdev->dev;
> > @@ -186,6 +220,7 @@ static struct platform_driver stm_drm_platform_driver = {
> >       .driver = {
> >               .name = "stm32-display",
> >               .of_match_table = drv_dt_ids,
> > +             .pm = &drv_pm_ops,
> >       },
> >   };
> >
> > diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> > index b1741a9..32fd6a3 100644
> > --- a/drivers/gpu/drm/stm/ltdc.c
> > +++ b/drivers/gpu/drm/stm/ltdc.c
> > @@ -1062,6 +1062,30 @@ static int ltdc_get_caps(struct drm_device *ddev)
> >       return 0;
> >   }
> >
> > +void ltdc_suspend(struct drm_device *ddev)
> > +{
> > +     struct ltdc_device *ldev = ddev->dev_private;
> > +
> > +     DRM_DEBUG_DRIVER("\n");
> > +     clk_disable_unprepare(ldev->pixel_clk);
> > +}
> > +
> > +int ltdc_resume(struct drm_device *ddev)
> > +{
> > +     struct ltdc_device *ldev = ddev->dev_private;
> > +     int ret;
> > +
> > +     DRM_DEBUG_DRIVER("\n");
> > +
> > +     ret = clk_prepare_enable(ldev->pixel_clk);
> > +     if (ret) {
> > +             DRM_ERROR("failed to enable pixel clock (%d)\n", ret);
> > +             return ret;
> > +     }
> > +
> > +     return 0;
> > +}
> > +
> >   int ltdc_load(struct drm_device *ddev)
> >   {
> >       struct platform_device *pdev = to_platform_device(ddev->dev);
> > diff --git a/drivers/gpu/drm/stm/ltdc.h b/drivers/gpu/drm/stm/ltdc.h
> > index e46f477..a1ad0ae 100644
> > --- a/drivers/gpu/drm/stm/ltdc.h
> > +++ b/drivers/gpu/drm/stm/ltdc.h
> > @@ -36,6 +36,7 @@ struct ltdc_device {
> >       u32 error_status;
> >       u32 irq_status;
> >       struct fps_info plane_fpsi[LTDC_MAX_LAYER];
> > +     struct drm_atomic_state *suspend_state;
> >   };
> >
> >   bool ltdc_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe,
> > @@ -45,5 +46,7 @@ bool ltdc_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe,
> >
> >   int ltdc_load(struct drm_device *ddev);
> >   void ltdc_unload(struct drm_device *ddev);
> > +void ltdc_suspend(struct drm_device *ddev);
> > +int ltdc_resume(struct drm_device *ddev);
> >
> >   #endif
> >

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2019-04-01  9:07 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-21  8:15 [PATCH] drm/stm: add sleep power management Yannick Fertré
2019-03-21  8:15 ` Yannick Fertré
2019-03-21  8:15 ` Yannick Fertré
2019-03-26 13:02 ` Philippe CORNU
2019-03-26 13:02   ` Philippe CORNU
2019-03-26 13:02   ` Philippe CORNU
2019-04-01  9:07   ` Benjamin Gaignard [this message]
2019-04-01  9:07     ` Benjamin Gaignard
2019-04-01  9:07     ` Benjamin Gaignard

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=CA+M3ks6Pz2z7OLFDRa4BCFqYLtqo3o5h0+bCS+L45UzgnuM_qw@mail.gmail.com \
    --to=benjamin.gaignard@linaro.org \
    --cc=airlied@linux.ie \
    --cc=alexandre.torgue@st.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-stm32@st-md-mailman.stormreply.com \
    --cc=mcoquelin.stm32@gmail.com \
    --cc=philippe.cornu@st.com \
    --cc=vincent.abriou@st.com \
    --cc=yannick.fertre@st.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.