Re: [PATCH 44/49] drm/i915/bxt: Determine programmed frequency

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/17/2015 02:40 AM, Imre Deak wrote:
> From: Satheeshakrishna M <satheeshakrishna.m@xxxxxxxxx>
> 
> Add placeholder function for calculating programmed pixel clock.
> Note: Formula to back calculate link clock from dividers not
> available currently.
> 
> v2:
> - rebased on upstream s/crtc_config/crtc_state/ change (imre)
> 
> Signed-off-by: Satheeshakrishna M <satheeshakrishna.m@xxxxxxxxx> (v1)
> Signed-off-by: Imre Deak <imre.deak@xxxxxxxxx>
> ---
>  drivers/gpu/drm/i915/intel_ddi.c | 30 +++++++++++++++++++++++++++++-
>  drivers/gpu/drm/i915/intel_dp.c  |  2 ++
>  2 files changed, 31 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 0a5d71e..ff62054 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -851,6 +851,32 @@ static void hsw_ddi_clock_get(struct intel_encoder *encoder,
>  		pipe_config->base.adjusted_mode.crtc_clock = pipe_config->port_clock;
>  }
>  
> +static int bxt_calc_pll_link(struct drm_i915_private *dev_priv,
> +				enum intel_dpll_id dpll)
> +{
> +	/* FIXME formula not available in bspec */
> +	return 0;
> +}
> +
> +static void bxt_ddi_clock_get(struct intel_encoder *encoder,
> +				struct intel_crtc_state *pipe_config)
> +{
> +	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
> +	enum port port = intel_ddi_get_encoder_port(encoder);
> +	uint32_t dpll = port;
> +
> +	pipe_config->port_clock =
> +		bxt_calc_pll_link(dev_priv, dpll);
> +
> +	if (pipe_config->has_dp_encoder)
> +		pipe_config->base.adjusted_mode.crtc_clock =
> +			intel_dotclock_calculate(pipe_config->port_clock,
> +							&pipe_config->dp_m_n);
> +	else
> +		pipe_config->base.adjusted_mode.crtc_clock =
> +							pipe_config->port_clock;
> +}
> +
>  void intel_ddi_clock_get(struct intel_encoder *encoder,
>  			 struct intel_crtc_state *pipe_config)
>  {
> @@ -858,8 +884,10 @@ void intel_ddi_clock_get(struct intel_encoder *encoder,
>  
>  	if (INTEL_INFO(dev)->gen <= 8)
>  		hsw_ddi_clock_get(encoder, pipe_config);
> -	else
> +	else if (IS_SKYLAKE(dev))
>  		skl_ddi_clock_get(encoder, pipe_config);
> +	else if (IS_BROXTON(dev))
> +		bxt_ddi_clock_get(encoder, pipe_config);
>  }
>  
>  static void
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index ca60060..4bfbeed 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1416,6 +1416,8 @@ found:
>  
>  	if (IS_SKYLAKE(dev) && is_edp(intel_dp))
>  		skl_edp_set_pll_config(pipe_config, supported_rates[clock]);
> +	else if (IS_BROXTON(dev))
> +		/* handled in ddi */;
>  	else if (IS_HASWELL(dev) || IS_BROADWELL(dev))
>  		hsw_dp_set_ddi_pll_sel(pipe_config, intel_dp->link_bw);
>  	else
> 

Another one for JIRA.  Looks like the formulas are in there now:
Actual Output = M2 * 400 / (P1 * P2)  // Actual differs from desired due
to limited M2 fractional precision

Reviewed-by: Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx





[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux