On Thu, 24 Oct 2013 11:21:15 +0200, Hiroshi Doyu <hdoyu@xxxxxxxxxx> wrote: > Hi Grant, > > Grant Likely <grant.likely@xxxxxxxxxx> wrote @ Thu, 24 Oct 2013 10:55:31 +0200: > .... > > > diff --git a/include/linux/of.h b/include/linux/of.h > > > index f95aee3..638a88a 100644 > > > --- a/include/linux/of.h > > > +++ b/include/linux/of.h > > > @@ -60,6 +60,7 @@ struct device_node { > > > struct kref kref; > > > unsigned long _flags; > > > void *data; > > > + struct device *dev; /* Set only after populated */ > > > > Is this being used merely to indicate that a device has been processed > > by of_platform_device_create()? Or do you intend to dereference this > > pointer? I've avoided putting the struct device in to the device_node > > structure up to this point simply becuase there aren't any good clues > > for what /kind/ of device it actually points to. I worry that bad > > assumptions will get made when other subsystems try to use the > > same pointer. ie. if one subsystem creates its own device and sets this > > pointer, and then of_platform_device_create() comes along behind, sees > > that it is already created, and then returns a platform_device pointer > > *for something that isn't a struct platform_device*. This is very bad. > > > > Instead of using a pointer to the struct device, would a flag be > > sufficient for your purposes? Would it be fine to return NULL if the > > device has already been created? > > Yes, a flag would be enough for this purpose. > > This patch is a part of HACK to control device instanciation order. We > have an IOMMU device(platform) which needs to be instanciated earlier > than other (platform)devices so that IOMMU driver would configure them > as IOMMU'able device. Ideally the drivers depending on the IOMMU would return -EPROBE_DEFER if the IOMMU driver isn't set up so that you don't need to play games with probe order. Creating certain platform devices early is a really ugly and fragile solution. Besides, probe order of device drivers is far more about link order of the kernel than it is about when of_platform_device_create() is called. Fiddling with the initcall level on the IOMMU driver (while not recommended) may very well have the effect you desire. g. > > Is there any better way to control device instanciation order from DT? -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html