struct iommu_device iommu;
        struct list_head node; /* entry in rk_iommu_domain.iommus */
        struct iommu_domain *domain; /* domain to which iommu is attached */
-       struct iommu_group *group;
 };
 
 struct rk_iommudata {
        device_link_del(data->link);
 }
 
-static struct iommu_group *rk_iommu_device_group(struct device *dev)
-{
-       struct rk_iommu *iommu;
-
-       iommu = rk_iommu_from_dev(dev);
-
-       return iommu_group_ref_get(iommu->group);
-}
-
 static int rk_iommu_of_xlate(struct device *dev,
                             struct of_phandle_args *args)
 {
        .domain_alloc_paging = rk_iommu_domain_alloc_paging,
        .probe_device = rk_iommu_probe_device,
        .release_device = rk_iommu_release_device,
-       .device_group = rk_iommu_device_group,
+       .device_group = generic_single_device_group,
        .pgsize_bitmap = RK_IOMMU_PGSIZE_BITMAP,
        .of_xlate = rk_iommu_of_xlate,
        .default_domain_ops = &(const struct iommu_domain_ops) {
        if (err)
                return err;
 
-       iommu->group = iommu_group_alloc();
-       if (IS_ERR(iommu->group)) {
-               err = PTR_ERR(iommu->group);
-               goto err_unprepare_clocks;
-       }
-
        err = iommu_device_sysfs_add(&iommu->iommu, dev, NULL, dev_name(dev));
        if (err)
-               goto err_put_group;
+               goto err_unprepare_clocks;
 
        err = iommu_device_register(&iommu->iommu, &rk_iommu_ops, dev);
        if (err)
        pm_runtime_disable(dev);
 err_remove_sysfs:
        iommu_device_sysfs_remove(&iommu->iommu);
-err_put_group:
-       iommu_group_put(iommu->group);
 err_unprepare_clocks:
        clk_bulk_unprepare(iommu->num_clocks, iommu->clocks);
        return err;