drm/i915/oa: Check that OA is disabled before unpinning
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 11 May 2018 13:52:07 +0000 (14:52 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 11 May 2018 16:17:46 +0000 (17:17 +0100)
Before we unpin the buffer used for OA reports and return it to the
system, we need to be sure that the HW has finished writing into it.
For lack of a better idea, poll OACONTROL to check it is switched off.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106379
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Tested-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180511135207.12880-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_perf.c

index d9341415df40464b24eaf1017f7d6f7b78d4316a..019bd2d073ad4461b0660f60e0a696e6af203ed7 100644 (file)
@@ -1960,11 +1960,19 @@ static void i915_oa_stream_enable(struct i915_perf_stream *stream)
 static void gen7_oa_disable(struct drm_i915_private *dev_priv)
 {
        I915_WRITE(GEN7_OACONTROL, 0);
+       if (intel_wait_for_register(dev_priv,
+                                   GEN7_OACONTROL, GEN7_OACONTROL_ENABLE, 0,
+                                   50))
+               DRM_ERROR("wait for OA to be disabled timed out\n");
 }
 
 static void gen8_oa_disable(struct drm_i915_private *dev_priv)
 {
        I915_WRITE(GEN8_OACONTROL, 0);
+       if (intel_wait_for_register(dev_priv,
+                                   GEN8_OACONTROL, GEN8_OA_COUNTER_ENABLE, 0,
+                                   50))
+               DRM_ERROR("wait for OA to be disabled timed out\n");
 }
 
 /**