[Intel-gfx] SNB LVDS goes all stripy at times with rc6 enabled

Keith Packard keithp at keithp.com
Wed Jul 27 11:29:19 CEST 2011


Ok, that took all evening. And, I don't have a fix, but I do know a lot
more about the problem.

To recap:

        On Sandybridge, sometimes, when you simultaneously change two
        outputs, one of them turns into stripes, or as solid color.

Here's how I reproduce it:

        First, connect an external monitor to your laptop. I've seen
        this with HDMI and DisplayPort, but never with VGA. No, I don't
        know why. DisplayPort seems to reliably reproduce it for me.

                $ xrandr --output DP2 --auto --output LVDS1 --auto --below DP2

        The key is to place LVDS1 at a position other than 0x0 so that
        it will get a full mode set in the subsequence step.

        Now, work around a bug in the kernel where it doesn't set crtc
        DPMS state in intel_crtc_mode_set (how many times do we have to
        fix this bug?):

                $ xset dpms force off

        (alternatively, apply the patch I sent out to set the DPMS state
        in intel_crtc_mode_set).

        Finally, turn off DP2:

                $ xrandr --output DP2 --off

        With luck, you'll see stripes on your LVDS monitor instead of
        the expected image.

Knowing that things worked (at least before any DPMS fired) without the
intel_crtc_mode_set DPMS fix, I set about trying to figure out how the
two paths differed (with and without the DPMS fix). The differences were
minimal, and I slowly hacked up the code to eliminate all of them,
except for the step which actually disabled the idle CRTC which had been
driving the DP port.

At this point, I had exactly matching register write sequences between
the two cases, except for he addition of the DP CRTC disable, which
happened right at the beginning of the mode setting sequence.

Nothing worked, except when I stopped disabling the DP CRTC.

Finally, I tried disabling fbc and rc6. Surprise! things worked
perfectly now. I then isolated the effect to just rc6. With rc6 enabled,
I'd get garbage on the screen. With rc6 disabled, things work correctly.

I tried holding force_wake across a few functions in intel_display.c
without success; I have to assume that there's some register reads or
writes which are going wrong with rc6 enabled.

-- 
keith.packard at intel.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20110727/a574c50e/attachment.sig>


More information about the Intel-gfx mailing list