[PATCH] dm: core: add function uclass_probe_all() to probe all devices

Vabhav Sharma (OSS) vabhav.sharma at oss.nxp.com
Mon Oct 19 20:11:35 CEST 2020



> -----Original Message-----
> From: Stefan Roese <sr at denx.de>
> Sent: Monday, October 19, 2020 3:40 PM
> To: Vabhav Sharma (OSS) <vabhav.sharma at oss.nxp.com>; u-
> boot at lists.denx.de; sjg at chromium.org
> Cc: Varun Sethi <V.Sethi at nxp.com>; andre.przywara at arm.com; Vabhav
> Sharma <vabhav.sharma at nxp.com>
> Subject: Re: [PATCH] dm: core: add function uclass_probe_all() to probe all
> devices
> 
> On 19.10.20 11:37, Vabhav Sharma wrote:
> > From: Vabhav Sharma <vabhav.sharma at nxp.com>
> >
> > Support a common method to probe all devices associated with uclass.
> >
> > This includes data structures and code for finding the first device
> > and looping for remaining devices associated with uclasses (groups of
> > devices with the same purpose, e.g. all SERIAL ports will be in the same
> uclass).
> >
> > An example is SBSA compliant PL011 UART IP, where firmware does the
> > serial port initialization and prepare uart device to let the kernel
> > use it for sending and reveiving the characters.SERIAL uclass will use
> > this function to initialize PL011 UART ports.
> >
> > The feature is enabled with CONFIG_DM.
> >
> > Signed-off-by: Vabhav Sharma <vabhav.sharma at nxp.com>
> > --
> >    Related discussion
> > https://patchwork.ozlabs.org/project/uboot/patch/1601400
> > 385-11854-1-git-send-email-vabhav.sharma at oss.nxp.com/
> > ---
> >   drivers/core/uclass.c | 17 +++++++++++++++++
> >   include/dm/uclass.h   | 12 ++++++++++++
> >   2 files changed, 29 insertions(+)
> >
> > diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c index
> > c3f1b73..0725e8e 100644
> > --- a/drivers/core/uclass.c
> > +++ b/drivers/core/uclass.c
> > @@ -792,6 +792,23 @@ int uclass_pre_remove_device(struct udevice *dev)
> >   }
> >   #endif
> >
> > +int uclass_probe_all(enum uclass_id id) {
> > +	struct udevice *dev;
> > +	int ret;
> > +
> > +	ret = uclass_first_device(id, &dev);
> > +	if (ret || !dev)
> > +		return ret;
> > +	if (dev) {
> > +		/* Scanning uclass to probe all devices */
> > +		for (; dev; uclass_next_device(&dev))
> > +			;
> > +	}
> > +
> > +	return 0;
> > +}
> > +
> >   UCLASS_DRIVER(nop) = {
> >   	.id		= UCLASS_NOP,
> >   	.name		= "nop",
> > diff --git a/include/dm/uclass.h b/include/dm/uclass.h index
> > 67ff746..0fce83f 100644
> > --- a/include/dm/uclass.h
> > +++ b/include/dm/uclass.h
> > @@ -380,6 +380,18 @@ int uclass_first_device_drvdata(enum uclass_id id,
> ulong driver_data,
> >   int uclass_resolve_seq(struct udevice *dev);
> >
> >   /**
> > + * uclass_probe_all() - Probe all devices based on an uclass ID
> > + *
> > + * Every uclass is identified by an ID, a number from 0 to n-1 where
> > +n is
> > + * the number of uclasses. This function probe all devices asocciated
> > +with
> > + * a uclass by looking its ID.
> > + *
> > + * @id: uclass ID to look up
> > + * @return 0 if OK, other -ve on error  */ int uclass_probe_all(enum
> > +uclass_id id);
> > +
> > +/**
> >    * uclass_id_foreach_dev() - Helper function to iteration through devices
> >    *
> >    * This creates a for() loop which works through the available
> > devices in
> >
> 
> Ahh, here is the function. You should better move both patches into one
> patchset, so that the dependency can be seen. Especially while applying.
Sure.
> 
> Other that that:
> 
> Reviewed-by: Stefan Roese <sr at denx.de>
> 
> Thanks,
> Stefan


More information about the U-Boot mailing list