diff options
author | Robin Murphy <robin.murphy@arm.com> | 2016-09-12 12:13:47 -0400 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2016-09-16 04:34:17 -0400 |
commit | 95fa99aa402ad516ec825057a168f395ece39a2e (patch) | |
tree | 14a77be228e0dbb065d0c034be2894b14a277af6 | |
parent | 08d4ca2a672bab34e6640ffa946844d09d4f6f60 (diff) |
iommu/arm-smmu: Set PRIVCFG in stage 1 STEs
Implement the SMMUv3 equivalent of d346180e70b9 ("iommu/arm-smmu: Treat
all device transactions as unprivileged"), so that once again those
pesky DMA controllers with their privileged instruction fetches don't
unexpectedly fault in stage 1 domains due to VMSAv8 rules.
Acked-by: Will Deacon <will.deacon@arm.com>
Tested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
-rw-r--r-- | drivers/iommu/arm-smmu-v3.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c index 52860bcf80f2..0c45c1e02e04 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c | |||
@@ -267,6 +267,9 @@ | |||
267 | #define STRTAB_STE_1_SHCFG_INCOMING 1UL | 267 | #define STRTAB_STE_1_SHCFG_INCOMING 1UL |
268 | #define STRTAB_STE_1_SHCFG_SHIFT 44 | 268 | #define STRTAB_STE_1_SHCFG_SHIFT 44 |
269 | 269 | ||
270 | #define STRTAB_STE_1_PRIVCFG_UNPRIV 2UL | ||
271 | #define STRTAB_STE_1_PRIVCFG_SHIFT 48 | ||
272 | |||
270 | #define STRTAB_STE_2_S2VMID_SHIFT 0 | 273 | #define STRTAB_STE_2_S2VMID_SHIFT 0 |
271 | #define STRTAB_STE_2_S2VMID_MASK 0xffffUL | 274 | #define STRTAB_STE_2_S2VMID_MASK 0xffffUL |
272 | #define STRTAB_STE_2_VTCR_SHIFT 32 | 275 | #define STRTAB_STE_2_VTCR_SHIFT 32 |
@@ -1068,7 +1071,9 @@ static void arm_smmu_write_strtab_ent(struct arm_smmu_device *smmu, u32 sid, | |||
1068 | #ifdef CONFIG_PCI_ATS | 1071 | #ifdef CONFIG_PCI_ATS |
1069 | STRTAB_STE_1_EATS_TRANS << STRTAB_STE_1_EATS_SHIFT | | 1072 | STRTAB_STE_1_EATS_TRANS << STRTAB_STE_1_EATS_SHIFT | |
1070 | #endif | 1073 | #endif |
1071 | STRTAB_STE_1_STRW_NSEL1 << STRTAB_STE_1_STRW_SHIFT); | 1074 | STRTAB_STE_1_STRW_NSEL1 << STRTAB_STE_1_STRW_SHIFT | |
1075 | STRTAB_STE_1_PRIVCFG_UNPRIV << | ||
1076 | STRTAB_STE_1_PRIVCFG_SHIFT); | ||
1072 | 1077 | ||
1073 | if (smmu->features & ARM_SMMU_FEAT_STALLS) | 1078 | if (smmu->features & ARM_SMMU_FEAT_STALLS) |
1074 | dst[1] |= cpu_to_le64(STRTAB_STE_1_S1STALLD); | 1079 | dst[1] |= cpu_to_le64(STRTAB_STE_1_S1STALLD); |