diff mbox

[v2,03/10] drm/i915: Pass the encoder type explicitly to skl_set_iboost()

Message ID 20171016145705.11780-4-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ville Syrjälä Oct. 16, 2017, 2:56 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

encoder->type isn't reliable for DP/HDMI encoders, so pass the type
explicity to skl_set_iboost(). Also take the opportunity to streamline
the code.

v2: Clean up the argument types to skl_ddi_set_iboost() while at it

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_ddi.c | 59 ++++++++++++++++------------------------
 1 file changed, 23 insertions(+), 36 deletions(-)

Comments

James Ausmus Oct. 17, 2017, 12:02 a.m. UTC | #1
On Mon, Oct 16, 2017 at 7:56 AM, Ville Syrjala
<ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> encoder->type isn't reliable for DP/HDMI encoders, so pass the type
> explicity to skl_set_iboost(). Also take the opportunity to streamline
> the code.
>
> v2: Clean up the argument types to skl_ddi_set_iboost() while at it
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

That's a much cleaner read now!

Reviewed-by: James Ausmus <james.ausmus@intel.com>

> ---
>  drivers/gpu/drm/i915/intel_ddi.c | 59 ++++++++++++++++------------------------
>  1 file changed, 23 insertions(+), 36 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index e6c884a6d408..cf0b2d3de15f 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -1788,49 +1788,36 @@ static void _skl_ddi_set_iboost(struct drm_i915_private *dev_priv,
>         I915_WRITE(DISPIO_CR_TX_BMU_CR0, tmp);
>  }
>
> -static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
> +static void skl_ddi_set_iboost(struct intel_encoder *encoder,
> +                              int level, enum intel_output_type type)
>  {
>         struct intel_digital_port *intel_dig_port = enc_to_dig_port(&encoder->base);
>         struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
>         enum port port = intel_dig_port->port;
> -       int type = encoder->type;
> -       const struct ddi_buf_trans *ddi_translations;
>         uint8_t iboost;
> -       uint8_t dp_iboost, hdmi_iboost;
> -       int n_entries;
>
> -       /* VBT may override standard boost values */
> -       dp_iboost = dev_priv->vbt.ddi_port_info[port].dp_boost_level;
> -       hdmi_iboost = dev_priv->vbt.ddi_port_info[port].hdmi_boost_level;
> +       if (type == INTEL_OUTPUT_HDMI)
> +               iboost = dev_priv->vbt.ddi_port_info[port].hdmi_boost_level;
> +       else
> +               iboost = dev_priv->vbt.ddi_port_info[port].dp_boost_level;
>
> -       if (type == INTEL_OUTPUT_DP) {
> -               if (dp_iboost) {
> -                       iboost = dp_iboost;
> -               } else {
> -                       ddi_translations = intel_ddi_get_buf_trans_dp(dev_priv, &n_entries);
> -                       iboost = ddi_translations[level].i_boost;
> -               }
> -       } else if (type == INTEL_OUTPUT_EDP) {
> -               if (dp_iboost) {
> -                       iboost = dp_iboost;
> -               } else {
> -                       ddi_translations = intel_ddi_get_buf_trans_edp(dev_priv, &n_entries);
> +       if (iboost == 0) {
> +               const struct ddi_buf_trans *ddi_translations;
> +               int n_entries;
>
> -                       if (WARN_ON(port != PORT_A &&
> -                                   port != PORT_E && n_entries > 9))
> -                               n_entries = 9;
> -
> -                       iboost = ddi_translations[level].i_boost;
> -               }
> -       } else if (type == INTEL_OUTPUT_HDMI) {
> -               if (hdmi_iboost) {
> -                       iboost = hdmi_iboost;
> -               } else {
> +               if (type == INTEL_OUTPUT_HDMI)
>                         ddi_translations = intel_ddi_get_buf_trans_hdmi(dev_priv, &n_entries);
> -                       iboost = ddi_translations[level].i_boost;
> -               }
> -       } else {
> -               return;
> +               else if (type == INTEL_OUTPUT_EDP)
> +                       ddi_translations = intel_ddi_get_buf_trans_edp(dev_priv, &n_entries);
> +               else
> +                       ddi_translations = intel_ddi_get_buf_trans_dp(dev_priv, &n_entries);
> +
> +               if (WARN_ON(type != INTEL_OUTPUT_HDMI &&
> +                           port != PORT_A &&
> +                           port != PORT_E && n_entries > 9))
> +                       n_entries = 9;
> +
> +               iboost = ddi_translations[level].i_boost;
>         }
>
>         /* Make sure that the requested I_boost is valid */
> @@ -2096,7 +2083,7 @@ uint32_t ddi_signal_levels(struct intel_dp *intel_dp)
>         uint32_t level = intel_ddi_dp_level(intel_dp);
>
>         if (IS_GEN9_BC(dev_priv))
> -           skl_ddi_set_iboost(encoder, level);
> +               skl_ddi_set_iboost(encoder, level, encoder->type);
>
>         return DDI_BUF_TRANS_SELECT(level);
>  }
> @@ -2219,7 +2206,7 @@ static void intel_ddi_pre_enable_hdmi(struct intel_encoder *encoder,
>                 intel_prepare_hdmi_ddi_buffers(encoder);
>
>         if (IS_GEN9_BC(dev_priv))
> -               skl_ddi_set_iboost(encoder, level);
> +               skl_ddi_set_iboost(encoder, level, INTEL_OUTPUT_HDMI);
>
>         intel_dig_port->set_infoframes(&encoder->base,
>                                        crtc_state->has_infoframe,
> --
> 2.13.6
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index e6c884a6d408..cf0b2d3de15f 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -1788,49 +1788,36 @@  static void _skl_ddi_set_iboost(struct drm_i915_private *dev_priv,
 	I915_WRITE(DISPIO_CR_TX_BMU_CR0, tmp);
 }
 
-static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
+static void skl_ddi_set_iboost(struct intel_encoder *encoder,
+			       int level, enum intel_output_type type)
 {
 	struct intel_digital_port *intel_dig_port = enc_to_dig_port(&encoder->base);
 	struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
 	enum port port = intel_dig_port->port;
-	int type = encoder->type;
-	const struct ddi_buf_trans *ddi_translations;
 	uint8_t iboost;
-	uint8_t dp_iboost, hdmi_iboost;
-	int n_entries;
 
-	/* VBT may override standard boost values */
-	dp_iboost = dev_priv->vbt.ddi_port_info[port].dp_boost_level;
-	hdmi_iboost = dev_priv->vbt.ddi_port_info[port].hdmi_boost_level;
+	if (type == INTEL_OUTPUT_HDMI)
+		iboost = dev_priv->vbt.ddi_port_info[port].hdmi_boost_level;
+	else
+		iboost = dev_priv->vbt.ddi_port_info[port].dp_boost_level;
 
-	if (type == INTEL_OUTPUT_DP) {
-		if (dp_iboost) {
-			iboost = dp_iboost;
-		} else {
-			ddi_translations = intel_ddi_get_buf_trans_dp(dev_priv, &n_entries);
-			iboost = ddi_translations[level].i_boost;
-		}
-	} else if (type == INTEL_OUTPUT_EDP) {
-		if (dp_iboost) {
-			iboost = dp_iboost;
-		} else {
-			ddi_translations = intel_ddi_get_buf_trans_edp(dev_priv, &n_entries);
+	if (iboost == 0) {
+		const struct ddi_buf_trans *ddi_translations;
+		int n_entries;
 
-			if (WARN_ON(port != PORT_A &&
-				    port != PORT_E && n_entries > 9))
-				n_entries = 9;
-
-			iboost = ddi_translations[level].i_boost;
-		}
-	} else if (type == INTEL_OUTPUT_HDMI) {
-		if (hdmi_iboost) {
-			iboost = hdmi_iboost;
-		} else {
+		if (type == INTEL_OUTPUT_HDMI)
 			ddi_translations = intel_ddi_get_buf_trans_hdmi(dev_priv, &n_entries);
-			iboost = ddi_translations[level].i_boost;
-		}
-	} else {
-		return;
+		else if (type == INTEL_OUTPUT_EDP)
+			ddi_translations = intel_ddi_get_buf_trans_edp(dev_priv, &n_entries);
+		else
+			ddi_translations = intel_ddi_get_buf_trans_dp(dev_priv, &n_entries);
+
+		if (WARN_ON(type != INTEL_OUTPUT_HDMI &&
+			    port != PORT_A &&
+			    port != PORT_E && n_entries > 9))
+			n_entries = 9;
+
+		iboost = ddi_translations[level].i_boost;
 	}
 
 	/* Make sure that the requested I_boost is valid */
@@ -2096,7 +2083,7 @@  uint32_t ddi_signal_levels(struct intel_dp *intel_dp)
 	uint32_t level = intel_ddi_dp_level(intel_dp);
 
 	if (IS_GEN9_BC(dev_priv))
-	    skl_ddi_set_iboost(encoder, level);
+		skl_ddi_set_iboost(encoder, level, encoder->type);
 
 	return DDI_BUF_TRANS_SELECT(level);
 }
@@ -2219,7 +2206,7 @@  static void intel_ddi_pre_enable_hdmi(struct intel_encoder *encoder,
 		intel_prepare_hdmi_ddi_buffers(encoder);
 
 	if (IS_GEN9_BC(dev_priv))
-		skl_ddi_set_iboost(encoder, level);
+		skl_ddi_set_iboost(encoder, level, INTEL_OUTPUT_HDMI);
 
 	intel_dig_port->set_infoframes(&encoder->base,
 				       crtc_state->has_infoframe,