[Intel-gfx] [PATCH 8/9] drm/i915: Split hsw_get_dpll()

R, Durgadoss durgadoss.r at intel.com
Tue Aug 16 17:24:13 UTC 2016


> -----Original Message-----
> From: Intel-gfx [mailto:intel-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Manasi Navare
> Sent: Wednesday, August 10, 2016 12:59 AM
> To: intel-gfx at lists.freedesktop.org
> Subject: [Intel-gfx] [PATCH 8/9] drm/i915: Split hsw_get_dpll()
> 
> Split out the DisplayPort and HDMI pll setup code into separate
> functions and refactor the DP code that calculates the pll
> so that it doesn't depend on crtc state.
> This will be used for acquiring port pll when doing
> upfront link training.
> 
> Signed-off-by: Manasi Navare <manasi.d.navare at intel.com>

Reviewed-by: Durgadoss R <durgadoss.r at intel.com>

Thanks,
Durga

> ---
>  drivers/gpu/drm/i915/intel_dpll_mgr.c | 90 ++++++++++++++++++++++----
> ---------
>  drivers/gpu/drm/i915/intel_dpll_mgr.h |  6 +++
>  2 files changed, 63 insertions(+), 33 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/intel_dpll_mgr.c
> index e5c025e..93f7aae 100644
> --- a/drivers/gpu/drm/i915/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/intel_dpll_mgr.c
> @@ -705,11 +705,65 @@ hsw_ddi_calculate_wrpll(int clock /* in Hz */,
>  	*r2_out = best.r2;
>  }
> 
> +static struct intel_shared_dpll *hsw_ddi_hdmi_get_dpll(int clock,
> +						       struct intel_crtc *crtc,
> +						       struct intel_crtc_state
> *crtc_state)
> +{
> +	struct intel_shared_dpll *pll;
> +	uint32_t val;
> +	unsigned p, n2, r2;
> +
> +	hsw_ddi_calculate_wrpll(clock * 1000, &r2, &n2, &p);
> +
> +	val = WRPLL_PLL_ENABLE | WRPLL_PLL_LCPLL |
> +	      WRPLL_DIVIDER_REFERENCE(r2) |
> WRPLL_DIVIDER_FEEDBACK(n2) |
> +	      WRPLL_DIVIDER_POST(p);
> +
> +	crtc_state->dpll_hw_state.wrpll = val;
> +
> +	pll = intel_find_shared_dpll(crtc, crtc_state,
> +				     DPLL_ID_WRPLL1, DPLL_ID_WRPLL2);
> +
> +	if (!pll)
> +		return NULL;
> +
> +	return pll;
> +}
> +
> +struct intel_shared_dpll *hsw_ddi_dp_get_dpll(struct intel_encoder
> *encoder,
> +					      int clock)
> +{
> +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> +	struct intel_shared_dpll *pll;
> +	enum intel_dpll_id pll_id;
> +
> +	switch (clock / 2) {
> +	case 81000:
> +		pll_id = DPLL_ID_LCPLL_810;
> +		break;
> +	case 135000:
> +		pll_id = DPLL_ID_LCPLL_1350;
> +		break;
> +	case 270000:
> +		pll_id = DPLL_ID_LCPLL_2700;
> +		break;
> +	default:
> +		DRM_DEBUG_KMS("Invalid clock for DP: %d\n", clock);
> +		return NULL;
> +	}
> +
> +	pll = intel_get_shared_dpll_by_id(dev_priv, pll_id);
> +
> +	if (!pll)
> +		return NULL;
> +
> +	return pll;
> +}
> +
>  static struct intel_shared_dpll *
>  hsw_get_dpll(struct intel_crtc *crtc, struct intel_crtc_state *crtc_state,
>  	     struct intel_encoder *encoder)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>  	struct intel_shared_dpll *pll;
>  	int clock = crtc_state->port_clock;
> 
> @@ -717,41 +771,12 @@ hsw_get_dpll(struct intel_crtc *crtc, struct
> intel_crtc_state *crtc_state,
>  	       sizeof(crtc_state->dpll_hw_state));
> 
>  	if (encoder->type == INTEL_OUTPUT_HDMI) {
> -		uint32_t val;
> -		unsigned p, n2, r2;
> -
> -		hsw_ddi_calculate_wrpll(clock * 1000, &r2, &n2, &p);
> -
> -		val = WRPLL_PLL_ENABLE | WRPLL_PLL_LCPLL |
> -		      WRPLL_DIVIDER_REFERENCE(r2) |
> WRPLL_DIVIDER_FEEDBACK(n2) |
> -		      WRPLL_DIVIDER_POST(p);
> -
> -		crtc_state->dpll_hw_state.wrpll = val;
> -
> -		pll = intel_find_shared_dpll(crtc, crtc_state,
> -					     DPLL_ID_WRPLL1,
> DPLL_ID_WRPLL2);
> +		pll = hsw_ddi_hdmi_get_dpll(clock, crtc, crtc_state);
> 
>  	} else if (encoder->type == INTEL_OUTPUT_DP ||
>  		   encoder->type == INTEL_OUTPUT_DP_MST ||
>  		   encoder->type == INTEL_OUTPUT_EDP) {
> -		enum intel_dpll_id pll_id;
> -
> -		switch (clock / 2) {
> -		case 81000:
> -			pll_id = DPLL_ID_LCPLL_810;
> -			break;
> -		case 135000:
> -			pll_id = DPLL_ID_LCPLL_1350;
> -			break;
> -		case 270000:
> -			pll_id = DPLL_ID_LCPLL_2700;
> -			break;
> -		default:
> -			DRM_DEBUG_KMS("Invalid clock for DP: %d\n",
> clock);
> -			return NULL;
> -		}
> -
> -		pll = intel_get_shared_dpll_by_id(dev_priv, pll_id);
> +		pll = hsw_ddi_dp_get_dpll(encoder, clock);
> 
>  	} else if (encoder->type == INTEL_OUTPUT_ANALOG) {
>  		if (WARN_ON(crtc_state->port_clock / 2 != 135000))
> @@ -774,7 +799,6 @@ hsw_get_dpll(struct intel_crtc *crtc, struct
> intel_crtc_state *crtc_state,
>  	return pll;
>  }
> 
> -
>  static const struct intel_shared_dpll_funcs hsw_ddi_wrpll_funcs = {
>  	.enable = hsw_ddi_wrpll_enable,
>  	.disable = hsw_ddi_wrpll_disable,
> diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.h
> b/drivers/gpu/drm/i915/intel_dpll_mgr.h
> index ec0fe66..f438535 100644
> --- a/drivers/gpu/drm/i915/intel_dpll_mgr.h
> +++ b/drivers/gpu/drm/i915/intel_dpll_mgr.h
> @@ -164,10 +164,16 @@ void intel_shared_dpll_init(struct drm_device
> *dev);
>  bool bxt_ddi_dp_set_dpll_hw_state(int clock,
>  			  struct intel_dpll_hw_state *dpll_hw_state);
> 
> +
>  /* SKL dpll related functions */
>  bool skl_ddi_dp_set_dpll_hw_state(int clock,
>  				  struct intel_dpll_hw_state *dpll_hw_state);
>  struct intel_shared_dpll *skl_find_link_pll(struct drm_i915_private
> *dev_priv,
>  					    int clock);
> 
> +
> +/* HSW dpll related functions */
> +struct intel_shared_dpll *hsw_ddi_dp_get_dpll(struct intel_encoder
> *encoder,
> +					      int clock);
> +
>  #endif /* _INTEL_DPLL_MGR_H_ */
> --
> 1.9.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx


More information about the Intel-gfx mailing list