[PATCH 0/3] drm/i915: HSW modeset hang fix

ville.syrjala
2013-09-12T19:45:47Z

As Paulo explained at [1], there's a modeset related hang occuring on HSW.
I bisected it down to removing a workaround meant for pre-production hardware,
and Paulo cooked up a workaround that worked for him. Unfortunately I was still
able to trigger the hangs by disabling all planes on pipe B but leaving the pipe
active, and the doing a modeset on pipe A.

The actual problem can occur when we enable any plane on a pipe that is not
fully running yet. When a pipe is considered running depends on a bit on the
type of encoder used. But in any case we should not really be enabling planes
on disabled pipes anyway, so implementing an actual workaround should not
even be necessary. We just need to be careful when we enable planes.

For me it seems Jani already fixed the problem when he proposed killing the cursor
enable calls from the .mode_set hooks. So it looks like our normal plane enabling
during .crtc_enable happens late enough for the pipe to be fully up.

I actually want to refactor the plane enabling/disabling during our
.crtc_{enable,disable} a bit. But as that doesn't seem necessary to prevent the
hangs, I'm posting these minimal fixes first, and then we can go crazy later.

[1] http://lists.freedesktop.org/archives/intel-gfx/2013-September/033040.html