On 10/03/2025 19:59, Ariel D'Alessandro wrote: > 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. As I understand it the hardware only sort-of supports uncached mappings. The legacy page table format has two options: cached, or "implementation defined" (ARM_MALI_LPAE_MEMATTR_IMP_DEF). When selecting IMP_DEF that means that the internal units signal to the cache whether a particular access should be cached or not. I believe the theory is that they can decide whether it makes sense to store in the cache or not. Having said all that, I have never observed any actual performance difference and I suspect it won't make any actual difference. And of course the AArch64 page tables need this to be set. I just thought I should explain the background and that this wasn't wrong for the legacy page tables. Reviewed-by: Steven Price <steven.price@xxxxxxx> Steve > Signed-off-by: Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx> > Signed-off-by: Ariel D'Alessandro <ariel.dalessandro@xxxxxxxxxxxxx> > --- > drivers/gpu/drm/panfrost/panfrost_mmu.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c > index b91019cd5acb1..9e6f198ef5c1b 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c > +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c > @@ -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;