diff mbox series

[v2,09/17] drm/i915: Introduce encoder->get_buf_trans()

Message ID 20210608073603.2408-10-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915: DDI buf trans cleaup and fixes | expand

Commit Message

Ville Syrjala June 8, 2021, 7:35 a.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert the get_buf_trans() functions into an encoder vfunc.
Allows us to get rid of bunch of platform if-ladders.

v2: Handle adl-p

Reviewed-by: Jani Nikula <jani.nikula@intel.com> #v1
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_crt.c      |  3 +
 drivers/gpu/drm/i915/display/intel_ddi.c      | 61 +++------------
 .../drm/i915/display/intel_ddi_buf_trans.c    | 75 +++++++++++--------
 .../drm/i915/display/intel_ddi_buf_trans.h    | 44 +----------
 .../drm/i915/display/intel_display_types.h    |  4 +
 drivers/gpu/drm/i915/display/intel_fdi.c      |  3 +-
 6 files changed, 65 insertions(+), 125 deletions(-)

Comments

Jani Nikula June 18, 2021, 12:19 p.m. UTC | #1
On Tue, 08 Jun 2021, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert the get_buf_trans() functions into an encoder vfunc.
> Allows us to get rid of bunch of platform if-ladders.
>
> v2: Handle adl-p
>
> Reviewed-by: Jani Nikula <jani.nikula@intel.com> #v1

Holds for v2.

> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_crt.c      |  3 +
>  drivers/gpu/drm/i915/display/intel_ddi.c      | 61 +++------------
>  .../drm/i915/display/intel_ddi_buf_trans.c    | 75 +++++++++++--------
>  .../drm/i915/display/intel_ddi_buf_trans.h    | 44 +----------
>  .../drm/i915/display/intel_display_types.h    |  4 +
>  drivers/gpu/drm/i915/display/intel_fdi.c      |  3 +-
>  6 files changed, 65 insertions(+), 125 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
> index 648f1c0d3d39..408f82b0dc7d 100644
> --- a/drivers/gpu/drm/i915/display/intel_crt.c
> +++ b/drivers/gpu/drm/i915/display/intel_crt.c
> @@ -38,6 +38,7 @@
>  #include "intel_crt.h"
>  #include "intel_crtc.h"
>  #include "intel_ddi.h"
> +#include "intel_ddi_buf_trans.h"
>  #include "intel_de.h"
>  #include "intel_display_types.h"
>  #include "intel_fdi.h"
> @@ -1081,6 +1082,8 @@ void intel_crt_init(struct drm_i915_private *dev_priv)
>  		crt->base.enable_clock = hsw_ddi_enable_clock;
>  		crt->base.disable_clock = hsw_ddi_disable_clock;
>  		crt->base.is_clock_enabled = hsw_ddi_is_clock_enabled;
> +
> +		intel_ddi_buf_trans_init(&crt->base);
>  	} else {
>  		if (HAS_PCH_SPLIT(dev_priv)) {
>  			crt->base.compute_config = pch_crt_compute_config;
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 37445cec0c23..d8b4db602d30 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -104,8 +104,7 @@ void hsw_prepare_dp_ddi_buffers(struct intel_encoder *encoder,
>  	enum port port = encoder->port;
>  	const struct intel_ddi_buf_trans *ddi_translations;
>  
> -	ddi_translations = hsw_get_buf_trans(encoder, crtc_state, &n_entries);
> -
> +	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
>  		return;
>  
> @@ -137,8 +136,7 @@ static void hsw_prepare_hdmi_ddi_buffers(struct intel_encoder *encoder,
>  	enum port port = encoder->port;
>  	const struct intel_ddi_buf_trans *ddi_translations;
>  
> -	ddi_translations = hsw_get_buf_trans(encoder, crtc_state,  &n_entries);
> -
> +	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
>  		return;
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
> @@ -947,8 +945,7 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder,
>  		const struct intel_ddi_buf_trans *ddi_translations;
>  		int n_entries;
>  
> -		ddi_translations = hsw_get_buf_trans(encoder, crtc_state, &n_entries);
> -
> +		ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
>  		if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
>  			return;
>  		if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
> @@ -978,7 +975,7 @@ static void bxt_ddi_vswing_sequence(struct intel_encoder *encoder,
>  	enum port port = encoder->port;
>  	int n_entries;
>  
> -	ddi_translations = bxt_get_buf_trans(encoder, crtc_state, &n_entries);
> +	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
>  		return;
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
> @@ -996,33 +993,9 @@ static u8 intel_ddi_dp_voltage_max(struct intel_dp *intel_dp,
>  {
>  	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> -	enum port port = encoder->port;
> -	enum phy phy = intel_port_to_phy(dev_priv, port);
>  	int n_entries;
>  
> -	if (DISPLAY_VER(dev_priv) >= 12) {
> -		if (intel_phy_is_combo(dev_priv, phy))
> -			tgl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
> -		else if (IS_ALDERLAKE_P(dev_priv))
> -			adlp_get_dkl_buf_trans(encoder, crtc_state, &n_entries);
> -		else
> -			tgl_get_dkl_buf_trans(encoder, crtc_state, &n_entries);
> -	} else if (DISPLAY_VER(dev_priv) == 11) {
> -		if (IS_PLATFORM(dev_priv, INTEL_JASPERLAKE))
> -			jsl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
> -		else if (IS_PLATFORM(dev_priv, INTEL_ELKHARTLAKE))
> -			ehl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
> -		else if (intel_phy_is_combo(dev_priv, phy))
> -			icl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
> -		else
> -			icl_get_mg_buf_trans(encoder, crtc_state, &n_entries);
> -	} else if (IS_CANNONLAKE(dev_priv)) {
> -		cnl_get_buf_trans(encoder, crtc_state, &n_entries);
> -	} else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) {
> -		bxt_get_buf_trans(encoder, crtc_state, &n_entries);
> -	} else {
> -		hsw_get_buf_trans(encoder, crtc_state, &n_entries);
> -	}
> +	encoder->get_buf_trans(encoder, crtc_state, &n_entries);
>  
>  	if (drm_WARN_ON(&dev_priv->drm, n_entries < 1))
>  		n_entries = 1;
> @@ -1054,8 +1027,7 @@ static void cnl_ddi_vswing_program(struct intel_encoder *encoder,
>  	int n_entries, ln;
>  	u32 val;
>  
> -	ddi_translations = cnl_get_buf_trans(encoder, crtc_state, &n_entries);
> -
> +	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
>  		return;
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
> @@ -1175,15 +1147,7 @@ static void icl_ddi_combo_vswing_program(struct intel_encoder *encoder,
>  	int n_entries, ln;
>  	u32 val;
>  
> -	if (DISPLAY_VER(dev_priv) >= 12)
> -		ddi_translations = tgl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
> -	else if (IS_PLATFORM(dev_priv, INTEL_JASPERLAKE))
> -		ddi_translations = jsl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
> -	else if (IS_PLATFORM(dev_priv, INTEL_ELKHARTLAKE))
> -		ddi_translations = ehl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
> -	else
> -		ddi_translations = icl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
> -
> +	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
>  		return;
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
> @@ -1310,8 +1274,7 @@ static void icl_mg_phy_ddi_vswing_sequence(struct intel_encoder *encoder,
>  	if (enc_to_dig_port(encoder)->tc_mode == TC_PORT_TBT_ALT)
>  		return;
>  
> -	ddi_translations = icl_get_mg_buf_trans(encoder, crtc_state, &n_entries);
> -
> +	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
>  		return;
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
> @@ -1448,11 +1411,7 @@ tgl_dkl_phy_ddi_vswing_sequence(struct intel_encoder *encoder,
>  	if (enc_to_dig_port(encoder)->tc_mode == TC_PORT_TBT_ALT)
>  		return;
>  
> -	if (IS_ALDERLAKE_P(dev_priv))
> -		ddi_translations = adlp_get_dkl_buf_trans(encoder, crtc_state, &n_entries);
> -	else
> -		ddi_translations = tgl_get_dkl_buf_trans(encoder, crtc_state, &n_entries);
> -
> +	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
>  		return;
>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
> @@ -4662,6 +4621,8 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
>  		encoder->get_config = hsw_ddi_get_config;
>  	}
>  
> +	intel_ddi_buf_trans_init(encoder);
> +
>  	if (DISPLAY_VER(dev_priv) >= 13)
>  		encoder->hpd_pin = xelpd_hpd_pin(dev_priv, port);
>  	else if (IS_DG1(dev_priv))
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
> index fd2216dc8c33..f8915a8c78d8 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
> @@ -1246,7 +1246,7 @@ hsw_get_buf_trans_hdmi(struct intel_encoder *encoder,
>  	return NULL;
>  }
>  
> -const struct intel_ddi_buf_trans *
> +static const struct intel_ddi_buf_trans *
>  hsw_get_buf_trans(struct intel_encoder *encoder,
>  		  const struct intel_crtc_state *crtc_state,
>  		  int *n_entries)
> @@ -1286,7 +1286,7 @@ bxt_get_buf_trans_hdmi(struct intel_encoder *encoder, int *n_entries)
>  	return intel_get_buf_trans(&bxt_ddi_translations_hdmi, n_entries);
>  }
>  
> -const struct intel_ddi_buf_trans *
> +static const struct intel_ddi_buf_trans *
>  bxt_get_buf_trans(struct intel_encoder *encoder,
>  		  const struct intel_crtc_state *crtc_state,
>  		  int *n_entries)
> @@ -1368,7 +1368,7 @@ cnl_get_buf_trans_edp(struct intel_encoder *encoder, int *n_entries)
>  	}
>  }
>  
> -const struct intel_ddi_buf_trans *
> +static const struct intel_ddi_buf_trans *
>  cnl_get_buf_trans(struct intel_encoder *encoder,
>  		  const struct intel_crtc_state *crtc_state,
>  		  int *n_entries)
> @@ -1422,7 +1422,7 @@ icl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
>  	return icl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
>  }
>  
> -const struct intel_ddi_buf_trans *
> +static const struct intel_ddi_buf_trans *
>  icl_get_combo_buf_trans(struct intel_encoder *encoder,
>  			const struct intel_crtc_state *crtc_state,
>  			int *n_entries)
> @@ -1458,7 +1458,7 @@ icl_get_mg_buf_trans_dp(struct intel_encoder *encoder,
>  	}
>  }
>  
> -const struct intel_ddi_buf_trans *
> +static const struct intel_ddi_buf_trans *
>  icl_get_mg_buf_trans(struct intel_encoder *encoder,
>  		     const struct intel_crtc_state *crtc_state,
>  		     int *n_entries)
> @@ -1502,7 +1502,7 @@ ehl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
>  	return ehl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
>  }
>  
> -const struct intel_ddi_buf_trans *
> +static const struct intel_ddi_buf_trans *
>  ehl_get_combo_buf_trans(struct intel_encoder *encoder,
>  			const struct intel_crtc_state *crtc_state,
>  			int *n_entries)
> @@ -1553,7 +1553,7 @@ jsl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
>  	return jsl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
>  }
>  
> -const struct intel_ddi_buf_trans *
> +static const struct intel_ddi_buf_trans *
>  jsl_get_combo_buf_trans(struct intel_encoder *encoder,
>  			const struct intel_crtc_state *crtc_state,
>  			int *n_entries)
> @@ -1626,7 +1626,7 @@ tgl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
>  	return tgl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
>  }
>  
> -const struct intel_ddi_buf_trans *
> +static const struct intel_ddi_buf_trans *
>  tgl_get_combo_buf_trans(struct intel_encoder *encoder,
>  			const struct intel_crtc_state *crtc_state,
>  			int *n_entries)
> @@ -1662,7 +1662,7 @@ tgl_get_dkl_buf_trans_dp(struct intel_encoder *encoder,
>  	}
>  }
>  
> -const struct intel_ddi_buf_trans *
> +static const struct intel_ddi_buf_trans *
>  tgl_get_dkl_buf_trans(struct intel_encoder *encoder,
>  		      const struct intel_crtc_state *crtc_state,
>  		      int *n_entries)
> @@ -1687,7 +1687,7 @@ adlp_get_dkl_buf_trans_dp(struct intel_encoder *encoder,
>  	}
>  }
>  
> -const struct intel_ddi_buf_trans *
> +static const struct intel_ddi_buf_trans *
>  adlp_get_dkl_buf_trans(struct intel_encoder *encoder,
>  		       const struct intel_crtc_state *crtc_state,
>  		       int *n_entries)
> @@ -1703,28 +1703,10 @@ int intel_ddi_hdmi_num_entries(struct intel_encoder *encoder,
>  			       int *default_entry)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> -	enum phy phy = intel_port_to_phy(dev_priv, encoder->port);
> -	const struct intel_ddi_buf_trans *ddi_translations = NULL;
> +	const struct intel_ddi_buf_trans *ddi_translations;
>  	int n_entries;
>  
> -	if (DISPLAY_VER(dev_priv) >= 12) {
> -		if (intel_phy_is_combo(dev_priv, phy))
> -			ddi_translations = tgl_get_combo_buf_trans_hdmi(encoder, crtc_state, &n_entries);
> -		else
> -			ddi_translations = tgl_get_dkl_buf_trans_hdmi(encoder, crtc_state, &n_entries);
> -	} else if (DISPLAY_VER(dev_priv) == 11) {
> -		if (intel_phy_is_combo(dev_priv, phy))
> -			ddi_translations = icl_get_combo_buf_trans_hdmi(encoder, crtc_state, &n_entries);
> -		else
> -			ddi_translations = icl_get_mg_buf_trans_hdmi(encoder, crtc_state, &n_entries);
> -	} else if (IS_CANNONLAKE(dev_priv)) {
> -		ddi_translations = cnl_get_buf_trans_hdmi(encoder, &n_entries);
> -	} else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) {
> -		ddi_translations = bxt_get_buf_trans_hdmi(encoder, &n_entries);
> -	} else if (DISPLAY_VER(dev_priv) == 9 ||
> -		   IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv)) {
> -		ddi_translations = hsw_get_buf_trans_hdmi(encoder, &n_entries);
> -	}
> +	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
>  
>  	if (drm_WARN_ON(&dev_priv->drm, !ddi_translations)) {
>  		*default_entry = 0;
> @@ -1735,3 +1717,36 @@ int intel_ddi_hdmi_num_entries(struct intel_encoder *encoder,
>  
>  	return n_entries;
>  }
> +
> +void intel_ddi_buf_trans_init(struct intel_encoder *encoder)
> +{
> +	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
> +	enum phy phy = intel_port_to_phy(i915, encoder->port);
> +
> +	if (IS_ALDERLAKE_P(i915)) {
> +		if (intel_phy_is_combo(i915, phy))
> +			encoder->get_buf_trans = tgl_get_combo_buf_trans;
> +		else
> +			encoder->get_buf_trans = adlp_get_dkl_buf_trans;
> +	} else if (DISPLAY_VER(i915) >= 12) {
> +		if (intel_phy_is_combo(i915, phy))
> +			encoder->get_buf_trans = tgl_get_combo_buf_trans;
> +		else
> +			encoder->get_buf_trans = tgl_get_dkl_buf_trans;
> +	} else if (DISPLAY_VER(i915) == 11) {
> +		if (IS_PLATFORM(i915, INTEL_JASPERLAKE))
> +			encoder->get_buf_trans = jsl_get_combo_buf_trans;
> +		else if (IS_PLATFORM(i915, INTEL_ELKHARTLAKE))
> +			encoder->get_buf_trans = ehl_get_combo_buf_trans;
> +		else if (intel_phy_is_combo(i915, phy))
> +			encoder->get_buf_trans = icl_get_combo_buf_trans;
> +		else
> +			encoder->get_buf_trans = icl_get_mg_buf_trans;
> +	} else if (IS_CANNONLAKE(i915)) {
> +		encoder->get_buf_trans = cnl_get_buf_trans;
> +	} else if (IS_GEMINILAKE(i915) || IS_BROXTON(i915)) {
> +		encoder->get_buf_trans = bxt_get_buf_trans;
> +	} else {
> +		encoder->get_buf_trans = hsw_get_buf_trans;
> +	}
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
> index 879f1deec3c8..05226eb46cd6 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
> +++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
> @@ -65,48 +65,6 @@ int intel_ddi_hdmi_num_entries(struct intel_encoder *encoder,
>  			       const struct intel_crtc_state *crtc_state,
>  			       int *default_entry);
>  
> -const struct intel_ddi_buf_trans *
> -hsw_get_buf_trans(struct intel_encoder *encoder,
> -		  const struct intel_crtc_state *crtc_state,
> -		  int *n_entries);
> -
> -const struct intel_ddi_buf_trans *
> -bxt_get_buf_trans(struct intel_encoder *encoder,
> -		  const struct intel_crtc_state *crtc_state,
> -		  int *n_entries);
> -
> -const struct intel_ddi_buf_trans *
> -adlp_get_dkl_buf_trans(struct intel_encoder *encoder,
> -		       const struct intel_crtc_state *crtc_state,
> -		       int *n_entries);
> -const struct intel_ddi_buf_trans *
> -tgl_get_combo_buf_trans(struct intel_encoder *encoder,
> -			const struct intel_crtc_state *crtc_state,
> -			int *n_entries);
> -const struct intel_ddi_buf_trans *
> -tgl_get_dkl_buf_trans(struct intel_encoder *encoder,
> -		      const struct intel_crtc_state *crtc_state,
> -		      int *n_entries);
> -const struct intel_ddi_buf_trans *
> -jsl_get_combo_buf_trans(struct intel_encoder *encoder,
> -			const struct intel_crtc_state *crtc_state,
> -			int *n_entries);
> -const struct intel_ddi_buf_trans *
> -ehl_get_combo_buf_trans(struct intel_encoder *encoder,
> -			const struct intel_crtc_state *crtc_state,
> -			int *n_entries);
> -const struct intel_ddi_buf_trans *
> -icl_get_combo_buf_trans(struct intel_encoder *encoder,
> -			const struct intel_crtc_state *crtc_state,
> -			int *n_entries);
> -const struct intel_ddi_buf_trans *
> -icl_get_mg_buf_trans(struct intel_encoder *encoder,
> -		     const struct intel_crtc_state *crtc_state,
> -		     int *n_entries);
> -
> -const struct intel_ddi_buf_trans *
> -cnl_get_buf_trans(struct intel_encoder *encoder,
> -		  const struct intel_crtc_state *crtc_state,
> -		  int *n_entries);
> +void intel_ddi_buf_trans_init(struct intel_encoder *encoder);
>  
>  #endif
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index b8d1f702d808..d4a0994f8619 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -48,6 +48,7 @@
>  
>  struct drm_printer;
>  struct __intel_global_objs_state;
> +struct intel_ddi_buf_trans;
>  
>  /*
>   * Display related stuff
> @@ -263,6 +264,9 @@ struct intel_encoder {
>  	 * Returns whether the port clock is enabled or not.
>  	 */
>  	bool (*is_clock_enabled)(struct intel_encoder *encoder);
> +	const struct intel_ddi_buf_trans *(*get_buf_trans)(struct intel_encoder *encoder,
> +							   const struct intel_crtc_state *crtc_state,
> +							   int *n_entries);
>  	enum hpd_pin hpd_pin;
>  	enum intel_display_power_domain power_domain;
>  	/* for communication with audio component; protected by av_mutex */
> diff --git a/drivers/gpu/drm/i915/display/intel_fdi.c b/drivers/gpu/drm/i915/display/intel_fdi.c
> index c602ed17c4fb..15ea28726e7a 100644
> --- a/drivers/gpu/drm/i915/display/intel_fdi.c
> +++ b/drivers/gpu/drm/i915/display/intel_fdi.c
> @@ -4,7 +4,6 @@
>   */
>  #include "intel_atomic.h"
>  #include "intel_ddi.h"
> -#include "intel_ddi_buf_trans.h"
>  #include "intel_de.h"
>  #include "intel_display_types.h"
>  #include "intel_fdi.h"
> @@ -569,7 +568,7 @@ void hsw_fdi_link_train(struct intel_encoder *encoder,
>  	u32 temp, i, rx_ctl_val;
>  	int n_entries;
>  
> -	hsw_get_buf_trans(encoder, crtc_state, &n_entries);
> +	encoder->get_buf_trans(encoder, crtc_state, &n_entries);
>  
>  	hsw_prepare_dp_ddi_buffers(encoder, crtc_state);
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
index 648f1c0d3d39..408f82b0dc7d 100644
--- a/drivers/gpu/drm/i915/display/intel_crt.c
+++ b/drivers/gpu/drm/i915/display/intel_crt.c
@@ -38,6 +38,7 @@ 
 #include "intel_crt.h"
 #include "intel_crtc.h"
 #include "intel_ddi.h"
+#include "intel_ddi_buf_trans.h"
 #include "intel_de.h"
 #include "intel_display_types.h"
 #include "intel_fdi.h"
@@ -1081,6 +1082,8 @@  void intel_crt_init(struct drm_i915_private *dev_priv)
 		crt->base.enable_clock = hsw_ddi_enable_clock;
 		crt->base.disable_clock = hsw_ddi_disable_clock;
 		crt->base.is_clock_enabled = hsw_ddi_is_clock_enabled;
+
+		intel_ddi_buf_trans_init(&crt->base);
 	} else {
 		if (HAS_PCH_SPLIT(dev_priv)) {
 			crt->base.compute_config = pch_crt_compute_config;
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 37445cec0c23..d8b4db602d30 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -104,8 +104,7 @@  void hsw_prepare_dp_ddi_buffers(struct intel_encoder *encoder,
 	enum port port = encoder->port;
 	const struct intel_ddi_buf_trans *ddi_translations;
 
-	ddi_translations = hsw_get_buf_trans(encoder, crtc_state, &n_entries);
-
+	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
 		return;
 
@@ -137,8 +136,7 @@  static void hsw_prepare_hdmi_ddi_buffers(struct intel_encoder *encoder,
 	enum port port = encoder->port;
 	const struct intel_ddi_buf_trans *ddi_translations;
 
-	ddi_translations = hsw_get_buf_trans(encoder, crtc_state,  &n_entries);
-
+	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
 		return;
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -947,8 +945,7 @@  static void skl_ddi_set_iboost(struct intel_encoder *encoder,
 		const struct intel_ddi_buf_trans *ddi_translations;
 		int n_entries;
 
-		ddi_translations = hsw_get_buf_trans(encoder, crtc_state, &n_entries);
-
+		ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 		if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
 			return;
 		if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -978,7 +975,7 @@  static void bxt_ddi_vswing_sequence(struct intel_encoder *encoder,
 	enum port port = encoder->port;
 	int n_entries;
 
-	ddi_translations = bxt_get_buf_trans(encoder, crtc_state, &n_entries);
+	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
 		return;
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -996,33 +993,9 @@  static u8 intel_ddi_dp_voltage_max(struct intel_dp *intel_dp,
 {
 	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	enum port port = encoder->port;
-	enum phy phy = intel_port_to_phy(dev_priv, port);
 	int n_entries;
 
-	if (DISPLAY_VER(dev_priv) >= 12) {
-		if (intel_phy_is_combo(dev_priv, phy))
-			tgl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
-		else if (IS_ALDERLAKE_P(dev_priv))
-			adlp_get_dkl_buf_trans(encoder, crtc_state, &n_entries);
-		else
-			tgl_get_dkl_buf_trans(encoder, crtc_state, &n_entries);
-	} else if (DISPLAY_VER(dev_priv) == 11) {
-		if (IS_PLATFORM(dev_priv, INTEL_JASPERLAKE))
-			jsl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
-		else if (IS_PLATFORM(dev_priv, INTEL_ELKHARTLAKE))
-			ehl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
-		else if (intel_phy_is_combo(dev_priv, phy))
-			icl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
-		else
-			icl_get_mg_buf_trans(encoder, crtc_state, &n_entries);
-	} else if (IS_CANNONLAKE(dev_priv)) {
-		cnl_get_buf_trans(encoder, crtc_state, &n_entries);
-	} else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) {
-		bxt_get_buf_trans(encoder, crtc_state, &n_entries);
-	} else {
-		hsw_get_buf_trans(encoder, crtc_state, &n_entries);
-	}
+	encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 
 	if (drm_WARN_ON(&dev_priv->drm, n_entries < 1))
 		n_entries = 1;
@@ -1054,8 +1027,7 @@  static void cnl_ddi_vswing_program(struct intel_encoder *encoder,
 	int n_entries, ln;
 	u32 val;
 
-	ddi_translations = cnl_get_buf_trans(encoder, crtc_state, &n_entries);
-
+	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
 		return;
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -1175,15 +1147,7 @@  static void icl_ddi_combo_vswing_program(struct intel_encoder *encoder,
 	int n_entries, ln;
 	u32 val;
 
-	if (DISPLAY_VER(dev_priv) >= 12)
-		ddi_translations = tgl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
-	else if (IS_PLATFORM(dev_priv, INTEL_JASPERLAKE))
-		ddi_translations = jsl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
-	else if (IS_PLATFORM(dev_priv, INTEL_ELKHARTLAKE))
-		ddi_translations = ehl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
-	else
-		ddi_translations = icl_get_combo_buf_trans(encoder, crtc_state, &n_entries);
-
+	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
 		return;
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -1310,8 +1274,7 @@  static void icl_mg_phy_ddi_vswing_sequence(struct intel_encoder *encoder,
 	if (enc_to_dig_port(encoder)->tc_mode == TC_PORT_TBT_ALT)
 		return;
 
-	ddi_translations = icl_get_mg_buf_trans(encoder, crtc_state, &n_entries);
-
+	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
 		return;
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -1448,11 +1411,7 @@  tgl_dkl_phy_ddi_vswing_sequence(struct intel_encoder *encoder,
 	if (enc_to_dig_port(encoder)->tc_mode == TC_PORT_TBT_ALT)
 		return;
 
-	if (IS_ALDERLAKE_P(dev_priv))
-		ddi_translations = adlp_get_dkl_buf_trans(encoder, crtc_state, &n_entries);
-	else
-		ddi_translations = tgl_get_dkl_buf_trans(encoder, crtc_state, &n_entries);
-
+	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
 		return;
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -4662,6 +4621,8 @@  void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
 		encoder->get_config = hsw_ddi_get_config;
 	}
 
+	intel_ddi_buf_trans_init(encoder);
+
 	if (DISPLAY_VER(dev_priv) >= 13)
 		encoder->hpd_pin = xelpd_hpd_pin(dev_priv, port);
 	else if (IS_DG1(dev_priv))
diff --git a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
index fd2216dc8c33..f8915a8c78d8 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
@@ -1246,7 +1246,7 @@  hsw_get_buf_trans_hdmi(struct intel_encoder *encoder,
 	return NULL;
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 hsw_get_buf_trans(struct intel_encoder *encoder,
 		  const struct intel_crtc_state *crtc_state,
 		  int *n_entries)
@@ -1286,7 +1286,7 @@  bxt_get_buf_trans_hdmi(struct intel_encoder *encoder, int *n_entries)
 	return intel_get_buf_trans(&bxt_ddi_translations_hdmi, n_entries);
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 bxt_get_buf_trans(struct intel_encoder *encoder,
 		  const struct intel_crtc_state *crtc_state,
 		  int *n_entries)
@@ -1368,7 +1368,7 @@  cnl_get_buf_trans_edp(struct intel_encoder *encoder, int *n_entries)
 	}
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 cnl_get_buf_trans(struct intel_encoder *encoder,
 		  const struct intel_crtc_state *crtc_state,
 		  int *n_entries)
@@ -1422,7 +1422,7 @@  icl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
 	return icl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 icl_get_combo_buf_trans(struct intel_encoder *encoder,
 			const struct intel_crtc_state *crtc_state,
 			int *n_entries)
@@ -1458,7 +1458,7 @@  icl_get_mg_buf_trans_dp(struct intel_encoder *encoder,
 	}
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 icl_get_mg_buf_trans(struct intel_encoder *encoder,
 		     const struct intel_crtc_state *crtc_state,
 		     int *n_entries)
@@ -1502,7 +1502,7 @@  ehl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
 	return ehl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 ehl_get_combo_buf_trans(struct intel_encoder *encoder,
 			const struct intel_crtc_state *crtc_state,
 			int *n_entries)
@@ -1553,7 +1553,7 @@  jsl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
 	return jsl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 jsl_get_combo_buf_trans(struct intel_encoder *encoder,
 			const struct intel_crtc_state *crtc_state,
 			int *n_entries)
@@ -1626,7 +1626,7 @@  tgl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
 	return tgl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 tgl_get_combo_buf_trans(struct intel_encoder *encoder,
 			const struct intel_crtc_state *crtc_state,
 			int *n_entries)
@@ -1662,7 +1662,7 @@  tgl_get_dkl_buf_trans_dp(struct intel_encoder *encoder,
 	}
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 tgl_get_dkl_buf_trans(struct intel_encoder *encoder,
 		      const struct intel_crtc_state *crtc_state,
 		      int *n_entries)
@@ -1687,7 +1687,7 @@  adlp_get_dkl_buf_trans_dp(struct intel_encoder *encoder,
 	}
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 adlp_get_dkl_buf_trans(struct intel_encoder *encoder,
 		       const struct intel_crtc_state *crtc_state,
 		       int *n_entries)
@@ -1703,28 +1703,10 @@  int intel_ddi_hdmi_num_entries(struct intel_encoder *encoder,
 			       int *default_entry)
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	enum phy phy = intel_port_to_phy(dev_priv, encoder->port);
-	const struct intel_ddi_buf_trans *ddi_translations = NULL;
+	const struct intel_ddi_buf_trans *ddi_translations;
 	int n_entries;
 
-	if (DISPLAY_VER(dev_priv) >= 12) {
-		if (intel_phy_is_combo(dev_priv, phy))
-			ddi_translations = tgl_get_combo_buf_trans_hdmi(encoder, crtc_state, &n_entries);
-		else
-			ddi_translations = tgl_get_dkl_buf_trans_hdmi(encoder, crtc_state, &n_entries);
-	} else if (DISPLAY_VER(dev_priv) == 11) {
-		if (intel_phy_is_combo(dev_priv, phy))
-			ddi_translations = icl_get_combo_buf_trans_hdmi(encoder, crtc_state, &n_entries);
-		else
-			ddi_translations = icl_get_mg_buf_trans_hdmi(encoder, crtc_state, &n_entries);
-	} else if (IS_CANNONLAKE(dev_priv)) {
-		ddi_translations = cnl_get_buf_trans_hdmi(encoder, &n_entries);
-	} else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) {
-		ddi_translations = bxt_get_buf_trans_hdmi(encoder, &n_entries);
-	} else if (DISPLAY_VER(dev_priv) == 9 ||
-		   IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv)) {
-		ddi_translations = hsw_get_buf_trans_hdmi(encoder, &n_entries);
-	}
+	ddi_translations = encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 
 	if (drm_WARN_ON(&dev_priv->drm, !ddi_translations)) {
 		*default_entry = 0;
@@ -1735,3 +1717,36 @@  int intel_ddi_hdmi_num_entries(struct intel_encoder *encoder,
 
 	return n_entries;
 }
+
+void intel_ddi_buf_trans_init(struct intel_encoder *encoder)
+{
+	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
+	enum phy phy = intel_port_to_phy(i915, encoder->port);
+
+	if (IS_ALDERLAKE_P(i915)) {
+		if (intel_phy_is_combo(i915, phy))
+			encoder->get_buf_trans = tgl_get_combo_buf_trans;
+		else
+			encoder->get_buf_trans = adlp_get_dkl_buf_trans;
+	} else if (DISPLAY_VER(i915) >= 12) {
+		if (intel_phy_is_combo(i915, phy))
+			encoder->get_buf_trans = tgl_get_combo_buf_trans;
+		else
+			encoder->get_buf_trans = tgl_get_dkl_buf_trans;
+	} else if (DISPLAY_VER(i915) == 11) {
+		if (IS_PLATFORM(i915, INTEL_JASPERLAKE))
+			encoder->get_buf_trans = jsl_get_combo_buf_trans;
+		else if (IS_PLATFORM(i915, INTEL_ELKHARTLAKE))
+			encoder->get_buf_trans = ehl_get_combo_buf_trans;
+		else if (intel_phy_is_combo(i915, phy))
+			encoder->get_buf_trans = icl_get_combo_buf_trans;
+		else
+			encoder->get_buf_trans = icl_get_mg_buf_trans;
+	} else if (IS_CANNONLAKE(i915)) {
+		encoder->get_buf_trans = cnl_get_buf_trans;
+	} else if (IS_GEMINILAKE(i915) || IS_BROXTON(i915)) {
+		encoder->get_buf_trans = bxt_get_buf_trans;
+	} else {
+		encoder->get_buf_trans = hsw_get_buf_trans;
+	}
+}
diff --git a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
index 879f1deec3c8..05226eb46cd6 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
+++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
@@ -65,48 +65,6 @@  int intel_ddi_hdmi_num_entries(struct intel_encoder *encoder,
 			       const struct intel_crtc_state *crtc_state,
 			       int *default_entry);
 
-const struct intel_ddi_buf_trans *
-hsw_get_buf_trans(struct intel_encoder *encoder,
-		  const struct intel_crtc_state *crtc_state,
-		  int *n_entries);
-
-const struct intel_ddi_buf_trans *
-bxt_get_buf_trans(struct intel_encoder *encoder,
-		  const struct intel_crtc_state *crtc_state,
-		  int *n_entries);
-
-const struct intel_ddi_buf_trans *
-adlp_get_dkl_buf_trans(struct intel_encoder *encoder,
-		       const struct intel_crtc_state *crtc_state,
-		       int *n_entries);
-const struct intel_ddi_buf_trans *
-tgl_get_combo_buf_trans(struct intel_encoder *encoder,
-			const struct intel_crtc_state *crtc_state,
-			int *n_entries);
-const struct intel_ddi_buf_trans *
-tgl_get_dkl_buf_trans(struct intel_encoder *encoder,
-		      const struct intel_crtc_state *crtc_state,
-		      int *n_entries);
-const struct intel_ddi_buf_trans *
-jsl_get_combo_buf_trans(struct intel_encoder *encoder,
-			const struct intel_crtc_state *crtc_state,
-			int *n_entries);
-const struct intel_ddi_buf_trans *
-ehl_get_combo_buf_trans(struct intel_encoder *encoder,
-			const struct intel_crtc_state *crtc_state,
-			int *n_entries);
-const struct intel_ddi_buf_trans *
-icl_get_combo_buf_trans(struct intel_encoder *encoder,
-			const struct intel_crtc_state *crtc_state,
-			int *n_entries);
-const struct intel_ddi_buf_trans *
-icl_get_mg_buf_trans(struct intel_encoder *encoder,
-		     const struct intel_crtc_state *crtc_state,
-		     int *n_entries);
-
-const struct intel_ddi_buf_trans *
-cnl_get_buf_trans(struct intel_encoder *encoder,
-		  const struct intel_crtc_state *crtc_state,
-		  int *n_entries);
+void intel_ddi_buf_trans_init(struct intel_encoder *encoder);
 
 #endif
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index b8d1f702d808..d4a0994f8619 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -48,6 +48,7 @@ 
 
 struct drm_printer;
 struct __intel_global_objs_state;
+struct intel_ddi_buf_trans;
 
 /*
  * Display related stuff
@@ -263,6 +264,9 @@  struct intel_encoder {
 	 * Returns whether the port clock is enabled or not.
 	 */
 	bool (*is_clock_enabled)(struct intel_encoder *encoder);
+	const struct intel_ddi_buf_trans *(*get_buf_trans)(struct intel_encoder *encoder,
+							   const struct intel_crtc_state *crtc_state,
+							   int *n_entries);
 	enum hpd_pin hpd_pin;
 	enum intel_display_power_domain power_domain;
 	/* for communication with audio component; protected by av_mutex */
diff --git a/drivers/gpu/drm/i915/display/intel_fdi.c b/drivers/gpu/drm/i915/display/intel_fdi.c
index c602ed17c4fb..15ea28726e7a 100644
--- a/drivers/gpu/drm/i915/display/intel_fdi.c
+++ b/drivers/gpu/drm/i915/display/intel_fdi.c
@@ -4,7 +4,6 @@ 
  */
 #include "intel_atomic.h"
 #include "intel_ddi.h"
-#include "intel_ddi_buf_trans.h"
 #include "intel_de.h"
 #include "intel_display_types.h"
 #include "intel_fdi.h"
@@ -569,7 +568,7 @@  void hsw_fdi_link_train(struct intel_encoder *encoder,
 	u32 temp, i, rx_ctl_val;
 	int n_entries;
 
-	hsw_get_buf_trans(encoder, crtc_state, &n_entries);
+	encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 
 	hsw_prepare_dp_ddi_buffers(encoder, crtc_state);