Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] gpiolib: tolerate gpio-hogs lacking a hogging state
@ 2026-07-13 23:30 Daniel Golle
  2026-07-14  8:45 ` Andy Shevchenko
  0 siblings, 1 reply; 2+ messages in thread
From: Daniel Golle @ 2026-07-13 23:30 UTC (permalink / raw)
  To: Linus Walleij, Bartosz Golaszewski, Matthias Brugger,
	AngeloGioacchino Del Regno, Frank Wunderlich, Andy Shevchenko,
	Mika Westerberg, linux-gpio, linux-kernel, linux-arm-kernel,
	linux-mediatek

Commit d1d564ec4992 ("gpio: move hogs into GPIO core") made
gpiochip_add_hog() return -EINVAL for hog nodes lacking any of the
'input', 'output-low' or 'output-high' properties. The error is
propagated by gpiochip_hog_lines() and fails registration of the
whole GPIO chip.

The previous OF-specific implementation tolerated such nodes:
of_parse_own_gpio() warned "no hogging state specified, bailing out"
and of_gpiochip_add_hog() stopped processing the node without failing
chip registration.

Some boards deliberately ship hog nodes without a hogging state in
their base devicetree and supply the state via overlay, e.g. the PCIe
slot key selection hogs on the BananaPi R4 Pro added in
commit e309fa232d12 ("arm64: dts: mediatek: mt7988a-bpi-r4pro: rework
pcie gpio-hog handling"), as the polarity set in the base devicetree
could not be overridden from an overlay.

Booting such a board without an overlay applied now fails to register
the gpiochip. On the BananaPi R4 Pro this means the MT7988A pinctrl
device fails to probe, all peripherals including the console UART
defer forever, and the board finally hangs when clk_disable_unused()
gates the clocks of the UART still in use by earlycon:

  gpiochip_add_data_with_key: GPIOs 512..595 (pinctrl_moore) failed to register, -22
  mt7988-pinctrl 1001f000.pinctrl: error -EINVAL: Failed to add gpio_chip
  ...
  clk: Disabling unused clocks
  (hangs)

Restore the previous behaviour by warning about hog nodes lacking a
hogging state and skipping them instead of failing the registration
of the whole GPIO chip.

Fixes: d1d564ec4992 ("gpio: move hogs into GPIO core")
Cc: stable@vger.kernel.org
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
---
 drivers/gpio/gpiolib.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index e5fb60111151..c433a095907f 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -999,14 +999,17 @@ int gpiochip_add_hog(struct gpio_chip *gc, struct fwnode_handle *fwnode)
 	if (ret < 0)
 		return ret;
 
-	if (fwnode_property_present(fwnode, "input"))
+	if (fwnode_property_present(fwnode, "input")) {
 		dflags |= GPIOD_IN;
-	else if (fwnode_property_present(fwnode, "output-low"))
+	} else if (fwnode_property_present(fwnode, "output-low")) {
 		dflags |= GPIOD_OUT_LOW;
-	else if (fwnode_property_present(fwnode, "output-high"))
+	} else if (fwnode_property_present(fwnode, "output-high")) {
 		dflags |= GPIOD_OUT_HIGH;
-	else
-		return -EINVAL;
+	} else {
+		gpiochip_warn(gc, "%pfwP: no hogging state specified, bailing out\n",
+			      fwnode);
+		return 0;
+	}
 
 	fwnode_property_read_string(fwnode, "line-name", &name);
 
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] gpiolib: tolerate gpio-hogs lacking a hogging state
  2026-07-13 23:30 [PATCH] gpiolib: tolerate gpio-hogs lacking a hogging state Daniel Golle
@ 2026-07-14  8:45 ` Andy Shevchenko
  0 siblings, 0 replies; 2+ messages in thread
From: Andy Shevchenko @ 2026-07-14  8:45 UTC (permalink / raw)
  To: Daniel Golle
  Cc: Linus Walleij, Bartosz Golaszewski, Matthias Brugger,
	AngeloGioacchino Del Regno, Frank Wunderlich, Mika Westerberg,
	linux-gpio, linux-kernel, linux-arm-kernel, linux-mediatek

On Tue, Jul 14, 2026 at 12:30:53AM +0100, Daniel Golle wrote:
> Commit d1d564ec4992 ("gpio: move hogs into GPIO core") made
> gpiochip_add_hog() return -EINVAL for hog nodes lacking any of the
> 'input', 'output-low' or 'output-high' properties. The error is
> propagated by gpiochip_hog_lines() and fails registration of the
> whole GPIO chip.
> 
> The previous OF-specific implementation tolerated such nodes:
> of_parse_own_gpio() warned "no hogging state specified, bailing out"
> and of_gpiochip_add_hog() stopped processing the node without failing
> chip registration.
> 
> Some boards deliberately ship hog nodes without a hogging state in
> their base devicetree and supply the state via overlay, e.g. the PCIe
> slot key selection hogs on the BananaPi R4 Pro added in
> commit e309fa232d12 ("arm64: dts: mediatek: mt7988a-bpi-r4pro: rework
> pcie gpio-hog handling"), as the polarity set in the base devicetree
> could not be overridden from an overlay.
> 
> Booting such a board without an overlay applied now fails to register
> the gpiochip. On the BananaPi R4 Pro this means the MT7988A pinctrl
> device fails to probe, all peripherals including the console UART
> defer forever, and the board finally hangs when clk_disable_unused()
> gates the clocks of the UART still in use by earlycon:
> 
>   gpiochip_add_data_with_key: GPIOs 512..595 (pinctrl_moore) failed to register, -22
>   mt7988-pinctrl 1001f000.pinctrl: error -EINVAL: Failed to add gpio_chip
>   ...
>   clk: Disabling unused clocks
>   (hangs)
> 
> Restore the previous behaviour by warning about hog nodes lacking a
> hogging state and skipping them instead of failing the registration
> of the whole GPIO chip.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

...

> -	if (fwnode_property_present(fwnode, "input"))
> +	if (fwnode_property_present(fwnode, "input")) {
>  		dflags |= GPIOD_IN;
> -	else if (fwnode_property_present(fwnode, "output-low"))
> +	} else if (fwnode_property_present(fwnode, "output-low")) {
>  		dflags |= GPIOD_OUT_LOW;
> -	else if (fwnode_property_present(fwnode, "output-high"))
> +	} else if (fwnode_property_present(fwnode, "output-high")) {
>  		dflags |= GPIOD_OUT_HIGH;

For a fix I would make it less invasive and yes, break the style, by just
replacing

> -	else
> -		return -EINVAL;

with

	else {
		gpiochip_warn(gc, "%pfwP: no hogging state specified, bailing out\n",
			      fwnode);
		return 0;
	}

> +	} else {
> +		gpiochip_warn(gc, "%pfwP: no hogging state specified, bailing out\n",
> +			      fwnode);
> +		return 0;
> +	}

This leads patch directly to the point. The style can be modified later on.

-- 
With Best Regards,
Andy Shevchenko




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-07-14  8:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-13 23:30 [PATCH] gpiolib: tolerate gpio-hogs lacking a hogging state Daniel Golle
2026-07-14  8:45 ` Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox