|
@@ -826,6 +826,12 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
|
|
|
if (smmu_domain->smmu)
|
|
|
goto out_unlock;
|
|
|
|
|
|
+ /* We're bypassing these SIDs, so don't allocate an actual context */
|
|
|
+ if (domain->type == IOMMU_DOMAIN_DMA) {
|
|
|
+ smmu_domain->smmu = smmu;
|
|
|
+ goto out_unlock;
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
* Mapping the requested stage onto what we support is surprisingly
|
|
|
* complicated, mainly because the spec allows S1+S2 SMMUs without
|
|
@@ -948,7 +954,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
|
|
|
void __iomem *cb_base;
|
|
|
int irq;
|
|
|
|
|
|
- if (!smmu)
|
|
|
+ if (!smmu || domain->type == IOMMU_DOMAIN_DMA)
|
|
|
return;
|
|
|
|
|
|
/*
|