Merge tag 'drm-next-2019-09-18' of git://anongit.freedesktop.org/drm/drm
[linux-2.6-block.git] / drivers / gpu / drm / panfrost / panfrost_mmu.c
index 387d830cb7cf83b1d5c047dea1b62183b955bef9..6010f9ee7c1fd95487c74561d2d52501bae9c8ae 100644 (file)
@@ -311,7 +311,7 @@ void panfrost_mmu_unmap(struct panfrost_gem_object *bo)
                size_t pgsize = get_pgsize(iova, len - unmapped_len);
 
                if (ops->iova_to_phys(ops, iova)) {
-                       unmapped_page = ops->unmap(ops, iova, pgsize);
+                       unmapped_page = ops->unmap(ops, iova, pgsize, NULL);
                        WARN_ON(unmapped_page != pgsize);
                }
                iova += pgsize;
@@ -325,20 +325,28 @@ void panfrost_mmu_unmap(struct panfrost_gem_object *bo)
 static void mmu_tlb_inv_context_s1(void *cookie)
 {}
 
-static void mmu_tlb_inv_range_nosync(unsigned long iova, size_t size,
-                                    size_t granule, bool leaf, void *cookie)
-{}
-
 static void mmu_tlb_sync_context(void *cookie)
 {
        //struct panfrost_device *pfdev = cookie;
        // TODO: Wait 1000 GPU cycles for HW_ISSUE_6367/T60X
 }
 
-static const struct iommu_gather_ops mmu_tlb_ops = {
+static void mmu_tlb_flush_walk(unsigned long iova, size_t size, size_t granule,
+                              void *cookie)
+{
+       mmu_tlb_sync_context(cookie);
+}
+
+static void mmu_tlb_flush_leaf(unsigned long iova, size_t size, size_t granule,
+                              void *cookie)
+{
+       mmu_tlb_sync_context(cookie);
+}
+
+static const struct iommu_flush_ops mmu_tlb_ops = {
        .tlb_flush_all  = mmu_tlb_inv_context_s1,
-       .tlb_add_flush  = mmu_tlb_inv_range_nosync,
-       .tlb_sync       = mmu_tlb_sync_context,
+       .tlb_flush_walk = mmu_tlb_flush_walk,
+       .tlb_flush_leaf = mmu_tlb_flush_leaf,
 };
 
 int panfrost_mmu_pgtable_alloc(struct panfrost_file_priv *priv)