[PATCH] gpio: Enable hogging support in SPL

Eddie James eajames at linux.ibm.com
Fri Feb 4 16:36:31 CET 2022


On 2/4/22 09:24, Simon Glass wrote:
> Hi Eddie,
>
> On Thu, 3 Feb 2022 at 15:37, Eddie James <eajames at linux.ibm.com> wrote:
>> Use the CONFIG macros to conditionally build the GPIO hogging support in
>> either the SPL or U-Boot, or both, depending on the configuration. Also
>> call the GPIO hog probe function in the common SPL board initialization
>> as an equivalent to adding it to the U-Boot init sequence functions.
>>
>> Signed-off-by: Eddie James <eajames at linux.ibm.com>
>> ---
>>   common/spl/spl.c           |  7 +++++++
>>   drivers/gpio/Kconfig       | 10 ++++++++++
>>   drivers/gpio/gpio-uclass.c | 10 ++++++----
>>   3 files changed, 23 insertions(+), 4 deletions(-)
>>
>> diff --git a/common/spl/spl.c b/common/spl/spl.c
>> index 884102bdea..f667908eec 100644
>> --- a/common/spl/spl.c
>> +++ b/common/spl/spl.c
>> @@ -20,6 +20,9 @@
>>   #include <serial.h>
>>   #include <spl.h>
>>   #include <asm/global_data.h>
>> +#if defined(CONFIG_SPL_GPIO_HOG)
> Can you drop this ifdef?


Sure.


>
>> +#include <asm/gpio.h>
>> +#endif
>>   #include <asm/u-boot.h>
>>   #include <nand.h>
>>   #include <fat.h>
>> @@ -739,6 +742,10 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
>>                  }
>>          }
>>
>> +#if defined(CONFIG_SPL_GPIO_HOG)
>> +       gpio_hog_probe_all();
>> +#endif
> if (CONFIG_IS_ENABLED(GPIO_HOG))


Ack.


> ...
>
>> +
>>   #if CONFIG_IS_ENABLED(BOARD_INIT)
>>          spl_board_init();
>>   #endif
>> diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
>> index 305a2dc563..4da2bdc10d 100644
>> --- a/drivers/gpio/Kconfig
>> +++ b/drivers/gpio/Kconfig
>> @@ -57,6 +57,16 @@ config GPIO_HOG
>>            is a mechanism providing automatic GPIO request and config-
>>            uration as part of the gpio-controller's driver probe function.
>>
>> +config SPL_GPIO_HOG
>> +       bool "Enable GPIO hog support in SPL"
>> +       depends on SPL_GPIO_SUPPORT
> Should it depend on GPIO_HOG? I'm not sure, just a question


No, this way the gpio hog support can be configured for either SPL or 
U-Boot or both. They are the same option just in the different builds.


Thanks for the review,

Eddie


>
>
>> +       default n
>> +       help
>> +         Enable gpio hog support in SPL
>> +         The GPIO chip may contain GPIO hog definitions. GPIO hogging
>> +         is a mechanism providing automatic GPIO request and config-
>> +         uration as part of the gpio-controller's driver probe function.
>> +
>>   config DM_GPIO_LOOKUP_LABEL
>>          bool "Enable searching for gpio labelnames"
>>          depends on DM_GPIO
>> diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
>> index 125ae53d61..bebba620c9 100644
>> --- a/drivers/gpio/gpio-uclass.c
>> +++ b/drivers/gpio/gpio-uclass.c
>> @@ -1432,9 +1432,6 @@ void devm_gpiod_put(struct udevice *dev, struct gpio_desc *desc)
>>
>>   static int gpio_post_bind(struct udevice *dev)
>>   {
>> -       struct udevice *child;
>> -       ofnode node;
>> -
>>   #if defined(CONFIG_NEEDS_MANUAL_RELOC)
>>          struct dm_gpio_ops *ops = (struct dm_gpio_ops *)device_get_ops(dev);
>>          static int reloc_done;
>> @@ -1465,7 +1462,11 @@ static int gpio_post_bind(struct udevice *dev)
>>          }
>>   #endif
>>
>> -       if (CONFIG_IS_ENABLED(OF_REAL) && IS_ENABLED(CONFIG_GPIO_HOG)) {
>> +#if CONFIG_IS_ENABLED(GPIO_HOG)
>> +       {
>> +               struct udevice *child;
>> +               ofnode node;
>> +
>>                  dev_for_each_subnode(node, dev) {
>>                          if (ofnode_read_bool(node, "gpio-hog")) {
>>                                  const char *name = ofnode_get_name(node);
>> @@ -1480,6 +1481,7 @@ static int gpio_post_bind(struct udevice *dev)
>>                          }
>>                  }
>>          }
>> +#endif
>>          return 0;
>>   }
>>
>> --
>> 2.27.0
>>


More information about the U-Boot mailing list