diff mbox series

[v3] drm/i915/dp: Use max params for panels < eDP 1.4

Message ID 20210820075301.693099-1-kai.heng.feng@canonical.com (mailing list archive)
State New, archived
Headers show
Series [v3] drm/i915/dp: Use max params for panels < eDP 1.4 | expand

Commit Message

Kai-Heng Feng Aug. 20, 2021, 7:52 a.m. UTC
Users reported that after commit 2bbd6dba84d4 ("drm/i915: Try to use
fast+narrow link on eDP again and fall back to the old max strategy on
failure"), the screen starts to have wobbly effect.

Commit a5c936add6a2 ("drm/i915/dp: Use slow and wide link training for
everything") doesn't help either, that means the affected eDP 1.2 panels
only work with max params.

So use max params for panels < eDP 1.4 as Windows does to solve the
issue.

v3:
 - Do the eDP rev check in intel_edp_init_dpcd()

v2:
 - Check eDP 1.4 instead of DPCD 1.1 to apply max params

Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/3714
Fixes: 2bbd6dba84d4 ("drm/i915: Try to use fast+narrow link on eDP again and fall back to the old max strategy on failure")
Fixes: a5c936add6a2 ("drm/i915/dp: Use slow and wide link training for everything")
Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Ville Syrjälä Aug. 20, 2021, 5:26 p.m. UTC | #1
On Fri, Aug 20, 2021 at 03:52:59PM +0800, Kai-Heng Feng wrote:
> Users reported that after commit 2bbd6dba84d4 ("drm/i915: Try to use
> fast+narrow link on eDP again and fall back to the old max strategy on
> failure"), the screen starts to have wobbly effect.
> 
> Commit a5c936add6a2 ("drm/i915/dp: Use slow and wide link training for
> everything") doesn't help either, that means the affected eDP 1.2 panels
> only work with max params.
> 
> So use max params for panels < eDP 1.4 as Windows does to solve the
> issue.
> 
> v3:
>  - Do the eDP rev check in intel_edp_init_dpcd()
> 
> v2:
>  - Check eDP 1.4 instead of DPCD 1.1 to apply max params
> 
> Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/3714
> Fixes: 2bbd6dba84d4 ("drm/i915: Try to use fast+narrow link on eDP again and fall back to the old max strategy on failure")
> Fixes: a5c936add6a2 ("drm/i915/dp: Use slow and wide link training for everything")
> Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>

Slapped a cc:stable on it and pushed to drm-intel-next. Thanks.

> ---
>  drivers/gpu/drm/i915/display/intel_dp.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 75d4ebc669411..e0dbd35ae7bc0 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -2445,11 +2445,14 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
>  	 */
>  	if (drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV,
>  			     intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd)) ==
> -			     sizeof(intel_dp->edp_dpcd))
> +			     sizeof(intel_dp->edp_dpcd)) {
>  		drm_dbg_kms(&dev_priv->drm, "eDP DPCD: %*ph\n",
>  			    (int)sizeof(intel_dp->edp_dpcd),
>  			    intel_dp->edp_dpcd);
>  
> +		intel_dp->use_max_params = intel_dp->edp_dpcd[0] < DP_EDP_14;
> +	}
> +
>  	/*
>  	 * This has to be called after intel_dp->edp_dpcd is filled, PSR checks
>  	 * for SET_POWER_CAPABLE bit in intel_dp->edp_dpcd[1]
> -- 
> 2.32.0
Rodrigo Vivi Aug. 26, 2021, 5:37 p.m. UTC | #2
On Fri, Aug 20, 2021 at 08:26:14PM +0300, Ville Syrjälä wrote:
> On Fri, Aug 20, 2021 at 03:52:59PM +0800, Kai-Heng Feng wrote:
> > Users reported that after commit 2bbd6dba84d4 ("drm/i915: Try to use
> > fast+narrow link on eDP again and fall back to the old max strategy on
> > failure"), the screen starts to have wobbly effect.
> > 
> > Commit a5c936add6a2 ("drm/i915/dp: Use slow and wide link training for
> > everything") doesn't help either, that means the affected eDP 1.2 panels
> > only work with max params.
> > 
> > So use max params for panels < eDP 1.4 as Windows does to solve the
> > issue.
> > 
> > v3:
> >  - Do the eDP rev check in intel_edp_init_dpcd()
> > 
> > v2:
> >  - Check eDP 1.4 instead of DPCD 1.1 to apply max params
> > 
> > Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/3714
> > Fixes: 2bbd6dba84d4 ("drm/i915: Try to use fast+narrow link on eDP again and fall back to the old max strategy on failure")
> > Fixes: a5c936add6a2 ("drm/i915/dp: Use slow and wide link training for everything")
> > Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
> 
> Slapped a cc:stable on it and pushed to drm-intel-next. Thanks.

Since I got a strange failure on CI_DIF_604 that I don't see on CI_DIF_603,
I'm avoiding the display patches. This one and also
dab1b47e57e0 ("drm/i915/dp: return proper DPRX link training result")

I know, it is probably the other one, but I had to remove both patches for
now and I'm not confident the CI will allow me to test with this one alone.

If we have -rc8 I will check again later. Otherwise we will have to send
to the stable mailing list later.

> 
> > ---
> >  drivers/gpu/drm/i915/display/intel_dp.c | 5 ++++-
> >  1 file changed, 4 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> > index 75d4ebc669411..e0dbd35ae7bc0 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -2445,11 +2445,14 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
> >  	 */
> >  	if (drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV,
> >  			     intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd)) ==
> > -			     sizeof(intel_dp->edp_dpcd))
> > +			     sizeof(intel_dp->edp_dpcd)) {
> >  		drm_dbg_kms(&dev_priv->drm, "eDP DPCD: %*ph\n",
> >  			    (int)sizeof(intel_dp->edp_dpcd),
> >  			    intel_dp->edp_dpcd);
> >  
> > +		intel_dp->use_max_params = intel_dp->edp_dpcd[0] < DP_EDP_14;
> > +	}
> > +
> >  	/*
> >  	 * This has to be called after intel_dp->edp_dpcd is filled, PSR checks
> >  	 * for SET_POWER_CAPABLE bit in intel_dp->edp_dpcd[1]
> > -- 
> > 2.32.0
> 
> -- 
> Ville Syrjälä
> Intel
Rodrigo Vivi Aug. 30, 2021, 4:42 p.m. UTC | #3
On Thu, Aug 26, 2021 at 01:37:34PM -0400, Rodrigo Vivi wrote:
> On Fri, Aug 20, 2021 at 08:26:14PM +0300, Ville Syrjälä wrote:
> > On Fri, Aug 20, 2021 at 03:52:59PM +0800, Kai-Heng Feng wrote:
> > > Users reported that after commit 2bbd6dba84d4 ("drm/i915: Try to use
> > > fast+narrow link on eDP again and fall back to the old max strategy on
> > > failure"), the screen starts to have wobbly effect.
> > > 
> > > Commit a5c936add6a2 ("drm/i915/dp: Use slow and wide link training for
> > > everything") doesn't help either, that means the affected eDP 1.2 panels
> > > only work with max params.
> > > 
> > > So use max params for panels < eDP 1.4 as Windows does to solve the
> > > issue.
> > > 
> > > v3:
> > >  - Do the eDP rev check in intel_edp_init_dpcd()
> > > 
> > > v2:
> > >  - Check eDP 1.4 instead of DPCD 1.1 to apply max params
> > > 
> > > Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/3714
> > > Fixes: 2bbd6dba84d4 ("drm/i915: Try to use fast+narrow link on eDP again and fall back to the old max strategy on failure")
> > > Fixes: a5c936add6a2 ("drm/i915/dp: Use slow and wide link training for everything")
> > > Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
> > 
> > Slapped a cc:stable on it and pushed to drm-intel-next. Thanks.
> 
> Since I got a strange failure on CI_DIF_604 that I don't see on CI_DIF_603,
> I'm avoiding the display patches. This one and also
> dab1b47e57e0 ("drm/i915/dp: return proper DPRX link training result")
> 
> I know, it is probably the other one, but I had to remove both patches for
> now and I'm not confident the CI will allow me to test with this one alone.
> 
> If we have -rc8 I will check again later. Otherwise we will have to send
> to the stable mailing list later.

CI didn't run on TGL again, so I couldn't send this patch last week.
And 5.14 got released.

If this is important for 5.14 or any other stable release, please
confirm this is not the one breaking linking training on TGL and then
please send it to the stable mailing list.

https://www.kernel.org/doc/Documentation/process/stable-kernel-rules.rst

Sorry,
Rodrigo.

> 
> > 
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_dp.c | 5 ++++-
> > >  1 file changed, 4 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> > > index 75d4ebc669411..e0dbd35ae7bc0 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > @@ -2445,11 +2445,14 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
> > >  	 */
> > >  	if (drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV,
> > >  			     intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd)) ==
> > > -			     sizeof(intel_dp->edp_dpcd))
> > > +			     sizeof(intel_dp->edp_dpcd)) {
> > >  		drm_dbg_kms(&dev_priv->drm, "eDP DPCD: %*ph\n",
> > >  			    (int)sizeof(intel_dp->edp_dpcd),
> > >  			    intel_dp->edp_dpcd);
> > >  
> > > +		intel_dp->use_max_params = intel_dp->edp_dpcd[0] < DP_EDP_14;
> > > +	}
> > > +
> > >  	/*
> > >  	 * This has to be called after intel_dp->edp_dpcd is filled, PSR checks
> > >  	 * for SET_POWER_CAPABLE bit in intel_dp->edp_dpcd[1]
> > > -- 
> > > 2.32.0
> > 
> > -- 
> > Ville Syrjälä
> > Intel
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 75d4ebc669411..e0dbd35ae7bc0 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -2445,11 +2445,14 @@  intel_edp_init_dpcd(struct intel_dp *intel_dp)
 	 */
 	if (drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV,
 			     intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd)) ==
-			     sizeof(intel_dp->edp_dpcd))
+			     sizeof(intel_dp->edp_dpcd)) {
 		drm_dbg_kms(&dev_priv->drm, "eDP DPCD: %*ph\n",
 			    (int)sizeof(intel_dp->edp_dpcd),
 			    intel_dp->edp_dpcd);
 
+		intel_dp->use_max_params = intel_dp->edp_dpcd[0] < DP_EDP_14;
+	}
+
 	/*
 	 * This has to be called after intel_dp->edp_dpcd is filled, PSR checks
 	 * for SET_POWER_CAPABLE bit in intel_dp->edp_dpcd[1]