For some odd reasons, the vlv forcewake code is rather different from
all other platforms, with no clear justifaction. Adjust things:

- don't check whether the gt is awak already (and bail out early), we
  need to grab a forcewake anyway. Otherwise the chip might go to
  sleep too early, and this would also screw up our forcewake
  accounting.
- Like all other platforms, check whether the gt has cleared the
  forcewake bit in the _ACK register before setting it again.
- Use _MASKED_BIT_ENABLE/DISABLE macros
- Only use bit0 of the fw reg, not all 16 bits.
- check the gtfifodb reg like on all other platforms in _put.
- Drop the POSTING_READs for consitency.

v2: Failure to git add ... again.

Tested-by: "Purushothaman, Vijay A" <vijay.a.purushotha...@intel.com>
Cc: "Widawsky, Benjamin" <benjamin.widaw...@intel.com>
Signed-Off-by: Daniel Vetter <daniel.vet...@ffwll.ch>
---
 drivers/gpu/drm/i915/intel_pm.c |   14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 94aabca..839581a 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -4064,12 +4064,10 @@ int __gen6_gt_wait_for_fifo(struct drm_i915_private 
*dev_priv)
 
 static void vlv_force_wake_get(struct drm_i915_private *dev_priv)
 {
-       /* Already awake? */
-       if ((I915_READ(0x130094) & 0xa1) == 0xa1)
-               return;
+       if (wait_for_atomic_us((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1) == 0, 
500))
+               DRM_ERROR("Force wake wait timed out\n");
 
-       I915_WRITE_NOTRACE(FORCEWAKE_VLV, 0xffffffff);
-       POSTING_READ(FORCEWAKE_VLV);
+       I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_ENABLE(1));
 
        if (wait_for_atomic_us((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1), 500))
                DRM_ERROR("Force wake wait timed out\n");
@@ -4079,9 +4077,9 @@ static void vlv_force_wake_get(struct drm_i915_private 
*dev_priv)
 
 static void vlv_force_wake_put(struct drm_i915_private *dev_priv)
 {
-       I915_WRITE_NOTRACE(FORCEWAKE_VLV, 0xffff0000);
-       /* FIXME: confirm VLV behavior with Punit folks */
-       POSTING_READ(FORCEWAKE_VLV);
+       I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_DISABLE(1));
+       /* The below doubles as a POSTING_READ */
+       gen6_gt_check_fifodbg(dev_priv);
 }
 
 void intel_gt_init(struct drm_device *dev)
-- 
1.7.10.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to