[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