iommu/arm-smmu-v3: Encapsulate ctx_desc_cfg init in alloc_cd_tables
authorMichael Shavit <mshavit@google.com>
Fri, 15 Sep 2023 13:17:34 +0000 (21:17 +0800)
committerWill Deacon <will@kernel.org>
Thu, 12 Oct 2023 16:08:17 +0000 (17:08 +0100)
This is slighlty cleaner: arm_smmu_ctx_desc_cfg is initialized in a
single function instead of having pieces set ahead-of time by its caller.

Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Michael Shavit <mshavit@google.com>
Tested-by: Nicolin Chen <nicolinc@nvidia.com>
Link: https://lore.kernel.org/r/20230915211705.v8.3.I875254464d044a8ce8b3a2ad6beb655a4a006456@changeid
Signed-off-by: Will Deacon <will@kernel.org>
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c

index 223a414e877b66c0355ce8adb46beb490aa8c7a6..cd6b3fca04815bd4893c8e22570c1a4c8b9f14eb 100644 (file)
@@ -1132,7 +1132,8 @@ int arm_smmu_write_ctx_desc(struct arm_smmu_domain *smmu_domain, int ssid,
        return 0;
 }
 
-static int arm_smmu_alloc_cd_tables(struct arm_smmu_domain *smmu_domain)
+static int arm_smmu_alloc_cd_tables(struct arm_smmu_domain *smmu_domain,
+                                   struct arm_smmu_master *master)
 {
        int ret;
        size_t l1size;
@@ -1140,6 +1141,7 @@ static int arm_smmu_alloc_cd_tables(struct arm_smmu_domain *smmu_domain)
        struct arm_smmu_device *smmu = smmu_domain->smmu;
        struct arm_smmu_ctx_desc_cfg *cdcfg = &smmu_domain->cd_table;
 
+       cdcfg->s1cdmax = master->ssid_bits;
        max_contexts = 1 << cdcfg->s1cdmax;
 
        if (!(smmu->features & ARM_SMMU_FEAT_2_LVL_CDTAB) ||
@@ -2092,7 +2094,6 @@ static int arm_smmu_domain_finalise_s1(struct arm_smmu_domain *smmu_domain,
        int ret;
        u32 asid;
        struct arm_smmu_device *smmu = smmu_domain->smmu;
-       struct arm_smmu_ctx_desc_cfg *cd_table = &smmu_domain->cd_table;
        struct arm_smmu_ctx_desc *cd = &smmu_domain->cd;
        typeof(&pgtbl_cfg->arm_lpae_s1_cfg.tcr) tcr = &pgtbl_cfg->arm_lpae_s1_cfg.tcr;
 
@@ -2105,11 +2106,9 @@ static int arm_smmu_domain_finalise_s1(struct arm_smmu_domain *smmu_domain,
        if (ret)
                goto out_unlock;
 
-       cd_table->s1cdmax = master->ssid_bits;
-
        smmu_domain->stall_enabled = master->stall_enabled;
 
-       ret = arm_smmu_alloc_cd_tables(smmu_domain);
+       ret = arm_smmu_alloc_cd_tables(smmu_domain, master);
        if (ret)
                goto out_free_asid;