[PATCH 05/10] core: extend struct driver_info to point to device
Simon Glass
sjg at chromium.org
Fri May 29 21:00:10 CEST 2020
Hi Walter,
On Fri, 29 May 2020 at 12:56, Walter Lozano <walter.lozano at 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.lozano at 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
More information about the U-Boot
mailing list