Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7c29f78f authored by Patrick Daly's avatar Patrick Daly Committed by Gerrit - the friendly Code Review server
Browse files

iommu: arm-smmu: Add DOMAIN_ATTR_NO_CFRE



Some bus implementations may enter a bad state if iommu reports an error
on context fault. As context faults are not always fatal, this must be
avoided.

Change-Id: I60d1ccb7cad64dfc9e327967c903befd3fa72877
Signed-off-by: default avatarPatrick Daly <pdaly@codeaurora.org>
Signed-off-by: default avatarSrinivasarao P <spathi@codeaurora.org>
parent 0d656015
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -1790,6 +1790,8 @@ static void arm_smmu_write_context_bank(struct arm_smmu_device *smmu, int idx)
		reg &= ~SCTLR_CFCFG;
		reg |= SCTLR_HUPCF;
	}
	if (cb->attributes & (1 << DOMAIN_ATTR_NO_CFRE))
		reg &= ~SCTLR_CFRE;

	if ((!(cb->attributes & (1 << DOMAIN_ATTR_S1_BYPASS)) &&
	     !(cb->attributes & (1 << DOMAIN_ATTR_EARLY_MAP))) ||
@@ -3316,6 +3318,11 @@ static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
			& (1 << DOMAIN_ATTR_CB_STALL_DISABLE));
		ret = 0;
		break;
	case DOMAIN_ATTR_NO_CFRE:
		*((int *)data) = !!(smmu_domain->attributes
			& (1 << DOMAIN_ATTR_NO_CFRE));
		ret = 0;
		break;
	case DOMAIN_ATTR_MMU500_ERRATA_MIN_ALIGN:
		*((int *)data) = smmu_domain->qsmmuv500_errata2_min_align;
		ret = 0;
@@ -3550,6 +3557,12 @@ static int arm_smmu_domain_set_attr(struct iommu_domain *domain,
		break;
	}

	case DOMAIN_ATTR_NO_CFRE:
		if (*((int *)data))
			smmu_domain->attributes |=
				1 << DOMAIN_ATTR_NO_CFRE;
		ret = 0;
		break;
	default:
		ret = -ENODEV;
	}
+6 −0
Original line number Diff line number Diff line
@@ -119,6 +119,11 @@ enum iommu_cap {
 * DOMAIN_ATTR_FSL_PAMUV1 corresponds to the above mentioned contraints.
 * The caller can invoke iommu_domain_get_attr to check if the underlying
 * iommu implementation supports these constraints.
 *
 * DOMAIN_ATTR_NO_CFRE
 * Some bus implementations may enter a bad state if iommu reports an error
 * on context fault. As context faults are not always fatal, this must be
 * avoided.
 */

enum iommu_attr {
@@ -149,6 +154,7 @@ enum iommu_attr {
	DOMAIN_ATTR_UPSTREAM_IOVA_ALLOCATOR,
	DOMAIN_ATTR_MMU500_ERRATA_MIN_ALIGN,
	DOMAIN_ATTR_FORCE_IOVA_GUARD_PAGE,
	DOMAIN_ATTR_NO_CFRE,
	DOMAIN_ATTR_MAX,
};