On Mon, Jan 23, 2017 at 09:48:09PM +0530, Sricharan R wrote: > From: Laurent Pinchart <laurent.pinchart+renesas@xxxxxxxxxxxxxxxx> > > Failures to look up an IOMMU when parsing the DT iommus property need to > be handled separately from the .of_xlate() failures to support deferred > probing. > > The lack of a registered IOMMU can be caused by the lack of a driver for > the IOMMU, the IOMMU device probe not having been performed yet, having > been deferred, or having failed. > > The first case occurs when the device tree describes the bus master and > IOMMU topology correctly but no device driver exists for the IOMMU yet > or the device driver has not been compiled in. Return NULL, the caller > will configure the device without an IOMMU. > > The second and third cases are handled by deferring the probe of the bus > master device which will eventually get reprobed after the IOMMU. > > The last case is currently handled by deferring the probe of the bus > master device as well. A mechanism to either configure the bus master > device without an IOMMU or to fail the bus master device probe depending > on whether the IOMMU is optional or mandatory would be a good > enhancement. > > Signed-off-by: Laurent Pichart <laurent.pinchart+renesas@xxxxxxxxxxxxxxxx> > Signed-off-by: Sricharan R <sricharan@xxxxxxxxxxxxxx> > ... > diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c > index 349bd1d..9529d6c 100644 > --- a/drivers/iommu/of_iommu.c > +++ b/drivers/iommu/of_iommu.c > @@ -23,6 +23,7 @@ > #include <linux/of.h> > #include <linux/of_iommu.h> > #include <linux/of_pci.h> > +#include <linux/pci.h> Why do we need this? > #include <linux/slab.h> > > static const struct of_device_id __iommu_of_table_sentinel > @@ -223,7 +224,7 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, > ops = ERR_PTR(err); > } > > - return IS_ERR(ops) ? NULL : ops; > + return ops; > } > > static int __init of_iommu_init(void) > @@ -234,7 +235,7 @@ static int __init of_iommu_init(void) > for_each_matching_node_and_match(np, matches, &match) { > const of_iommu_init_fn init_fn = match->data; > > - if (init_fn(np)) > + if (init_fn && init_fn(np)) > pr_err("Failed to initialise IOMMU %s\n", > of_node_full_name(np)); > } -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html