iommu: Remove iommu_register_instance interface
And also move its remaining functionality to iommu_device_register() and 'struct iommu_device'. Cc: Rob Herring <robh+dt@kernel.org> Cc: Frank Rowand <frowand.list@gmail.com> Cc: Matthias Brugger <matthias.bgg@gmail.com> Cc: Marek Szyprowski <m.szyprowski@samsung.com> Cc: devicetree@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
d2c302b6e8
commit
d0f6f58326
|
@ -2702,8 +2702,6 @@ static int arm_smmu_device_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
ret = iommu_device_register(&smmu->iommu);
|
ret = iommu_device_register(&smmu->iommu);
|
||||||
|
|
||||||
iommu_register_instance(dev->fwnode, &arm_smmu_ops);
|
|
||||||
|
|
||||||
#ifdef CONFIG_PCI
|
#ifdef CONFIG_PCI
|
||||||
if (pci_bus_type.iommu_ops != &arm_smmu_ops) {
|
if (pci_bus_type.iommu_ops != &arm_smmu_ops) {
|
||||||
pci_request_acs();
|
pci_request_acs();
|
||||||
|
|
|
@ -2121,7 +2121,6 @@ static int arm_smmu_device_probe(struct platform_device *pdev)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
iommu_register_instance(dev->fwnode, &arm_smmu_ops);
|
|
||||||
platform_set_drvdata(pdev, smmu);
|
platform_set_drvdata(pdev, smmu);
|
||||||
arm_smmu_device_reset(smmu);
|
arm_smmu_device_reset(smmu);
|
||||||
|
|
||||||
|
|
|
@ -642,8 +642,6 @@ static int __init exynos_sysmmu_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
pm_runtime_enable(dev);
|
pm_runtime_enable(dev);
|
||||||
|
|
||||||
of_iommu_set_ops(dev->of_node, &exynos_iommu_ops);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1658,43 +1658,18 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct iommu_instance {
|
|
||||||
struct list_head list;
|
|
||||||
struct fwnode_handle *fwnode;
|
|
||||||
const struct iommu_ops *ops;
|
|
||||||
};
|
|
||||||
static LIST_HEAD(iommu_instance_list);
|
|
||||||
static DEFINE_SPINLOCK(iommu_instance_lock);
|
|
||||||
|
|
||||||
void iommu_register_instance(struct fwnode_handle *fwnode,
|
|
||||||
const struct iommu_ops *ops)
|
|
||||||
{
|
|
||||||
struct iommu_instance *iommu = kzalloc(sizeof(*iommu), GFP_KERNEL);
|
|
||||||
|
|
||||||
if (WARN_ON(!iommu))
|
|
||||||
return;
|
|
||||||
|
|
||||||
of_node_get(to_of_node(fwnode));
|
|
||||||
INIT_LIST_HEAD(&iommu->list);
|
|
||||||
iommu->fwnode = fwnode;
|
|
||||||
iommu->ops = ops;
|
|
||||||
spin_lock(&iommu_instance_lock);
|
|
||||||
list_add_tail(&iommu->list, &iommu_instance_list);
|
|
||||||
spin_unlock(&iommu_instance_lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode)
|
const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode)
|
||||||
{
|
{
|
||||||
struct iommu_instance *instance;
|
|
||||||
const struct iommu_ops *ops = NULL;
|
const struct iommu_ops *ops = NULL;
|
||||||
|
struct iommu_device *iommu;
|
||||||
|
|
||||||
spin_lock(&iommu_instance_lock);
|
spin_lock(&iommu_device_lock);
|
||||||
list_for_each_entry(instance, &iommu_instance_list, list)
|
list_for_each_entry(iommu, &iommu_device_list, list)
|
||||||
if (instance->fwnode == fwnode) {
|
if (iommu->fwnode == fwnode) {
|
||||||
ops = instance->ops;
|
ops = iommu->ops;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
spin_unlock(&iommu_instance_lock);
|
spin_unlock(&iommu_device_lock);
|
||||||
return ops;
|
return ops;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -810,8 +810,6 @@ static int msm_iommu_probe(struct platform_device *pdev)
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
of_iommu_set_ops(pdev->dev.of_node, &msm_iommu_ops);
|
|
||||||
|
|
||||||
pr_info("device mapped at %p, irq %d with %d ctx banks\n",
|
pr_info("device mapped at %p, irq %d with %d ctx banks\n",
|
||||||
iommu->base, iommu->irq, iommu->ncb);
|
iommu->base, iommu->irq, iommu->ncb);
|
||||||
|
|
||||||
|
|
|
@ -681,7 +681,6 @@ static int mtk_iommu_init_fn(struct device_node *np)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
of_iommu_set_ops(np, &mtk_iommu_ops);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -382,8 +382,6 @@ int iommu_fwspec_init(struct device *dev, struct fwnode_handle *iommu_fwnode,
|
||||||
const struct iommu_ops *ops);
|
const struct iommu_ops *ops);
|
||||||
void iommu_fwspec_free(struct device *dev);
|
void iommu_fwspec_free(struct device *dev);
|
||||||
int iommu_fwspec_add_ids(struct device *dev, u32 *ids, int num_ids);
|
int iommu_fwspec_add_ids(struct device *dev, u32 *ids, int num_ids);
|
||||||
void iommu_register_instance(struct fwnode_handle *fwnode,
|
|
||||||
const struct iommu_ops *ops);
|
|
||||||
const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode);
|
const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode);
|
||||||
|
|
||||||
#else /* CONFIG_IOMMU_API */
|
#else /* CONFIG_IOMMU_API */
|
||||||
|
@ -634,11 +632,6 @@ static inline int iommu_fwspec_add_ids(struct device *dev, u32 *ids,
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void iommu_register_instance(struct fwnode_handle *fwnode,
|
|
||||||
const struct iommu_ops *ops)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode)
|
const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode)
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,12 +31,6 @@ static inline const struct iommu_ops *of_iommu_configure(struct device *dev,
|
||||||
|
|
||||||
#endif /* CONFIG_OF_IOMMU */
|
#endif /* CONFIG_OF_IOMMU */
|
||||||
|
|
||||||
static inline void of_iommu_set_ops(struct device_node *np,
|
|
||||||
const struct iommu_ops *ops)
|
|
||||||
{
|
|
||||||
iommu_register_instance(&np->fwnode, ops);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline const struct iommu_ops *of_iommu_get_ops(struct device_node *np)
|
static inline const struct iommu_ops *of_iommu_get_ops(struct device_node *np)
|
||||||
{
|
{
|
||||||
return iommu_ops_from_fwnode(&np->fwnode);
|
return iommu_ops_from_fwnode(&np->fwnode);
|
||||||
|
|
Loading…
Reference in New Issue