Skip to content

Commit 158bc64

Browse files
Nate Wattersongregkh
authored andcommitted
iommu/arm-smmu-v3: Clear prior settings when updating STEs
[ Upstream commit 810871c57011eb3e89e6768932757f169d666cd2 ] To prevent corruption of the stage-1 context pointer field when updating STEs, rebuild the entire containing dword instead of clearing individual fields. Signed-off-by: Nate Watterson <nwatters@codeaurora.org> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Sasha Levin <alexander.levin@verizon.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent f20065b commit 158bc64

1 file changed

Lines changed: 2 additions & 8 deletions

File tree

drivers/iommu/arm-smmu-v3.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,13 +1033,8 @@ static void arm_smmu_write_strtab_ent(struct arm_smmu_device *smmu, u32 sid,
10331033
}
10341034
}
10351035

1036-
/* Nuke the existing Config, as we're going to rewrite it */
1037-
val &= ~(STRTAB_STE_0_CFG_MASK << STRTAB_STE_0_CFG_SHIFT);
1038-
1039-
if (ste->valid)
1040-
val |= STRTAB_STE_0_V;
1041-
else
1042-
val &= ~STRTAB_STE_0_V;
1036+
/* Nuke the existing STE_0 value, as we're going to rewrite it */
1037+
val = ste->valid ? STRTAB_STE_0_V : 0;
10431038

10441039
if (ste->bypass) {
10451040
val |= disable_bypass ? STRTAB_STE_0_CFG_ABORT
@@ -1068,7 +1063,6 @@ static void arm_smmu_write_strtab_ent(struct arm_smmu_device *smmu, u32 sid,
10681063
val |= (ste->s1_cfg->cdptr_dma & STRTAB_STE_0_S1CTXPTR_MASK
10691064
<< STRTAB_STE_0_S1CTXPTR_SHIFT) |
10701065
STRTAB_STE_0_CFG_S1_TRANS;
1071-
10721066
}
10731067

10741068
if (ste->s2_cfg) {

0 commit comments

Comments
 (0)