]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommu/arm-smmu: Remove iommu_ops pgsize_bitmap
authorJason Gunthorpe <jgg@nvidia.com>
Mon, 9 Jun 2025 20:41:26 +0000 (17:41 -0300)
committerJoerg Roedel <joerg.roedel@amd.com>
Fri, 27 Jun 2025 06:55:55 +0000 (08:55 +0200)
The driver never reads this value, arm_smmu_init_domain_context() always
sets domain.pgsize_bitmap to smmu->pgsize_bitmap, the per-instance value.

Remove the ops version entirely, the related dead code and make
arm_smmu_ops const.

Since this driver does not yet finalize the domain under
arm_smmu_domain_alloc_paging() add a page size initialization to alloc so
the page size is still setup prior to attach.

Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Acked-by: Will Deacon <will@kernel.org>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Tested-by: Nicolin Chen <nicolinc@nvidia.com>
Link: https://lore.kernel.org/r/2-v2-68a2e1ba507c+1fb-iommu_rm_ops_pgsize_jgg@nvidia.com
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
drivers/iommu/arm/arm-smmu/arm-smmu.c

index 8d95b14c7d5a4040bb8add56475e297beb16b162..4ced4b5bee4df3bad1f9d6fa25b0f7cf245d8cd9 100644 (file)
@@ -109,7 +109,7 @@ static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
 }
 
 static struct platform_driver arm_smmu_driver;
-static struct iommu_ops arm_smmu_ops;
+static const struct iommu_ops arm_smmu_ops;
 
 #ifdef CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS
 static struct device_node *dev_get_dev_node(struct device *dev)
@@ -919,6 +919,8 @@ static void arm_smmu_destroy_domain_context(struct arm_smmu_domain *smmu_domain)
 static struct iommu_domain *arm_smmu_domain_alloc_paging(struct device *dev)
 {
        struct arm_smmu_domain *smmu_domain;
+       struct arm_smmu_master_cfg *cfg = dev_iommu_priv_get(dev);
+       struct arm_smmu_device *smmu = cfg->smmu;
 
        /*
         * Allocate the domain and initialise some of its data structures.
@@ -931,6 +933,7 @@ static struct iommu_domain *arm_smmu_domain_alloc_paging(struct device *dev)
 
        mutex_init(&smmu_domain->init_mutex);
        spin_lock_init(&smmu_domain->cb_lock);
+       smmu_domain->domain.pgsize_bitmap = smmu->pgsize_bitmap;
 
        return &smmu_domain->domain;
 }
@@ -1627,7 +1630,7 @@ static int arm_smmu_def_domain_type(struct device *dev)
        return 0;
 }
 
-static struct iommu_ops arm_smmu_ops = {
+static const struct iommu_ops arm_smmu_ops = {
        .identity_domain        = &arm_smmu_identity_domain,
        .blocked_domain         = &arm_smmu_blocked_domain,
        .capable                = arm_smmu_capable,
@@ -1639,7 +1642,6 @@ static struct iommu_ops arm_smmu_ops = {
        .of_xlate               = arm_smmu_of_xlate,
        .get_resv_regions       = arm_smmu_get_resv_regions,
        .def_domain_type        = arm_smmu_def_domain_type,
-       .pgsize_bitmap          = -1UL, /* Restricted during device attach */
        .owner                  = THIS_MODULE,
        .default_domain_ops = &(const struct iommu_domain_ops) {
                .attach_dev             = arm_smmu_attach_dev,
@@ -1919,10 +1921,6 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
        if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_64K)
                smmu->pgsize_bitmap |= SZ_64K | SZ_512M;
 
-       if (arm_smmu_ops.pgsize_bitmap == -1UL)
-               arm_smmu_ops.pgsize_bitmap = smmu->pgsize_bitmap;
-       else
-               arm_smmu_ops.pgsize_bitmap |= smmu->pgsize_bitmap;
        dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n",
                   smmu->pgsize_bitmap);