The GPU cache flush/invalidate operation is unnecessary. First off, the
GPU doesn't read off the perfcnt sample buffer, only writes into it, so
an invalidate doesn't make a difference. Then flushing GPU caches after
each sample has been written is enough for the CPU to see updated values.

Signed-off-by: Adrián Larumbe <[email protected]>
---
 drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 15 ++-------------
 1 file changed, 2 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c 
b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c
index f71534e741b6..ffc77121070e 100644
--- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c
+++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c
@@ -124,21 +124,10 @@ static int panfrost_perfcnt_enable_locked(struct 
panfrost_device *pfdev,
        panfrost_gem_internal_set_label(&bo->base, "Perfcnt sample buffer");
 
        /*
-        * Invalidate the cache and clear the counters to start from a fresh
-        * state.
+        * Clear the counters to start from a fresh state.
         */
-       reinit_completion(&pfdev->perfcnt->dump_comp);
-       gpu_write(pfdev, GPU_INT_CLEAR,
-                 GPU_IRQ_CLEAN_CACHES_COMPLETED |
-                 GPU_IRQ_PERFCNT_SAMPLE_COMPLETED);
+       gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED);
        gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR);
-       gpu_write(pfdev, GPU_CMD, GPU_CMD_CLEAN_INV_CACHES);
-       ret = wait_for_completion_timeout(&pfdev->perfcnt->dump_comp,
-                                         msecs_to_jiffies(1000));
-       if (!ret) {
-               ret = -ETIMEDOUT;
-               goto err_vunmap;
-       }
 
        ret = panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu);
        if (ret < 0)

-- 
2.55.0

Reply via email to