On 2024-01-04 18:12, Caleb Connolly wrote:
When attempting to probe a device which has an associated IOMMU, if the
IOMMU device can't be found (no driver, disabled driver, driver failed
to probe, etc) then we currently fail to probe the device with no
discernable error.
If we fail to hook the device up to its IOMMU, we should make sure that
the user knows about it. Write some better error messages for
dev_iommu_enable() to facilitate this.
Quite frankly, I think those should remain as debug-only error messages, 
but of course with the additional details you added.  The reasoning 
behind it would be to use debug builds while testing, to be able to see 
any error messages, and then use production, size-optimized builds 
later.  I hope you agree.
There are many other places where using log messages instead of debug 
messages would be really useful in the field, such as in the MMC 
drivers, but we'd quickly start increasing the image sizes if we start 
converting those from debug to log messages.
Signed-off-by: Caleb Connolly <caleb.conno...@linaro.org>
---
 drivers/iommu/iommu-uclass.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/iommu/iommu-uclass.c b/drivers/iommu/iommu-uclass.c
index 6babc0e3a672..dff3239cccb1 100644
--- a/drivers/iommu/iommu-uclass.c
+++ b/drivers/iommu/iommu-uclass.c
@@ -86,16 +86,16 @@ int dev_iommu_enable(struct udevice *dev)
                ret = dev_read_phandle_with_args(dev, "iommus",
                                                 "#iommu-cells", 0, i, &args);
                if (ret) {
-                       debug("%s: dev_read_phandle_with_args failed: %d\n",
-                             __func__, ret);
+                       log_err("%s: Failed to parse 'iommus' property for '%s': 
%d\n",
+                               __func__, dev->name, ret);
                        return ret;
                }

                ret = uclass_get_device_by_ofnode(UCLASS_IOMMU, args.node,
                                                  &dev_iommu);
                if (ret) {
-                       debug("%s: uclass_get_device_by_ofnode failed: %d\n",
-                             __func__, ret);
+                       log_err("%s: Failed to find IOMMU device for '%s': 
%d\n",
+                               __func__, dev->name, ret);
                        return ret;
                }
                dev->iommu = dev_iommu;
@@ -106,8 +106,11 @@ int dev_iommu_enable(struct udevice *dev)
                ops = device_get_ops(dev->iommu);
                if (ops && ops->connect) {
                        ret = ops->connect(dev);
-                       if (ret)
+                       if (ret) {
+                               log_err("%s: Failed to connect '%s' to IOMMU '%s': 
%d\n",
+                                       __func__, dev->name, dev->iommu->name, 
ret);
                                return ret;
+                       }
                }
        }

Reply via email to