* [DPU PATCH] drm/msm: Add pm_runtime_get/put calls to dpu [not found] <20180312200626.GW223881@art_vandelay> @ 2018-03-14 15:07 ` Sean Paul [not found] ` <20180314150718.254814-1-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> 0 siblings, 1 reply; 3+ messages in thread From: Sean Paul @ 2018-03-14 15:07 UTC (permalink / raw) To: freedreno, linux-arm-msm, dri-devel; +Cc: hoegsberg, abhinavk Ensure that pm_runtime is properly referenced/unreferenced when we need it. Signed-off-by: Sean Paul <seanpaul@chromium.org> --- Didn't get a response to my suggestion, so wrote the patch anyways. Thoughts? drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 3 +++ drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 2 ++ drivers/gpu/drm/msm/dpu_power_handle.c | 12 ++++++++---- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c index f1642d72469e..df6cbeb15cf5 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -3497,6 +3497,7 @@ static void dpu_crtc_disable(struct drm_crtc *crtc) /* disable clk & bw control until clk & bw properties are set */ cstate->bw_control = false; cstate->bw_split_vote = false; + pm_runtime_put_sync(crtc->dev->dev); mutex_unlock(&dpu_crtc->crtc_lock); } @@ -3523,6 +3524,8 @@ static void dpu_crtc_enable(struct drm_crtc *crtc, DPU_EVT32_VERBOSE(DRMID(crtc)); dpu_crtc = to_dpu_crtc(crtc); + pm_runtime_get_sync(crtc->dev->dev); + drm_for_each_encoder(encoder, crtc->dev) { if (encoder->crtc != crtc) continue; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index fb4de59d8ed1..90608a303aec 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -346,12 +346,14 @@ static void _dpu_debugfs_destroy(struct dpu_kms *dpu_kms) static int dpu_kms_enable_vblank(struct msm_kms *kms, struct drm_crtc *crtc) { + pm_runtime_get_sync(crtc->dev->dev); return dpu_crtc_vblank(crtc, true); } static void dpu_kms_disable_vblank(struct msm_kms *kms, struct drm_crtc *crtc) { dpu_crtc_vblank(crtc, false); + pm_runtime_put_sync(crtc->dev->dev); } static void dpu_kms_wait_for_frame_transfer_complete(struct msm_kms *kms, diff --git a/drivers/gpu/drm/msm/dpu_power_handle.c b/drivers/gpu/drm/msm/dpu_power_handle.c index 477ea9f2778c..a52be861117f 100644 --- a/drivers/gpu/drm/msm/dpu_power_handle.c +++ b/drivers/gpu/drm/msm/dpu_power_handle.c @@ -18,6 +18,7 @@ #include <linux/of.h> #include <linux/string.h> #include <linux/of_address.h> +#include <linux/pm_runtime.h> #include <linux/slab.h> #include <linux/mutex.h> #include <linux/of_platform.h> @@ -857,6 +858,9 @@ int dpu_power_resource_enable(struct dpu_power_handle *phandle, return -EINVAL; } + if (enable) + pm_runtime_get_sync(phandle->dev); + mp = &phandle->mp; mutex_lock(&phandle->phandle_lock); @@ -963,10 +967,6 @@ int dpu_power_resource_enable(struct dpu_power_handle *phandle, DPU_POWER_EVENT_POST_DISABLE); } -end: - mutex_unlock(&phandle->phandle_lock); - return rc; - clk_err: dpu_power_rsc_update(phandle, false); rsc_err: @@ -979,7 +979,11 @@ int dpu_power_resource_enable(struct dpu_power_handle *phandle, dpu_power_data_bus_update(&phandle->data_bus_handle[i], 0); data_bus_hdl_err: phandle->current_usecase_ndx = prev_usecase_ndx; + +end: mutex_unlock(&phandle->phandle_lock); + if (!enable) + pm_runtime_put_sync(phandle->dev); return rc; } -- Sean Paul, Software Engineer, Google / Chromium OS _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply related [flat|nested] 3+ messages in thread
[parent not found: <20180314150718.254814-1-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>]
* Re: [DPU PATCH] drm/msm: Add pm_runtime_get/put calls to dpu [not found] ` <20180314150718.254814-1-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> @ 2018-03-15 14:42 ` skolluku-sgV2jX0FEOL9JmXXK+q4OQ [not found] ` <94e53348399f60ace8da8281acdaaef0-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 0 siblings, 1 reply; 3+ messages in thread From: skolluku-sgV2jX0FEOL9JmXXK+q4OQ @ 2018-03-15 14:42 UTC (permalink / raw) To: Sean Paul Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, linux-arm-msm-owner-u79uwXL29TY76Z2rM5mHXA, robdclark-Re5JQEeQqe8AvxtiuMwx3w, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ, jsanka-sgV2jX0FEOL9JmXXK+q4OQ, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, hoegsberg-F7+t8E8rja9g9hUCZPvPmw On 2018-03-14 20:37, Sean Paul wrote: > Ensure that pm_runtime is properly referenced/unreferenced when we need > it. > > Signed-off-by: Sean Paul <seanpaul@chromium.org> > --- > > Didn't get a response to my suggestion, so wrote the patch anyways. > Thoughts? > This patch looks fine for now. The plan is to deprecate the downstream power_handler APIs going forward and rely entirely on runtime pm APIs. Currently, the pm_runtime_get/put API is used to control the MDSS main power supply (which is defined as a generic power domain). The idea is to extend the runtime_pm suspend/resume handlers to manage clock and bus resources so that the power_handler code can be trimmed off. Thanks, Sravanthi > > drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 3 +++ > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 2 ++ > drivers/gpu/drm/msm/dpu_power_handle.c | 12 ++++++++---- > 3 files changed, 13 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > index f1642d72469e..df6cbeb15cf5 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > @@ -3497,6 +3497,7 @@ static void dpu_crtc_disable(struct drm_crtc > *crtc) > /* disable clk & bw control until clk & bw properties are set */ > cstate->bw_control = false; > cstate->bw_split_vote = false; > + pm_runtime_put_sync(crtc->dev->dev); > > mutex_unlock(&dpu_crtc->crtc_lock); > } > @@ -3523,6 +3524,8 @@ static void dpu_crtc_enable(struct drm_crtc > *crtc, > DPU_EVT32_VERBOSE(DRMID(crtc)); > dpu_crtc = to_dpu_crtc(crtc); > > + pm_runtime_get_sync(crtc->dev->dev); > + > drm_for_each_encoder(encoder, crtc->dev) { > if (encoder->crtc != crtc) > continue; > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > index fb4de59d8ed1..90608a303aec 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > @@ -346,12 +346,14 @@ static void _dpu_debugfs_destroy(struct dpu_kms > *dpu_kms) > > static int dpu_kms_enable_vblank(struct msm_kms *kms, struct drm_crtc > *crtc) > { > + pm_runtime_get_sync(crtc->dev->dev); > return dpu_crtc_vblank(crtc, true); > } > > static void dpu_kms_disable_vblank(struct msm_kms *kms, struct > drm_crtc *crtc) > { > dpu_crtc_vblank(crtc, false); > + pm_runtime_put_sync(crtc->dev->dev); > } > > static void dpu_kms_wait_for_frame_transfer_complete(struct msm_kms > *kms, > diff --git a/drivers/gpu/drm/msm/dpu_power_handle.c > b/drivers/gpu/drm/msm/dpu_power_handle.c > index 477ea9f2778c..a52be861117f 100644 > --- a/drivers/gpu/drm/msm/dpu_power_handle.c > +++ b/drivers/gpu/drm/msm/dpu_power_handle.c > @@ -18,6 +18,7 @@ > #include <linux/of.h> > #include <linux/string.h> > #include <linux/of_address.h> > +#include <linux/pm_runtime.h> > #include <linux/slab.h> > #include <linux/mutex.h> > #include <linux/of_platform.h> > @@ -857,6 +858,9 @@ int dpu_power_resource_enable(struct > dpu_power_handle *phandle, > return -EINVAL; > } > > + if (enable) > + pm_runtime_get_sync(phandle->dev); > + > mp = &phandle->mp; > > mutex_lock(&phandle->phandle_lock); > @@ -963,10 +967,6 @@ int dpu_power_resource_enable(struct > dpu_power_handle *phandle, > DPU_POWER_EVENT_POST_DISABLE); > } > > -end: > - mutex_unlock(&phandle->phandle_lock); > - return rc; > - > clk_err: > dpu_power_rsc_update(phandle, false); > rsc_err: > @@ -979,7 +979,11 @@ int dpu_power_resource_enable(struct > dpu_power_handle *phandle, > dpu_power_data_bus_update(&phandle->data_bus_handle[i], 0); > data_bus_hdl_err: > phandle->current_usecase_ndx = prev_usecase_ndx; > + > +end: > mutex_unlock(&phandle->phandle_lock); > + if (!enable) > + pm_runtime_put_sync(phandle->dev); > return rc; > } _______________________________________________ Freedreno mailing list Freedreno@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/freedreno ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <94e53348399f60ace8da8281acdaaef0-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>]
* Re: [DPU PATCH] drm/msm: Add pm_runtime_get/put calls to dpu [not found] ` <94e53348399f60ace8da8281acdaaef0-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> @ 2018-03-15 14:55 ` skolluku-sgV2jX0FEOL9JmXXK+q4OQ 0 siblings, 0 replies; 3+ messages in thread From: skolluku-sgV2jX0FEOL9JmXXK+q4OQ @ 2018-03-15 14:55 UTC (permalink / raw) To: Sean Paul Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, hoegsberg-F7+t8E8rja9g9hUCZPvPmw, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, linux-arm-msm-owner-u79uwXL29TY76Z2rM5mHXA On 2018-03-15 20:12, skolluku@codeaurora.org wrote: > On 2018-03-14 20:37, Sean Paul wrote: >> Ensure that pm_runtime is properly referenced/unreferenced when we >> need >> it. >> >> Signed-off-by: Sean Paul <seanpaul@chromium.org> Reviewed-by: Sravanthi Kollukuduru <skolluku@codeaurora.org> >> --- >> >> Didn't get a response to my suggestion, so wrote the patch anyways. >> Thoughts? >> > > This patch looks fine for now. > The plan is to deprecate the downstream power_handler APIs going > forward and rely entirely on runtime pm APIs. > > Currently, the pm_runtime_get/put API is used to control the MDSS main > power supply (which is defined as a generic power domain). The idea is > to extend the runtime_pm suspend/resume handlers to manage clock and > bus resources so that the power_handler code can be trimmed off. > > Thanks, > Sravanthi > >> >> drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 3 +++ >> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 2 ++ >> drivers/gpu/drm/msm/dpu_power_handle.c | 12 ++++++++---- >> 3 files changed, 13 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c >> b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c >> index f1642d72469e..df6cbeb15cf5 100644 >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c >> @@ -3497,6 +3497,7 @@ static void dpu_crtc_disable(struct drm_crtc >> *crtc) >> /* disable clk & bw control until clk & bw properties are set */ >> cstate->bw_control = false; >> cstate->bw_split_vote = false; >> + pm_runtime_put_sync(crtc->dev->dev); >> >> mutex_unlock(&dpu_crtc->crtc_lock); >> } >> @@ -3523,6 +3524,8 @@ static void dpu_crtc_enable(struct drm_crtc >> *crtc, >> DPU_EVT32_VERBOSE(DRMID(crtc)); >> dpu_crtc = to_dpu_crtc(crtc); >> >> + pm_runtime_get_sync(crtc->dev->dev); >> + >> drm_for_each_encoder(encoder, crtc->dev) { >> if (encoder->crtc != crtc) >> continue; >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c >> b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c >> index fb4de59d8ed1..90608a303aec 100644 >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c >> @@ -346,12 +346,14 @@ static void _dpu_debugfs_destroy(struct dpu_kms >> *dpu_kms) >> >> static int dpu_kms_enable_vblank(struct msm_kms *kms, struct drm_crtc >> *crtc) >> { >> + pm_runtime_get_sync(crtc->dev->dev); >> return dpu_crtc_vblank(crtc, true); >> } >> >> static void dpu_kms_disable_vblank(struct msm_kms *kms, struct >> drm_crtc *crtc) >> { >> dpu_crtc_vblank(crtc, false); >> + pm_runtime_put_sync(crtc->dev->dev); >> } >> >> static void dpu_kms_wait_for_frame_transfer_complete(struct msm_kms >> *kms, >> diff --git a/drivers/gpu/drm/msm/dpu_power_handle.c >> b/drivers/gpu/drm/msm/dpu_power_handle.c >> index 477ea9f2778c..a52be861117f 100644 >> --- a/drivers/gpu/drm/msm/dpu_power_handle.c >> +++ b/drivers/gpu/drm/msm/dpu_power_handle.c >> @@ -18,6 +18,7 @@ >> #include <linux/of.h> >> #include <linux/string.h> >> #include <linux/of_address.h> >> +#include <linux/pm_runtime.h> >> #include <linux/slab.h> >> #include <linux/mutex.h> >> #include <linux/of_platform.h> >> @@ -857,6 +858,9 @@ int dpu_power_resource_enable(struct >> dpu_power_handle *phandle, >> return -EINVAL; >> } >> >> + if (enable) >> + pm_runtime_get_sync(phandle->dev); >> + >> mp = &phandle->mp; >> >> mutex_lock(&phandle->phandle_lock); >> @@ -963,10 +967,6 @@ int dpu_power_resource_enable(struct >> dpu_power_handle *phandle, >> DPU_POWER_EVENT_POST_DISABLE); >> } >> >> -end: >> - mutex_unlock(&phandle->phandle_lock); >> - return rc; >> - >> clk_err: >> dpu_power_rsc_update(phandle, false); >> rsc_err: >> @@ -979,7 +979,11 @@ int dpu_power_resource_enable(struct >> dpu_power_handle *phandle, >> dpu_power_data_bus_update(&phandle->data_bus_handle[i], 0); >> data_bus_hdl_err: >> phandle->current_usecase_ndx = prev_usecase_ndx; >> + >> +end: >> mutex_unlock(&phandle->phandle_lock); >> + if (!enable) >> + pm_runtime_put_sync(phandle->dev); >> return rc; >> } > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ Freedreno mailing list Freedreno@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/freedreno ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-03-15 14:55 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20180312200626.GW223881@art_vandelay>
2018-03-14 15:07 ` [DPU PATCH] drm/msm: Add pm_runtime_get/put calls to dpu Sean Paul
[not found] ` <20180314150718.254814-1-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-03-15 14:42 ` skolluku-sgV2jX0FEOL9JmXXK+q4OQ
[not found] ` <94e53348399f60ace8da8281acdaaef0-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-03-15 14:55 ` skolluku-sgV2jX0FEOL9JmXXK+q4OQ
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox