On 2020-11-19 06:18, Yong Wu wrote:
Remove IO_PGTABLE_QUIRK_TLBI_ON_MAP to avoid tlb sync for each a small
chunk memory, Use the new iotlb_sync_map to tlb_sync once for whole the
iova range of iommu_map.

Signed-off-by: Yong Wu <yong...@mediatek.com>
---
After reading msm_iommu.c, It looks IO_PGTABLE_QUIRK_TLBI_ON_MAP can be
removed.
---
  drivers/iommu/mtk_iommu.c | 10 +++++++++-
  1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index c072cee532c2..8c2d4a225666 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -323,7 +323,6 @@ static int mtk_iommu_domain_finalise(struct 
mtk_iommu_domain *dom)
        dom->cfg = (struct io_pgtable_cfg) {
                .quirks = IO_PGTABLE_QUIRK_ARM_NS |
                        IO_PGTABLE_QUIRK_NO_PERMS |
-                       IO_PGTABLE_QUIRK_TLBI_ON_MAP |
                        IO_PGTABLE_QUIRK_ARM_MTK_EXT,
                .pgsize_bitmap = mtk_iommu_ops.pgsize_bitmap,
                .ias = 32,
@@ -454,6 +453,14 @@ static void mtk_iommu_iotlb_sync(struct iommu_domain 
*domain,
                                       data);
  }
+static void mtk_iommu_sync_map(struct iommu_domain *domain, unsigned long iova,
+                              size_t size)
+{
+       struct mtk_iommu_domain *dom = to_mtk_domain(domain);
+
+       mtk_iommu_tlb_flush_range_sync(iova, size, size, dom->data);

So we have a conflict/dependency against the MT8192 series here - I guess we need to make a decision up-front about which series should go first. Other than that, though:

Reviewed-by: Robin Murphy <robin.mur...@arm.com>

+}
+
  static phys_addr_t mtk_iommu_iova_to_phys(struct iommu_domain *domain,
                                          dma_addr_t iova)
  {
@@ -540,6 +547,7 @@ static const struct iommu_ops mtk_iommu_ops = {
        .unmap          = mtk_iommu_unmap,
        .flush_iotlb_all = mtk_iommu_flush_iotlb_all,
        .iotlb_sync     = mtk_iommu_iotlb_sync,
+       .iotlb_sync_map = mtk_iommu_sync_map,
        .iova_to_phys   = mtk_iommu_iova_to_phys,
        .probe_device   = mtk_iommu_probe_device,
        .release_device = mtk_iommu_release_device,

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to