On Mon, Jul 02, 2012 at 06:14:54PM +0200, Takashi Iwai wrote: > Some SNB/IVY Laptops with 1600x900 HD+ panel (e.g. Dell Latitude E6420 > and HP ProBook 65xx) are known to show the whole black/white garbage > or flickering screens while starting up or changing the mode. > This can be worked around by disabling LVDS off while changing the > mode. > > Since this doesn't give any visible drawback on machines I've tested, > enable it generically for HD+ panels for SCH-split case. > > Tested-by: Giacomo Comes <comes at naic.edu> > Cc: <stable at vger.kernel.org> > Signed-off-by: Takashi Iwai <tiwai at suse.de> As part of a larger rework effort for the modeset stuff I've stumbled over this, too - I see detiled garbage on some mode switches. http://cgit.freedesktop.org/~danvet/drm/commit/?h=modeset-rework&id=bf8528171b2c2bb94aeca8316e26e017e42643d3 So my question: why so complicated, and what's the justification for the funky hdisplay/vdisplay condiditons? Cheers, Daniel > --- > drivers/gpu/drm/i915/intel_lvds.c | 25 +++++++++++++++++++------ > 1 file changed, 19 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c > index 08eb04c..cf1c150 100644 > --- a/drivers/gpu/drm/i915/intel_lvds.c > +++ b/drivers/gpu/drm/i915/intel_lvds.c > @@ -407,13 +407,26 @@ out: > static void intel_lvds_prepare(struct drm_encoder *encoder) > { > struct intel_lvds *intel_lvds = to_intel_lvds(encoder); > + bool do_disable = false; > > - /* > - * Prior to Ironlake, we must disable the pipe if we want to adjust > - * the panel fitter. However at all other times we can just reset > - * the registers regardless. > - */ > - if (!HAS_PCH_SPLIT(encoder->dev) && intel_lvds->pfit_dirty) > + if (HAS_PCH_SPLIT(encoder->dev)) { > + /* Some HD+ panels require the pipe-off while mode changing; > + * otherwise you'll get B/W garbage or sustaining flickering > + * screen > + */ > + if (intel_lvds->fixed_mode->hdisplay >= 1600 && > + intel_lvds->fixed_mode->vdisplay >= 900) > + do_disable = true; > + } else { > + /* > + * Prior to Ironlake, we must disable the pipe if we want to > + * adjust the panel fitter. However at all other times we can > + * just reset the registers regardless. > + */ > + do_disable = intel_lvds->pfit_dirty; > + } > + > + if (do_disable) > intel_lvds_disable(intel_lvds); > } > > -- > 1.7.10.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Mail: daniel at ffwll.ch Mobile: +41 (0)79 365 57 48