/*
  * A simple iommu_ops to allow less cruft in generic VFIO code.
  */
-static int spapr_tce_blocking_iommu_attach_dev(struct iommu_domain *dom,
+static int spapr_tce_platform_iommu_attach_dev(struct iommu_domain *dom,
                                               struct device *dev)
 {
        struct iommu_group *grp = iommu_group_get(dev);
        return ret;
 }
 
-static void spapr_tce_blocking_iommu_set_platform_dma(struct device *dev)
-{
-       struct iommu_group *grp = iommu_group_get(dev);
-       struct iommu_table_group *table_group;
+static const struct iommu_domain_ops spapr_tce_platform_domain_ops = {
+       .attach_dev = spapr_tce_platform_iommu_attach_dev,
+};
 
-       table_group = iommu_group_get_iommudata(grp);
-       table_group->ops->release_ownership(table_group);
-}
+static struct iommu_domain spapr_tce_platform_domain = {
+       .type = IOMMU_DOMAIN_PLATFORM,
+       .ops = &spapr_tce_platform_domain_ops,
+};
 
-static const struct iommu_domain_ops spapr_tce_blocking_domain_ops = {
-       .attach_dev = spapr_tce_blocking_iommu_attach_dev,
+static struct iommu_domain spapr_tce_blocked_domain = {
+       .type = IOMMU_DOMAIN_BLOCKED,
+       /*
+        * FIXME: SPAPR mixes blocked and platform behaviors, the blocked domain
+        * also sets the dma_api ops
+        */
+       .ops = &spapr_tce_platform_domain_ops,
 };
 
 static bool spapr_tce_iommu_capable(struct device *dev, enum iommu_cap cap)
 
 static struct iommu_domain *spapr_tce_iommu_domain_alloc(unsigned int type)
 {
-       struct iommu_domain *dom;
-
        if (type != IOMMU_DOMAIN_BLOCKED)
                return NULL;
-
-       dom = kzalloc(sizeof(*dom), GFP_KERNEL);
-       if (!dom)
-               return NULL;
-
-       dom->ops = &spapr_tce_blocking_domain_ops;
-
-       return dom;
+       return &spapr_tce_blocked_domain;
 }
 
 static struct iommu_device *spapr_tce_iommu_probe_device(struct device *dev)
 }
 
 static const struct iommu_ops spapr_tce_iommu_ops = {
+       .default_domain = &spapr_tce_platform_domain,
        .capable = spapr_tce_iommu_capable,
        .domain_alloc = spapr_tce_iommu_domain_alloc,
        .probe_device = spapr_tce_iommu_probe_device,
        .release_device = spapr_tce_iommu_release_device,
        .device_group = spapr_tce_iommu_device_group,
-       .set_platform_dma_ops = spapr_tce_blocking_iommu_set_platform_dma,
 };
 
 static struct attribute *spapr_tce_iommu_attrs[] = {