iommu_dma_get_resv_regions(dev, head);
 }
 
-static const struct iommu_ops viommu_ops;
-static struct virtio_driver virtio_iommu_drv;
+static const struct bus_type *virtio_bus_type;
 
 static int viommu_match_node(struct device *dev, const void *data)
 {
 
 static struct viommu_dev *viommu_get_by_fwnode(struct fwnode_handle *fwnode)
 {
-       struct device *dev = driver_find_device(&virtio_iommu_drv.driver, NULL,
-                                               fwnode, viommu_match_node);
+       struct device *dev = bus_find_device(virtio_bus_type, NULL, fwnode,
+                                            viommu_match_node);
+
        put_device(dev);
 
        return dev ? dev_to_virtio(dev)->priv : NULL;
        if (!viommu)
                return -ENOMEM;
 
+       /* Borrow this for easy lookups later */
+       virtio_bus_type = dev->bus;
+
        spin_lock_init(&viommu->request_lock);
        ida_init(&viommu->domain_ids);
        viommu->dev = dev;
        if (ret)
                goto err_free_vqs;
 
-       iommu_device_register(&viommu->iommu, &viommu_ops, parent_dev);
-
        vdev->priv = viommu;
 
+       iommu_device_register(&viommu->iommu, &viommu_ops, parent_dev);
+
        dev_info(dev, "input address: %u bits\n",
                 order_base_2(viommu->geometry.aperture_end));
        dev_info(dev, "page mask: %#llx\n", viommu->pgsize_bitmap);