drm/msm/a5xx: Clear shadow on suspend
authorRob Clark <robdclark@chromium.org>
Tue, 10 Nov 2020 18:39:46 +0000 (10:39 -0800)
committerRob Clark <robdclark@chromium.org>
Tue, 10 Nov 2020 19:05:23 +0000 (11:05 -0800)
Similar to the previous patch, clear shadow on suspend to avoid timeouts
waiting for ringbuffer space.

Fixes: 8907afb476ac ("drm/msm: Allow a5xx to mark the RPTR shadow as privileged")
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/adreno/a5xx_gpu.c

index b0005ccd81c61487a33f8461f4f43e710527d04e..8fa5c917d0173f97ad911be83ca6234102b239a4 100644 (file)
@@ -1206,7 +1206,9 @@ static int a5xx_pm_resume(struct msm_gpu *gpu)
 static int a5xx_pm_suspend(struct msm_gpu *gpu)
 {
        struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
+       struct a5xx_gpu *a5xx_gpu = to_a5xx_gpu(adreno_gpu);
        u32 mask = 0xf;
+       int i, ret;
 
        /* A510 has 3 XIN ports in VBIF */
        if (adreno_is_a510(adreno_gpu))
@@ -1226,7 +1228,15 @@ static int a5xx_pm_suspend(struct msm_gpu *gpu)
        gpu_write(gpu, REG_A5XX_RBBM_BLOCK_SW_RESET_CMD, 0x003C0000);
        gpu_write(gpu, REG_A5XX_RBBM_BLOCK_SW_RESET_CMD, 0x00000000);
 
-       return msm_gpu_pm_suspend(gpu);
+       ret = msm_gpu_pm_suspend(gpu);
+       if (ret)
+               return ret;
+
+       if (a5xx_gpu->has_whereami)
+               for (i = 0; i < gpu->nr_rings; i++)
+                       a5xx_gpu->shadow[i] = 0;
+
+       return 0;
 }
 
 static int a5xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value)