Hi Walter, On Fri, 29 May 2020 at 12:56, Walter Lozano <walter.loz...@collabora.com> wrote: > > > On 29/5/20 15:15, Walter Lozano wrote: > > Currently when creating an U_BOOT_DEVICE entry a struct driver_info > > is declared, which contains the data needed to instantiate the device. > > However, the actual device is created at runtime and there is no proper > > way to get the device based on its struct driver_info. > > > > This patch extends struct driver_info adding a pointer to udevice which > > is populated during the bind process, allowing to generate a set of > > functions to get the device based on its struct driver_info. > > > > Signed-off-by: Walter Lozano <walter.loz...@collabora.com> > > --- > > drivers/core/device.c | 26 +++++++++++++++++++++++--- > > drivers/core/root.c | 4 ++++ > > include/dm/device.h | 14 ++++++++++++++ > > include/dm/platdata.h | 14 ++++++++++++++ > > 4 files changed, 55 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/core/device.c b/drivers/core/device.c > > index a0ad080aaf..5adbc30849 100644 > > --- a/drivers/core/device.c > > +++ b/drivers/core/device.c > > @@ -250,6 +250,7 @@ int device_bind_by_name(struct udevice *parent, bool > > pre_reloc_only, > > { > > struct driver *drv; > > uint platdata_size = 0; > > + int ret = 0; > > > > drv = lists_driver_lookup_name(info->name); > > if (!drv) > > @@ -260,9 +261,16 @@ int device_bind_by_name(struct udevice *parent, bool > > pre_reloc_only, > > #if CONFIG_IS_ENABLED(OF_PLATDATA) > > platdata_size = info->platdata_size; > > #endif > > - return device_bind_common(parent, drv, info->name, > > - (void *)info->platdata, 0, ofnode_null(), > > platdata_size, > > - devp); > > + ret = device_bind_common(parent, drv, info->name, > > + (void *)info->platdata, 0, ofnode_null(), > > + platdata_size, devp); > > + if (ret) > > + return ret; > > +#if CONFIG_IS_ENABLED(OF_PLATDATA) > > + info->dev = *devp; > > +#endif > > I have tried to test this using sandbox_spl_defconfig but I've received > a segmentation fault when trying to update info->dev, however this code > works on iMX6. > > Could it be some kind of protection? Any thoughts?
Yes, see u-boot-dm/dtoc-working - arch/sandbox/cpu/u-boot-spl.lds has an attempt to move some of the list stuff into the data region. [..] Regards, Simon