Hi Tom 

This patch is landing in the mailing list since a while. 
Do you expect to merge it in master or in next branch soon ?
This patch will be useful for STM32MP SoC in order to clean according machine 
code.

Thanks
Patrice


On 9/22/22 17:53, Quentin Schulz wrote:
> From: Marek Vasut <ma...@denx.de>
> 
> The gpio_hog_probe_all() functionality can be perfectly well replaced by
> DM_FLAG_PROBE_AFTER_BIND DM flag, which would trigger .probe() callback
> of each GPIO hog driver instance after .bind() and thus configure the
> hogged GPIO accordingly.
> 
> Signed-off-by: Marek Vasut <ma...@denx.de>
> Signed-off-by: Quentin Schulz <quentin.sch...@theobroma-systems.com>
> Reviewed-by: Patrick Delaunay <patrick.delau...@foss.st.com>
> Reviewed-by: Samuel Holland <sam...@sholland.org>
> ---
> 
> v3:
>  - removed DM_FLAG_PRE_RELOC flag since it is now handled by patch 1/2
>  in this series, in the DM core,
> 
> v2:
>  - added missing DM_FLAG_PRE_RELOC flag on the gpio-hog device,
>  - added comments for flags setting,
>  - tested on a PX30 ringneck where the gpio-hog is necessary in SPL to
>  be able to load U-Boot proper from eMMC when booting SPL from SD card,
> 
>  common/board_r.c           |  3 ---
>  common/spl/spl.c           |  3 ---
>  doc/README.gpio            |  6 ++----
>  drivers/gpio/gpio-uclass.c | 31 ++++++++-----------------------
>  include/asm-generic/gpio.h |  8 --------
>  5 files changed, 10 insertions(+), 41 deletions(-)
> 
> diff --git a/common/board_r.c b/common/board_r.c
> index 56eb60fa27..c556aa5a07 100644
> --- a/common/board_r.c
> +++ b/common/board_r.c
> @@ -750,9 +750,6 @@ static init_fnc_t init_sequence_r[] = {
>       initr_status_led,
>  #endif
>       /* PPC has a udelay(20) here dating from 2002. Why? */
> -#if defined(CONFIG_GPIO_HOG)
> -     gpio_hog_probe_all,
> -#endif
>  #ifdef CONFIG_BOARD_LATE_INIT
>       board_late_init,
>  #endif
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index 29e0898f03..683e0dfc52 100644
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -770,9 +770,6 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
>               }
>       }
>  
> -     if (CONFIG_IS_ENABLED(GPIO_HOG))
> -             gpio_hog_probe_all();
> -
>  #if CONFIG_IS_ENABLED(BOARD_INIT)
>       spl_board_init();
>  #endif
> diff --git a/doc/README.gpio b/doc/README.gpio
> index 548ff37b8c..d253f654fa 100644
> --- a/doc/README.gpio
> +++ b/doc/README.gpio
> @@ -2,10 +2,8 @@
>  GPIO hog (CONFIG_GPIO_HOG)
>  --------
>  
> -All the GPIO hog are initialized in gpio_hog_probe_all() function called in
> -board_r.c just before board_late_init() but you can also acces directly to
> -the gpio with gpio_hog_lookup_name().
> -
> +All the GPIO hog are initialized using DM_FLAG_PROBE_AFTER_BIND DM flag
> +after bind().
>  
>  Example, for the device tree:
>  
> diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
> index 0ed32b7217..b08e482ab3 100644
> --- a/drivers/gpio/gpio-uclass.c
> +++ b/drivers/gpio/gpio-uclass.c
> @@ -315,34 +315,11 @@ static int gpio_hog_probe(struct udevice *dev)
>       return 0;
>  }
>  
> -int gpio_hog_probe_all(void)
> -{
> -     struct udevice *dev;
> -     int ret;
> -     int retval = 0;
> -
> -     for (uclass_first_device(UCLASS_NOP, &dev);
> -          dev;
> -          uclass_find_next_device(&dev)) {
> -             if (dev->driver == DM_DRIVER_GET(gpio_hog)) {
> -                     ret = device_probe(dev);
> -                     if (ret) {
> -                             printf("Failed to probe device %s err: %d\n",
> -                                    dev->name, ret);
> -                             retval = ret;
> -                     }
> -             }
> -     }
> -
> -     return retval;
> -}
> -
>  int gpio_hog_lookup_name(const char *name, struct gpio_desc **desc)
>  {
>       struct udevice *dev;
>  
>       *desc = NULL;
> -     gpio_hog_probe_all();
>       if (!uclass_get_device_by_name(UCLASS_NOP, name, &dev)) {
>               struct gpio_hog_priv *priv = dev_get_priv(dev);
>  
> @@ -1503,9 +1480,17 @@ static int gpio_post_bind(struct udevice *dev)
>                                                                &child);
>                               if (ret)
>                                       return ret;
> +
> +                             /*
> +                              * Make sure gpio-hogs are probed after bind
> +                              * since hogs can be essential to the hardware
> +                              * system.
> +                              */
> +                             dev_or_flags(child, DM_FLAG_PROBE_AFTER_BIND);
>                       }
>               }
>       }
> +
>       return 0;
>  }
>  
> diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h
> index 81f63f06f1..e56d3777ae 100644
> --- a/include/asm-generic/gpio.h
> +++ b/include/asm-generic/gpio.h
> @@ -460,14 +460,6 @@ int dm_gpio_lookup_name(const char *name, struct 
> gpio_desc *desc);
>   */
>  int gpio_hog_lookup_name(const char *name, struct gpio_desc **desc);
>  
> -/**
> - * gpio_hog_probe_all() - probe all gpio devices with
> - * gpio-hog subnodes.
> - *
> - * @return:  Returns return value from device_probe()
> - */
> -int gpio_hog_probe_all(void);
> -
>  /**
>   * gpio_lookup_name - Look up a GPIO name and return its details
>   *

Reply via email to