diff options
author | Tom Rini <trini@konsulko.com> | 2020-04-16 13:45:03 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2020-04-16 13:45:03 -0400 |
commit | f51b4bcf61c9aa7994138a4a417488c1fbdb47cd (patch) | |
tree | 4f536d0892be1359f2cf02bfe366b56bef83bf28 /drivers/core/device.c | |
parent | dba0a6ae1907bbff3ebda06e4874d006f10db1bb (diff) | |
parent | b0dcc87106464c3fc019e3771378a092fd32ebdb (diff) |
Merge tag 'dm-pull-10apr20-take2' of git://git.denx.de/u-boot-dm
Functions for reading indexed values from device tree
Enhancements to 'dm' command
Log test enhancements and syslog driver
DM change to read parent ofdata before children
Minor fixes
Diffstat (limited to 'drivers/core/device.c')
-rw-r--r-- | drivers/core/device.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/core/device.c b/drivers/core/device.c index 89ea820d487..0157bb1fe02 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -143,11 +143,9 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv, goto fail_alloc3; } } - } - - /* put dev into parent's successor list */ - if (parent) + /* put dev into parent's successor list */ list_add_tail(&dev->sibling_node, &parent->child_head); + } ret = uclass_bind_device(dev); if (ret) @@ -323,6 +321,22 @@ int device_ofdata_to_platdata(struct udevice *dev) if (dev->flags & DM_FLAG_PLATDATA_VALID) return 0; + /* Ensure all parents have ofdata */ + if (dev->parent) { + ret = device_ofdata_to_platdata(dev->parent); + if (ret) + goto fail; + + /* + * The device might have already been probed during + * the call to device_probe() on its parent device + * (e.g. PCI bridge devices). Test the flags again + * so that we don't mess up the device. + */ + if (dev->flags & DM_FLAG_PLATDATA_VALID) + return 0; + } + drv = dev->driver; assert(drv); |