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
next prev parent 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: linkBe 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.