aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm64/mm/dma-mapping.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index 1d7d5d2881db..0ec1ae933342 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -835,14 +835,21 @@ static bool do_iommu_attach(struct device *dev, const struct iommu_ops *ops,
835 * then the IOMMU core will have already configured a group for this 835 * then the IOMMU core will have already configured a group for this
836 * device, and allocated the default domain for that group. 836 * device, and allocated the default domain for that group.
837 */ 837 */
838 if (!domain || iommu_dma_init_domain(domain, dma_base, size, dev)) { 838 if (!domain)
839 pr_warn("Failed to set up IOMMU for device %s; retaining platform DMA ops\n", 839 goto out_err;
840 dev_name(dev)); 840
841 return false; 841 if (domain->type == IOMMU_DOMAIN_DMA) {
842 if (iommu_dma_init_domain(domain, dma_base, size, dev))
843 goto out_err;
844
845 dev->archdata.dma_ops = &iommu_dma_ops;
842 } 846 }
843 847
844 dev->archdata.dma_ops = &iommu_dma_ops;
845 return true; 848 return true;
849out_err:
850 pr_warn("Failed to set up IOMMU for device %s; retaining platform DMA ops\n",
851 dev_name(dev));
852 return false;
846} 853}
847 854
848static void queue_iommu_attach(struct device *dev, const struct iommu_ops *ops, 855static void queue_iommu_attach(struct device *dev, const struct iommu_ops *ops,