[Intel-gfx] [PATCH] drm/i915: Fix garbage pixels on top of LVDS on IVY laptop

Takashi Iwai tiwai at suse.de
Fri Dec 7 17:28:16 CET 2012


At Fri, 7 Dec 2012 16:47:05 +0100,
Daniel Vetter wrote:
> 
> On Fri, Dec 7, 2012 at 2:17 PM, Takashi Iwai <tiwai at suse.de> wrote:
> > The commit [23670b322: drm/i915: CPT+ pch transcoder workaround]
> > caused a regression on some HP laptops with IvyBridge.  On the top of
> > laptop screen, a few pixels height are blinking in the whole width
> > constantly.  The garbage appears only on LVDS and not on other
> > outputs.
> >
> > This patch reverts the minimum part for fixing this regression,
> > namely, the setup of CHICKEN2 bit in cpt_init_clock_gating().
> >
> > Signed-off-by: Takashi Iwai <tiwai at suse.de>
> > ---
> >
> > Don't ask me why this fixes :)
> > The bug is still present in drm-intel-next-queued as of today, at
> > least.
> >
> > Let me know if a better workaround is available.
> 
> Since you're saying it only affects LVDS - have you tried to just move
> the w/a enabling earlier in the enable/modeset sequence? I'm thinking
> of the LVDS pin pair enabling, which now moved into the
> ->pre_pll_enable hook, but in 3.8-next it's still in the
> ironlake_crtc_mode_set. That would at least make some sense, and might
> also be a bit more robust since This code is only run once at
> resume/boot. But if we then clear things again on a subsequent
> modeset, LVDS might break when re-enabling ...

You comment reminded me of testing S3/S4 I forgot, and interestingly,
the phenomenon is gone after S3.

Also, looking at the display more closely, I found that the whole
screen is shifted downward for a few pixels.

Moving the w/a to other place: I tried to put it to modeset, but it
didn't help.  Will try to enable code...


thanks,

Takashi

> 
> Yours, Daniel
> 
> >
> >  drivers/gpu/drm/i915/intel_pm.c | 3 +++
> >  1 file changed, 3 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> > index 58c2f21..a544029 100644
> > --- a/drivers/gpu/drm/i915/intel_pm.c
> > +++ b/drivers/gpu/drm/i915/intel_pm.c
> > @@ -3446,6 +3446,9 @@ static void cpt_init_clock_gating(struct drm_device *dev)
> >         I915_WRITE(SOUTH_DSPCLK_GATE_D, PCH_DPLSUNIT_CLOCK_GATE_DISABLE);
> >         I915_WRITE(SOUTH_CHICKEN2, I915_READ(SOUTH_CHICKEN2) |
> >                    DPLS_EDP_PPS_FIX_DIS);
> > +       /* Without this, mode sets may fail silently on FDI */
> > +       for_each_pipe(pipe)
> > +               I915_WRITE(TRANS_CHICKEN2(pipe), TRANS_CHICKEN2_TIMING_OVERRIDE);
> >         /* WADP0ClockGatingDisable */
> >         for_each_pipe(pipe) {
> >                 I915_WRITE(TRANS_CHICKEN1(pipe),
> > --
> > 1.8.0.1
> >
> 
> 
> 
> -- 
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
> 



More information about the Intel-gfx mailing list