[v2] drm/i915: Fix eDP low vswing for Broadwell
diff mbox

Message ID 1458210190-9527-1-git-send-email-mika.kahola@intel.com
State New
Headers show

Commit Message

Kahola, Mika March 17, 2016, 10:23 a.m. UTC
It was noticed on bug #94087 that module parameter
i915.edp_vswing=2 that should override the VBT setting
to use default voltage swing (400 mV) was not applied
for Broadwell.

This patch provides a fix for this by checking if default
i.e. higher voltage swing is requested to be used and
applies the DDI translations table for DP instead of eDP
(low vswing) table.

v2: Combine two if statements into one (Jani)

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94087
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
 drivers/gpu/drm/i915/intel_ddi.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

Comments

Ville Syrjälä March 17, 2016, 1:47 p.m. UTC | #1
On Thu, Mar 17, 2016 at 12:23:10PM +0200, Mika Kahola wrote:
> It was noticed on bug #94087 that module parameter
> i915.edp_vswing=2 that should override the VBT setting
> to use default voltage swing (400 mV) was not applied
> for Broadwell.
> 
> This patch provides a fix for this by checking if default
> i.e. higher voltage swing is requested to be used and
> applies the DDI translations table for DP instead of eDP
> (low vswing) table.

The spec is rather vague on the matter. For BDW it just lists the tables
as "for DisplayPort" and "for embedded DisplayPort rev 1.4", whereas SKL
has them as "for DisplayPort" and "for embedded DisplayPorts that support
low voltage swings". But looking at the details, it's clear that the BDW
eDP table is really a low vswing table.

The VBT spec has nothing to say beyond the fact that the low vswing
option was added in version 173 (which we already handle correctly).

So the patch is
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> 
> v2: Combine two if statements into one (Jani)
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94087
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_ddi.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index ab025a5..100a532 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -443,9 +443,17 @@ void intel_prepare_ddi_buffer(struct intel_encoder *encoder)
>  	} else if (IS_BROADWELL(dev_priv)) {
>  		ddi_translations_fdi = bdw_ddi_translations_fdi;
>  		ddi_translations_dp = bdw_ddi_translations_dp;
> -		ddi_translations_edp = bdw_ddi_translations_edp;
> +
> +		if (dev_priv->edp_low_vswing) {
> +			ddi_translations_edp = bdw_ddi_translations_edp;
> +			n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
> +		} else {
> +			ddi_translations_edp = bdw_ddi_translations_dp;
> +			n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
> +		}
> +
>  		ddi_translations_hdmi = bdw_ddi_translations_hdmi;
> -		n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
> +
>  		n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
>  		n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
>  		hdmi_default_entry = 7;
> -- 
> 1.9.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Ville Syrjälä April 11, 2016, 1:30 p.m. UTC | #2
On Thu, Mar 17, 2016 at 12:23:10PM +0200, Mika Kahola wrote:
> It was noticed on bug #94087 that module parameter
> i915.edp_vswing=2 that should override the VBT setting
> to use default voltage swing (400 mV) was not applied
> for Broadwell.
> 
> This patch provides a fix for this by checking if default
> i.e. higher voltage swing is requested to be used and
> applies the DDI translations table for DP instead of eDP
> (low vswing) table.
> 
> v2: Combine two if statements into one (Jani)
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94087
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>

We didn't get a CI run for this?

> ---
>  drivers/gpu/drm/i915/intel_ddi.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index ab025a5..100a532 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -443,9 +443,17 @@ void intel_prepare_ddi_buffer(struct intel_encoder *encoder)
>  	} else if (IS_BROADWELL(dev_priv)) {
>  		ddi_translations_fdi = bdw_ddi_translations_fdi;
>  		ddi_translations_dp = bdw_ddi_translations_dp;
> -		ddi_translations_edp = bdw_ddi_translations_edp;
> +
> +		if (dev_priv->edp_low_vswing) {
> +			ddi_translations_edp = bdw_ddi_translations_edp;
> +			n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
> +		} else {
> +			ddi_translations_edp = bdw_ddi_translations_dp;
> +			n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
> +		}
> +
>  		ddi_translations_hdmi = bdw_ddi_translations_hdmi;
> -		n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
> +
>  		n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
>  		n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
>  		hdmi_default_entry = 7;
> -- 
> 1.9.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Kahola, Mika April 12, 2016, 10:22 a.m. UTC | #3
On Mon, 2016-04-11 at 16:30 +0300, Ville Syrjälä wrote:
> On Thu, Mar 17, 2016 at 12:23:10PM +0200, Mika Kahola wrote:
> > It was noticed on bug #94087 that module parameter
> > i915.edp_vswing=2 that should override the VBT setting
> > to use default voltage swing (400 mV) was not applied
> > for Broadwell.
> > 
> > This patch provides a fix for this by checking if default
> > i.e. higher voltage swing is requested to be used and
> > applies the DDI translations table for DP instead of eDP
> > (low vswing) table.
> > 
> > v2: Combine two if statements into one (Jani)
> > 
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94087
> > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> 
> We didn't get a CI run for this?
No, we didn't. Should I resend this patch for a CI run?

> 
> > ---
> >  drivers/gpu/drm/i915/intel_ddi.c | 12 ++++++++++--
> >  1 file changed, 10 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> > index ab025a5..100a532 100644
> > --- a/drivers/gpu/drm/i915/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/intel_ddi.c
> > @@ -443,9 +443,17 @@ void intel_prepare_ddi_buffer(struct intel_encoder *encoder)
> >  	} else if (IS_BROADWELL(dev_priv)) {
> >  		ddi_translations_fdi = bdw_ddi_translations_fdi;
> >  		ddi_translations_dp = bdw_ddi_translations_dp;
> > -		ddi_translations_edp = bdw_ddi_translations_edp;
> > +
> > +		if (dev_priv->edp_low_vswing) {
> > +			ddi_translations_edp = bdw_ddi_translations_edp;
> > +			n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
> > +		} else {
> > +			ddi_translations_edp = bdw_ddi_translations_dp;
> > +			n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
> > +		}
> > +
> >  		ddi_translations_hdmi = bdw_ddi_translations_hdmi;
> > -		n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
> > +
> >  		n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
> >  		n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
> >  		hdmi_default_entry = 7;
> > -- 
> > 1.9.1
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>

Patch
diff mbox

diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index ab025a5..100a532 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -443,9 +443,17 @@  void intel_prepare_ddi_buffer(struct intel_encoder *encoder)
 	} else if (IS_BROADWELL(dev_priv)) {
 		ddi_translations_fdi = bdw_ddi_translations_fdi;
 		ddi_translations_dp = bdw_ddi_translations_dp;
-		ddi_translations_edp = bdw_ddi_translations_edp;
+
+		if (dev_priv->edp_low_vswing) {
+			ddi_translations_edp = bdw_ddi_translations_edp;
+			n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
+		} else {
+			ddi_translations_edp = bdw_ddi_translations_dp;
+			n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
+		}
+
 		ddi_translations_hdmi = bdw_ddi_translations_hdmi;
-		n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
+
 		n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
 		n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
 		hdmi_default_entry = 7;