All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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
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
     [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 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 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.