| From foo@baz Thu Nov 9 09:48:01 CET 2017 |
| From: Nate Watterson <nwatters@codeaurora.org> |
| Date: Tue, 20 Dec 2016 23:11:48 -0500 |
| Subject: iommu/arm-smmu-v3: Clear prior settings when updating STEs |
| |
| From: Nate Watterson <nwatters@codeaurora.org> |
| |
| |
| [ 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> |
| --- |
| drivers/iommu/arm-smmu-v3.c | 10 ++-------- |
| 1 file changed, 2 insertions(+), 8 deletions(-) |
| |
| --- a/drivers/iommu/arm-smmu-v3.c |
| +++ b/drivers/iommu/arm-smmu-v3.c |
| @@ -1040,13 +1040,8 @@ static void arm_smmu_write_strtab_ent(st |
| } |
| } |
| |
| - /* Nuke the existing Config, as we're going to rewrite it */ |
| - val &= ~(STRTAB_STE_0_CFG_MASK << STRTAB_STE_0_CFG_SHIFT); |
| - |
| - if (ste->valid) |
| - val |= STRTAB_STE_0_V; |
| - else |
| - val &= ~STRTAB_STE_0_V; |
| + /* Nuke the existing STE_0 value, as we're going to rewrite it */ |
| + val = ste->valid ? STRTAB_STE_0_V : 0; |
| |
| if (ste->bypass) { |
| val |= disable_bypass ? STRTAB_STE_0_CFG_ABORT |
| @@ -1081,7 +1076,6 @@ static void arm_smmu_write_strtab_ent(st |
| val |= (ste->s1_cfg->cdptr_dma & STRTAB_STE_0_S1CTXPTR_MASK |
| << STRTAB_STE_0_S1CTXPTR_SHIFT) | |
| STRTAB_STE_0_CFG_S1_TRANS; |
| - |
| } |
| |
| if (ste->s2_cfg) { |