aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Widawsky <ben@bwidawsk.net>2012-09-02 01:59:50 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-09-03 04:28:32 -0400
commit8dee3eea3ccd3b6c00a8d3a08dd715d6adf737dd (patch)
tree8a31d9d71d99ad8bf73267aac1b833108122c4f8
parent057d3860613813b2e8507bb932f9a523ad2cca2f (diff)
drm/i915: Never read FORCEWAKE
The same designer from the previous patch has told us to never read FORCEWAKE. We only do this for the POSTING_READ(), so simply change that to something within the same cacheline (for no reason in particular other than it sounds nice). In the _mt case we can leverage the gtfifodbg check for the POSTING_READ. This partially reverts commit 6af2d180f82151cf3d58952e35a4f96e45bc453a Author: Daniel Vetter <daniel.vetter@ffwll.ch> Date: Thu Jul 26 16:24:50 2012 +0200 drm/i915: fix forcewake related hangs on snb v2: commit message, comments about posting read from (Daniel) Note: vlv forcewake doesn't need any changes for this special treatment since FORCEWAKE_VLV is in a totally different register range, and the readback FORCEWAKE_ACK_VLV readback that follows is in the same range. Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Acked-by: Chris Wilson <chris@chris-wilson.co.uk> [danvet: Added note.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 31e47387ab9c..36c64091bc90 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3969,7 +3969,7 @@ static void __gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
3969 DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n"); 3969 DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
3970 3970
3971 I915_WRITE_NOTRACE(FORCEWAKE, 1); 3971 I915_WRITE_NOTRACE(FORCEWAKE, 1);
3972 POSTING_READ(FORCEWAKE); 3972 POSTING_READ(ECOBUS); /* something from same cacheline, but !FORCEWAKE */
3973 3973
3974 if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1), 3974 if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1),
3975 FORCEWAKE_ACK_TIMEOUT_MS)) 3975 FORCEWAKE_ACK_TIMEOUT_MS))
@@ -3992,7 +3992,7 @@ static void __gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv)
3992 DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n"); 3992 DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
3993 3993
3994 I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_ENABLE(1)); 3994 I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_ENABLE(1));
3995 POSTING_READ(FORCEWAKE_MT); 3995 POSTING_READ(ECOBUS); /* something from same cacheline, but !FORCEWAKE */
3996 3996
3997 if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1), 3997 if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1),
3998 FORCEWAKE_ACK_TIMEOUT_MS)) 3998 FORCEWAKE_ACK_TIMEOUT_MS))
@@ -4029,14 +4029,14 @@ void gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv)
4029static void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv) 4029static void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
4030{ 4030{
4031 I915_WRITE_NOTRACE(FORCEWAKE, 0); 4031 I915_WRITE_NOTRACE(FORCEWAKE, 0);
4032 POSTING_READ(FORCEWAKE); 4032 /* gen6_gt_check_fifodbg doubles as the POSTING_READ */
4033 gen6_gt_check_fifodbg(dev_priv); 4033 gen6_gt_check_fifodbg(dev_priv);
4034} 4034}
4035 4035
4036static void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv) 4036static void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv)
4037{ 4037{
4038 I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_DISABLE(1)); 4038 I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_DISABLE(1));
4039 POSTING_READ(FORCEWAKE_MT); 4039 /* gen6_gt_check_fifodbg doubles as the POSTING_READ */
4040 gen6_gt_check_fifodbg(dev_priv); 4040 gen6_gt_check_fifodbg(dev_priv);
4041} 4041}
4042 4042