On Wed, 21 Apr 2021, Ville Syrjala <ville.syrjala@xxxxxxxxxxxxxxx> wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Split the hsw/bdw/skl/kbl get_buf_trans() functions into > clean platform specific variants. One of the most obnoxious patches to review lately, but it was worth it. Reviewed-by: Jani Nikula <jani.nikula@xxxxxxxxx> > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > .../drm/i915/display/intel_ddi_buf_trans.c | 308 +++++++----------- > 1 file changed, 118 insertions(+), 190 deletions(-) > > 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 37a9c3b2c03c..1d78640c439e 100644 > --- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c > +++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c > @@ -1012,102 +1012,34 @@ intel_get_buf_trans(const struct intel_ddi_buf_trans *ddi_translations, int *num > } > > static const struct intel_ddi_buf_trans * > -bdw_get_buf_trans_edp(struct intel_encoder *encoder, int *n_entries) > +hsw_get_buf_trans(struct intel_encoder *encoder, > + const struct intel_crtc_state *crtc_state, > + int *n_entries) > { > - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > - > - if (dev_priv->vbt.edp.low_vswing) { > - return intel_get_buf_trans(&bdw_ddi_translations_edp, > - n_entries); > - } else { > - return intel_get_buf_trans(&bdw_ddi_translations_dp, > - n_entries); > - } > -} > - > -static const struct intel_ddi_buf_trans * > -skl_get_buf_trans_dp(struct intel_encoder *encoder, int *n_entries) > -{ > - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > - > - if (IS_SKL_ULX(dev_priv)) { > - return intel_get_buf_trans(&skl_y_ddi_translations_dp, > - n_entries); > - } else if (IS_SKL_ULT(dev_priv)) { > - return intel_get_buf_trans(&skl_u_ddi_translations_dp, > - n_entries); > - } else { > - return intel_get_buf_trans(&skl_ddi_translations_dp, > - n_entries); > - } > -} > - > -static const struct intel_ddi_buf_trans * > -kbl_get_buf_trans_dp(struct intel_encoder *encoder, int *n_entries) > -{ > - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > - > - if (IS_KBL_ULX(dev_priv) || > - IS_CFL_ULX(dev_priv) || > - IS_CML_ULX(dev_priv)) { > - return intel_get_buf_trans(&kbl_y_ddi_translations_dp, > - n_entries); > - } else if (IS_KBL_ULT(dev_priv) || > - IS_CFL_ULT(dev_priv) || > - IS_CML_ULT(dev_priv)) { > - return intel_get_buf_trans(&kbl_u_ddi_translations_dp, > - n_entries); > - } else { > - return intel_get_buf_trans(&kbl_ddi_translations_dp, > - n_entries); > - } > -} > - > -static const struct intel_ddi_buf_trans * > -skl_get_buf_trans_edp(struct intel_encoder *encoder, int *n_entries) > -{ > - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > - > - if (dev_priv->vbt.edp.low_vswing) { > - if (IS_SKL_ULX(dev_priv) || > - IS_KBL_ULX(dev_priv) || > - IS_CFL_ULX(dev_priv) || > - IS_CML_ULX(dev_priv)) { > - return intel_get_buf_trans(&skl_y_ddi_translations_edp, > - n_entries); > - } else if (IS_SKL_ULT(dev_priv) || > - IS_KBL_ULT(dev_priv) || > - IS_CFL_ULT(dev_priv) || > - IS_CML_ULT(dev_priv)) { > - return intel_get_buf_trans(&skl_u_ddi_translations_edp, > - n_entries); > - } else { > - return intel_get_buf_trans(&skl_ddi_translations_edp, > - n_entries); > - } > - } > - > - if (IS_KABYLAKE(dev_priv) || > - IS_COFFEELAKE(dev_priv) || > - IS_COMETLAKE(dev_priv)) > - return kbl_get_buf_trans_dp(encoder, n_entries); > + if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_ANALOG)) > + return intel_get_buf_trans(&hsw_ddi_translations_fdi, n_entries); > + else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) > + return intel_get_buf_trans(&hsw_ddi_translations_hdmi, n_entries); > else > - return skl_get_buf_trans_dp(encoder, n_entries); > + return intel_get_buf_trans(&hsw_ddi_translations_dp, n_entries); > } > > static const struct intel_ddi_buf_trans * > -skl_get_buf_trans_hdmi(struct drm_i915_private *dev_priv, int *n_entries) > +bdw_get_buf_trans(struct intel_encoder *encoder, > + const struct intel_crtc_state *crtc_state, > + int *n_entries) > { > - if (IS_SKL_ULX(dev_priv) || > - IS_KBL_ULX(dev_priv) || > - IS_CFL_ULX(dev_priv) || > - IS_CML_ULX(dev_priv)) { > - return intel_get_buf_trans(&skl_y_ddi_translations_hdmi, > - n_entries); > - } else { > - return intel_get_buf_trans(&skl_ddi_translations_hdmi, > - n_entries); > - } > + struct drm_i915_private *i915 = to_i915(encoder->base.dev); > + > + if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_ANALOG)) > + return intel_get_buf_trans(&bdw_ddi_translations_fdi, n_entries); > + else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) > + return intel_get_buf_trans(&bdw_ddi_translations_hdmi, n_entries); > + else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) && > + i915->vbt.edp.low_vswing) > + return intel_get_buf_trans(&bdw_ddi_translations_edp, n_entries); > + else > + return intel_get_buf_trans(&bdw_ddi_translations_dp, n_entries); > } > > static int skl_buf_trans_num_entries(enum port port, int n_entries) > @@ -1120,131 +1052,109 @@ static int skl_buf_trans_num_entries(enum port port, int n_entries) > } > > static const struct intel_ddi_buf_trans * > -hsw_get_buf_trans_dp(struct intel_encoder *encoder, int *n_entries) > -{ > - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > - > - if (IS_KABYLAKE(dev_priv) || > - IS_COFFEELAKE(dev_priv) || > - IS_COMETLAKE(dev_priv)) { > - const struct intel_ddi_buf_trans *ddi_translations = > - kbl_get_buf_trans_dp(encoder, n_entries); > - *n_entries = skl_buf_trans_num_entries(encoder->port, *n_entries); > - return ddi_translations; > - } else if (IS_SKYLAKE(dev_priv)) { > - const struct intel_ddi_buf_trans *ddi_translations = > - skl_get_buf_trans_dp(encoder, n_entries); > - *n_entries = skl_buf_trans_num_entries(encoder->port, *n_entries); > - return ddi_translations; > - } else if (IS_BROADWELL(dev_priv)) { > - return intel_get_buf_trans(&bdw_ddi_translations_dp, > - n_entries); > - } else if (IS_HASWELL(dev_priv)) { > - return intel_get_buf_trans(&hsw_ddi_translations_dp, > - n_entries); > - } > - > - *n_entries = 0; > - return NULL; > -} > - > -static const struct intel_ddi_buf_trans * > -hsw_get_buf_trans_edp(struct intel_encoder *encoder, int *n_entries) > -{ > - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > - > - if (DISPLAY_VER(dev_priv) == 9 && !IS_BROXTON(dev_priv)) { > - const struct intel_ddi_buf_trans *ddi_translations = > - skl_get_buf_trans_edp(encoder, n_entries); > - *n_entries = skl_buf_trans_num_entries(encoder->port, *n_entries); > - return ddi_translations; > - } else if (IS_BROADWELL(dev_priv)) { > - return bdw_get_buf_trans_edp(encoder, n_entries); > - } else if (IS_HASWELL(dev_priv)) { > - return intel_get_buf_trans(&hsw_ddi_translations_dp, > - n_entries); > - } > - > - *n_entries = 0; > - return NULL; > -} > - > -static const struct intel_ddi_buf_trans * > -hsw_get_buf_trans_fdi(struct intel_encoder *encoder, > +_skl_get_buf_trans_dp(struct intel_encoder *encoder, > + const struct intel_ddi_buf_trans *ddi_translations, > int *n_entries) > { > - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > + ddi_translations = intel_get_buf_trans(ddi_translations, n_entries); > + *n_entries = skl_buf_trans_num_entries(encoder->port, *n_entries); > + return ddi_translations; > +} > > - if (IS_BROADWELL(dev_priv)) { > - return intel_get_buf_trans(&bdw_ddi_translations_fdi, > - n_entries); > - } else if (IS_HASWELL(dev_priv)) { > - return intel_get_buf_trans(&hsw_ddi_translations_fdi, > - n_entries); > - } > +static const struct intel_ddi_buf_trans * > +skl_y_get_buf_trans(struct intel_encoder *encoder, > + const struct intel_crtc_state *crtc_state, > + int *n_entries) > +{ > + struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > - *n_entries = 0; > - return NULL; > + if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) > + return intel_get_buf_trans(&skl_y_ddi_translations_hdmi, n_entries); > + else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) && > + i915->vbt.edp.low_vswing) > + return _skl_get_buf_trans_dp(encoder, &skl_y_ddi_translations_edp, n_entries); > + else > + return _skl_get_buf_trans_dp(encoder, &skl_y_ddi_translations_dp, n_entries); > } > > static const struct intel_ddi_buf_trans * > -hsw_get_buf_trans_hdmi(struct intel_encoder *encoder, > - int *n_entries) > +skl_u_get_buf_trans(struct intel_encoder *encoder, > + const struct intel_crtc_state *crtc_state, > + int *n_entries) > { > - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > + struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > - if (DISPLAY_VER(dev_priv) == 9 && !IS_BROXTON(dev_priv)) { > - return skl_get_buf_trans_hdmi(dev_priv, n_entries); > - } else if (IS_BROADWELL(dev_priv)) { > - return intel_get_buf_trans(&bdw_ddi_translations_hdmi, > - n_entries); > - } else if (IS_HASWELL(dev_priv)) { > - return intel_get_buf_trans(&hsw_ddi_translations_hdmi, > - n_entries); > - } > - > - *n_entries = 0; > - return NULL; > + if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) > + return intel_get_buf_trans(&skl_ddi_translations_hdmi, n_entries); > + else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) && > + i915->vbt.edp.low_vswing) > + return _skl_get_buf_trans_dp(encoder, &skl_u_ddi_translations_edp, n_entries); > + else > + return _skl_get_buf_trans_dp(encoder, &skl_u_ddi_translations_dp, n_entries); > } > > static const struct intel_ddi_buf_trans * > -hsw_get_buf_trans(struct intel_encoder *encoder, > +skl_get_buf_trans(struct intel_encoder *encoder, > const struct intel_crtc_state *crtc_state, > int *n_entries) > { > - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_ANALOG)) > - return hsw_get_buf_trans_fdi(encoder, n_entries); > - else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) > - return hsw_get_buf_trans_hdmi(encoder, n_entries); > - else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP)) > - return hsw_get_buf_trans_edp(encoder, n_entries); > + struct drm_i915_private *i915 = to_i915(encoder->base.dev); > + > + if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) > + return intel_get_buf_trans(&skl_ddi_translations_hdmi, n_entries); > + else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) && > + i915->vbt.edp.low_vswing) > + return _skl_get_buf_trans_dp(encoder, &skl_ddi_translations_edp, n_entries); > else > - return hsw_get_buf_trans_dp(encoder, n_entries); > + return _skl_get_buf_trans_dp(encoder, &skl_ddi_translations_dp, n_entries); > } > > static const struct intel_ddi_buf_trans * > -bxt_get_buf_trans_dp(struct intel_encoder *encoder, int *n_entries) > +kbl_y_get_buf_trans(struct intel_encoder *encoder, > + const struct intel_crtc_state *crtc_state, > + int *n_entries) > { > - return intel_get_buf_trans(&bxt_ddi_translations_dp, n_entries); > + struct drm_i915_private *i915 = to_i915(encoder->base.dev); > + > + if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) > + return intel_get_buf_trans(&skl_y_ddi_translations_hdmi, n_entries); > + else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) && > + i915->vbt.edp.low_vswing) > + return _skl_get_buf_trans_dp(encoder, &skl_y_ddi_translations_edp, n_entries); > + else > + return _skl_get_buf_trans_dp(encoder, &kbl_y_ddi_translations_dp, n_entries); > } > > static const struct intel_ddi_buf_trans * > -bxt_get_buf_trans_edp(struct intel_encoder *encoder, int *n_entries) > +kbl_u_get_buf_trans(struct intel_encoder *encoder, > + const struct intel_crtc_state *crtc_state, > + int *n_entries) > { > - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > - > - if (dev_priv->vbt.edp.low_vswing) { > - return intel_get_buf_trans(&bxt_ddi_translations_edp, > - n_entries); > - } > + struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > - return bxt_get_buf_trans_dp(encoder, n_entries); > + if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) > + return intel_get_buf_trans(&skl_ddi_translations_hdmi, n_entries); > + else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) && > + i915->vbt.edp.low_vswing) > + return _skl_get_buf_trans_dp(encoder, &skl_u_ddi_translations_edp, n_entries); > + else > + return _skl_get_buf_trans_dp(encoder, &kbl_u_ddi_translations_dp, n_entries); > } > > static const struct intel_ddi_buf_trans * > -bxt_get_buf_trans_hdmi(struct intel_encoder *encoder, int *n_entries) > +kbl_get_buf_trans(struct intel_encoder *encoder, > + const struct intel_crtc_state *crtc_state, > + int *n_entries) > { > - return intel_get_buf_trans(&bxt_ddi_translations_hdmi, n_entries); > + struct drm_i915_private *i915 = to_i915(encoder->base.dev); > + > + if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) > + return intel_get_buf_trans(&skl_ddi_translations_hdmi, n_entries); > + else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) && > + i915->vbt.edp.low_vswing) > + return _skl_get_buf_trans_dp(encoder, &skl_ddi_translations_edp, n_entries); > + else > + return _skl_get_buf_trans_dp(encoder, &kbl_ddi_translations_dp, n_entries); > } > > static const struct intel_ddi_buf_trans * > @@ -1252,11 +1162,15 @@ bxt_get_buf_trans(struct intel_encoder *encoder, > const struct intel_crtc_state *crtc_state, > int *n_entries) > { > + struct drm_i915_private *i915 = to_i915(encoder->base.dev); > + > if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) > - return bxt_get_buf_trans_hdmi(encoder, n_entries); > - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP)) > - return bxt_get_buf_trans_edp(encoder, n_entries); > - return bxt_get_buf_trans_dp(encoder, n_entries); > + return intel_get_buf_trans(&bxt_ddi_translations_hdmi, n_entries); > + else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) && > + i915->vbt.edp.low_vswing) > + return intel_get_buf_trans(&bxt_ddi_translations_edp, n_entries); > + else > + return intel_get_buf_trans(&bxt_ddi_translations_dp, n_entries); > } > > static const struct intel_ddi_buf_trans * > @@ -1677,6 +1591,20 @@ void intel_ddi_buf_trans_init(struct intel_encoder *encoder) > 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 if (IS_CML_ULX(i915) || IS_CFL_ULX(i915) || IS_KBL_ULX(i915)) { > + encoder->get_buf_trans = kbl_y_get_buf_trans; > + } else if (IS_CML_ULT(i915) || IS_CFL_ULT(i915) || IS_KBL_ULT(i915)) { > + encoder->get_buf_trans = kbl_u_get_buf_trans; > + } else if (IS_COMETLAKE(i915) || IS_COFFEELAKE(i915) || IS_KABYLAKE(i915)) { > + encoder->get_buf_trans = kbl_get_buf_trans; > + } else if (IS_SKL_ULX(i915)) { > + encoder->get_buf_trans = skl_y_get_buf_trans; > + } else if (IS_SKL_ULT(i915)) { > + encoder->get_buf_trans = skl_u_get_buf_trans; > + } else if (IS_SKYLAKE(i915)) { > + encoder->get_buf_trans = skl_get_buf_trans; > + } else if (IS_BROADWELL(i915)) { > + encoder->get_buf_trans = bdw_get_buf_trans; > } else { > encoder->get_buf_trans = hsw_get_buf_trans; > } -- Jani Nikula, Intel Open Source Graphics Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx