drm/i915: don't disable_fbc() if FBC is already disabled
authorPaulo Zanoni <paulo.r.zanoni@intel.com>
Wed, 4 Nov 2015 19:10:51 +0000 (17:10 -0200)
committerMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Tue, 10 Nov 2015 09:59:45 +0000 (10:59 +0100)
If FBC is disabled we will still call intel_fbc_invalidate(), and as a
result we may call intel_fbc_deactivate(), which will try to touch
registers.

I'm pretty sure I saw this happen on a runtime suspended device, and
I'm almost sure I was running igt/pm_rpm. It produced the "you touched
registers while the device is suspended" WARNs. But this was some time
ago and I can't remember exactly which conditions were necessary to
reproduce the problem.

v2: Rebase to new series order.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1446664257-32012-8-git-send-email-paulo.r.zanoni@intel.com
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
drivers/gpu/drm/i915/intel_fbc.c

index 102dfa04d1cfa8376bc65c0fe35d5b50e39314de..7f8832fb3455ad137dc940a0e47d05ca54b14046 100644 (file)
@@ -438,7 +438,8 @@ static void __intel_fbc_disable(struct drm_i915_private *dev_priv)
 
        intel_fbc_cancel_work(dev_priv);
 
-       dev_priv->fbc.disable_fbc(dev_priv);
+       if (dev_priv->fbc.enabled)
+               dev_priv->fbc.disable_fbc(dev_priv);
        dev_priv->fbc.crtc = NULL;
 }