drm/panfrost: Set IOMMU_CACHE flag
authorAriel D'Alessandro <ariel.dalessandro@collabora.com>
Mon, 24 Mar 2025 18:57:56 +0000 (15:57 -0300)
committerSteven Price <steven.price@arm.com>
Mon, 31 Mar 2025 11:08:10 +0000 (12:08 +0100)
Panfrost does not support uncached mappings, so flag them properly. Also
flag the pages that are mapped as response to a page fault as cached.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: Ariel D'Alessandro <ariel.dalessandro@collabora.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Steven Price <steven.price@arm.com>
Reviewed-by: Adrián Larumbe <adrian.larumbe@collabora.com>
Signed-off-by: Steven Price <steven.price@arm.com>
Link: https://lore.kernel.org/r/20250324185801.168664-2-ariel.dalessandro@collabora.com
drivers/gpu/drm/panfrost/panfrost_mmu.c

index 4a0b4bf03f1a1675588e400ce8cdfd00ec8b6ffc..d5c136bb64ec1ef07401b6f979c5d981c0dc09d6 100644 (file)
@@ -327,7 +327,7 @@ int panfrost_mmu_map(struct panfrost_gem_mapping *mapping)
        struct drm_gem_object *obj = &shmem->base;
        struct panfrost_device *pfdev = to_panfrost_device(obj->dev);
        struct sg_table *sgt;
-       int prot = IOMMU_READ | IOMMU_WRITE;
+       int prot = IOMMU_READ | IOMMU_WRITE | IOMMU_CACHE;
 
        if (WARN_ON(mapping->active))
                return 0;
@@ -528,7 +528,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as,
                goto err_map;
 
        mmu_map_sg(pfdev, bomapping->mmu, addr,
-                  IOMMU_WRITE | IOMMU_READ | IOMMU_NOEXEC, sgt);
+                  IOMMU_WRITE | IOMMU_READ | IOMMU_CACHE | IOMMU_NOEXEC, sgt);
 
        bomapping->active = true;
        bo->heap_rss_size += SZ_2M;