diff --git a/drm-i915-snb-irq-stalls-fix.patch b/drm-i915-snb-irq-stalls-fix.patch new file mode 100644 index 000000000..acf64da47 --- /dev/null +++ b/drm-i915-snb-irq-stalls-fix.patch @@ -0,0 +1,53 @@ +commit 498e720b96379d8ee9c294950a01534a73defcf3 +Author: Daniel J Blueman +Date: Fri Jun 17 11:32:19 2011 -0700 + + drm/i915: Fix gen6 (SNB) missed BLT ring interrupts. + + The failure appeared in dmesg as: + + [drm:i915_hangcheck_ring_idle] *ERROR* Hangcheck timer elapsed... blt + ring idle [waiting on 35064155, at 35064155], missed IRQ? + + This works around that problem on by making the blitter command + streamer write interrupt state to the Hardware Status Page when a + MI_USER_INTERRUPT command is decoded, which appears to force the seqno + out to memory before the interrupt happens. + + v1->v2: Moved to prior interrupt handler installation and RMW flags as + per feedback. + v2->v3: Removed RMW of flags (by anholt) + + Cc: stable@kernel.org + Signed-off-by: Daniel J Blueman + Signed-off-by: Eric Anholt + Tested-by: Chris Wilson [v1] + Tested-by: Eric Anholt [v1,v3] + (incidence of the bug with a testcase went from avg 2/1000 to + 0/12651 in the latest test run (plus more for v1)) + Tested-by: Kenneth Graunke [v1] + Tested-by: Robert Hooker [v1] + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=33394 + Signed-off-by: Dave Airlie + +diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c +index b9fafe3..9e34a1a 100644 +--- a/drivers/gpu/drm/i915/i915_irq.c ++++ b/drivers/gpu/drm/i915/i915_irq.c +@@ -1740,6 +1740,16 @@ void ironlake_irq_preinstall(struct drm_device *dev) + INIT_WORK(&dev_priv->rps_work, gen6_pm_rps_work); + + I915_WRITE(HWSTAM, 0xeffe); ++ if (IS_GEN6(dev)) { ++ /* Workaround stalls observed on Sandy Bridge GPUs by ++ * making the blitter command streamer generate a ++ * write to the Hardware Status Page for ++ * MI_USER_INTERRUPT. This appears to serialize the ++ * previous seqno write out before the interrupt ++ * happens. ++ */ ++ I915_WRITE(GEN6_BLITTER_HWSTAM, ~GEN6_BLITTER_USER_INTERRUPT); ++ } + + /* XXX hotplug from PCH */ + diff --git a/kernel.spec b/kernel.spec index 17ef97758..800765452 100644 --- a/kernel.spec +++ b/kernel.spec @@ -685,6 +685,7 @@ Patch1825: drm-intel-make-lvds-work.patch Patch1826: drm-intel-edp-fixes.patch Patch1828: drm-intel-eeebox-eb1007-quirk.patch Patch1829: drm-intel-restore-mode.patch +Patch1830: drm-i915-snb-irq-stalls-fix.patch # radeon - new hw + fixes for fusion and t500 regression Patch1839: drm-radeon-fix-regression-on-atom-cards-with-hardcoded-EDID-record.patch Patch1840: drm-radeon-update.patch @@ -1341,6 +1342,7 @@ ApplyPatch drm-intel-edp-fixes.patch ApplyPatch drm-i915-fix-pipelined-fencing.patch ApplyPatch drm-intel-eeebox-eb1007-quirk.patch ApplyPatch drm-intel-restore-mode.patch +ApplyPatch drm-i915-snb-irq-stalls-fix.patch # radeon DRM (add cayman support) ApplyPatch drm-radeon-fix-regression-on-atom-cards-with-hardcoded-EDID-record.patch -R @@ -2019,6 +2021,9 @@ fi # and build. %changelog +* Thu Jun 23 2011 Dave Airlie +- drm-i915-snb-irq-stalls-fix.patch: fix Sandybridge IRQ stalls + * Thu Jun 23 2011 Dave Airlie - drm-radeon-update3.patch: more radeon fixes backport