Re: [PATCH] gpio: Enable hogging support in SPL

Hi Eddie,
On Thu, 3 Feb 2022 at 15:37, Eddie James eajames@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@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?
+#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)) ...
#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
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

On 2/4/22 09:24, Simon Glass wrote:
Hi Eddie,
On Thu, 3 Feb 2022 at 15:37, Eddie James eajames@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@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
participants (2)
-
Eddie James
-
Simon Glass