]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommu/tegra-smmu: Fix client enablement order
authorNavneet Kumar <navneetk@nvidia.com>
Wed, 16 Oct 2019 11:50:25 +0000 (13:50 +0200)
committerJoerg Roedel <jroedel@suse.de>
Fri, 18 Oct 2019 09:46:11 +0000 (11:46 +0200)
Enable clients' translation only after setting up the swgroups.

Signed-off-by: Navneet Kumar <navneetk@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/tegra-smmu.c

index 0b74e17794b1b9b2191e146049dffe9371961e6f..f51fe9b48bb7b39a592b565058ee4bbe6a321d71 100644 (file)
@@ -351,6 +351,20 @@ static void tegra_smmu_enable(struct tegra_smmu *smmu, unsigned int swgroup,
        unsigned int i;
        u32 value;
 
+       group = tegra_smmu_find_swgroup(smmu, swgroup);
+       if (group) {
+               value = smmu_readl(smmu, group->reg);
+               value &= ~SMMU_ASID_MASK;
+               value |= SMMU_ASID_VALUE(asid);
+               value |= SMMU_ASID_ENABLE;
+               smmu_writel(smmu, value, group->reg);
+       } else {
+               pr_warn("%s group from swgroup %u not found\n", __func__,
+                               swgroup);
+               /* No point moving ahead if group was not found */
+               return;
+       }
+
        for (i = 0; i < smmu->soc->num_clients; i++) {
                const struct tegra_mc_client *client = &smmu->soc->clients[i];
 
@@ -361,15 +375,6 @@ static void tegra_smmu_enable(struct tegra_smmu *smmu, unsigned int swgroup,
                value |= BIT(client->smmu.bit);
                smmu_writel(smmu, value, client->smmu.reg);
        }
-
-       group = tegra_smmu_find_swgroup(smmu, swgroup);
-       if (group) {
-               value = smmu_readl(smmu, group->reg);
-               value &= ~SMMU_ASID_MASK;
-               value |= SMMU_ASID_VALUE(asid);
-               value |= SMMU_ASID_ENABLE;
-               smmu_writel(smmu, value, group->reg);
-       }
 }
 
 static void tegra_smmu_disable(struct tegra_smmu *smmu, unsigned int swgroup,