Skip to content

Commit 3b79398

Browse files
rmurphy-armwilldeacon
authored andcommitted
iommu/arm-smmu-v3: Update Arm errata
MMU-700 r1p1 has subsequently fixed some of the errata for which we've been applying the workarounds unconditionally, so we can now make those conditional. However, there have also been some more new cases identified where we must rely on range invalidation commands, and thus still nominally avoid DVM being inadvertently enabled. Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Will Deacon <will@kernel.org>
1 parent 86bf858 commit 3b79398

2 files changed

Lines changed: 21 additions & 5 deletions

File tree

Documentation/arch/arm64/silicon-errata.rst

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,14 @@ stable kernels.
207207
+----------------+-----------------+-----------------+-----------------------------+
208208
| ARM | MMU-600 | #1076982,1209401| N/A |
209209
+----------------+-----------------+-----------------+-----------------------------+
210-
| ARM | MMU-700 | #2268618,2812531| N/A |
210+
| ARM | MMU-700 | #2133013, | N/A |
211+
| | | #2268618, | |
212+
| | | #2812531, | |
213+
| | | #3777127 | |
211214
+----------------+-----------------+-----------------+-----------------------------+
215+
| ARM | MMU L1 | #3878312 | N/A |
216+
+----------------+-----------------+-----------------+-----------------------------+
217+
| ARM | MMU S3 | #3995052 | N/A |
212218
+----------------+-----------------+-----------------+-----------------------------+
213219
| ARM | GIC-700 | #2941627 | ARM64_ERRATUM_2941627 |
214220
+----------------+-----------------+-----------------+-----------------------------+

drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4939,6 +4939,8 @@ static int arm_smmu_device_reset(struct arm_smmu_device *smmu)
49394939
#define IIDR_IMPLEMENTER_ARM 0x43b
49404940
#define IIDR_PRODUCTID_ARM_MMU_600 0x483
49414941
#define IIDR_PRODUCTID_ARM_MMU_700 0x487
4942+
#define IIDR_PRODUCTID_ARM_MMU_L1 0x48a
4943+
#define IIDR_PRODUCTID_ARM_MMU_S3 0x498
49424944

49434945
static void arm_smmu_device_iidr_probe(struct arm_smmu_device *smmu)
49444946
{
@@ -4963,11 +4965,19 @@ static void arm_smmu_device_iidr_probe(struct arm_smmu_device *smmu)
49634965
smmu->features &= ~ARM_SMMU_FEAT_NESTING;
49644966
break;
49654967
case IIDR_PRODUCTID_ARM_MMU_700:
4966-
/* Arm erratum 2812531 */
4968+
/* Many errata... */
4969+
smmu->features &= ~ARM_SMMU_FEAT_BTM;
4970+
if (variant < 1 || revision < 1) {
4971+
/* Arm erratum 2812531 */
4972+
smmu->options |= ARM_SMMU_OPT_CMDQ_FORCE_SYNC;
4973+
/* Arm errata 2268618, 2812531 */
4974+
smmu->features &= ~ARM_SMMU_FEAT_NESTING;
4975+
}
4976+
break;
4977+
case IIDR_PRODUCTID_ARM_MMU_L1:
4978+
case IIDR_PRODUCTID_ARM_MMU_S3:
4979+
/* Arm errata 3878312/3995052 */
49674980
smmu->features &= ~ARM_SMMU_FEAT_BTM;
4968-
smmu->options |= ARM_SMMU_OPT_CMDQ_FORCE_SYNC;
4969-
/* Arm errata 2268618, 2812531 */
4970-
smmu->features &= ~ARM_SMMU_FEAT_NESTING;
49714981
break;
49724982
}
49734983
break;

0 commit comments

Comments
 (0)