|
@@ -835,14 +835,21 @@ static bool do_iommu_attach(struct device *dev, const struct iommu_ops *ops,
|
|
|
* then the IOMMU core will have already configured a group for this
|
|
|
* device, and allocated the default domain for that group.
|
|
|
*/
|
|
|
- if (!domain || iommu_dma_init_domain(domain, dma_base, size, dev)) {
|
|
|
- pr_warn("Failed to set up IOMMU for device %s; retaining platform DMA ops\n",
|
|
|
- dev_name(dev));
|
|
|
- return false;
|
|
|
+ if (!domain)
|
|
|
+ goto out_err;
|
|
|
+
|
|
|
+ if (domain->type == IOMMU_DOMAIN_DMA) {
|
|
|
+ if (iommu_dma_init_domain(domain, dma_base, size, dev))
|
|
|
+ goto out_err;
|
|
|
+
|
|
|
+ dev->archdata.dma_ops = &iommu_dma_ops;
|
|
|
}
|
|
|
|
|
|
- dev->archdata.dma_ops = &iommu_dma_ops;
|
|
|
return true;
|
|
|
+out_err:
|
|
|
+ pr_warn("Failed to set up IOMMU for device %s; retaining platform DMA ops\n",
|
|
|
+ dev_name(dev));
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
static void queue_iommu_attach(struct device *dev, const struct iommu_ops *ops,
|