diff options
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_mmu.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c b/drivers/gpu/drm/etnaviv/etnaviv_mmu.c index 304c0b4a9d58..d3796ed8d8c5 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_mmu.c @@ -342,7 +342,12 @@ u32 etnaviv_iommu_get_cmdbuf_va(struct etnaviv_gpu *gpu,  			mutex_unlock(&mmu->lock);  			return 0;  		} -		mmu->last_iova = buf->vram_node.start + buf->size; +		/* +		 * At least on GC3000 the FE MMU doesn't properly flush old TLB +		 * entries. Make sure to space the command buffers out in a way +		 * that the FE MMU prefetch won't load invalid entries. +		 */ +		mmu->last_iova = buf->vram_node.start + buf->size + SZ_64K;  		gpu->mmu->need_flush = true;  		mutex_unlock(&mmu->lock);  | 

