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

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.

This patch was originally taken from SLE12-SP2/SP3 wrt bsc#1039700
with a hope that the upstream will ever resolve this, but it still
remains as a dream, so far.

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
@@ -232,7 +232,7 @@ static const struct intel_device_info in
 	.display.cursor_needs_physical = 1,
 	.display.has_overlay = 1,
 	.display.overlay_needs_physical = 1,
-	.display.supports_tv = 1,
+	/* .display.supports_tv = 1, */ /* causes vblank mess (bsc#1086657) */
 	.display.has_fbc = 1,
 	.hws_needs_physical = 1,
 	.unfenced_needs_alignment = 1,
@@ -257,7 +257,7 @@ static const struct intel_device_info in
 	.display.cursor_needs_physical = 1,
 	.display.has_overlay = 1,
 	.display.overlay_needs_physical = 1,
-	.display.supports_tv = 1,
+	/* .display.supports_tv = 1, */ /* causes vblank mess (bsc#1086657) */
 	.display.has_fbc = 1,
 	.hws_needs_physical = 1,
 	.unfenced_needs_alignment = 1,
@@ -313,7 +313,7 @@ static const struct intel_device_info in
 	.is_mobile = 1,
 	.display.has_fbc = 1,
 	.display.has_overlay = 1,
-	.display.supports_tv = 1,
+	/* .display.supports_tv = 1, */ /* causes vblank mess (bsc#1086657) */
 	.hws_needs_physical = 1,
 	.has_snoop = false,
 };
@@ -330,7 +330,7 @@ static const struct intel_device_info in
 	PLATFORM(INTEL_GM45),
 	.is_mobile = 1,
 	.display.has_fbc = 1,
-	.display.supports_tv = 1,
+	/* .display.supports_tv = 1, */ /* causes vblank mess (bsc#1086657) */
 	.engine_mask = BIT(RCS0) | BIT(VCS0),
 	.gpu_reset_clobbers_display = false,
 };