protection_domain_free(domain);
 }
 
-static void amd_iommu_detach_device(struct iommu_domain *dom,
-                                   struct device *dev)
-{
-       struct iommu_dev_data *dev_data = dev_iommu_priv_get(dev);
-       struct amd_iommu *iommu;
-
-       if (!check_device(dev))
-               return;
-
-       if (dev_data->domain != NULL)
-               detach_device(dev);
-
-       iommu = rlookup_amd_iommu(dev);
-       if (!iommu)
-               return;
-
-#ifdef CONFIG_IRQ_REMAP
-       if (AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir) &&
-           (dom->type == IOMMU_DOMAIN_UNMANAGED))
-               dev_data->use_vapic = 0;
-#endif
-
-       iommu_completion_wait(iommu);
-}
-
 static int amd_iommu_attach_device(struct iommu_domain *dom,
                                   struct device *dev)
 {
        .def_domain_type = amd_iommu_def_domain_type,
        .default_domain_ops = &(const struct iommu_domain_ops) {
                .attach_dev     = amd_iommu_attach_device,
-               .detach_dev     = amd_iommu_detach_device,
                .map_pages      = amd_iommu_map_pages,
                .unmap_pages    = amd_iommu_unmap_pages,
                .iotlb_sync_map = amd_iommu_iotlb_sync_map,
 
                                      true);
 }
 
-static int apple_dart_domain_remove_streams(struct apple_dart_domain *domain,
-                                           struct apple_dart_master_cfg *cfg)
-{
-       return apple_dart_mod_streams(domain->stream_maps, cfg->stream_maps,
-                                     false);
-}
-
 static int apple_dart_attach_dev(struct iommu_domain *domain,
                                 struct device *dev)
 {
        return ret;
 }
 
-static void apple_dart_detach_dev(struct iommu_domain *domain,
-                                 struct device *dev)
-{
-       int i;
-       struct apple_dart_stream_map *stream_map;
-       struct apple_dart_master_cfg *cfg = dev_iommu_priv_get(dev);
-       struct apple_dart_domain *dart_domain = to_dart_domain(domain);
-
-       for_each_stream_map(i, cfg, stream_map)
-               apple_dart_hw_disable_dma(stream_map);
-
-       if (domain->type == IOMMU_DOMAIN_DMA ||
-           domain->type == IOMMU_DOMAIN_UNMANAGED)
-               apple_dart_domain_remove_streams(dart_domain, cfg);
-}
-
 static struct iommu_device *apple_dart_probe_device(struct device *dev)
 {
        struct apple_dart_master_cfg *cfg = dev_iommu_priv_get(dev);
        .owner = THIS_MODULE,
        .default_domain_ops = &(const struct iommu_domain_ops) {
                .attach_dev     = apple_dart_attach_dev,
-               .detach_dev     = apple_dart_detach_dev,
                .map_pages      = apple_dart_map_pages,
                .unmap_pages    = apple_dart_unmap_pages,
                .flush_iotlb_all = apple_dart_flush_iotlb_all,
 
        return 0;
 }
 
-static void qcom_iommu_detach_dev(struct iommu_domain *domain, struct device *dev)
-{
-       struct qcom_iommu_domain *qcom_domain = to_qcom_iommu_domain(domain);
-       struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
-       struct qcom_iommu_dev *qcom_iommu = to_iommu(dev);
-       unsigned i;
-
-       if (WARN_ON(!qcom_domain->iommu))
-               return;
-
-       pm_runtime_get_sync(qcom_iommu->dev);
-       for (i = 0; i < fwspec->num_ids; i++) {
-               struct qcom_iommu_ctx *ctx = to_ctx(qcom_domain, fwspec->ids[i]);
-
-               /* Disable the context bank: */
-               iommu_writel(ctx, ARM_SMMU_CB_SCTLR, 0);
-
-               ctx->domain = NULL;
-       }
-       pm_runtime_put_sync(qcom_iommu->dev);
-}
-
 static int qcom_iommu_map(struct iommu_domain *domain, unsigned long iova,
                          phys_addr_t paddr, size_t pgsize, size_t pgcount,
                          int prot, gfp_t gfp, size_t *mapped)
        .pgsize_bitmap  = SZ_4K | SZ_64K | SZ_1M | SZ_16M,
        .default_domain_ops = &(const struct iommu_domain_ops) {
                .attach_dev     = qcom_iommu_attach_dev,
-               .detach_dev     = qcom_iommu_detach_dev,
                .map_pages      = qcom_iommu_map,
                .unmap_pages    = qcom_iommu_unmap,
                .flush_iotlb_all = qcom_iommu_flush_iotlb_all,
 
        .of_xlate = exynos_iommu_of_xlate,
        .default_domain_ops = &(const struct iommu_domain_ops) {
                .attach_dev     = exynos_iommu_attach_device,
-               .detach_dev     = exynos_iommu_detach_device,
                .map            = exynos_iommu_map,
                .unmap          = exynos_iommu_unmap,
                .iova_to_phys   = exynos_iommu_iova_to_phys,
 
        return 0;
 }
 
-static void ipmmu_detach_device(struct iommu_domain *io_domain,
-                               struct device *dev)
-{
-       struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
-       struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
-       unsigned int i;
-
-       for (i = 0; i < fwspec->num_ids; ++i)
-               ipmmu_utlb_disable(domain, fwspec->ids[i]);
-
-       /*
-        * TODO: Optimize by disabling the context when no device is attached.
-        */
-}
-
 static int ipmmu_map(struct iommu_domain *io_domain, unsigned long iova,
                     phys_addr_t paddr, size_t pgsize, size_t pgcount,
                     int prot, gfp_t gfp, size_t *mapped)
        .of_xlate = ipmmu_of_xlate,
        .default_domain_ops = &(const struct iommu_domain_ops) {
                .attach_dev     = ipmmu_attach_device,
-               .detach_dev     = ipmmu_detach_device,
                .map_pages      = ipmmu_map,
                .unmap_pages    = ipmmu_unmap,
                .flush_iotlb_all = ipmmu_flush_iotlb_all,
 
        return ret;
 }
 
-static void mtk_iommu_detach_device(struct iommu_domain *domain,
-                                   struct device *dev)
-{
-       struct mtk_iommu_data *data = dev_iommu_priv_get(dev);
-
-       mtk_iommu_config(data, dev, false, 0);
-}
-
 static int mtk_iommu_map(struct iommu_domain *domain, unsigned long iova,
                         phys_addr_t paddr, size_t pgsize, size_t pgcount,
                         int prot, gfp_t gfp, size_t *mapped)
        .owner          = THIS_MODULE,
        .default_domain_ops = &(const struct iommu_domain_ops) {
                .attach_dev     = mtk_iommu_attach_device,
-               .detach_dev     = mtk_iommu_detach_device,
                .map_pages      = mtk_iommu_map,
                .unmap_pages    = mtk_iommu_unmap,
                .flush_iotlb_all = mtk_iommu_flush_iotlb_all,
 
        .of_xlate = rk_iommu_of_xlate,
        .default_domain_ops = &(const struct iommu_domain_ops) {
                .attach_dev     = rk_iommu_attach_device,
-               .detach_dev     = rk_iommu_detach_device,
                .map            = rk_iommu_map,
                .unmap          = rk_iommu_unmap,
                .iova_to_phys   = rk_iommu_iova_to_phys,
 
        return 0;
 }
 
-static void sprd_iommu_detach_device(struct iommu_domain *domain,
-                                            struct device *dev)
-{
-       struct sprd_iommu_domain *dom = to_sprd_domain(domain);
-       struct sprd_iommu_device *sdev = dom->sdev;
-       size_t pgt_size = sprd_iommu_pgt_size(domain);
-
-       if (!sdev)
-               return;
-
-       dma_free_coherent(sdev->dev, pgt_size, dom->pgt_va, dom->pgt_pa);
-       sprd_iommu_hw_en(sdev, false);
-       dom->sdev = NULL;
-}
-
 static int sprd_iommu_map(struct iommu_domain *domain, unsigned long iova,
                          phys_addr_t paddr, size_t pgsize, size_t pgcount,
                          int prot, gfp_t gfp, size_t *mapped)
        .owner          = THIS_MODULE,
        .default_domain_ops = &(const struct iommu_domain_ops) {
                .attach_dev     = sprd_iommu_attach_device,
-               .detach_dev     = sprd_iommu_detach_device,
                .map_pages      = sprd_iommu_map,
                .unmap_pages    = sprd_iommu_unmap,
                .iotlb_sync_map = sprd_iommu_sync_map,
 
        .probe_device   = sun50i_iommu_probe_device,
        .default_domain_ops = &(const struct iommu_domain_ops) {
                .attach_dev     = sun50i_iommu_attach_device,
-               .detach_dev     = sun50i_iommu_detach_device,
                .flush_iotlb_all = sun50i_iommu_flush_iotlb_all,
                .iotlb_sync_map = sun50i_iommu_iotlb_sync_map,
                .iotlb_sync     = sun50i_iommu_iotlb_sync,