[PATCH v1 5/5] of: property: Skip adding device links to suppliers that aren't devices

From: Saravana Kannan
Date: Mon Oct 28 2019 - 18:00:52 EST


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@xxxxxxxxxx>
---
drivers/of/property.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/of/property.c b/drivers/of/property.c
index f16f85597ccc..21c9d251318a 100644
--- a/drivers/of/property.c
+++ b/drivers/of/property.c
@@ -1038,6 +1038,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);
/*
@@ -1062,9 +1063,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);
--
2.24.0.rc0.303.g954a862665-goog