Commit 212c439b authored by Mikołaj Lenczewski's avatar Mikołaj Lenczewski Committed by Catalin Marinas
Browse files

iommu/arm: Add BBM Level 2 smmu feature



For supporting BBM Level 2 for userspace mappings, we want to ensure
that the smmu also supports its own version of BBM Level 2. Luckily, the
smmu spec (IHI 0070G 3.21.1.3) is stricter than the aarch64 spec (DDI
0487K.a D8.16.2), so already guarantees that no aborts are raised when
BBM level 2 is claimed.

Add the feature and testing for it under arm_smmu_sva_supported().

Signed-off-by: default avatarMikołaj Lenczewski <miko.lenczewski@arm.com>
Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Reviewed-by: default avatarRobin Murphy <robin.murphy@arm.com>
Reviewed-by: default avatarRyan Roberts <ryan.roberts@arm.com>
Link: https://lore.kernel.org/r/20250625113435.26849-4-miko.lenczewski@arm.com


Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 5aa4b625
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -220,6 +220,9 @@ bool arm_smmu_sva_supported(struct arm_smmu_device *smmu)
		feat_mask |= ARM_SMMU_FEAT_VAX;
	}

	if (system_supports_bbml2_noabort())
		feat_mask |= ARM_SMMU_FEAT_BBML2;

	if ((smmu->features & feat_mask) != feat_mask)
		return false;

+3 −0
Original line number Diff line number Diff line
@@ -4457,6 +4457,9 @@ static int arm_smmu_device_hw_probe(struct arm_smmu_device *smmu)
	if (FIELD_GET(IDR3_FWB, reg))
		smmu->features |= ARM_SMMU_FEAT_S2FWB;

	if (FIELD_GET(IDR3_BBM, reg) == 2)
		smmu->features |= ARM_SMMU_FEAT_BBML2;

	/* IDR5 */
	reg = readl_relaxed(smmu->base + ARM_SMMU_IDR5);

+2 −0
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ struct arm_smmu_device;
#define ARM_SMMU_IDR3			0xc
#define IDR3_FWB			(1 << 8)
#define IDR3_RIL			(1 << 10)
#define IDR3_BBM			GENMASK(12, 11)

#define ARM_SMMU_IDR5			0x14
#define IDR5_STALL_MAX			GENMASK(31, 16)
@@ -755,6 +756,7 @@ struct arm_smmu_device {
#define ARM_SMMU_FEAT_HA		(1 << 21)
#define ARM_SMMU_FEAT_HD		(1 << 22)
#define ARM_SMMU_FEAT_S2FWB		(1 << 23)
#define ARM_SMMU_FEAT_BBML2		(1 << 24)
	u32				features;

#define ARM_SMMU_OPT_SKIP_PREFETCH	(1 << 0)