]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
of: property: Skip adding device links to suppliers that aren't devices
authorSaravana Kannan <saravanak@google.com>
Mon, 28 Oct 2019 22:00:26 +0000 (15:00 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 2 Nov 2019 17:05:19 +0000 (18:05 +0100)
Some devices need to be initialized really early and can't wait for
driver core or drivers to be functional.  These devices are typically
initialized without creating a struct device for their device nodes.

If a supplier ends up being one of these devices, skip trying to add
device links to them.

Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20191028220027.251605-6-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/of/property.c

index 69a6ec8711bd0b3722ee4759c3eef4fee5439458..e225ab17f598570d91399ade78e1fbe8524cd152 100644 (file)
@@ -1024,6 +1024,7 @@ static int of_link_to_phandle(struct device *dev, struct device_node *sup_np,
        struct device *sup_dev;
        int ret = 0;
        struct device_node *tmp_np = sup_np;
+       int is_populated;
 
        of_node_get(sup_np);
        /*
@@ -1048,9 +1049,10 @@ static int of_link_to_phandle(struct device *dev, struct device_node *sup_np,
                return -EINVAL;
        }
        sup_dev = get_dev_from_fwnode(&sup_np->fwnode);
+       is_populated = of_node_check_flag(sup_np, OF_POPULATED);
        of_node_put(sup_np);
        if (!sup_dev)
-               return -EAGAIN;
+               return is_populated ? 0 : -EAGAIN;
        if (!device_link_add(dev, sup_dev, dl_flags))
                ret = -EAGAIN;
        put_device(sup_dev);