iommu/io-pgtable: Allow io_pgtable_tlb ops optional
authorYong Wu <yong.wu@mediatek.com>
Thu, 7 Jan 2021 12:29:07 +0000 (20:29 +0800)
committerWill Deacon <will@kernel.org>
Wed, 27 Jan 2021 12:32:27 +0000 (12:32 +0000)
This patch allows io_pgtable_tlb ops could be null since the IOMMU drivers
may use the tlb ops from iommu framework.

Signed-off-by: Yong Wu <yong.wu@mediatek.com>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Acked-by: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20210107122909.16317-6-yong.wu@mediatek.com
Signed-off-by: Will Deacon <will@kernel.org>
include/linux/io-pgtable.h

index ea727eb..2a5686c 100644 (file)
@@ -214,14 +214,16 @@ struct io_pgtable_domain_attr {
 
 static inline void io_pgtable_tlb_flush_all(struct io_pgtable *iop)
 {
-       iop->cfg.tlb->tlb_flush_all(iop->cookie);
+       if (iop->cfg.tlb && iop->cfg.tlb->tlb_flush_all)
+               iop->cfg.tlb->tlb_flush_all(iop->cookie);
 }
 
 static inline void
 io_pgtable_tlb_flush_walk(struct io_pgtable *iop, unsigned long iova,
                          size_t size, size_t granule)
 {
-       iop->cfg.tlb->tlb_flush_walk(iova, size, granule, iop->cookie);
+       if (iop->cfg.tlb && iop->cfg.tlb->tlb_flush_walk)
+               iop->cfg.tlb->tlb_flush_walk(iova, size, granule, iop->cookie);
 }
 
 static inline void
@@ -229,7 +231,7 @@ io_pgtable_tlb_add_page(struct io_pgtable *iop,
                        struct iommu_iotlb_gather * gather, unsigned long iova,
                        size_t granule)
 {
-       if (iop->cfg.tlb->tlb_add_page)
+       if (iop->cfg.tlb && iop->cfg.tlb->tlb_add_page)
                iop->cfg.tlb->tlb_add_page(gather, iova, granule, iop->cookie);
 }