iommu: add a connect op

Add an optional iommu callback to be invoked before a device probes.
This can be used to configure the IOMMU in preparation for the device
(e.g. by allocating a context bank)

Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
This commit is contained in:
Caleb Connolly 2023-12-11 18:41:41 +00:00 committed by Tom Rini
parent e96ecbe719
commit 76c53dad6b
2 changed files with 20 additions and 0 deletions

View file

@ -77,6 +77,7 @@ int dev_iommu_enable(struct udevice *dev)
{
struct ofnode_phandle_args args;
struct udevice *dev_iommu;
const struct iommu_ops *ops;
int i, count, ret = 0;
count = dev_count_phandle_with_args(dev, "iommus",
@ -98,6 +99,16 @@ int dev_iommu_enable(struct udevice *dev)
return ret;
}
dev->iommu = dev_iommu;
if (dev->parent && dev->parent->iommu == dev_iommu)
continue;
ops = device_get_ops(dev->iommu);
if (ops && ops->connect) {
ret = ops->connect(dev);
if (ret)
return ret;
}
}
#if CONFIG_IS_ENABLED(PCI)

View file

@ -4,6 +4,15 @@
struct udevice;
struct iommu_ops {
/**
* init() - Connect a device to it's IOMMU, called before probe()
* The iommu device can be fetched through dev->iommu
*
* @iommu_dev: IOMMU device
* @dev: Device to connect
* @return 0 if OK, -errno on error
*/
int (*connect)(struct udevice *dev);
/**
* map() - map DMA memory
*