From: Caleb Connolly Date: Mon, 11 Dec 2023 18:41:41 +0000 (+0000) Subject: iommu: add a connect op X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=76c53dad6b5dc94e4c43069882b2708853c284c0;p=u-boot.git 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 --- diff --git a/drivers/iommu/iommu-uclass.c b/drivers/iommu/iommu-uclass.c index 98731d5e2c..6babc0e3a6 100644 --- a/drivers/iommu/iommu-uclass.c +++ b/drivers/iommu/iommu-uclass.c @@ -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) diff --git a/include/iommu.h b/include/iommu.h index cf9719c5e9..b8ba0b8e70 100644 --- a/include/iommu.h +++ b/include/iommu.h @@ -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 *