[Intel-gfx] [PATCH v2 05/10] drm/i915: Integrate BXT into intel_ddi_dp_voltage_max()
James Ausmus
james.ausmus at intel.com
Wed Oct 18 16:51:00 UTC 2017
On Mon, Oct 16, 2017 at 05:57:00PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> Make BXT less special by following the CNL approach and handling
> it in intel_ddi_dp_voltage_max() alognside every other DDI platform.
>
> v2: Clean up the argument types to bxt_ddi_vswing_sequence() while at it
>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
Reviewed-by: James Ausmus <james.ausmus at intel.com>
> ---
> drivers/gpu/drm/i915/intel_ddi.c | 67 ++++++++++++++++++++++++++--------------
> drivers/gpu/drm/i915/intel_dp.c | 4 +--
> 2 files changed, 45 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index f61b6c20005e..2d886148a653 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -659,6 +659,31 @@ intel_ddi_get_buf_trans_hdmi(struct drm_i915_private *dev_priv,
> return NULL;
> }
>
> +static const struct bxt_ddi_buf_trans *
> +bxt_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
> +{
> + *n_entries = ARRAY_SIZE(bxt_ddi_translations_dp);
> + return bxt_ddi_translations_dp;
> +}
> +
> +static const struct bxt_ddi_buf_trans *
> +bxt_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
> +{
> + if (dev_priv->vbt.edp.low_vswing) {
> + *n_entries = ARRAY_SIZE(bxt_ddi_translations_edp);
> + return bxt_ddi_translations_edp;
> + }
> +
> + return bxt_get_buf_trans_dp(dev_priv, n_entries);
> +}
> +
> +static const struct bxt_ddi_buf_trans *
> +bxt_get_buf_trans_hdmi(struct drm_i915_private *dev_priv, int *n_entries)
> +{
> + *n_entries = ARRAY_SIZE(bxt_ddi_translations_hdmi);
> + return bxt_ddi_translations_hdmi;
> +}
> +
> static const struct cnl_ddi_buf_trans *
> cnl_get_buf_trans_hdmi(struct drm_i915_private *dev_priv, int *n_entries)
> {
> @@ -1831,27 +1856,20 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder,
> _skl_ddi_set_iboost(dev_priv, PORT_E, iboost);
> }
>
> -static void bxt_ddi_vswing_sequence(struct drm_i915_private *dev_priv,
> - u32 level, enum port port, int type)
> +static void bxt_ddi_vswing_sequence(struct intel_encoder *encoder,
> + int level, enum intel_output_type type)
> {
> + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> const struct bxt_ddi_buf_trans *ddi_translations;
> - u32 n_entries, i;
> + enum port port = encoder->port;
> + int n_entries, i;
>
> - if (type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp.low_vswing) {
> - n_entries = ARRAY_SIZE(bxt_ddi_translations_edp);
> - ddi_translations = bxt_ddi_translations_edp;
> - } else if (type == INTEL_OUTPUT_DP
> - || type == INTEL_OUTPUT_EDP) {
> - n_entries = ARRAY_SIZE(bxt_ddi_translations_dp);
> - ddi_translations = bxt_ddi_translations_dp;
> - } else if (type == INTEL_OUTPUT_HDMI) {
> - n_entries = ARRAY_SIZE(bxt_ddi_translations_hdmi);
> - ddi_translations = bxt_ddi_translations_hdmi;
> - } else {
> - DRM_DEBUG_KMS("Vswing programming not done for encoder %d\n",
> - type);
> - return;
> - }
> + if (type == INTEL_OUTPUT_HDMI)
> + ddi_translations = bxt_get_buf_trans_hdmi(dev_priv, &n_entries);
> + else if (type == INTEL_OUTPUT_EDP)
> + ddi_translations = bxt_get_buf_trans_edp(dev_priv, &n_entries);
> + else
> + ddi_translations = bxt_get_buf_trans_dp(dev_priv, &n_entries);
>
> /* Check if default value has to be used */
> if (level >= n_entries ||
> @@ -1881,6 +1899,11 @@ u8 intel_ddi_dp_voltage_max(struct intel_encoder *encoder)
> cnl_get_buf_trans_edp(dev_priv, &n_entries);
> else
> cnl_get_buf_trans_dp(dev_priv, &n_entries);
> + } else if (IS_GEN9_LP(dev_priv)) {
> + if (encoder->type == INTEL_OUTPUT_EDP)
> + bxt_get_buf_trans_edp(dev_priv, &n_entries);
> + else
> + bxt_get_buf_trans_dp(dev_priv, &n_entries);
> } else {
> if (encoder->type == INTEL_OUTPUT_EDP)
> intel_ddi_get_buf_trans_edp(dev_priv, &n_entries);
> @@ -2063,13 +2086,12 @@ u32 bxt_signal_levels(struct intel_dp *intel_dp)
> struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
> struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
> struct intel_encoder *encoder = &dport->base;
> - enum port port = dport->port;
> u32 level = intel_ddi_dp_level(intel_dp);
>
> if (IS_CANNONLAKE(dev_priv))
> cnl_ddi_vswing_sequence(encoder, level);
> else
> - bxt_ddi_vswing_sequence(dev_priv, level, port, encoder->type);
> + bxt_ddi_vswing_sequence(encoder, level, encoder->type);
>
> return 0;
> }
> @@ -2168,7 +2190,7 @@ static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
> if (IS_CANNONLAKE(dev_priv))
> cnl_ddi_vswing_sequence(encoder, level);
> else if (IS_GEN9_LP(dev_priv))
> - bxt_ddi_vswing_sequence(dev_priv, level, port, encoder->type);
> + bxt_ddi_vswing_sequence(encoder, level, encoder->type);
> else
> intel_prepare_dp_ddi_buffers(encoder);
>
> @@ -2199,8 +2221,7 @@ static void intel_ddi_pre_enable_hdmi(struct intel_encoder *encoder,
> if (IS_CANNONLAKE(dev_priv))
> cnl_ddi_vswing_sequence(encoder, level);
> else if (IS_GEN9_LP(dev_priv))
> - bxt_ddi_vswing_sequence(dev_priv, level, port,
> - INTEL_OUTPUT_HDMI);
> + bxt_ddi_vswing_sequence(encoder, level, INTEL_OUTPUT_HDMI);
> else
> intel_prepare_hdmi_ddi_buffers(encoder, level);
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 4b65cf137f79..aa75f55eeb61 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -3155,9 +3155,7 @@ intel_dp_voltage_max(struct intel_dp *intel_dp)
> struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));
> enum port port = dp_to_dig_port(intel_dp)->port;
>
> - if (IS_GEN9_LP(dev_priv))
> - return DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
> - else if (INTEL_GEN(dev_priv) >= 9) {
> + if (INTEL_GEN(dev_priv) >= 9) {
> struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
> return intel_ddi_dp_voltage_max(encoder);
> } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> --
> 2.13.6
>
> _______________________________________________
> 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