From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> All the other platforms handle the output_type stuff in their *_get_buf_trans() functions. Do the same for hsw/bdw/skl. Reviewed-by: Jani Nikula <jani.nikula@xxxxxxxxx> Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> --- drivers/gpu/drm/i915/display/intel_ddi.c | 27 ++++-------- .../drm/i915/display/intel_ddi_buf_trans.c | 43 +++++++++++++------ .../drm/i915/display/intel_ddi_buf_trans.h | 10 ++--- drivers/gpu/drm/i915/display/intel_fdi.c | 2 +- 4 files changed, 43 insertions(+), 39 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c index 107e4903b697..33e94030090f 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi.c +++ b/drivers/gpu/drm/i915/display/intel_ddi.c @@ -104,12 +104,10 @@ void hsw_prepare_dp_ddi_buffers(struct intel_encoder *encoder, enum port port = encoder->port; const struct hsw_ddi_buf_trans *ddi_translations; - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_ANALOG)) - ddi_translations = hsw_ddi_get_buf_trans_fdi(dev_priv, &n_entries); - else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP)) - ddi_translations = hsw_ddi_get_buf_trans_edp(encoder, &n_entries); - else - ddi_translations = hsw_ddi_get_buf_trans_dp(encoder, &n_entries); + ddi_translations = hsw_get_buf_trans(encoder, crtc_state, &n_entries); + + if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations)) + return; /* If we're boosting the current, set bit 31 of trans1 */ if (DISPLAY_VER(dev_priv) == 9 && !IS_BROXTON(dev_priv) && @@ -130,6 +128,7 @@ void hsw_prepare_dp_ddi_buffers(struct intel_encoder *encoder, * HDMI/DVI use cases. */ static void hsw_prepare_hdmi_ddi_buffers(struct intel_encoder *encoder, + const struct intel_crtc_state *crtc_state, int level) { struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); @@ -138,7 +137,7 @@ static void hsw_prepare_hdmi_ddi_buffers(struct intel_encoder *encoder, enum port port = encoder->port; const struct hsw_ddi_buf_trans *ddi_translations; - ddi_translations = hsw_ddi_get_buf_trans_hdmi(encoder, &n_entries); + ddi_translations = hsw_get_buf_trans(encoder, crtc_state, &n_entries); if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations)) return; @@ -948,12 +947,7 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder, const struct hsw_ddi_buf_trans *ddi_translations; int n_entries; - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) - ddi_translations = hsw_ddi_get_buf_trans_hdmi(encoder, &n_entries); - else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP)) - ddi_translations = hsw_ddi_get_buf_trans_edp(encoder, &n_entries); - else - ddi_translations = hsw_ddi_get_buf_trans_dp(encoder, &n_entries); + ddi_translations = hsw_get_buf_trans(encoder, crtc_state, &n_entries); if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations)) return; @@ -1027,10 +1021,7 @@ static u8 intel_ddi_dp_voltage_max(struct intel_dp *intel_dp, } else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) { bxt_get_buf_trans(encoder, crtc_state, &n_entries); } else { - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP)) - hsw_ddi_get_buf_trans_edp(encoder, &n_entries); - else - hsw_ddi_get_buf_trans_dp(encoder, &n_entries); + hsw_get_buf_trans(encoder, crtc_state, &n_entries); } if (drm_WARN_ON(&dev_priv->drm, n_entries < 1)) @@ -3146,7 +3137,7 @@ static void intel_enable_ddi_hdmi(struct intel_atomic_state *state, else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) bxt_ddi_vswing_sequence(encoder, crtc_state, level); else - hsw_prepare_hdmi_ddi_buffers(encoder, level); + hsw_prepare_hdmi_ddi_buffers(encoder, crtc_state, level); if (DISPLAY_VER(dev_priv) == 9 && !IS_BROXTON(dev_priv)) skl_ddi_set_iboost(encoder, crtc_state, level); 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 e8e46d7a6cef..f7b7178363e8 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c +++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c @@ -875,8 +875,8 @@ static int skl_buf_trans_num_entries(enum port port, int n_entries) return min(n_entries, 9); } -const struct hsw_ddi_buf_trans * -hsw_ddi_get_buf_trans_dp(struct intel_encoder *encoder, int *n_entries) +static const struct hsw_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); @@ -904,8 +904,8 @@ hsw_ddi_get_buf_trans_dp(struct intel_encoder *encoder, int *n_entries) return NULL; } -const struct hsw_ddi_buf_trans * -hsw_ddi_get_buf_trans_edp(struct intel_encoder *encoder, int *n_entries) +static const struct hsw_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); @@ -925,10 +925,12 @@ hsw_ddi_get_buf_trans_edp(struct intel_encoder *encoder, int *n_entries) return NULL; } -const struct hsw_ddi_buf_trans * -hsw_ddi_get_buf_trans_fdi(struct drm_i915_private *dev_priv, - int *n_entries) +static const struct hsw_ddi_buf_trans * +hsw_get_buf_trans_fdi(struct intel_encoder *encoder, + int *n_entries) { + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); + if (IS_BROADWELL(dev_priv)) { *n_entries = ARRAY_SIZE(bdw_ddi_translations_fdi); return bdw_ddi_translations_fdi; @@ -941,9 +943,9 @@ hsw_ddi_get_buf_trans_fdi(struct drm_i915_private *dev_priv, return NULL; } -const struct hsw_ddi_buf_trans * -hsw_ddi_get_buf_trans_hdmi(struct intel_encoder *encoder, - int *n_entries) +static const struct hsw_ddi_buf_trans * +hsw_get_buf_trans_hdmi(struct intel_encoder *encoder, + int *n_entries) { struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); @@ -961,6 +963,21 @@ hsw_ddi_get_buf_trans_hdmi(struct intel_encoder *encoder, return NULL; } +const struct hsw_ddi_buf_trans * +hsw_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); + else + return hsw_get_buf_trans_dp(encoder, n_entries); +} + static const struct bxt_ddi_buf_trans * bxt_get_buf_trans_dp(struct intel_encoder *encoder, int *n_entries) { @@ -1427,13 +1444,13 @@ int intel_ddi_hdmi_num_entries(struct intel_encoder *encoder, bxt_get_buf_trans_hdmi(encoder, &n_entries); *default_entry = n_entries - 1; } else if (DISPLAY_VER(dev_priv) == 9) { - hsw_ddi_get_buf_trans_hdmi(encoder, &n_entries); + hsw_get_buf_trans_hdmi(encoder, &n_entries); *default_entry = 8; } else if (IS_BROADWELL(dev_priv)) { - hsw_ddi_get_buf_trans_hdmi(encoder, &n_entries); + hsw_get_buf_trans_hdmi(encoder, &n_entries); *default_entry = 7; } else if (IS_HASWELL(dev_priv)) { - hsw_ddi_get_buf_trans_hdmi(encoder, &n_entries); + hsw_get_buf_trans_hdmi(encoder, &n_entries); *default_entry = 6; } else { drm_WARN(&dev_priv->drm, 1, "ddi translation table missing\n"); 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 1b8d3ef7f06f..428f1f343341 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h +++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h @@ -52,13 +52,9 @@ int intel_ddi_hdmi_num_entries(struct intel_encoder *encoder, int *default_entry); const struct hsw_ddi_buf_trans * -hsw_ddi_get_buf_trans_edp(struct intel_encoder *encoder, int *n_entries); -const struct hsw_ddi_buf_trans * -hsw_ddi_get_buf_trans_fdi(struct drm_i915_private *dev_priv, int *n_entries); -const struct hsw_ddi_buf_trans * -hsw_ddi_get_buf_trans_hdmi(struct intel_encoder *encoder, int *n_entries); -const struct hsw_ddi_buf_trans * -hsw_ddi_get_buf_trans_dp(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); const struct bxt_ddi_buf_trans * bxt_get_buf_trans(struct intel_encoder *encoder, diff --git a/drivers/gpu/drm/i915/display/intel_fdi.c b/drivers/gpu/drm/i915/display/intel_fdi.c index a806e1b83613..c602ed17c4fb 100644 --- a/drivers/gpu/drm/i915/display/intel_fdi.c +++ b/drivers/gpu/drm/i915/display/intel_fdi.c @@ -569,7 +569,7 @@ void hsw_fdi_link_train(struct intel_encoder *encoder, u32 temp, i, rx_ctl_val; int n_entries; - hsw_ddi_get_buf_trans_fdi(dev_priv, &n_entries); + hsw_get_buf_trans(encoder, crtc_state, &n_entries); hsw_prepare_dp_ddi_buffers(encoder, crtc_state); -- 2.31.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx