Revert "drm/i915/vlv: Remove check for Old Ack during forcewake"
authorMika Kuoppala <mika.kuoppala@linux.intel.com>
Wed, 5 Nov 2014 15:30:52 +0000 (17:30 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 7 Nov 2014 17:42:21 +0000 (18:42 +0100)
This reverts commit 5cb13c07dae73380d8b3ddc792740487b8742938.

While the relevance for WaRsDontPollForAckOnClearingFWBits is under
investigation, revert this as regression.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85684
Tested-by: Tested-by: lu hua <huax.lu@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: S, Deepak <deepak.s@intel.com>
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_uncore.c

index 68e722b..6a0c3fb 100644 (file)
@@ -194,15 +194,13 @@ static void vlv_force_wake_reset(struct drm_i915_private *dev_priv)
 static void __vlv_force_wake_get(struct drm_i915_private *dev_priv,
                                                int fw_engine)
 {
-       /*
-        * WaRsDontPollForAckOnClearingFWBits:vlv
-        * Hardware clears ack bits lazily (only when all ack
-        * bits become 0) so don't poll for individiual ack
-        * bits to be clear here like on other platforms.
-        */
-
        /* Check for Render Engine */
        if (FORCEWAKE_RENDER & fw_engine) {
+               if (wait_for_atomic((__raw_i915_read32(dev_priv,
+                                               FORCEWAKE_ACK_VLV) &
+                                               FORCEWAKE_KERNEL) == 0,
+                                       FORCEWAKE_ACK_TIMEOUT_MS))
+                       DRM_ERROR("Timed out: Render forcewake old ack to clear.\n");
 
                __raw_i915_write32(dev_priv, FORCEWAKE_VLV,
                                   _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
@@ -216,6 +214,11 @@ static void __vlv_force_wake_get(struct drm_i915_private *dev_priv,
 
        /* Check for Media Engine */
        if (FORCEWAKE_MEDIA & fw_engine) {
+               if (wait_for_atomic((__raw_i915_read32(dev_priv,
+                                               FORCEWAKE_ACK_MEDIA_VLV) &
+                                               FORCEWAKE_KERNEL) == 0,
+                                       FORCEWAKE_ACK_TIMEOUT_MS))
+                       DRM_ERROR("Timed out: Media forcewake old ack to clear.\n");
 
                __raw_i915_write32(dev_priv, FORCEWAKE_MEDIA_VLV,
                                   _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));