Blob Blame History Raw
From: Takashi Iwai <tiwai@suse.de>
Subject: drm/i915: Disable tv output on i9x5gm
Patch-mainline: Never, tentative workaround for SLE15 kernel
References: bsc#1055490

The TV output detection on i965GM chip is known to be badly broken,
causing the stall at vblank over intel_tv_dtect().

 WARNING: CPU: 0 PID: 2007 at ../drivers/gpu/drm/drm_irq.c:1326 drm_wait_one_vblank+0x149/0x180 [drm]()
 vblank wait timed out on crtc 0
 Call Trace:
  [<ffffffff81019f29>] dump_trace+0x59/0x320
  [<ffffffff8101a2ea>] show_stack_log_lvl+0xfa/0x180
  [<ffffffff8101b091>] show_stack+0x21/0x40
  [<ffffffff81339397>] dump_stack+0x5c/0x85
  [<ffffffff81080431>] warn_slowpath_common+0x81/0xb0
  [<ffffffff810804ac>] warn_slowpath_fmt+0x4c/0x50
  [<ffffffffa00984c9>] drm_wait_one_vblank+0x149/0x180 [drm]
  [<ffffffffa02314ef>] i9xx_crtc_disable+0x2f/0x420 [i915]
  [<ffffffffa0236b1a>] intel_atomic_commit+0xfa/0x6f0 [i915]
  [<ffffffffa023c6d3>] intel_release_load_detect_pipe+0xe3/0x150 [i915]
  [<ffffffffa0274313>] intel_tv_detect+0x383/0x580 [i915]
  [<ffffffffa0129ba4>] drm_helper_probe_single_connector_modes_merge_bits+0x2d4/0x480 [drm_kms_helper]
  [<ffffffffa00a3cd1>] drm_mode_getconnector+0x301/0x3a0 [drm]
  [<ffffffffa0096833>] drm_ioctl+0x223/0x460 [drm]
  [<ffffffff8122289c>] do_vfs_ioctl+0x30c/0x570
  [<ffffffff81222b74>] SyS_ioctl+0x74/0x80
  [<ffffffff8162cdf2>] entry_SYSCALL_64_fastpath+0x16/0x71
 DWARF2 unwinder stuck at entry_SYSCALL_64_fastpath+0x16/0x71

There have been many similar bug reports in the upstream, but this has
been papered over, or appearing in a different form.
  https://bugs.freedesktop.org/show_bug.cgi?id=93782
  https://bugs.freedesktop.org/show_bug.cgi?id=96781

As an ad hoc workaround, simply disable the TV outputs on the
chipset.  To be sure, we disable the TV output on other similar
chipsets, too.

The patch was oribinally developed for bsc#1039700, but since the
problem is still present on SLE15, it was forward-ported.

Signed-off-by: Takashi Iwai <tiwai@suse.de>

---
 drivers/gpu/drm/i915/i915_pci.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -112,7 +112,7 @@ static const struct intel_device_info in
 	.is_mobile = 1,
 	.cursor_needs_physical = 1,
 	.has_overlay = 1, .overlay_needs_physical = 1,
-	.supports_tv = 1,
+	/* .supports_tv = 1, */ /* causing hang-up (bsc#1055490) */
 	.has_fbc = 1,
 	.hws_needs_physical = 1,
 	.unfenced_needs_alignment = 1,
@@ -132,7 +132,7 @@ static const struct intel_device_info in
 	.platform = INTEL_I945GM, .is_mobile = 1,
 	.has_hotplug = 1, .cursor_needs_physical = 1,
 	.has_overlay = 1, .overlay_needs_physical = 1,
-	.supports_tv = 1,
+	/* .supports_tv = 1, */ /* causing hang-up (bsc#1055490) */
 	.has_fbc = 1,
 	.hws_needs_physical = 1,
 	.unfenced_needs_alignment = 1,
@@ -172,7 +172,7 @@ static const struct intel_device_info in
 	.platform = INTEL_I965GM,
 	.is_mobile = 1, .has_fbc = 1,
 	.has_overlay = 1,
-	.supports_tv = 1,
+	/* .supports_tv = 1, */ /* causing hang-up (bsc#1055490) */
 	.hws_needs_physical = 1,
 };
 
@@ -188,7 +188,7 @@ static const struct intel_device_info in
 	.platform = INTEL_GM45,
 	.is_mobile = 1, .has_fbc = 1,
 	.has_pipe_cxsr = 1,
-	.supports_tv = 1,
+	/* .supports_tv = 1, */ /* causing hang-up (bsc#1055490) */
 	.ring_mask = RENDER_RING | BSD_RING,
 };