]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/v3d: Flush the MMU before we supply more memory to the binner
authorMaíra Canal <mcanal@igalia.com>
Mon, 23 Sep 2024 13:55:06 +0000 (10:55 -0300)
committerMaíra Canal <mcanal@igalia.com>
Wed, 25 Sep 2024 11:40:18 +0000 (08:40 -0300)
We must ensure that the MMU is flushed before we supply more memory to
the binner, otherwise we might end up with invalid MMU accesses by the
GPU.

Fixes: 57692c94dcbe ("drm/v3d: Introduce a new DRM driver for Broadcom V3D V3.x+")
Signed-off-by: Maíra Canal <mcanal@igalia.com>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240923141348.2422499-3-mcanal@igalia.com
drivers/gpu/drm/v3d/v3d_drv.h
drivers/gpu/drm/v3d/v3d_irq.c
drivers/gpu/drm/v3d/v3d_mmu.c

index cf4b23369dc4491c092c13cc833f562674956f18..75b4725d49c7e160835b049208a1e11c7744755f 100644 (file)
@@ -553,6 +553,7 @@ void v3d_irq_disable(struct v3d_dev *v3d);
 void v3d_irq_reset(struct v3d_dev *v3d);
 
 /* v3d_mmu.c */
+int v3d_mmu_flush_all(struct v3d_dev *v3d);
 int v3d_mmu_set_page_table(struct v3d_dev *v3d);
 void v3d_mmu_insert_ptes(struct v3d_bo *bo);
 void v3d_mmu_remove_ptes(struct v3d_bo *bo);
index d469bda52c1a5e3b60188f3d350e2629a167d6cc..20bf33702c3c4fb8677709aecbbf926c3dfb97ad 100644 (file)
@@ -70,6 +70,8 @@ v3d_overflow_mem_work(struct work_struct *work)
        list_add_tail(&bo->unref_head, &v3d->bin_job->render->unref_list);
        spin_unlock_irqrestore(&v3d->job_lock, irqflags);
 
+       v3d_mmu_flush_all(v3d);
+
        V3D_CORE_WRITE(0, V3D_PTB_BPOA, bo->node.start << V3D_MMU_PAGE_SHIFT);
        V3D_CORE_WRITE(0, V3D_PTB_BPOS, obj->size);
 
index e36ec3343b06ea0f5e355a276caa687552054904..5bb7821c0243c6d0ed1057524577c2c82fae5f97 100644 (file)
@@ -28,7 +28,7 @@
 #define V3D_PTE_WRITEABLE BIT(29)
 #define V3D_PTE_VALID BIT(28)
 
-static int v3d_mmu_flush_all(struct v3d_dev *v3d)
+int v3d_mmu_flush_all(struct v3d_dev *v3d)
 {
        int ret;