* 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,