drm/i915/vlv: Remove check for Old Ack during forcewake
authorDeepak S <deepak.s@linux.intel.com>
Thu, 18 Sep 2014 13:21:50 +0000 (18:51 +0530)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 19 Sep 2014 12:43:25 +0000 (14:43 +0200)
Based on the HW team inputs. We can should not wait for the old ack,
Waiting for old ack might fail, when other forcewake came before the
present one is desserted.

for example, if forcewake bit 0 was set and before it could get cleared
forcewake bit 1 got set, HW eventually clear bit 0, when the bit 1
is cleared. i.e, bit 1 is still sent then forcewake bit 0 will still be
set.

Signed-off-by: Deepak S <deepak.s@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
[danvet: Add comment Ville requested.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_uncore.c

index 918b761639651042edebf1ab7a3d886973774a15..0e99852222e14236cb5c758f82fa7bcec0f0b4d0 100644 (file)
@@ -194,13 +194,15 @@ 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));
@@ -214,11 +216,6 @@ 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));