From 140eb545a1fa36569b952efe8c668f100f0e2cbc Mon Sep 17 00:00:00 2001 From: "Isaac J. Manjarres" Date: Wed, 19 Aug 2020 11:09:22 -0700 Subject: [PATCH] iommu/arm-smmu: Deprecate msm_iommu_flush ops msm_iommu_flush_ops was originally introduced to support calling into the IOMMU driver to allocate and free the page table memory. Since the support for calling into the IOMMU driver to manage the page table memory was introduced in a recent patch in a different way, the support for msm_iommu_flush_ops is no longer required, so remove it. Change-Id: I052dab627b4008e7661511d2e4e7a7e26d3b83dc Signed-off-by: Isaac J. Manjarres --- drivers/iommu/arm-smmu.c | 44 +++++++++++++++++--------------------- drivers/iommu/arm-smmu.h | 2 +- drivers/iommu/io-pgtable.c | 30 -------------------------- include/linux/io-pgtable.h | 17 --------------- 4 files changed, 21 insertions(+), 72 deletions(-) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 906087017d6a..508953302338 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -1115,39 +1115,35 @@ static const struct iommu_pgtable_ops arm_smmu_pgtable_ops = { .free_pgtable = arm_smmu_free_pages_exact, }; -#define ARM_SMMU_INIT_MSM_TLB_OPS(_tlb_flush_all) \ - {\ - .tlb_ops = { \ - .tlb_flush_all = _tlb_flush_all, \ - .tlb_flush_walk = arm_smmu_tlb_inv_walk, \ - .tlb_flush_leaf = arm_smmu_tlb_inv_leaf, \ - .tlb_add_page = arm_smmu_tlb_add_page, \ - } \ - } - -#define ARM_SMMU_MSM_TLB_OPS_S1 \ - ARM_SMMU_INIT_MSM_TLB_OPS(arm_smmu_tlb_inv_context_s1) - -#define ARM_SMMU_MSM_TLB_OPS_S2_V2 \ - ARM_SMMU_INIT_MSM_TLB_OPS(arm_smmu_tlb_inv_context_s2) - -#define ARM_SMMU_MSM_TLB_OPS_S2_V1 \ - ARM_SMMU_INIT_MSM_TLB_OPS(arm_smmu_tlb_inv_context_s2) - static const struct arm_smmu_flush_ops arm_smmu_s1_tlb_ops = { - .tlb = ARM_SMMU_MSM_TLB_OPS_S1, + .tlb = { + .tlb_flush_all = arm_smmu_tlb_inv_context_s1, + .tlb_flush_walk = arm_smmu_tlb_inv_walk, + .tlb_flush_leaf = arm_smmu_tlb_inv_leaf, + .tlb_add_page = arm_smmu_tlb_add_page, + }, .tlb_inv_range = arm_smmu_tlb_inv_range_s1, .tlb_sync = arm_smmu_tlb_sync_context, }; static const struct arm_smmu_flush_ops arm_smmu_s2_tlb_ops_v2 = { - .tlb = ARM_SMMU_MSM_TLB_OPS_S2_V2, + .tlb = { + .tlb_flush_all = arm_smmu_tlb_inv_context_s2, + .tlb_flush_walk = arm_smmu_tlb_inv_walk, + .tlb_flush_leaf = arm_smmu_tlb_inv_leaf, + .tlb_add_page = arm_smmu_tlb_add_page, + }, .tlb_inv_range = arm_smmu_tlb_inv_range_s2, .tlb_sync = arm_smmu_tlb_sync_context, }; static const struct arm_smmu_flush_ops arm_smmu_s2_tlb_ops_v1 = { - .tlb = ARM_SMMU_MSM_TLB_OPS_S2_V1, + .tlb = { + .tlb_flush_all = arm_smmu_tlb_inv_context_s2, + .tlb_flush_walk = arm_smmu_tlb_inv_walk, + .tlb_flush_leaf = arm_smmu_tlb_inv_leaf, + .tlb_add_page = arm_smmu_tlb_add_page, + }, .tlb_inv_range = arm_smmu_tlb_inv_vmid_nosync, .tlb_sync = arm_smmu_tlb_sync_vmid, }; @@ -2176,7 +2172,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain, .ias = ias, .oas = oas, .coherent_walk = is_iommu_pt_coherent(smmu_domain), - .tlb = &smmu_domain->flush_ops->tlb.tlb_ops, + .tlb = &smmu_domain->flush_ops->tlb, .iommu_pgtable_ops = &arm_smmu_pgtable_ops, .iommu_dev = smmu->dev, }; @@ -3242,7 +3238,7 @@ static void arm_smmu_flush_iotlb_all(struct iommu_domain *domain) arm_smmu_rpm_put(smmu); return; } - smmu_domain->flush_ops->tlb.tlb_ops.tlb_flush_all(smmu_domain); + smmu_domain->flush_ops->tlb.tlb_flush_all(smmu_domain); arm_smmu_domain_power_off(domain, smmu); arm_smmu_rpm_put(smmu); } diff --git a/drivers/iommu/arm-smmu.h b/drivers/iommu/arm-smmu.h index 1d98e3f5c008..05f79b0e19a9 100644 --- a/drivers/iommu/arm-smmu.h +++ b/drivers/iommu/arm-smmu.h @@ -461,7 +461,7 @@ enum arm_smmu_domain_stage { }; struct arm_smmu_flush_ops { - struct msm_iommu_flush_ops tlb; + struct iommu_flush_ops tlb; void (*tlb_inv_range)(unsigned long iova, size_t size, size_t granule, bool leaf, void *cookie); void (*tlb_sync)(void *cookie); diff --git a/drivers/iommu/io-pgtable.c b/drivers/iommu/io-pgtable.c index b44d52e9e59d..207aa29593e7 100644 --- a/drivers/iommu/io-pgtable.c +++ b/drivers/iommu/io-pgtable.c @@ -114,36 +114,6 @@ static void mod_pages_allocated(int nr_pages) } #endif -void *io_pgtable_alloc_pages_exact(struct io_pgtable_cfg *cfg, void *cookie, - size_t size, gfp_t gfp_mask) -{ - void *ret; - struct msm_iommu_flush_ops *ops = to_msm_iommu_flush_ops(cfg->tlb); - - if (ops->alloc_pages_exact) - ret = ops->alloc_pages_exact(cookie, size, gfp_mask); - else - ret = alloc_pages_exact(size, gfp_mask); - - if (likely(ret)) - mod_pages_allocated(1 << get_order(size)); - - return ret; -} - -void io_pgtable_free_pages_exact(struct io_pgtable_cfg *cfg, void *cookie, - void *virt, size_t size) -{ - struct msm_iommu_flush_ops *ops = to_msm_iommu_flush_ops(cfg->tlb); - - if (ops->free_pages_exact) - ops->free_pages_exact(cookie, virt, size); - else - free_pages_exact(virt, size); - - mod_pages_allocated(-(1 << get_order(size))); -} - void *io_pgtable_alloc_pages(struct io_pgtable_cfg *cfg, void *cookie, int order, gfp_t gfp_mask) { diff --git a/include/linux/io-pgtable.h b/include/linux/io-pgtable.h index a448e2be9205..821a0792b8bd 100644 --- a/include/linux/io-pgtable.h +++ b/include/linux/io-pgtable.h @@ -7,8 +7,6 @@ #include -#define to_msm_iommu_flush_ops(_tlb_ops) \ - container_of(_tlb_ops, struct msm_iommu_flush_ops, tlb_ops) #define to_msm_io_pgtable_info(_cfg) \ container_of(_cfg, struct msm_io_pgtable_info, pgtbl_cfg) @@ -56,21 +54,6 @@ struct iommu_flush_ops { unsigned long iova, size_t granule, void *cookie); }; -/** - * struct msm_iommu_flush_ops - MSM and standard IOMMU callbacks for TLB and - * page table management. - * - * @alloc_pages_exact: Allocate page table memory (optional, defaults to - * alloc_pages_exact) - * @free_pages_exact: Free page table memory (optional, defaults to - * free_pages_exact) - */ -struct msm_iommu_flush_ops { - void *(*alloc_pages_exact)(void *cookie, size_t size, gfp_t gfp_mask); - void (*free_pages_exact)(void *cookie, void *virt, size_t size); - const struct iommu_flush_ops tlb_ops; -}; - /** * struct iommu_pgtable_ops - IOMMU callbacks for page table memory management. *