[PATCH v2 04/37] dm: core: Allow dropping run-time binding of devices

Heinrich Schuchardt xypron.glpk at gmx.de
Thu Feb 4 14:57:36 CET 2021


On 03.02.21 17:43, Simon Glass wrote:
> With OF_PLATDATA_INST devices are bound at build time. we should not allow
> binding of devices at runtime. Add an option to control this.
>
> Update the driver model core so that it does not bind devices. Update
> device_bind() to return an error if called.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> (no changes since v1)
>
>  drivers/core/device.c | 38 +++++++++++++++++++++-----------------
>  dts/Kconfig           | 16 ++++++++++++++++
>  2 files changed, 37 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/core/device.c b/drivers/core/device.c
> index 8629df8defb..02e28f014b5 100644
> --- a/drivers/core/device.c
> +++ b/drivers/core/device.c
> @@ -44,6 +44,9 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv,
>  	bool auto_seq = true;
>  	void *ptr;
>
> +	if (CONFIG_IS_ENABLED(OF_PLATDATA_NO_BIND))
> +		return -ENOSYS;
> +
>  	if (devp)
>  		*devp = NULL;
>  	if (!name)
> @@ -382,26 +385,27 @@ int device_of_to_plat(struct udevice *dev)
>  	if (dev_get_flags(dev) & DM_FLAG_PLATDATA_VALID)
>  		return 0;
>
> -	/* Ensure all parents have ofdata */
> -	if (dev->parent) {
> -		ret = device_of_to_plat(dev->parent);
> +	if (!CONFIG_IS_ENABLED(OF_PLATDATA_NO_BIND)) {

In the commit message you write this depends on OF_PLATDATA_INST. Why
should we use another symbol here?

> +		/* Ensure all parents have ofdata */
> +		if (dev->parent) {
> +			ret = device_of_to_plat(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_get_flags(dev) & DM_FLAG_PLATDATA_VALID)
> +				return 0;
> +		}
> +
> +		ret = device_alloc_priv(dev);
>  		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_get_flags(dev) & DM_FLAG_PLATDATA_VALID)
> -			return 0;
>  	}
> -
> -	ret = device_alloc_priv(dev);
> -	if (ret)
> -		goto fail;
> -
>  	drv = dev->driver;
>  	assert(drv);
>
> diff --git a/dts/Kconfig b/dts/Kconfig
> index e861ea48d01..645a2d2b84d 100644
> --- a/dts/Kconfig
> +++ b/dts/Kconfig
> @@ -371,6 +371,14 @@ config SPL_OF_PLATDATA_INST
>  	  Declare devices as udevice instances so that they do not need to be
>  	  bound when U-Boot starts. This can save time and code space.
>
> +config SPL_OF_PLATDATA_NO_BIND
> +	bool "Don't allow run-time binding of devices"
> +	depends on SPL_OF_PLATDATA_INST
> +	default y
> +	help
> +	  This removes the ability to bind devices at run time, thus saving
> +	  some code space in U-Boot.
> +
>  endif
>
>  config TPL_OF_PLATDATA
> @@ -411,6 +419,14 @@ config TPL_OF_PLATDATA_INST
>  	  Declare devices as udevice instances so that they do not need to be
>  	  bound when U-Boot starts. This can save time and code space.
>
> +config TPL_OF_PLATDATA_NO_BIND
> +	bool "Don't allow run-time binding of devices"
> +	depends on TPL_OF_PLATDATA_INST
> +	default y

In which case would I want to set this to no? This needs a better
description if the symbol is needed at all.

Best regards

Heinrich

> +	help
> +	  This removes the ability to bind devices at run time, thus saving
> +	  some code space in U-Boot.
> +
>  endif
>
>  endmenu
>



More information about the U-Boot mailing list