diff options
author | Ben Widawsky <ben@bwidawsk.net> | 2012-09-02 01:59:50 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-09-03 04:28:32 -0400 |
commit | 8dee3eea3ccd3b6c00a8d3a08dd715d6adf737dd (patch) | |
tree | 8a31d9d71d99ad8bf73267aac1b833108122c4f8 | |
parent | 057d3860613813b2e8507bb932f9a523ad2cca2f (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.c | 8 |
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) | |||
4029 | static void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv) | 4029 | static 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 | ||
4036 | static void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv) | 4036 | static 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 | ||