diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/core/device.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/core/device.c b/drivers/core/device.c index 534cfa7314d..0157bb1fe02 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -321,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); |