From: Sean Paul <seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
To: Rajesh Yadav <ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org,
hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org,
freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Subject: Re: [DPU PATCH 06/11] drm/msm/dpu: use runtime_pm calls on dpu device
Date: Thu, 10 May 2018 11:04:30 -0400 [thread overview]
Message-ID: <20180510150430.GF33053@art_vandelay> (raw)
In-Reply-To: <1525940985-30428-7-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
On Thu, May 10, 2018 at 01:59:40PM +0530, Rajesh Yadav wrote:
> The dpu driver implements runtime_pm support for managing
> dpu specific resources like - clocks, bus bandwidth etc.
>
> Use pm_runtime_get/put_sync calls on dpu device.
>
> The common clocks and power management for all child nodes
> (mdp5/dpu, dsi, dp etc) is done by parent MDSS device/driver
> via runtime_pm due to parent child relationship.
>
> Signed-off-by: Rajesh Yadav <ryadav@codeaurora.org>
Reviewed-by: Sean Paul <seanpaul@chromium.org>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c | 8 ++---
> drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 12 ++++----
> drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 16 +++++-----
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 45 +++++++---------------------
> drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 6 ++--
> 5 files changed, 31 insertions(+), 56 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c
> index 977adc4..5c5cc56 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c
> @@ -452,10 +452,10 @@ void dpu_core_irq_preinstall(struct dpu_kms *dpu_kms)
> }
> priv = dpu_kms->dev->dev_private;
>
> - dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client, true);
> + pm_runtime_get_sync(&dpu_kms->pdev->dev);
> dpu_clear_all_irqs(dpu_kms);
> dpu_disable_all_irqs(dpu_kms);
> - dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client, false);
> + pm_runtime_put_sync(&dpu_kms->pdev->dev);
>
> spin_lock_init(&dpu_kms->irq_obj.cb_lock);
>
> @@ -496,7 +496,7 @@ void dpu_core_irq_uninstall(struct dpu_kms *dpu_kms)
> }
> priv = dpu_kms->dev->dev_private;
>
> - dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client, true);
> + pm_runtime_get_sync(&dpu_kms->pdev->dev);
> for (i = 0; i < dpu_kms->irq_obj.total_irqs; i++)
> if (atomic_read(&dpu_kms->irq_obj.enable_counts[i]) ||
> !list_empty(&dpu_kms->irq_obj.irq_cb_tbl[i]))
> @@ -504,7 +504,7 @@ void dpu_core_irq_uninstall(struct dpu_kms *dpu_kms)
>
> dpu_clear_all_irqs(dpu_kms);
> dpu_disable_all_irqs(dpu_kms);
> - dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client, false);
> + pm_runtime_put_sync(&dpu_kms->pdev->dev);
>
> kfree(dpu_kms->irq_obj.irq_cb_tbl);
> kfree(dpu_kms->irq_obj.enable_counts);
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> index 48920b05..e2d2e32 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> @@ -86,8 +86,12 @@ static inline int _dpu_crtc_power_enable(struct dpu_crtc *dpu_crtc, bool enable)
>
> dpu_kms = to_dpu_kms(priv->kms);
>
> - return dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client,
> - enable);
> + if (enable)
> + pm_runtime_get_sync(&dpu_kms->pdev->dev);
> + else
> + pm_runtime_put_sync(&dpu_kms->pdev->dev);
> +
> + return 0;
> }
>
> /**
> @@ -2250,7 +2254,6 @@ static int _dpu_crtc_vblank_enable_no_lock(
>
> /* drop lock since power crtc cb may try to re-acquire lock */
> mutex_unlock(&dpu_crtc->crtc_lock);
> - pm_runtime_get_sync(dev->dev);
> ret = _dpu_crtc_power_enable(dpu_crtc, true);
> mutex_lock(&dpu_crtc->crtc_lock);
> if (ret)
> @@ -2580,7 +2583,6 @@ 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);
> }
> @@ -2611,8 +2613,6 @@ static void dpu_crtc_enable(struct drm_crtc *crtc,
> return;
> }
>
> - 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_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> index 4386360..298a6ef 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> @@ -268,8 +268,12 @@ static inline int _dpu_encoder_power_enable(struct dpu_encoder_virt *dpu_enc,
>
> dpu_kms = to_dpu_kms(priv->kms);
>
> - return dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client,
> - enable);
> + if (enable)
> + pm_runtime_get_sync(&dpu_kms->pdev->dev);
> + else
> + pm_runtime_put_sync(&dpu_kms->pdev->dev);
> +
> + return 0;
> }
>
> void dpu_encoder_helper_report_irq_timeout(struct dpu_encoder_phys *phys_enc,
> @@ -796,10 +800,8 @@ static void _dpu_encoder_resource_control_helper(struct drm_encoder *drm_enc,
> }
>
> if (enable) {
> - pm_runtime_get_sync(dpu_kms->dev->dev);
> /* enable DPU core clks */
> - dpu_power_resource_enable(&priv->phandle,
> - dpu_kms->core_client, true);
> + pm_runtime_get_sync(&dpu_kms->pdev->dev);
>
> /* enable all the irq */
> _dpu_encoder_irq_control(drm_enc, true);
> @@ -809,9 +811,7 @@ static void _dpu_encoder_resource_control_helper(struct drm_encoder *drm_enc,
> _dpu_encoder_irq_control(drm_enc, false);
>
> /* disable DPU core clks */
> - dpu_power_resource_enable(&priv->phandle,
> - dpu_kms->core_client, false);
> - pm_runtime_put_sync(dpu_kms->dev->dev);
> + pm_runtime_put_sync(&dpu_kms->pdev->dev);
> }
>
> }
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index 2cd51fc..6dd0d8e 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -100,8 +100,7 @@ static int _dpu_danger_signal_status(struct seq_file *s,
> priv = kms->dev->dev_private;
> memset(&status, 0, sizeof(struct dpu_danger_safe_status));
>
> - pm_runtime_get_sync(kms->dev->dev);
> - dpu_power_resource_enable(&priv->phandle, kms->core_client, true);
> + pm_runtime_get_sync(&kms->pdev->dev);
> if (danger_status) {
> seq_puts(s, "\nDanger signal status:\n");
> if (kms->hw_mdp->ops.get_danger_status)
> @@ -113,8 +112,7 @@ static int _dpu_danger_signal_status(struct seq_file *s,
> kms->hw_mdp->ops.get_danger_status(kms->hw_mdp,
> &status);
> }
> - dpu_power_resource_enable(&priv->phandle, kms->core_client, false);
> - pm_runtime_put_sync(kms->dev->dev);
> + pm_runtime_put_sync(&kms->pdev->dev);
>
> seq_printf(s, "MDP : 0x%x\n", status.mdp);
>
> @@ -215,11 +213,7 @@ static int _dpu_debugfs_show_regset32(struct seq_file *s, void *data)
> seq_puts(s, " ");
> }
>
> - if (dpu_power_resource_enable(&priv->phandle,
> - dpu_kms->core_client, true)) {
> - seq_puts(s, "failed to enable dpu clocks\n");
> - return 0;
> - }
> + pm_runtime_get_sync(&dpu_kms->pdev->dev);
>
> /* main register output */
> for (i = 0; i < regset->blk_len; i += 4) {
> @@ -229,7 +223,7 @@ static int _dpu_debugfs_show_regset32(struct seq_file *s, void *data)
> seq_printf(s, " %08x", readl_relaxed(base + i));
> }
> seq_puts(s, "\n");
> - dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client, false);
> + pm_runtime_put_sync(&dpu_kms->pdev->dev);
>
> return 0;
> }
> @@ -334,20 +328,12 @@ static void _dpu_debugfs_destroy(struct dpu_kms *dpu_kms)
>
> static int dpu_kms_enable_vblank(struct msm_kms *kms, struct drm_crtc *crtc)
> {
> - int ret;
> -
> - pm_runtime_get_sync(crtc->dev->dev);
> - ret = dpu_crtc_vblank(crtc, true);
> - pm_runtime_put_sync(crtc->dev->dev);
> -
> - return ret;
> + return dpu_crtc_vblank(crtc, true);
> }
>
> static void dpu_kms_disable_vblank(struct msm_kms *kms, struct drm_crtc *crtc)
> {
> - pm_runtime_get_sync(crtc->dev->dev);
> 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,
> @@ -409,8 +395,7 @@ static void dpu_kms_prepare_commit(struct msm_kms *kms,
> if (!dev || !dev->dev_private)
> return;
> priv = dev->dev_private;
> - pm_runtime_get_sync(dev->dev);
> - dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client, true);
> + pm_runtime_get_sync(&dpu_kms->pdev->dev);
>
> list_for_each_entry(encoder, &dev->mode_config.encoder_list, head)
> if (encoder->crtc != NULL)
> @@ -474,8 +459,7 @@ static void dpu_kms_complete_commit(struct msm_kms *kms,
> for_each_old_crtc_in_state(old_state, crtc, old_crtc_state, i)
> dpu_crtc_complete_commit(crtc, old_crtc_state);
>
> - dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client, false);
> - pm_runtime_put_sync(dpu_kms->dev->dev);
> + pm_runtime_put_sync(&dpu_kms->pdev->dev);
>
> DPU_EVT32_VERBOSE(DPU_EVTLOG_FUNC_EXIT);
> }
> @@ -1627,13 +1611,8 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
> dpu_kms->core_client = NULL;
> goto error;
> }
> - pm_runtime_get_sync(dev->dev);
> - rc = dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client,
> - true);
> - if (rc) {
> - DPU_ERROR("resource enable failed: %d\n", rc);
> - goto error;
> - }
> +
> + pm_runtime_get_sync(&dpu_kms->pdev->dev);
>
> _dpu_kms_core_hw_rev_init(dpu_kms);
>
> @@ -1768,8 +1747,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
> DPU_POWER_EVENT_POST_ENABLE,
> dpu_kms_handle_power_event, dpu_kms, "kms");
>
> - dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client, false);
> - pm_runtime_put_sync(dev->dev);
> + pm_runtime_put_sync(&dpu_kms->pdev->dev);
>
> return 0;
>
> @@ -1778,8 +1756,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
> hw_intr_init_err:
> perf_err:
> power_error:
> - dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client, false);
> - pm_runtime_put_sync(dev->dev);
> + pm_runtime_put_sync(&dpu_kms->pdev->dev);
> error:
> _dpu_kms_hw_destroy(dpu_kms);
> end:
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
> index ba5230d..cf6c3fd 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
> @@ -476,11 +476,9 @@ int dpu_plane_danger_signal_ctrl(struct drm_plane *plane, bool enable)
> if (!pdpu->is_rt_pipe)
> goto end;
>
> - dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client, true);
> -
> + pm_runtime_get_sync(&dpu_kms->pdev->dev);
> _dpu_plane_set_qos_ctrl(plane, enable, DPU_PLANE_QOS_PANIC_CTRL);
> -
> - dpu_power_resource_enable(&priv->phandle, dpu_kms->core_client, false);
> + pm_runtime_put_sync(&dpu_kms->pdev->dev);
>
> end:
> return 0;
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
>
--
Sean Paul, Software Engineer, Google / Chromium OS
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno
next prev parent reply other threads:[~2018-05-10 15:04 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-10 8:29 [DPU PATCH 00/11] Refactor DPU device/driver hierarchy and add runtime_pm support Rajesh Yadav
2018-05-10 8:29 ` [DPU PATCH 01/11] drm/msm: remove redundant pm_runtime_enable call from msm_drv Rajesh Yadav
[not found] ` <1525940985-30428-2-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-05-10 15:02 ` Sean Paul
2018-05-10 8:29 ` [DPU PATCH 02/11] drm/msm/mdp5: subclass msm_mdss for mdp5 Rajesh Yadav
2018-05-10 13:37 ` Sean Paul
[not found] ` <1525940985-30428-1-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-05-10 8:29 ` [DPU PATCH 03/11] drm/msm/dpu: add MDSS top level driver for dpu Rajesh Yadav
[not found] ` <1525940985-30428-4-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-05-10 14:14 ` Sean Paul
2018-05-10 16:56 ` Jordan Crouse
2018-05-10 8:29 ` [DPU PATCH 05/11] drm/msm/dpu: update dpu sub-block offsets wrt dpu base address Rajesh Yadav
2018-05-10 15:02 ` Sean Paul
2018-05-10 8:29 ` [DPU PATCH 06/11] drm/msm/dpu: use runtime_pm calls on dpu device Rajesh Yadav
[not found] ` <1525940985-30428-7-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-05-10 15:04 ` Sean Paul [this message]
2018-05-10 8:29 ` [DPU PATCH 07/11] drm/msm/dpu: remove clock management code from dpu_power_handle Rajesh Yadav
[not found] ` <1525940985-30428-8-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-05-10 15:21 ` Sean Paul
2018-05-10 8:29 ` [DPU PATCH 08/11] drm/msm/dpu: remove power " Rajesh Yadav
[not found] ` <1525940985-30428-9-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-05-10 15:22 ` Sean Paul
2018-05-10 8:29 ` [DPU PATCH 09/11] drm/msm/dp: remove dpu_power_handle calls from dp driver Rajesh Yadav
[not found] ` <1525940985-30428-10-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-05-10 15:23 ` Sean Paul
2018-05-10 8:29 ` [DPU PATCH 04/11] drm/msm/dpu: create new platform driver for dpu device Rajesh Yadav
[not found] ` <1525940985-30428-5-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-05-10 15:00 ` Sean Paul
2018-05-10 17:00 ` Jordan Crouse
2018-05-10 8:29 ` [DPU PATCH 10/11] drm/msm/dpu: use runtime_pm calls in dpu_dbg Rajesh Yadav
[not found] ` <1525940985-30428-11-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-05-10 15:26 ` Sean Paul
2018-05-10 8:29 ` [DPU PATCH 11/11] drm/msm/dpu: move dpu_power_handle to dpu folder Rajesh Yadav
[not found] ` <1525940985-30428-12-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-05-10 15:30 ` Sean Paul
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=20180510150430.GF33053@art_vandelay \
--to=seanpaul-f7+t8e8rja9g9huczpvpmw@public.gmane.org \
--cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).