diff mbox series

[H/I/Unstable/OEM-5.13,1/1] UBUNTU: SAUCE: drm/i915/dp: Use max params for older panels

Message ID 20210809050944.115576-2-kai.heng.feng@canonical.com
State New
Headers show
Series Fix wobbly graphics regression | expand

Commit Message

Kai-Heng Feng Aug. 9, 2021, 5:09 a.m. UTC
BugLink: https://bugs.launchpad.net/bugs/1936708

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 panels only
work with max params.

The panels are all DP 1.1 ones, so apply max params to them to resolve
the issue.

Link: https://patchwork.kernel.org/project/intel-gfx/list/?series=526397
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")
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

Comments

Kleber Sacilotto de Souza Sept. 1, 2021, 9:46 a.m. UTC | #1
On 09.08.21 07:09, Kai-Heng Feng wrote:
> BugLink: https://bugs.launchpad.net/bugs/1936708
> 
> 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 panels only
> work with max params.
> 
> The panels are all DP 1.1 ones, so apply max params to them to resolve
> the issue.
> 
> Link: https://patchwork.kernel.org/project/intel-gfx/list/?series=526397
> 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")
> Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
> ---
>   drivers/gpu/drm/i915/display/intel_dp.c | 12 +++++++-----
>   1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 6cc03b9e4321a..eb1ed8990ca03 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -1338,14 +1338,16 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
>   	limits.min_bpp = intel_dp_min_bpp(pipe_config->output_format);
>   	limits.max_bpp = intel_dp_max_bpp(intel_dp, pipe_config);
>   
> -	if (intel_dp->use_max_params) {
> +	if (intel_dp->use_max_params ||
> +	    intel_dp->dpcd[DP_DPCD_REV] <= DP_DPCD_REV_11) {
>   		/*
>   		 * Use the maximum clock and number of lanes the eDP panel
>   		 * advertizes being capable of in case the initial fast
> -		 * optimal params failed us. The panels are generally
> -		 * designed to support only a single clock and lane
> -		 * configuration, and typically on older panels these
> -		 * values correspond to the native resolution of the panel.
> +		 * optimal params failed us or the panel is DP 1.1 or earlier.
> +		 * The panels are generally designed to support only a single
> +		 * clock and lane configuration, and typically on older panels
> +		 * these values correspond to the native resolution of the
> +		 * panel.
>   		 */
>   		limits.min_lane_count = limits.max_lane_count;
>   		limits.min_clock = limits.max_clock;
> 

What ended up being accepted, at least in drm-intel-next for now, was a v3
of this patch fixing some corner cases not spotted on this first version:

https://cgit.freedesktop.org/drm/drm-intel/commit/?h=drm-intel-next&id=d7f213c131adf0bec8b731553eb82990cdac265d

So I'm NAKing it for any stable releases until we have v3 backported/cherry-picked
and submitted again.

Also, what should we do about I/U/OEM-5.13 which already got the incomplete
version of the fix?


Kleber
Kai-Heng Feng Sept. 2, 2021, 1:23 a.m. UTC | #2
On Wed, Sep 1, 2021 at 5:47 PM Kleber Souza <kleber.souza@canonical.com> wrote:
>
> On 09.08.21 07:09, Kai-Heng Feng wrote:
> > BugLink: https://bugs.launchpad.net/bugs/1936708
> >
> > 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 panels only
> > work with max params.
> >
> > The panels are all DP 1.1 ones, so apply max params to them to resolve
> > the issue.
> >
> > Link: https://patchwork.kernel.org/project/intel-gfx/list/?series=526397
> > 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")
> > Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
> > ---
> >   drivers/gpu/drm/i915/display/intel_dp.c | 12 +++++++-----
> >   1 file changed, 7 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> > index 6cc03b9e4321a..eb1ed8990ca03 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -1338,14 +1338,16 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
> >       limits.min_bpp = intel_dp_min_bpp(pipe_config->output_format);
> >       limits.max_bpp = intel_dp_max_bpp(intel_dp, pipe_config);
> >
> > -     if (intel_dp->use_max_params) {
> > +     if (intel_dp->use_max_params ||
> > +         intel_dp->dpcd[DP_DPCD_REV] <= DP_DPCD_REV_11) {
> >               /*
> >                * Use the maximum clock and number of lanes the eDP panel
> >                * advertizes being capable of in case the initial fast
> > -              * optimal params failed us. The panels are generally
> > -              * designed to support only a single clock and lane
> > -              * configuration, and typically on older panels these
> > -              * values correspond to the native resolution of the panel.
> > +              * optimal params failed us or the panel is DP 1.1 or earlier.
> > +              * The panels are generally designed to support only a single
> > +              * clock and lane configuration, and typically on older panels
> > +              * these values correspond to the native resolution of the
> > +              * panel.
> >                */
> >               limits.min_lane_count = limits.max_lane_count;
> >               limits.min_clock = limits.max_clock;
> >
>
> What ended up being accepted, at least in drm-intel-next for now, was a v3
> of this patch fixing some corner cases not spotted on this first version:
>
> https://cgit.freedesktop.org/drm/drm-intel/commit/?h=drm-intel-next&id=d7f213c131adf0bec8b731553eb82990cdac265d
>
> So I'm NAKing it for any stable releases until we have v3 backported/cherry-picked
> and submitted again.
>
> Also, what should we do about I/U/OEM-5.13 which already got the incomplete
> version of the fix?

I'll send another SRU to replace the old fix with the one in upstream.

Kai-Heng

>
>
> Kleber
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 6cc03b9e4321a..eb1ed8990ca03 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1338,14 +1338,16 @@  intel_dp_compute_link_config(struct intel_encoder *encoder,
 	limits.min_bpp = intel_dp_min_bpp(pipe_config->output_format);
 	limits.max_bpp = intel_dp_max_bpp(intel_dp, pipe_config);
 
-	if (intel_dp->use_max_params) {
+	if (intel_dp->use_max_params ||
+	    intel_dp->dpcd[DP_DPCD_REV] <= DP_DPCD_REV_11) {
 		/*
 		 * Use the maximum clock and number of lanes the eDP panel
 		 * advertizes being capable of in case the initial fast
-		 * optimal params failed us. The panels are generally
-		 * designed to support only a single clock and lane
-		 * configuration, and typically on older panels these
-		 * values correspond to the native resolution of the panel.
+		 * optimal params failed us or the panel is DP 1.1 or earlier.
+		 * The panels are generally designed to support only a single
+		 * clock and lane configuration, and typically on older panels
+		 * these values correspond to the native resolution of the
+		 * panel.
 		 */
 		limits.min_lane_count = limits.max_lane_count;
 		limits.min_clock = limits.max_clock;