[PATCH v5 1/2] dm: core: add function uclass_probe_all() to probe all devices

Sean Anderson seanga2 at gmail.com
Wed Dec 16 16:19:18 CET 2020


On 12/9/20 12:12 AM, 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>
> Reviewed-by: Stefan Roese <sr at denx.de>
> Reviewed-by: Simon Glass <sjg at chromium.org>
> --
>    v5:
>    Incorporated review comments of Sean Anderson
>    Replace for loop with while loop
>    Error check added
>    Function description updated
> 
>    v4:
>    Incorporated review comments of Simon
>    Removed if (dev)..  conditional check
> 
>    v3:
>    Incorporated review comments of Stephan,Simon
>    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 | 19 +++++++++++++++++++
>   include/dm/uclass.h   | 11 +++++++++++
>   2 files changed, 30 insertions(+)
> 
> diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c
> index c3f1b73..27972ef 100644
> --- a/drivers/core/uclass.c
> +++ b/drivers/core/uclass.c
> @@ -792,6 +792,25 @@ 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;
> +
> +	/* Scanning uclass to probe all devices */
> +	while (dev) {
> +		ret = uclass_next_device(&dev);
> +		if (ret)
> +			return ret;
> +	}
> +
> +	return 0;
> +}
> +
>   UCLASS_DRIVER(nop) = {
>   	.id		= UCLASS_NOP,
>   	.name		= "nop",
> diff --git a/include/dm/uclass.h b/include/dm/uclass.h
> index 7188304..6bd33d4 100644
> --- a/include/dm/uclass.h
> +++ b/include/dm/uclass.h
> @@ -381,6 +381,17 @@ 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
> + *
> + * This function probes all devices associated with a uclass by
> + * looking for 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
> 

Reviewed-by: Sean Anderson <seanga2 at gmail.com>


More information about the U-Boot mailing list