aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeepak S <deepak.s@linux.intel.com>2014-09-18 09:21:50 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-09-19 08:43:25 -0400
commit5cb13c07dae73380d8b3ddc792740487b8742938 (patch)
treeacfff4f1f952eed9cfaa37a3506e46177ecd0a92
parent342e36c6b0cab1d7461287d553154ff35fee989d (diff)
drm/i915/vlv: Remove check for Old Ack during forcewake
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>
-rw-r--r--drivers/gpu/drm/i915/intel_uncore.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index 918b76163965..0e99852222e1 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -194,13 +194,15 @@ static void vlv_force_wake_reset(struct drm_i915_private *dev_priv)
194static void __vlv_force_wake_get(struct drm_i915_private *dev_priv, 194static void __vlv_force_wake_get(struct drm_i915_private *dev_priv,
195 int fw_engine) 195 int fw_engine)
196{ 196{
197 /*
198 * WaRsDontPollForAckOnClearingFWBits:vlv
199 * Hardware clears ack bits lazily (only when all ack
200 * bits become 0) so don't poll for individiual ack
201 * bits to be clear here like on other platforms.
202 */
203
197 /* Check for Render Engine */ 204 /* Check for Render Engine */
198 if (FORCEWAKE_RENDER & fw_engine) { 205 if (FORCEWAKE_RENDER & fw_engine) {
199 if (wait_for_atomic((__raw_i915_read32(dev_priv,
200 FORCEWAKE_ACK_VLV) &
201 FORCEWAKE_KERNEL) == 0,
202 FORCEWAKE_ACK_TIMEOUT_MS))
203 DRM_ERROR("Timed out: Render forcewake old ack to clear.\n");
204 206
205 __raw_i915_write32(dev_priv, FORCEWAKE_VLV, 207 __raw_i915_write32(dev_priv, FORCEWAKE_VLV,
206 _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL)); 208 _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
@@ -214,11 +216,6 @@ static void __vlv_force_wake_get(struct drm_i915_private *dev_priv,
214 216
215 /* Check for Media Engine */ 217 /* Check for Media Engine */
216 if (FORCEWAKE_MEDIA & fw_engine) { 218 if (FORCEWAKE_MEDIA & fw_engine) {
217 if (wait_for_atomic((__raw_i915_read32(dev_priv,
218 FORCEWAKE_ACK_MEDIA_VLV) &
219 FORCEWAKE_KERNEL) == 0,
220 FORCEWAKE_ACK_TIMEOUT_MS))
221 DRM_ERROR("Timed out: Media forcewake old ack to clear.\n");
222 219
223 __raw_i915_write32(dev_priv, FORCEWAKE_MEDIA_VLV, 220 __raw_i915_write32(dev_priv, FORCEWAKE_MEDIA_VLV,
224 _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL)); 221 _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));