Commit 3b793983 authored by Robin Murphy's avatar Robin Murphy Committed by Will Deacon
Browse files

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: default avatarRobin Murphy <robin.murphy@arm.com>
Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent 86bf8580
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -207,8 +207,14 @@ stable kernels.
+----------------+-----------------+-----------------+-----------------------------+
| ARM            | MMU-600         | #1076982,1209401| N/A                         |
+----------------+-----------------+-----------------+-----------------------------+
| ARM            | MMU-700         | #2268618,2812531| N/A                         |
| ARM            | MMU-700         | #2133013,       | N/A                         |
|                |                 | #2268618,       |                             |
|                |                 | #2812531,       |                             |
|                |                 | #3777127        |                             |
+----------------+-----------------+-----------------+-----------------------------+
| ARM            | MMU L1          | #3878312        | N/A                         |
+----------------+-----------------+-----------------+-----------------------------+
| ARM            | MMU S3          | #3995052        | N/A                         |
+----------------+-----------------+-----------------+-----------------------------+
| ARM            | GIC-700         | #2941627        | ARM64_ERRATUM_2941627       |
+----------------+-----------------+-----------------+-----------------------------+
+14 −4
Original line number Diff line number Diff line
@@ -4939,6 +4939,8 @@ static int arm_smmu_device_reset(struct arm_smmu_device *smmu)
#define IIDR_IMPLEMENTER_ARM		0x43b
#define IIDR_PRODUCTID_ARM_MMU_600	0x483
#define IIDR_PRODUCTID_ARM_MMU_700	0x487
#define IIDR_PRODUCTID_ARM_MMU_L1	0x48a
#define IIDR_PRODUCTID_ARM_MMU_S3	0x498

static void arm_smmu_device_iidr_probe(struct arm_smmu_device *smmu)
{
@@ -4963,11 +4965,19 @@ static void arm_smmu_device_iidr_probe(struct arm_smmu_device *smmu)
				smmu->features &= ~ARM_SMMU_FEAT_NESTING;
			break;
		case IIDR_PRODUCTID_ARM_MMU_700:
			/* Arm erratum 2812531 */
			/* Many errata... */
			smmu->features &= ~ARM_SMMU_FEAT_BTM;
			if (variant < 1 || revision < 1) {
				/* Arm erratum 2812531 */
				smmu->options |= ARM_SMMU_OPT_CMDQ_FORCE_SYNC;
				/* Arm errata 2268618, 2812531 */
				smmu->features &= ~ARM_SMMU_FEAT_NESTING;
			}
			break;
		case IIDR_PRODUCTID_ARM_MMU_L1:
		case IIDR_PRODUCTID_ARM_MMU_S3:
			/* Arm errata 3878312/3995052 */
			smmu->features &= ~ARM_SMMU_FEAT_BTM;
			break;
		}
		break;