diff options
Diffstat (limited to 'drivers/gpu/drm/msm/adreno/adreno_gpu.c')
-rw-r--r-- | drivers/gpu/drm/msm/adreno/adreno_gpu.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c index a3b54cc76495..b66ffd44ff26 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c | |||
@@ -204,7 +204,14 @@ int adreno_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit, | |||
204 | void adreno_flush(struct msm_gpu *gpu) | 204 | void adreno_flush(struct msm_gpu *gpu) |
205 | { | 205 | { |
206 | struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); | 206 | struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); |
207 | uint32_t wptr = get_wptr(gpu->rb); | 207 | uint32_t wptr; |
208 | |||
209 | /* | ||
210 | * Mask wptr value that we calculate to fit in the HW range. This is | ||
211 | * to account for the possibility that the last command fit exactly into | ||
212 | * the ringbuffer and rb->next hasn't wrapped to zero yet | ||
213 | */ | ||
214 | wptr = get_wptr(gpu->rb) & ((gpu->rb->size / 4) - 1); | ||
208 | 215 | ||
209 | /* ensure writes to ringbuffer have hit system memory: */ | 216 | /* ensure writes to ringbuffer have hit system memory: */ |
210 | mb(); | 217 | mb(); |