Daniel Vetter b0a2658acb drm/i915: don't disable disconnected outputs
This piece of neat lore has been ported painstakingly and bug-for-bug
compatible from the old crtc helper code.

Imo it's utter nonsense.

If you disconnected a cable and before you reconnect it, userspace (or
the kernel) does an set_crtc call, this will result in that connector
getting disabled. Which will result in a nice black screen when
plugging in the cable again.

There's absolutely no reason the kernel does such policy enforcements
- if userspace tries to set up a mode on something disconnected we
might fail loudly (since the dp link training fails), but silently
adjusting the output configuration behind userspace's back is a recipe
for disaster. Specifically I think that this could explain some of our
MI_WAIT hangs around suspend, where userspace issues a scanline wait
on a disable pipe. This mechanisims here could explain how that pipe
got disabled without userspace noticing.

Note that this fixes a NULL deref at BIOS takeover when the firmware
sets up a disconnected output in a clone configuration with a
connected output on the 2nd pipe: When doing the full modeset we don't
have a mode for the 2nd pipe and OOPS. On the first pipe this doesn't
matter, since at boot-up the fbdev helpers will set up the choosen
configuration on that on first. Since this is now the umptenth bug
around handling this imo brain-dead semantics correctly, I think it's
time to kill it and see whether there's any userspace out there which
relies on this.

It also nicely demonstrates that we have a tiny window where DP
hotplug can still kill the driver.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=58396
Cc: stable@vger.kernel.org
Tested-by: Peter Ujfalusi <peter.ujfalusi@gmail.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2012-12-18 21:32:56 +01:00
..
2012-10-15 14:45:51 -04:00
2012-10-02 17:26:42 -07:00
2012-10-07 20:55:16 +09:00
2012-09-26 22:28:21 -04:00
2012-10-24 16:58:53 +02:00
2012-10-26 02:20:36 -04:00
2012-10-07 17:29:24 +09:00
2012-10-10 20:15:24 +09:00
2012-11-02 21:58:09 -04:00
2012-10-17 15:53:03 -05:00
2012-10-09 16:11:46 +09:00
2012-10-10 20:15:24 +09:00
2012-10-18 17:50:08 +02:00
2012-10-28 11:13:54 -07:00
2012-10-26 10:25:31 -07:00
2012-11-02 13:26:11 -07:00
2012-10-01 12:09:59 -07:00
2012-11-02 13:26:11 -07:00
2012-10-01 18:46:13 -07:00
2012-10-16 18:07:12 -07:00