iommu/tegra-smmu: Fix client enablement order
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>
This commit is contained in:
Родитель
446152d5b6
Коммит
e31e592954
|
@ -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,
|
||||
|
|
Загрузка…
Ссылка в новой задаче