]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
iommu: add a connect op
authorCaleb Connolly <caleb.connolly@linaro.org>
Mon, 11 Dec 2023 18:41:41 +0000 (18:41 +0000)
committerTom Rini <trini@konsulko.com>
Thu, 21 Dec 2023 16:59:49 +0000 (11:59 -0500)
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>
drivers/iommu/iommu-uclass.c
include/iommu.h

index 98731d5e2c440722a0dca7989d066111d9f38f40..6babc0e3a67203ca7db2b6510380e995067a117a 100644 (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)
index cf9719c5e91c182fb2aa2be45c84f1d6d92341e8..b8ba0b8e707795c375be123d13b319eab0a60408 100644 (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
         *