|
@@ -276,6 +276,8 @@ struct sysmmu_drvdata {
|
|
|
struct list_head owner_node; /* node for owner controllers list */
|
|
|
phys_addr_t pgtable; /* assigned page table structure */
|
|
|
unsigned int version; /* our version */
|
|
|
+
|
|
|
+ struct iommu_device iommu; /* IOMMU core handle */
|
|
|
};
|
|
|
|
|
|
static struct exynos_iommu_domain *to_exynos_domain(struct iommu_domain *dom)
|
|
@@ -611,6 +613,18 @@ static int __init exynos_sysmmu_probe(struct platform_device *pdev)
|
|
|
data->sysmmu = dev;
|
|
|
spin_lock_init(&data->lock);
|
|
|
|
|
|
+ ret = iommu_device_sysfs_add(&data->iommu, &pdev->dev, NULL,
|
|
|
+ dev_name(data->sysmmu));
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ iommu_device_set_ops(&data->iommu, &exynos_iommu_ops);
|
|
|
+ iommu_device_set_fwnode(&data->iommu, &dev->of_node->fwnode);
|
|
|
+
|
|
|
+ ret = iommu_device_register(&data->iommu);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
platform_set_drvdata(pdev, data);
|
|
|
|
|
|
__sysmmu_get_version(data);
|