linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode
@ 2022-04-01 10:35 Andy Shevchenko
  2022-04-01 10:35 ` [PATCH v4 01/13] gpiolib: Introduce for_each_gpiochip_node() loop helper Andy Shevchenko
                   ` (13 more replies)
  0 siblings, 14 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:35 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

This is a spin-off of the previous work of switching GPIO library
to use fwnode instead of of_node. Here we introduce a couple of
a new macro helpers, which allows to switch some of the drivers
to use fwnode and partially fwnode APIs. As a result of this cleanup
a few drivers switched to use GPIO fwnode instead of of_node.

Bart, Linus, I can take it thru my tree with an immutable branch if
it's the way you prefer, otherwise please suggest on how to proceed.

Changelog v4:
- fixed compilation of the Samsung pin control drivers (LKP)
- explained in the commit message why namespacing is good for meson defs
- added tag to one of meson patches (Neil)

Changelog v3:
- moved count initialization to the definition in patch 2 (Geert)
- replaced of_args by args, used %pfwP in patch 7 (Geert)
- fixed kernel doc warning in patch 7
- added tags to patches 1, 2, 6, and 7 (Geert)
- added tag to patch 4 (Fabien)
- renamed MREG to MESON_REG in patch 9 (Neil)
- added tag to patch 10 (Neil)
- used --base for cover-letter

Changelog v2:
- properly based, so kbuild bot may test it (LKP)
- fixed typo in the macro (Geert)
- split to two macro helpers and rename the gpiochip_count()
- tagged one of stm32 and one of meson patches (Fabien, Neil)
- unified previously standalone armada patch
- due to above rewrote the armada patch from v1 completely (Sergey)
- added a lot of a new patches
- compile tested all of them on x86

Andy Shevchenko (13):
  gpiolib: Introduce for_each_gpiochip_node() loop helper
  gpiolib: Introduce gpiochip_node_count() helper
  pinctrl: stm32: Replace custom code by gpiochip_node_count() call
  pinctrl: stm32: Switch to use for_each_gpiochip_node() helper
  pinctrl: samsung: Switch to use for_each_gpiochip_node() helper
  pinctrl: renesas: rza1: Replace custom code by gpiochip_node_count()
    call
  pinctrl: renesas: rza1: Switch to use for_each_gpiochip_node() helper
  pinctrl: npcm7xx: Switch to use for_each_gpiochip_node() helper
  pinctrl: meson: Rename REG_* to MESON_REG_*
  pinctrl: meson: Enable COMPILE_TEST
  pinctrl: meson: Replace custom code by gpiochip_node_count() call
  pinctrl: armada-37xx: Switch to use fwnode instead of of_node
  pinctrl: armada-37xx: Reuse GPIO fwnode in
    armada_37xx_irqchip_register()

 drivers/pinctrl/meson/Kconfig               |   2 +-
 drivers/pinctrl/meson/pinctrl-meson.c       |  52 ++++---
 drivers/pinctrl/meson/pinctrl-meson.h       |  24 ++--
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c |  34 ++---
 drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c   | 142 +++++++++-----------
 drivers/pinctrl/renesas/pinctrl-rza1.c      |  47 ++-----
 drivers/pinctrl/samsung/pinctrl-exynos.c    |   8 +-
 drivers/pinctrl/samsung/pinctrl-s3c24xx.c   |   2 +-
 drivers/pinctrl/samsung/pinctrl-s3c64xx.c   |   4 +-
 drivers/pinctrl/samsung/pinctrl-samsung.c   |  30 ++---
 drivers/pinctrl/samsung/pinctrl-samsung.h   |   2 +-
 drivers/pinctrl/stm32/pinctrl-stm32.c       |  80 +++++------
 include/linux/gpio/driver.h                 |  18 ++-
 13 files changed, 198 insertions(+), 247 deletions(-)


base-commit: e5071887cd2296a7704dbcd10c1cedf0f11cdbd5
-- 
2.35.1


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

* [PATCH v4 01/13] gpiolib: Introduce for_each_gpiochip_node() loop helper
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
@ 2022-04-01 10:35 ` Andy Shevchenko
  2022-04-05 12:12   ` Bartosz Golaszewski
  2022-04-01 10:35 ` [PATCH v4 02/13] gpiolib: Introduce gpiochip_node_count() helper Andy Shevchenko
                   ` (12 subsequent siblings)
  13 siblings, 1 reply; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:35 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Introduce for_each_gpiochip_node() loop helper which iterates over
the GPIO controller child nodes of a given device.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 include/linux/gpio/driver.h | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
index 98c93510640e..bfc91f122d5f 100644
--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h
@@ -3,13 +3,14 @@
 #define __LINUX_GPIO_DRIVER_H
 
 #include <linux/device.h>
-#include <linux/types.h>
 #include <linux/irq.h>
 #include <linux/irqchip/chained_irq.h>
 #include <linux/irqdomain.h>
 #include <linux/lockdep.h>
 #include <linux/pinctrl/pinctrl.h>
 #include <linux/pinctrl/pinconf-generic.h>
+#include <linux/property.h>
+#include <linux/types.h>
 
 struct gpio_desc;
 struct of_phandle_args;
@@ -750,4 +751,8 @@ static inline void gpiochip_unlock_as_irq(struct gpio_chip *gc,
 }
 #endif /* CONFIG_GPIOLIB */
 
+#define for_each_gpiochip_node(dev, child)					\
+	device_for_each_child_node(dev, child)					\
+		if (!fwnode_property_present(child, "gpio-controller")) {} else
+
 #endif /* __LINUX_GPIO_DRIVER_H */
-- 
2.35.1


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

* [PATCH v4 02/13] gpiolib: Introduce gpiochip_node_count() helper
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
  2022-04-01 10:35 ` [PATCH v4 01/13] gpiolib: Introduce for_each_gpiochip_node() loop helper Andy Shevchenko
@ 2022-04-01 10:35 ` Andy Shevchenko
  2022-04-05 12:13   ` Bartosz Golaszewski
  2022-04-01 10:35 ` [PATCH v4 03/13] pinctrl: stm32: Replace custom code by gpiochip_node_count() call Andy Shevchenko
                   ` (11 subsequent siblings)
  13 siblings, 1 reply; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:35 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

The gpiochip_node_count() helper iterates over the device child nodes that
have the "gpio-controller" property set. It returns the number of such nodes
under a given device.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 include/linux/gpio/driver.h | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
index bfc91f122d5f..12de0b22b4ef 100644
--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h
@@ -755,4 +755,15 @@ static inline void gpiochip_unlock_as_irq(struct gpio_chip *gc,
 	device_for_each_child_node(dev, child)					\
 		if (!fwnode_property_present(child, "gpio-controller")) {} else
 
+static inline unsigned int gpiochip_node_count(struct device *dev)
+{
+	struct fwnode_handle *child;
+	unsigned int count = 0;
+
+	for_each_gpiochip_node(dev, child)
+		count++;
+
+	return count;
+}
+
 #endif /* __LINUX_GPIO_DRIVER_H */
-- 
2.35.1


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

* [PATCH v4 03/13] pinctrl: stm32: Replace custom code by gpiochip_node_count() call
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
  2022-04-01 10:35 ` [PATCH v4 01/13] gpiolib: Introduce for_each_gpiochip_node() loop helper Andy Shevchenko
  2022-04-01 10:35 ` [PATCH v4 02/13] gpiolib: Introduce gpiochip_node_count() helper Andy Shevchenko
@ 2022-04-01 10:35 ` Andy Shevchenko
  2022-04-01 10:35 ` [PATCH v4 04/13] pinctrl: stm32: Switch to use for_each_gpiochip_node() helper Andy Shevchenko
                   ` (10 subsequent siblings)
  13 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:35 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Since we have generic function to count GPIO controller nodes
under a given device, there is no need to open code it. Replace
custom code by gpiochip_node_count() call.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Fabien Dessenne <fabien.dessenne@foss.st.com>
---
 drivers/pinctrl/stm32/pinctrl-stm32.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c
index 9ed764731570..91b9a64b649e 100644
--- a/drivers/pinctrl/stm32/pinctrl-stm32.c
+++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
@@ -1423,7 +1423,8 @@ int stm32_pctl_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	struct stm32_pinctrl *pctl;
 	struct pinctrl_pin_desc *pins;
-	int i, ret, hwlock_id, banks = 0;
+	int i, ret, hwlock_id;
+	unsigned int banks;
 
 	if (!np)
 		return -EINVAL;
@@ -1513,10 +1514,7 @@ int stm32_pctl_probe(struct platform_device *pdev)
 		return PTR_ERR(pctl->pctl_dev);
 	}
 
-	for_each_available_child_of_node(np, child)
-		if (of_property_read_bool(child, "gpio-controller"))
-			banks++;
-
+	banks = gpiochip_node_count(dev);
 	if (!banks) {
 		dev_err(dev, "at least one GPIO bank is required\n");
 		return -EINVAL;
-- 
2.35.1


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

* [PATCH v4 04/13] pinctrl: stm32: Switch to use for_each_gpiochip_node() helper
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
                   ` (2 preceding siblings ...)
  2022-04-01 10:35 ` [PATCH v4 03/13] pinctrl: stm32: Replace custom code by gpiochip_node_count() call Andy Shevchenko
@ 2022-04-01 10:35 ` Andy Shevchenko
  2022-04-01 10:35 ` [PATCH v4 05/13] pinctrl: samsung: " Andy Shevchenko
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:35 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Switch the code to use for_each_gpiochip_node() helper.

While at it, in order to avoid additional churn in the future,
switch to fwnode APIs where it makes sense.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Fabien Dessenne <fabien.dessenne@foss.st.com>
---
 drivers/pinctrl/stm32/pinctrl-stm32.c | 72 ++++++++++++---------------
 1 file changed, 33 insertions(+), 39 deletions(-)

diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c
index 91b9a64b649e..09952c463f67 100644
--- a/drivers/pinctrl/stm32/pinctrl-stm32.c
+++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
@@ -24,6 +24,7 @@
 #include <linux/pinctrl/pinctrl.h>
 #include <linux/pinctrl/pinmux.h>
 #include <linux/platform_device.h>
+#include <linux/property.h>
 #include <linux/regmap.h>
 #include <linux/reset.h>
 #include <linux/slab.h>
@@ -1215,13 +1216,12 @@ static const struct pinconf_ops stm32_pconf_ops = {
 	.pin_config_dbg_show	= stm32_pconf_dbg_show,
 };
 
-static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl,
-	struct device_node *np)
+static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode_handle *fwnode)
 {
 	struct stm32_gpio_bank *bank = &pctl->banks[pctl->nbanks];
 	int bank_ioport_nr;
 	struct pinctrl_gpio_range *range = &bank->range;
-	struct of_phandle_args args;
+	struct fwnode_reference_args args;
 	struct device *dev = pctl->dev;
 	struct resource res;
 	int npins = STM32_GPIO_PINS_PER_BANK;
@@ -1230,7 +1230,7 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl,
 	if (!IS_ERR(bank->rstc))
 		reset_control_deassert(bank->rstc);
 
-	if (of_address_to_resource(np, 0, &res))
+	if (of_address_to_resource(to_of_node(fwnode), 0, &res))
 		return -ENODEV;
 
 	bank->base = devm_ioremap_resource(dev, &res);
@@ -1245,15 +1245,15 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl,
 
 	bank->gpio_chip = stm32_gpio_template;
 
-	of_property_read_string(np, "st,bank-name", &bank->gpio_chip.label);
+	fwnode_property_read_string(fwnode, "st,bank-name", &bank->gpio_chip.label);
 
-	if (!of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, i, &args)) {
+	if (!fwnode_property_get_reference_args(fwnode, "gpio-ranges", NULL, 3, i, &args)) {
 		bank_nr = args.args[1] / STM32_GPIO_PINS_PER_BANK;
 		bank->gpio_chip.base = args.args[1];
 
 		/* get the last defined gpio line (offset + nb of pins) */
 		npins = args.args[0] + args.args[2];
-		while (!of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, ++i, &args))
+		while (!fwnode_property_get_reference_args(fwnode, "gpio-ranges", NULL, 3, ++i, &args))
 			npins = max(npins, (int)(args.args[0] + args.args[2]));
 	} else {
 		bank_nr = pctl->nbanks;
@@ -1268,20 +1268,20 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl,
 				       &pctl->banks[bank_nr].range);
 	}
 
-	if (of_property_read_u32(np, "st,bank-ioport", &bank_ioport_nr))
+	if (fwnode_property_read_u32(fwnode, "st,bank-ioport", &bank_ioport_nr))
 		bank_ioport_nr = bank_nr;
 
 	bank->gpio_chip.base = bank_nr * STM32_GPIO_PINS_PER_BANK;
 
 	bank->gpio_chip.ngpio = npins;
-	bank->gpio_chip.of_node = np;
+	bank->gpio_chip.fwnode = fwnode;
 	bank->gpio_chip.parent = dev;
 	bank->bank_nr = bank_nr;
 	bank->bank_ioport_nr = bank_ioport_nr;
 	spin_lock_init(&bank->lock);
 
 	/* create irq hierarchical domain */
-	bank->fwnode = of_node_to_fwnode(np);
+	bank->fwnode = fwnode;
 
 	bank->domain = irq_domain_create_hierarchy(pctl->domain, 0,
 					STM32_GPIO_IRQ_LINE, bank->fwnode,
@@ -1418,7 +1418,7 @@ static int stm32_pctrl_create_pins_tab(struct stm32_pinctrl *pctl,
 int stm32_pctl_probe(struct platform_device *pdev)
 {
 	struct device_node *np = pdev->dev.of_node;
-	struct device_node *child;
+	struct fwnode_handle *child;
 	const struct of_device_id *match;
 	struct device *dev = &pdev->dev;
 	struct stm32_pinctrl *pctl;
@@ -1525,40 +1525,34 @@ int stm32_pctl_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	i = 0;
-	for_each_available_child_of_node(np, child) {
+	for_each_gpiochip_node(dev, child) {
 		struct stm32_gpio_bank *bank = &pctl->banks[i];
+		struct device_node *np = to_of_node(child);
 
-		if (of_property_read_bool(child, "gpio-controller")) {
-			bank->rstc = of_reset_control_get_exclusive(child,
-								    NULL);
-			if (PTR_ERR(bank->rstc) == -EPROBE_DEFER) {
-				of_node_put(child);
-				return -EPROBE_DEFER;
-			}
-
-			bank->clk = of_clk_get_by_name(child, NULL);
-			if (IS_ERR(bank->clk)) {
-				if (PTR_ERR(bank->clk) != -EPROBE_DEFER)
-					dev_err(dev,
-						"failed to get clk (%ld)\n",
-						PTR_ERR(bank->clk));
-				of_node_put(child);
-				return PTR_ERR(bank->clk);
-			}
-			i++;
+		bank->rstc = of_reset_control_get_exclusive(np, NULL);
+		if (PTR_ERR(bank->rstc) == -EPROBE_DEFER) {
+			fwnode_handle_put(child);
+			return -EPROBE_DEFER;
 		}
-	}
 
-	for_each_available_child_of_node(np, child) {
-		if (of_property_read_bool(child, "gpio-controller")) {
-			ret = stm32_gpiolib_register_bank(pctl, child);
-			if (ret) {
-				of_node_put(child);
-				return ret;
-			}
+		bank->clk = of_clk_get_by_name(np, NULL);
+		if (IS_ERR(bank->clk)) {
+			if (PTR_ERR(bank->clk) != -EPROBE_DEFER)
+				dev_err(dev, "failed to get clk (%ld)\n", PTR_ERR(bank->clk));
+			fwnode_handle_put(child);
+			return PTR_ERR(bank->clk);
+		}
+		i++;
+	}
 
-			pctl->nbanks++;
+	for_each_gpiochip_node(dev, child) {
+		ret = stm32_gpiolib_register_bank(pctl, child);
+		if (ret) {
+			fwnode_handle_put(child);
+			return ret;
 		}
+
+		pctl->nbanks++;
 	}
 
 	dev_info(dev, "Pinctrl STM32 initialized\n");
-- 
2.35.1


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

* [PATCH v4 05/13] pinctrl: samsung: Switch to use for_each_gpiochip_node() helper
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
                   ` (3 preceding siblings ...)
  2022-04-01 10:35 ` [PATCH v4 04/13] pinctrl: stm32: Switch to use for_each_gpiochip_node() helper Andy Shevchenko
@ 2022-04-01 10:35 ` Andy Shevchenko
  2022-04-08 15:22   ` Krzysztof Kozlowski
  2022-04-11 12:21   ` Krzysztof Kozlowski
  2022-04-01 10:35 ` [PATCH v4 06/13] pinctrl: renesas: rza1: Replace custom code by gpiochip_node_count() call Andy Shevchenko
                   ` (8 subsequent siblings)
  13 siblings, 2 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:35 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Switch the code to use for_each_gpiochip_node() helper.

While at it, in order to avoid additional churn in the future,
switch to fwnode APIs where it makes sense.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/samsung/pinctrl-exynos.c  |  8 +++---
 drivers/pinctrl/samsung/pinctrl-s3c24xx.c |  2 +-
 drivers/pinctrl/samsung/pinctrl-s3c64xx.c |  4 +--
 drivers/pinctrl/samsung/pinctrl-samsung.c | 30 +++++++++++------------
 drivers/pinctrl/samsung/pinctrl-samsung.h |  2 +-
 5 files changed, 22 insertions(+), 24 deletions(-)

diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl/samsung/pinctrl-exynos.c
index c1c4ffbae6e2..6d7ca1758292 100644
--- a/drivers/pinctrl/samsung/pinctrl-exynos.c
+++ b/drivers/pinctrl/samsung/pinctrl-exynos.c
@@ -307,7 +307,7 @@ __init int exynos_eint_gpio_init(struct samsung_pinctrl_drv_data *d)
 		}
 		bank->irq_chip->chip.name = bank->name;
 
-		bank->irq_domain = irq_domain_add_linear(bank->of_node,
+		bank->irq_domain = irq_domain_create_linear(bank->fwnode,
 				bank->nr_pins, &exynos_eint_irqd_ops, bank);
 		if (!bank->irq_domain) {
 			dev_err(dev, "gpio irq domain add failed\n");
@@ -565,7 +565,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
 		}
 		bank->irq_chip->chip.name = bank->name;
 
-		bank->irq_domain = irq_domain_add_linear(bank->of_node,
+		bank->irq_domain = irq_domain_create_linear(bank->fwnode,
 				bank->nr_pins, &exynos_eint_irqd_ops, bank);
 		if (!bank->irq_domain) {
 			dev_err(dev, "wkup irq domain add failed\n");
@@ -573,7 +573,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
 			return -ENXIO;
 		}
 
-		if (!of_find_property(bank->of_node, "interrupts", NULL)) {
+		if (!fwnode_property_present(bank->fwnode, "interrupts")) {
 			bank->eint_type = EINT_TYPE_WKUP_MUX;
 			++muxed_banks;
 			continue;
@@ -588,7 +588,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
 		}
 
 		for (idx = 0; idx < bank->nr_pins; ++idx) {
-			irq = irq_of_parse_and_map(bank->of_node, idx);
+			irq = irq_of_parse_and_map(to_of_node(bank->fwnode), idx);
 			if (!irq) {
 				dev_err(dev, "irq number for eint-%s-%d not found\n",
 							bank->name, idx);
diff --git a/drivers/pinctrl/samsung/pinctrl-s3c24xx.c b/drivers/pinctrl/samsung/pinctrl-s3c24xx.c
index ac1eba30cf40..625cb1065eaf 100644
--- a/drivers/pinctrl/samsung/pinctrl-s3c24xx.c
+++ b/drivers/pinctrl/samsung/pinctrl-s3c24xx.c
@@ -525,7 +525,7 @@ static int s3c24xx_eint_init(struct samsung_pinctrl_drv_data *d)
 		ops = (bank->eint_offset == 0) ? &s3c24xx_gpf_irq_ops
 					       : &s3c24xx_gpg_irq_ops;
 
-		bank->irq_domain = irq_domain_add_linear(bank->of_node,
+		bank->irq_domain = irq_domain_create_linear(bank->fwnode,
 				bank->nr_pins, ops, ddata);
 		if (!bank->irq_domain) {
 			dev_err(dev, "wkup irq domain add failed\n");
diff --git a/drivers/pinctrl/samsung/pinctrl-s3c64xx.c b/drivers/pinctrl/samsung/pinctrl-s3c64xx.c
index c5f95a1071ae..c5d92db4fdb1 100644
--- a/drivers/pinctrl/samsung/pinctrl-s3c64xx.c
+++ b/drivers/pinctrl/samsung/pinctrl-s3c64xx.c
@@ -471,7 +471,7 @@ static int s3c64xx_eint_gpio_init(struct samsung_pinctrl_drv_data *d)
 		mask = bank->eint_mask;
 		nr_eints = fls(mask);
 
-		bank->irq_domain = irq_domain_add_linear(bank->of_node,
+		bank->irq_domain = irq_domain_create_linear(bank->fwnode,
 					nr_eints, &s3c64xx_gpio_irqd_ops, bank);
 		if (!bank->irq_domain) {
 			dev_err(dev, "gpio irq domain add failed\n");
@@ -743,7 +743,7 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d)
 			return -ENOMEM;
 		ddata->bank = bank;
 
-		bank->irq_domain = irq_domain_add_linear(bank->of_node,
+		bank->irq_domain = irq_domain_create_linear(bank->fwnode,
 				nr_eints, &s3c64xx_eint0_irqd_ops, ddata);
 		if (!bank->irq_domain) {
 			dev_err(dev, "wkup irq domain add failed\n");
diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.c b/drivers/pinctrl/samsung/pinctrl-samsung.c
index f610beab23a0..26d309d2516d 100644
--- a/drivers/pinctrl/samsung/pinctrl-samsung.c
+++ b/drivers/pinctrl/samsung/pinctrl-samsung.c
@@ -18,6 +18,7 @@
 #include <linux/init.h>
 #include <linux/platform_device.h>
 #include <linux/io.h>
+#include <linux/property.h>
 #include <linux/slab.h>
 #include <linux/err.h>
 #include <linux/gpio/driver.h>
@@ -966,7 +967,7 @@ static int samsung_gpiolib_register(struct platform_device *pdev,
 		gc->base = bank->grange.base;
 		gc->ngpio = bank->nr_pins;
 		gc->parent = &pdev->dev;
-		gc->of_node = bank->of_node;
+		gc->fwnode = bank->fwnode;
 		gc->label = bank->name;
 
 		ret = devm_gpiochip_add_data(&pdev->dev, gc, bank);
@@ -1002,27 +1003,25 @@ samsung_pinctrl_get_soc_data_for_of_alias(struct platform_device *pdev)
 	return &(of_data->ctrl[id]);
 }
 
-static void samsung_banks_of_node_put(struct samsung_pinctrl_drv_data *d)
+static void samsung_banks_node_put(struct samsung_pinctrl_drv_data *d)
 {
 	struct samsung_pin_bank *bank;
 	unsigned int i;
 
 	bank = d->pin_banks;
 	for (i = 0; i < d->nr_banks; ++i, ++bank)
-		of_node_put(bank->of_node);
+		fwnode_handle_put(bank->fwnode);
 }
 
 /*
  * Iterate over all driver pin banks to find one matching the name of node,
  * skipping optional "-gpio" node suffix. When found, assign node to the bank.
  */
-static void samsung_banks_of_node_get(struct device *dev,
-				      struct samsung_pinctrl_drv_data *d,
-				      struct device_node *node)
+static void samsung_banks_node_get(struct device *dev, struct samsung_pinctrl_drv_data *d)
 {
 	const char *suffix = "-gpio-bank";
 	struct samsung_pin_bank *bank;
-	struct device_node *child;
+	struct fwnode_handle *child;
 	/* Pin bank names are up to 4 characters */
 	char node_name[20];
 	unsigned int i;
@@ -1038,17 +1037,17 @@ static void samsung_banks_of_node_get(struct device *dev,
 			continue;
 		}
 
-		for_each_child_of_node(node, child) {
-			if (!of_find_property(child, "gpio-controller", NULL))
-				continue;
-			if (of_node_name_eq(child, node_name))
+		for_each_gpiochip_node(dev, child) {
+			struct device_node *np = to_of_node(child);
+
+			if (of_node_name_eq(np, node_name))
 				break;
-			else if (of_node_name_eq(child, bank->name))
+			if (of_node_name_eq(np, bank->name))
 				break;
 		}
 
 		if (child)
-			bank->of_node = child;
+			bank->fwnode = child;
 		else
 			dev_warn(dev, "Missing node for bank %s - invalid DTB\n",
 				 bank->name);
@@ -1061,7 +1060,6 @@ static const struct samsung_pin_ctrl *
 samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d,
 			     struct platform_device *pdev)
 {
-	struct device_node *node = pdev->dev.of_node;
 	const struct samsung_pin_bank_data *bdata;
 	const struct samsung_pin_ctrl *ctrl;
 	struct samsung_pin_bank *bank;
@@ -1125,7 +1123,7 @@ samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d,
 	 */
 	d->virt_base = virt_base[0];
 
-	samsung_banks_of_node_get(&pdev->dev, d, node);
+	samsung_banks_node_get(&pdev->dev, d);
 
 	d->pin_base = pin_base;
 	pin_base += d->nr_pins;
@@ -1186,7 +1184,7 @@ static int samsung_pinctrl_probe(struct platform_device *pdev)
 err_unregister:
 	samsung_pinctrl_unregister(pdev, drvdata);
 err_put_banks:
-	samsung_banks_of_node_put(drvdata);
+	samsung_banks_node_put(drvdata);
 	return ret;
 }
 
diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.h b/drivers/pinctrl/samsung/pinctrl-samsung.h
index 5b32d3f30fcd..fc6f5199c548 100644
--- a/drivers/pinctrl/samsung/pinctrl-samsung.h
+++ b/drivers/pinctrl/samsung/pinctrl-samsung.h
@@ -165,7 +165,7 @@ struct samsung_pin_bank {
 
 	u32		pin_base;
 	void		*soc_priv;
-	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
 	struct samsung_pinctrl_drv_data *drvdata;
 	struct irq_domain *irq_domain;
 	struct gpio_chip gpio_chip;
-- 
2.35.1


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

* [PATCH v4 06/13] pinctrl: renesas: rza1: Replace custom code by gpiochip_node_count() call
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
                   ` (4 preceding siblings ...)
  2022-04-01 10:35 ` [PATCH v4 05/13] pinctrl: samsung: " Andy Shevchenko
@ 2022-04-01 10:35 ` Andy Shevchenko
  2022-04-01 10:35 ` [PATCH v4 07/13] pinctrl: renesas: rza1: Switch to use for_each_gpiochip_node() helper Andy Shevchenko
                   ` (7 subsequent siblings)
  13 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:35 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Since we have generic function to count GPIO controller nodes
under a given device, there is no need to open code it. Replace
custom code by gpiochip_node_count() call.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 drivers/pinctrl/renesas/pinctrl-rza1.c | 17 +----------------
 1 file changed, 1 insertion(+), 16 deletions(-)

diff --git a/drivers/pinctrl/renesas/pinctrl-rza1.c b/drivers/pinctrl/renesas/pinctrl-rza1.c
index c1d6e9512c7a..acc00b1a955d 100644
--- a/drivers/pinctrl/renesas/pinctrl-rza1.c
+++ b/drivers/pinctrl/renesas/pinctrl-rza1.c
@@ -1154,21 +1154,6 @@ static const struct pinmux_ops rza1_pinmux_ops = {
  * RZ/A1 pin controller driver operations
  */
 
-static unsigned int rza1_count_gpio_chips(struct device_node *np)
-{
-	struct device_node *child;
-	unsigned int count = 0;
-
-	for_each_child_of_node(np, child) {
-		if (!of_property_read_bool(child, "gpio-controller"))
-			continue;
-
-		count++;
-	}
-
-	return count;
-}
-
 /**
  * rza1_parse_gpiochip() - parse and register a gpio chip and pin range
  *
@@ -1255,7 +1240,7 @@ static int rza1_gpio_register(struct rza1_pinctrl *rza1_pctl)
 	unsigned int i;
 	int ret;
 
-	ngpiochips = rza1_count_gpio_chips(np);
+	ngpiochips = gpiochip_node_count(rza1_pctl->dev);
 	if (ngpiochips == 0) {
 		dev_dbg(rza1_pctl->dev, "No gpiochip registered\n");
 		return 0;
-- 
2.35.1


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

* [PATCH v4 07/13] pinctrl: renesas: rza1: Switch to use for_each_gpiochip_node() helper
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
                   ` (5 preceding siblings ...)
  2022-04-01 10:35 ` [PATCH v4 06/13] pinctrl: renesas: rza1: Replace custom code by gpiochip_node_count() call Andy Shevchenko
@ 2022-04-01 10:35 ` Andy Shevchenko
  2022-04-01 10:35 ` [PATCH v4 08/13] pinctrl: npcm7xx: " Andy Shevchenko
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:35 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Switch the code to use for_each_gpiochip_node() helper.

While at it, in order to avoid additional churn in the future,
switch to fwnode APIs where it makes sense.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 drivers/pinctrl/renesas/pinctrl-rza1.c | 30 +++++++++++---------------
 1 file changed, 13 insertions(+), 17 deletions(-)

diff --git a/drivers/pinctrl/renesas/pinctrl-rza1.c b/drivers/pinctrl/renesas/pinctrl-rza1.c
index acc00b1a955d..529c0fc4ec06 100644
--- a/drivers/pinctrl/renesas/pinctrl-rza1.c
+++ b/drivers/pinctrl/renesas/pinctrl-rza1.c
@@ -24,6 +24,7 @@
 #include <linux/pinctrl/pinconf-generic.h>
 #include <linux/pinctrl/pinctrl.h>
 #include <linux/pinctrl/pinmux.h>
+#include <linux/property.h>
 #include <linux/slab.h>
 
 #include "../core.h"
@@ -1161,22 +1162,22 @@ static const struct pinmux_ops rza1_pinmux_ops = {
  * defined by gpio device tree binding documentation.
  *
  * @rza1_pctl: RZ/A1 pin controller device
- * @np: of gpio-controller node
+ * @fwnode: gpio-controller firmware node
  * @chip: gpio chip to register to gpiolib
  * @range: pin range to register to pinctrl core
  */
 static int rza1_parse_gpiochip(struct rza1_pinctrl *rza1_pctl,
-			       struct device_node *np,
+			       struct fwnode_handle *fwnode,
 			       struct gpio_chip *chip,
 			       struct pinctrl_gpio_range *range)
 {
 	const char *list_name = "gpio-ranges";
-	struct of_phandle_args of_args;
+	struct fwnode_reference_args args;
 	unsigned int gpioport;
 	u32 pinctrl_base;
 	int ret;
 
-	ret = of_parse_phandle_with_fixed_args(np, list_name, 3, 0, &of_args);
+	ret = fwnode_property_get_reference_args(fwnode, list_name, NULL, 3, 0, &args);
 	if (ret) {
 		dev_err(rza1_pctl->dev, "Unable to parse %s list property\n",
 			list_name);
@@ -1187,7 +1188,7 @@ static int rza1_parse_gpiochip(struct rza1_pinctrl *rza1_pctl,
 	 * Find out on which port this gpio-chip maps to by inspecting the
 	 * second argument of the "gpio-ranges" property.
 	 */
-	pinctrl_base = of_args.args[1];
+	pinctrl_base = args.args[1];
 	gpioport = RZA1_PIN_ID_TO_PORT(pinctrl_base);
 	if (gpioport >= RZA1_NPORTS) {
 		dev_err(rza1_pctl->dev,
@@ -1197,19 +1198,18 @@ static int rza1_parse_gpiochip(struct rza1_pinctrl *rza1_pctl,
 
 	*chip		= rza1_gpiochip_template;
 	chip->base	= -1;
-	chip->label	= devm_kasprintf(rza1_pctl->dev, GFP_KERNEL, "%pOFn",
-					 np);
+	chip->ngpio	= args.args[2];
+	chip->label	= devm_kasprintf(rza1_pctl->dev, GFP_KERNEL, "%pfwP", fwnode);
 	if (!chip->label)
 		return -ENOMEM;
 
-	chip->ngpio	= of_args.args[2];
-	chip->of_node	= np;
+	chip->fwnode	= fwnode;
 	chip->parent	= rza1_pctl->dev;
 
 	range->id	= gpioport;
 	range->name	= chip->label;
 	range->pin_base	= range->base = pinctrl_base;
-	range->npins	= of_args.args[2];
+	range->npins	= args.args[2];
 	range->gc	= chip;
 
 	ret = devm_gpiochip_add_data(rza1_pctl->dev, chip,
@@ -1232,10 +1232,9 @@ static int rza1_parse_gpiochip(struct rza1_pinctrl *rza1_pctl,
  */
 static int rza1_gpio_register(struct rza1_pinctrl *rza1_pctl)
 {
-	struct device_node *np = rza1_pctl->dev->of_node;
 	struct pinctrl_gpio_range *gpio_ranges;
 	struct gpio_chip *gpio_chips;
-	struct device_node *child;
+	struct fwnode_handle *child;
 	unsigned int ngpiochips;
 	unsigned int i;
 	int ret;
@@ -1254,14 +1253,11 @@ static int rza1_gpio_register(struct rza1_pinctrl *rza1_pctl)
 		return -ENOMEM;
 
 	i = 0;
-	for_each_child_of_node(np, child) {
-		if (!of_property_read_bool(child, "gpio-controller"))
-			continue;
-
+	for_each_gpiochip_node(rza1_pctl->dev, child) {
 		ret = rza1_parse_gpiochip(rza1_pctl, child, &gpio_chips[i],
 					  &gpio_ranges[i]);
 		if (ret) {
-			of_node_put(child);
+			fwnode_handle_put(child);
 			return ret;
 		}
 
-- 
2.35.1


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

* [PATCH v4 08/13] pinctrl: npcm7xx: Switch to use for_each_gpiochip_node() helper
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
                   ` (6 preceding siblings ...)
  2022-04-01 10:35 ` [PATCH v4 07/13] pinctrl: renesas: rza1: Switch to use for_each_gpiochip_node() helper Andy Shevchenko
@ 2022-04-01 10:35 ` Andy Shevchenko
  2022-04-01 10:36 ` [PATCH v4 09/13] pinctrl: meson: Rename REG_* to MESON_REG_* Andy Shevchenko
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:35 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Switch the code to use for_each_gpiochip_node() helper.

While at it, in order to avoid additional churn in the future,
do the following:
- use a temporary variable for struct device pointer to shorten a few lines
- get rid of a temporary variable for vIRQ number, assign it directly
- switch to fwnode APIs where it makes sense

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c | 142 ++++++++++------------
 1 file changed, 62 insertions(+), 80 deletions(-)

diff --git a/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c b/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c
index 9557fac5d11c..3cf0f8a43c37 100644
--- a/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c
+++ b/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c
@@ -17,6 +17,7 @@
 #include <linux/pinctrl/pinctrl.h>
 #include <linux/pinctrl/pinmux.h>
 #include <linux/platform_device.h>
+#include <linux/property.h>
 #include <linux/regmap.h>
 
 /* GCR registers */
@@ -1862,88 +1863,69 @@ static int npcm7xx_gpio_of(struct npcm7xx_pinctrl *pctrl)
 {
 	int ret = -ENXIO;
 	struct resource res;
-	int id = 0, irq;
-	struct device_node *np;
-	struct of_phandle_args pinspec;
-
-	for_each_available_child_of_node(pctrl->dev->of_node, np)
-		if (of_find_property(np, "gpio-controller", NULL)) {
-			ret = of_address_to_resource(np, 0, &res);
-			if (ret < 0) {
-				dev_err(pctrl->dev,
-					"Resource fail for GPIO bank %u\n", id);
-				return ret;
-			}
-
-			pctrl->gpio_bank[id].base =
-				ioremap(res.start, resource_size(&res));
-
-			irq = irq_of_parse_and_map(np, 0);
-			if (irq < 0) {
-				dev_err(pctrl->dev,
-					"No IRQ for GPIO bank %u\n", id);
-				ret = irq;
-				return ret;
-			}
-
-			ret = bgpio_init(&pctrl->gpio_bank[id].gc,
-					 pctrl->dev, 4,
-					 pctrl->gpio_bank[id].base +
-					 NPCM7XX_GP_N_DIN,
-					 pctrl->gpio_bank[id].base +
-					 NPCM7XX_GP_N_DOUT,
-					 NULL,
-					 NULL,
-					 pctrl->gpio_bank[id].base +
-					 NPCM7XX_GP_N_IEM,
-					 BGPIOF_READ_OUTPUT_REG_SET);
-			if (ret) {
-				dev_err(pctrl->dev, "bgpio_init() failed\n");
-				return ret;
-			}
-
-			ret = of_parse_phandle_with_fixed_args(np,
-							       "gpio-ranges", 3,
-							       0, &pinspec);
-			if (ret < 0) {
-				dev_err(pctrl->dev,
-					"gpio-ranges fail for GPIO bank %u\n",
-					id);
-				return ret;
-			}
-
-			pctrl->gpio_bank[id].irq = irq;
-			pctrl->gpio_bank[id].irq_chip = npcmgpio_irqchip;
-			pctrl->gpio_bank[id].gc.parent = pctrl->dev;
-			pctrl->gpio_bank[id].irqbase =
-				id * NPCM7XX_GPIO_PER_BANK;
-			pctrl->gpio_bank[id].pinctrl_id = pinspec.args[0];
-			pctrl->gpio_bank[id].gc.base = pinspec.args[1];
-			pctrl->gpio_bank[id].gc.ngpio = pinspec.args[2];
-			pctrl->gpio_bank[id].gc.owner = THIS_MODULE;
-			pctrl->gpio_bank[id].gc.label =
-				devm_kasprintf(pctrl->dev, GFP_KERNEL, "%pOF",
-					       np);
-			if (pctrl->gpio_bank[id].gc.label == NULL)
-				return -ENOMEM;
-
-			pctrl->gpio_bank[id].gc.dbg_show = npcmgpio_dbg_show;
-			pctrl->gpio_bank[id].direction_input =
-				pctrl->gpio_bank[id].gc.direction_input;
-			pctrl->gpio_bank[id].gc.direction_input =
-				npcmgpio_direction_input;
-			pctrl->gpio_bank[id].direction_output =
-				pctrl->gpio_bank[id].gc.direction_output;
-			pctrl->gpio_bank[id].gc.direction_output =
-				npcmgpio_direction_output;
-			pctrl->gpio_bank[id].request =
-				pctrl->gpio_bank[id].gc.request;
-			pctrl->gpio_bank[id].gc.request = npcmgpio_gpio_request;
-			pctrl->gpio_bank[id].gc.free = npcmgpio_gpio_free;
-			pctrl->gpio_bank[id].gc.of_node = np;
-			id++;
+	struct device *dev = pctrl->dev;
+	struct fwnode_reference_args args;
+	struct fwnode_handle *child;
+	int id = 0;
+
+	for_each_gpiochip_node(dev, child) {
+		struct device_node *np = to_of_node(child);
+
+		ret = of_address_to_resource(np, 0, &res);
+		if (ret < 0) {
+			dev_err(dev, "Resource fail for GPIO bank %u\n", id);
+			return ret;
+		}
+
+		pctrl->gpio_bank[id].base = ioremap(res.start, resource_size(&res));
+
+		ret = bgpio_init(&pctrl->gpio_bank[id].gc, dev, 4,
+				 pctrl->gpio_bank[id].base + NPCM7XX_GP_N_DIN,
+				 pctrl->gpio_bank[id].base + NPCM7XX_GP_N_DOUT,
+				 NULL,
+				 NULL,
+				 pctrl->gpio_bank[id].base + NPCM7XX_GP_N_IEM,
+				 BGPIOF_READ_OUTPUT_REG_SET);
+		if (ret) {
+			dev_err(dev, "bgpio_init() failed\n");
+			return ret;
 		}
 
+		ret = fwnode_property_get_reference_args(child, "gpio-ranges", NULL, 3, 0, &args);
+		if (ret < 0) {
+			dev_err(dev, "gpio-ranges fail for GPIO bank %u\n", id);
+			return ret;
+		}
+
+		ret = irq_of_parse_and_map(np, 0);
+		if (ret < 0) {
+			dev_err(dev, "No IRQ for GPIO bank %u\n", id);
+			return ret;
+		}
+		pctrl->gpio_bank[id].irq = ret;
+		pctrl->gpio_bank[id].irq_chip = npcmgpio_irqchip;
+		pctrl->gpio_bank[id].irqbase = id * NPCM7XX_GPIO_PER_BANK;
+		pctrl->gpio_bank[id].pinctrl_id = args.args[0];
+		pctrl->gpio_bank[id].gc.base = args.args[1];
+		pctrl->gpio_bank[id].gc.ngpio = args.args[2];
+		pctrl->gpio_bank[id].gc.owner = THIS_MODULE;
+		pctrl->gpio_bank[id].gc.parent = dev;
+		pctrl->gpio_bank[id].gc.fwnode = child;
+		pctrl->gpio_bank[id].gc.label = devm_kasprintf(dev, GFP_KERNEL, "%pfw", child);
+		if (pctrl->gpio_bank[id].gc.label == NULL)
+			return -ENOMEM;
+
+		pctrl->gpio_bank[id].gc.dbg_show = npcmgpio_dbg_show;
+		pctrl->gpio_bank[id].direction_input = pctrl->gpio_bank[id].gc.direction_input;
+		pctrl->gpio_bank[id].gc.direction_input = npcmgpio_direction_input;
+		pctrl->gpio_bank[id].direction_output = pctrl->gpio_bank[id].gc.direction_output;
+		pctrl->gpio_bank[id].gc.direction_output = npcmgpio_direction_output;
+		pctrl->gpio_bank[id].request = pctrl->gpio_bank[id].gc.request;
+		pctrl->gpio_bank[id].gc.request = npcmgpio_gpio_request;
+		pctrl->gpio_bank[id].gc.free = npcmgpio_gpio_free;
+		id++;
+	}
+
 	pctrl->bank_num = id;
 	return ret;
 }
-- 
2.35.1


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

* [PATCH v4 09/13] pinctrl: meson: Rename REG_* to MESON_REG_*
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
                   ` (7 preceding siblings ...)
  2022-04-01 10:35 ` [PATCH v4 08/13] pinctrl: npcm7xx: " Andy Shevchenko
@ 2022-04-01 10:36 ` Andy Shevchenko
  2022-04-11  9:04   ` Geert Uytterhoeven
  2022-04-01 10:36 ` [PATCH v4 10/13] pinctrl: meson: Enable COMPILE_TEST Andy Shevchenko
                   ` (4 subsequent siblings)
  13 siblings, 1 reply; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:36 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Currently compilation test fails on x86 due to name collision. The usual
way to fix that is to move both conflicting parts to their own namespaces.

Rename REG_* to MESON_REG_* as a prerequisite for enabling COMPILE_TEST.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/meson/pinctrl-meson.c | 24 ++++++++++++------------
 drivers/pinctrl/meson/pinctrl-meson.h | 24 ++++++++++++------------
 2 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c
index 49851444a6e3..5b46a0979db7 100644
--- a/drivers/pinctrl/meson/pinctrl-meson.c
+++ b/drivers/pinctrl/meson/pinctrl-meson.c
@@ -218,13 +218,13 @@ static int meson_pinconf_set_output(struct meson_pinctrl *pc,
 				    unsigned int pin,
 				    bool out)
 {
-	return meson_pinconf_set_gpio_bit(pc, pin, REG_DIR, !out);
+	return meson_pinconf_set_gpio_bit(pc, pin, MESON_REG_DIR, !out);
 }
 
 static int meson_pinconf_get_output(struct meson_pinctrl *pc,
 				    unsigned int pin)
 {
-	int ret = meson_pinconf_get_gpio_bit(pc, pin, REG_DIR);
+	int ret = meson_pinconf_get_gpio_bit(pc, pin, MESON_REG_DIR);
 
 	if (ret < 0)
 		return ret;
@@ -236,13 +236,13 @@ static int meson_pinconf_set_drive(struct meson_pinctrl *pc,
 				   unsigned int pin,
 				   bool high)
 {
-	return meson_pinconf_set_gpio_bit(pc, pin, REG_OUT, high);
+	return meson_pinconf_set_gpio_bit(pc, pin, MESON_REG_OUT, high);
 }
 
 static int meson_pinconf_get_drive(struct meson_pinctrl *pc,
 				   unsigned int pin)
 {
-	return meson_pinconf_get_gpio_bit(pc, pin, REG_OUT);
+	return meson_pinconf_get_gpio_bit(pc, pin, MESON_REG_OUT);
 }
 
 static int meson_pinconf_set_output_drive(struct meson_pinctrl *pc,
@@ -269,7 +269,7 @@ static int meson_pinconf_disable_bias(struct meson_pinctrl *pc,
 	if (ret)
 		return ret;
 
-	meson_calc_reg_and_bit(bank, pin, REG_PULLEN, &reg, &bit);
+	meson_calc_reg_and_bit(bank, pin, MESON_REG_PULLEN, &reg, &bit);
 	ret = regmap_update_bits(pc->reg_pullen, reg, BIT(bit), 0);
 	if (ret)
 		return ret;
@@ -288,7 +288,7 @@ static int meson_pinconf_enable_bias(struct meson_pinctrl *pc, unsigned int pin,
 	if (ret)
 		return ret;
 
-	meson_calc_reg_and_bit(bank, pin, REG_PULL, &reg, &bit);
+	meson_calc_reg_and_bit(bank, pin, MESON_REG_PULL, &reg, &bit);
 	if (pull_up)
 		val = BIT(bit);
 
@@ -296,7 +296,7 @@ static int meson_pinconf_enable_bias(struct meson_pinctrl *pc, unsigned int pin,
 	if (ret)
 		return ret;
 
-	meson_calc_reg_and_bit(bank, pin, REG_PULLEN, &reg, &bit);
+	meson_calc_reg_and_bit(bank, pin, MESON_REG_PULLEN, &reg, &bit);
 	ret = regmap_update_bits(pc->reg_pullen, reg, BIT(bit),	BIT(bit));
 	if (ret)
 		return ret;
@@ -321,7 +321,7 @@ static int meson_pinconf_set_drive_strength(struct meson_pinctrl *pc,
 	if (ret)
 		return ret;
 
-	meson_calc_reg_and_bit(bank, pin, REG_DS, &reg, &bit);
+	meson_calc_reg_and_bit(bank, pin, MESON_REG_DS, &reg, &bit);
 
 	if (drive_strength_ua <= 500) {
 		ds_val = MESON_PINCONF_DRV_500UA;
@@ -407,7 +407,7 @@ static int meson_pinconf_get_pull(struct meson_pinctrl *pc, unsigned int pin)
 	if (ret)
 		return ret;
 
-	meson_calc_reg_and_bit(bank, pin, REG_PULLEN, &reg, &bit);
+	meson_calc_reg_and_bit(bank, pin, MESON_REG_PULLEN, &reg, &bit);
 
 	ret = regmap_read(pc->reg_pullen, reg, &val);
 	if (ret)
@@ -416,7 +416,7 @@ static int meson_pinconf_get_pull(struct meson_pinctrl *pc, unsigned int pin)
 	if (!(val & BIT(bit))) {
 		conf = PIN_CONFIG_BIAS_DISABLE;
 	} else {
-		meson_calc_reg_and_bit(bank, pin, REG_PULL, &reg, &bit);
+		meson_calc_reg_and_bit(bank, pin, MESON_REG_PULL, &reg, &bit);
 
 		ret = regmap_read(pc->reg_pull, reg, &val);
 		if (ret)
@@ -447,7 +447,7 @@ static int meson_pinconf_get_drive_strength(struct meson_pinctrl *pc,
 	if (ret)
 		return ret;
 
-	meson_calc_reg_and_bit(bank, pin, REG_DS, &reg, &bit);
+	meson_calc_reg_and_bit(bank, pin, MESON_REG_DS, &reg, &bit);
 
 	ret = regmap_read(pc->reg_ds, reg, &val);
 	if (ret)
@@ -595,7 +595,7 @@ static int meson_gpio_get(struct gpio_chip *chip, unsigned gpio)
 	if (ret)
 		return ret;
 
-	meson_calc_reg_and_bit(bank, gpio, REG_IN, &reg, &bit);
+	meson_calc_reg_and_bit(bank, gpio, MESON_REG_IN, &reg, &bit);
 	regmap_read(pc->reg_gpio, reg, &val);
 
 	return !!(val & BIT(bit));
diff --git a/drivers/pinctrl/meson/pinctrl-meson.h b/drivers/pinctrl/meson/pinctrl-meson.h
index ff5372e0a475..fa042cd6a7ff 100644
--- a/drivers/pinctrl/meson/pinctrl-meson.h
+++ b/drivers/pinctrl/meson/pinctrl-meson.h
@@ -63,12 +63,12 @@ struct meson_reg_desc {
  * enum meson_reg_type - type of registers encoded in @meson_reg_desc
  */
 enum meson_reg_type {
-	REG_PULLEN,
-	REG_PULL,
-	REG_DIR,
-	REG_OUT,
-	REG_IN,
-	REG_DS,
+	MESON_REG_PULLEN,
+	MESON_REG_PULL,
+	MESON_REG_DIR,
+	MESON_REG_OUT,
+	MESON_REG_IN,
+	MESON_REG_DS,
 	NUM_REG,
 };
 
@@ -150,12 +150,12 @@ struct meson_pinctrl {
 		.irq_first	= fi,					\
 		.irq_last	= li,					\
 		.regs = {						\
-			[REG_PULLEN]	= { per, peb },			\
-			[REG_PULL]	= { pr, pb },			\
-			[REG_DIR]	= { dr, db },			\
-			[REG_OUT]	= { or, ob },			\
-			[REG_IN]	= { ir, ib },			\
-			[REG_DS]	= { dsr, dsb },			\
+			[MESON_REG_PULLEN]	= { per, peb },		\
+			[MESON_REG_PULL]	= { pr, pb },		\
+			[MESON_REG_DIR]		= { dr, db },		\
+			[MESON_REG_OUT]		= { or, ob },		\
+			[MESON_REG_IN]		= { ir, ib },		\
+			[MESON_REG_DS]		= { dsr, dsb },		\
 		},							\
 	 }
 
-- 
2.35.1


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

* [PATCH v4 10/13] pinctrl: meson: Enable COMPILE_TEST
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
                   ` (8 preceding siblings ...)
  2022-04-01 10:36 ` [PATCH v4 09/13] pinctrl: meson: Rename REG_* to MESON_REG_* Andy Shevchenko
@ 2022-04-01 10:36 ` Andy Shevchenko
  2022-04-01 10:36 ` [PATCH v4 11/13] pinctrl: meson: Replace custom code by gpiochip_node_count() call Andy Shevchenko
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:36 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Enable COMPILE_TEST for a better test coverage.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
---
 drivers/pinctrl/meson/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pinctrl/meson/Kconfig b/drivers/pinctrl/meson/Kconfig
index d1955c65b4b6..64fb9e074ac6 100644
--- a/drivers/pinctrl/meson/Kconfig
+++ b/drivers/pinctrl/meson/Kconfig
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0-only
 menuconfig PINCTRL_MESON
 	tristate "Amlogic SoC pinctrl drivers"
-	depends on ARCH_MESON
+	depends on ARCH_MESON || COMPILE_TEST
 	depends on OF
 	default y
 	select PINMUX
-- 
2.35.1


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

* [PATCH v4 11/13] pinctrl: meson: Replace custom code by gpiochip_node_count() call
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
                   ` (9 preceding siblings ...)
  2022-04-01 10:36 ` [PATCH v4 10/13] pinctrl: meson: Enable COMPILE_TEST Andy Shevchenko
@ 2022-04-01 10:36 ` Andy Shevchenko
       [not found]   ` <CGME20220414063849eucas1p126e41b53ff0d342f5c48408994b704e9@eucas1p1.samsung.com>
  2022-04-01 10:36 ` [PATCH v4 12/13] pinctrl: armada-37xx: Switch to use fwnode instead of of_node Andy Shevchenko
                   ` (2 subsequent siblings)
  13 siblings, 1 reply; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:36 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Since we have generic function to count GPIO controller nodes
under a given device, there is no need to open code it. Replace
custom code by gpiochip_node_count() call.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
---
 drivers/pinctrl/meson/pinctrl-meson.c | 28 ++++++++++++---------------
 1 file changed, 12 insertions(+), 16 deletions(-)

diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c
index 5b46a0979db7..1b078da81523 100644
--- a/drivers/pinctrl/meson/pinctrl-meson.c
+++ b/drivers/pinctrl/meson/pinctrl-meson.c
@@ -49,6 +49,7 @@
 #include <linux/pinctrl/pinctrl.h>
 #include <linux/pinctrl/pinmux.h>
 #include <linux/platform_device.h>
+#include <linux/property.h>
 #include <linux/regmap.h>
 #include <linux/seq_file.h>
 
@@ -662,27 +663,22 @@ static struct regmap *meson_map_resource(struct meson_pinctrl *pc,
 	return devm_regmap_init_mmio(pc->dev, base, &meson_regmap_config);
 }
 
-static int meson_pinctrl_parse_dt(struct meson_pinctrl *pc,
-				  struct device_node *node)
+static int meson_pinctrl_parse_dt(struct meson_pinctrl *pc)
 {
-	struct device_node *np, *gpio_np = NULL;
+	struct device_node *gpio_np;
+	unsigned int chips;
 
-	for_each_child_of_node(node, np) {
-		if (!of_find_property(np, "gpio-controller", NULL))
-			continue;
-		if (gpio_np) {
-			dev_err(pc->dev, "multiple gpio nodes\n");
-			of_node_put(np);
-			return -EINVAL;
-		}
-		gpio_np = np;
-	}
-
-	if (!gpio_np) {
+	chips = gpiochip_node_count(pc->dev);
+	if (!chips) {
 		dev_err(pc->dev, "no gpio node found\n");
 		return -EINVAL;
 	}
+	if (chips > 1) {
+		dev_err(pc->dev, "multiple gpio nodes\n");
+		return -EINVAL;
+	}
 
+	gpio_np = to_of_node(device_get_named_child_node(pc->dev, "gpio-controller"));
 	pc->of_node = gpio_np;
 
 	pc->reg_mux = meson_map_resource(pc, gpio_np, "mux");
@@ -751,7 +747,7 @@ int meson_pinctrl_probe(struct platform_device *pdev)
 	pc->dev = dev;
 	pc->data = (struct meson_pinctrl_data *) of_device_get_match_data(dev);
 
-	ret = meson_pinctrl_parse_dt(pc, dev->of_node);
+	ret = meson_pinctrl_parse_dt(pc);
 	if (ret)
 		return ret;
 
-- 
2.35.1


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

* [PATCH v4 12/13] pinctrl: armada-37xx: Switch to use fwnode instead of of_node
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
                   ` (10 preceding siblings ...)
  2022-04-01 10:36 ` [PATCH v4 11/13] pinctrl: meson: Replace custom code by gpiochip_node_count() call Andy Shevchenko
@ 2022-04-01 10:36 ` Andy Shevchenko
  2022-04-01 10:36 ` [PATCH v4 13/13] pinctrl: armada-37xx: Reuse GPIO fwnode in armada_37xx_irqchip_register() Andy Shevchenko
  2022-04-11 11:59 ` [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
  13 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:36 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

GPIO library now accepts fwnode as a firmware node,
so switch the driver to use it.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index 08cad14042e2..1fef8a38f574 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -21,6 +21,7 @@
 #include <linux/pinctrl/pinctrl.h>
 #include <linux/pinctrl/pinmux.h>
 #include <linux/platform_device.h>
+#include <linux/property.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
 #include <linux/string_helpers.h>
@@ -787,18 +788,13 @@ static int armada_37xx_gpiochip_register(struct platform_device *pdev,
 					struct armada_37xx_pinctrl *info)
 {
 	struct device *dev = &pdev->dev;
-	struct device_node *np;
+	struct fwnode_handle *fwnode;
 	struct gpio_chip *gc;
-	int ret = -ENODEV;
+	int ret;
 
-	for_each_child_of_node(dev->of_node, np) {
-		if (of_find_property(np, "gpio-controller", NULL)) {
-			ret = 0;
-			break;
-		}
-	}
-	if (ret)
-		return ret;
+	fwnode = device_get_named_child_node(dev, "gpio-controller");
+	if (!fwnode)
+		return -ENODEV;
 
 	info->gpio_chip = armada_37xx_gpiolib_chip;
 
@@ -806,7 +802,7 @@ static int armada_37xx_gpiochip_register(struct platform_device *pdev,
 	gc->ngpio = info->data->nr_pins;
 	gc->parent = dev;
 	gc->base = -1;
-	gc->of_node = np;
+	gc->fwnode = fwnode;
 	gc->label = info->data->name;
 
 	ret = armada_37xx_irqchip_register(pdev, info);
-- 
2.35.1


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

* [PATCH v4 13/13] pinctrl: armada-37xx: Reuse GPIO fwnode in armada_37xx_irqchip_register()
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
                   ` (11 preceding siblings ...)
  2022-04-01 10:36 ` [PATCH v4 12/13] pinctrl: armada-37xx: Switch to use fwnode instead of of_node Andy Shevchenko
@ 2022-04-01 10:36 ` Andy Shevchenko
  2022-04-11 11:59 ` [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
  13 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-01 10:36 UTC (permalink / raw)
  To: Qianggui Song, Andy Shevchenko, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Since we have fwnode of the first found GPIO controller assigned to the
struct gpio_chip, we may reuse it in the armada_37xx_irqchip_register().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 16 +++-------------
 1 file changed, 3 insertions(+), 13 deletions(-)

diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index 1fef8a38f574..c0384661ea48 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -727,23 +727,13 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
 	struct gpio_chip *gc = &info->gpio_chip;
 	struct irq_chip *irqchip = &info->irq_chip;
 	struct gpio_irq_chip *girq = &gc->irq;
+	struct device_node *np = to_of_node(gc->fwnode);
 	struct device *dev = &pdev->dev;
-	struct device_node *np;
-	int ret = -ENODEV, i, nr_irq_parent;
-
-	/* Check if we have at least one gpio-controller child node */
-	for_each_child_of_node(dev->of_node, np) {
-		if (of_property_read_bool(np, "gpio-controller")) {
-			ret = 0;
-			break;
-		}
-	}
-	if (ret)
-		return dev_err_probe(dev, ret, "no gpio-controller child node\n");
+	unsigned int i, nr_irq_parent;
 
-	nr_irq_parent = of_irq_count(np);
 	spin_lock_init(&info->irq_lock);
 
+	nr_irq_parent = of_irq_count(np);
 	if (!nr_irq_parent) {
 		dev_err(dev, "invalid or no IRQ\n");
 		return 0;
-- 
2.35.1


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

* Re: [PATCH v4 01/13] gpiolib: Introduce for_each_gpiochip_node() loop helper
  2022-04-01 10:35 ` [PATCH v4 01/13] gpiolib: Introduce for_each_gpiochip_node() loop helper Andy Shevchenko
@ 2022-04-05 12:12   ` Bartosz Golaszewski
  0 siblings, 0 replies; 33+ messages in thread
From: Bartosz Golaszewski @ 2022-04-05 12:12 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Qianggui Song, Geert Uytterhoeven, Krzysztof Kozlowski,
	Marc Zyngier, Fabien Dessenne, Linus Walleij,
	open list:GPIO SUBSYSTEM, Linux ARM, linux-amlogic,
	Linux Kernel Mailing List, OpenBMC Maillist, Linux-Renesas,
	linux-samsung-soc, linux-stm32, Neil Armstrong, Kevin Hilman,
	Jerome Brunet, Martin Blumenstingl, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Philipp Zabel

On Fri, Apr 1, 2022 at 12:36 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> Introduce for_each_gpiochip_node() loop helper which iterates over
> the GPIO controller child nodes of a given device.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
>  include/linux/gpio/driver.h | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
> index 98c93510640e..bfc91f122d5f 100644
> --- a/include/linux/gpio/driver.h
> +++ b/include/linux/gpio/driver.h
> @@ -3,13 +3,14 @@
>  #define __LINUX_GPIO_DRIVER_H
>
>  #include <linux/device.h>
> -#include <linux/types.h>
>  #include <linux/irq.h>
>  #include <linux/irqchip/chained_irq.h>
>  #include <linux/irqdomain.h>
>  #include <linux/lockdep.h>
>  #include <linux/pinctrl/pinctrl.h>
>  #include <linux/pinctrl/pinconf-generic.h>
> +#include <linux/property.h>
> +#include <linux/types.h>
>
>  struct gpio_desc;
>  struct of_phandle_args;
> @@ -750,4 +751,8 @@ static inline void gpiochip_unlock_as_irq(struct gpio_chip *gc,
>  }
>  #endif /* CONFIG_GPIOLIB */
>
> +#define for_each_gpiochip_node(dev, child)                                     \
> +       device_for_each_child_node(dev, child)                                  \
> +               if (!fwnode_property_present(child, "gpio-controller")) {} else
> +
>  #endif /* __LINUX_GPIO_DRIVER_H */
> --
> 2.35.1
>

Acked-by: Bartosz Golaszewski <brgl@bgdev.pl>

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

* Re: [PATCH v4 02/13] gpiolib: Introduce gpiochip_node_count() helper
  2022-04-01 10:35 ` [PATCH v4 02/13] gpiolib: Introduce gpiochip_node_count() helper Andy Shevchenko
@ 2022-04-05 12:13   ` Bartosz Golaszewski
  0 siblings, 0 replies; 33+ messages in thread
From: Bartosz Golaszewski @ 2022-04-05 12:13 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Qianggui Song, Geert Uytterhoeven, Krzysztof Kozlowski,
	Marc Zyngier, Fabien Dessenne, Linus Walleij,
	open list:GPIO SUBSYSTEM, Linux ARM, linux-amlogic,
	Linux Kernel Mailing List, OpenBMC Maillist, Linux-Renesas,
	linux-samsung-soc, linux-stm32, Neil Armstrong, Kevin Hilman,
	Jerome Brunet, Martin Blumenstingl, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Philipp Zabel

On Fri, Apr 1, 2022 at 12:36 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> The gpiochip_node_count() helper iterates over the device child nodes that
> have the "gpio-controller" property set. It returns the number of such nodes
> under a given device.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
>  include/linux/gpio/driver.h | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
> index bfc91f122d5f..12de0b22b4ef 100644
> --- a/include/linux/gpio/driver.h
> +++ b/include/linux/gpio/driver.h
> @@ -755,4 +755,15 @@ static inline void gpiochip_unlock_as_irq(struct gpio_chip *gc,
>         device_for_each_child_node(dev, child)                                  \
>                 if (!fwnode_property_present(child, "gpio-controller")) {} else
>
> +static inline unsigned int gpiochip_node_count(struct device *dev)
> +{
> +       struct fwnode_handle *child;
> +       unsigned int count = 0;
> +
> +       for_each_gpiochip_node(dev, child)
> +               count++;
> +
> +       return count;
> +}
> +
>  #endif /* __LINUX_GPIO_DRIVER_H */
> --
> 2.35.1
>

Acked-by: Bartosz Golaszewski <brgl@bgdev.pl>

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

* Re: [PATCH v4 05/13] pinctrl: samsung: Switch to use for_each_gpiochip_node() helper
  2022-04-01 10:35 ` [PATCH v4 05/13] pinctrl: samsung: " Andy Shevchenko
@ 2022-04-08 15:22   ` Krzysztof Kozlowski
  2022-04-08 15:39     ` Andy Shevchenko
  2022-04-11 12:21   ` Krzysztof Kozlowski
  1 sibling, 1 reply; 33+ messages in thread
From: Krzysztof Kozlowski @ 2022-04-08 15:22 UTC (permalink / raw)
  To: Andy Shevchenko, Qianggui Song, Geert Uytterhoeven, Marc Zyngier,
	Fabien Dessenne, Linus Walleij, linux-gpio, linux-arm-kernel,
	linux-amlogic, linux-kernel, openbmc, linux-renesas-soc,
	linux-samsung-soc, linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

On 01/04/2022 12:35, Andy Shevchenko wrote:
> Switch the code to use for_each_gpiochip_node() helper.
> 

(...)

>  /*
>   * Iterate over all driver pin banks to find one matching the name of node,
>   * skipping optional "-gpio" node suffix. When found, assign node to the bank.
>   */
> -static void samsung_banks_of_node_get(struct device *dev,
> -				      struct samsung_pinctrl_drv_data *d,
> -				      struct device_node *node)
> +static void samsung_banks_node_get(struct device *dev, struct samsung_pinctrl_drv_data *d)

This is worth simplification anyway, so please split it to separate patch.

>  {
>  	const char *suffix = "-gpio-bank";
>  	struct samsung_pin_bank *bank;
> -	struct device_node *child;
> +	struct fwnode_handle *child;
>  	/* Pin bank names are up to 4 characters */
>  	char node_name[20];
>  	unsigned int i;
> @@ -1038,17 +1037,17 @@ static void samsung_banks_of_node_get(struct device *dev,
>  			continue;
>  		}
>  
> -		for_each_child_of_node(node, child) {
> -			if (!of_find_property(child, "gpio-controller", NULL))
> -				continue;

This does not look equivalent. There are nodes without this property.

> -			if (of_node_name_eq(child, node_name))
> +		for_each_gpiochip_node(dev, child) {
> +			struct device_node *np = to_of_node(child);
> +
> +			if (of_node_name_eq(np, node_name))
>  				break;
> -			else if (of_node_name_eq(child, bank->name))
> +			if (of_node_name_eq(np, bank->name))
>  				break;
>  		}

This patch has to wait till someone provides you a tested-by. I might do
it around next week.

Best regards,
Krzysztof

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

* Re: [PATCH v4 05/13] pinctrl: samsung: Switch to use for_each_gpiochip_node() helper
  2022-04-08 15:22   ` Krzysztof Kozlowski
@ 2022-04-08 15:39     ` Andy Shevchenko
  2022-04-09 13:33       ` Krzysztof Kozlowski
  0 siblings, 1 reply; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-08 15:39 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Qianggui Song, Geert Uytterhoeven, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32, Neil Armstrong, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Bartosz Golaszewski, Philipp Zabel

On Fri, Apr 08, 2022 at 05:22:21PM +0200, Krzysztof Kozlowski wrote:
> On 01/04/2022 12:35, Andy Shevchenko wrote:
> > Switch the code to use for_each_gpiochip_node() helper.

(...)

> >  /*
> >   * Iterate over all driver pin banks to find one matching the name of node,
> >   * skipping optional "-gpio" node suffix. When found, assign node to the bank.
> >   */
> > -static void samsung_banks_of_node_get(struct device *dev,
> > -				      struct samsung_pinctrl_drv_data *d,
> > -				      struct device_node *node)
> > +static void samsung_banks_node_get(struct device *dev, struct samsung_pinctrl_drv_data *d)
> 
> This is worth simplification anyway, so please split it to separate patch.

Not sure what to do and why it worth an additional churn.

> >  {
> >  	const char *suffix = "-gpio-bank";
> >  	struct samsung_pin_bank *bank;
> > -	struct device_node *child;
> > +	struct fwnode_handle *child;
> >  	/* Pin bank names are up to 4 characters */
> >  	char node_name[20];
> >  	unsigned int i;
> > @@ -1038,17 +1037,17 @@ static void samsung_banks_of_node_get(struct device *dev,
> >  			continue;
> >  		}
> >  
> > -		for_each_child_of_node(node, child) {
> > -			if (!of_find_property(child, "gpio-controller", NULL))
> > -				continue;
> 
> This does not look equivalent. There are nodes without this property.

Not sure I understand why not. The macro checks for the property and
iterates over nodes that have this property.

Can you elaborate, please?

> > -			if (of_node_name_eq(child, node_name))
> > +		for_each_gpiochip_node(dev, child) {
> > +			struct device_node *np = to_of_node(child);
> > +
> > +			if (of_node_name_eq(np, node_name))
> >  				break;
> > -			else if (of_node_name_eq(child, bank->name))
> > +			if (of_node_name_eq(np, bank->name))
> >  				break;
> >  		}
> 
> This patch has to wait till someone provides you a tested-by. I might do
> it around next week.

Fine with me, I will drop it from my repo for now.

Thanks for review!

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH v4 05/13] pinctrl: samsung: Switch to use for_each_gpiochip_node() helper
  2022-04-08 15:39     ` Andy Shevchenko
@ 2022-04-09 13:33       ` Krzysztof Kozlowski
  2022-04-11 11:56         ` Andy Shevchenko
  0 siblings, 1 reply; 33+ messages in thread
From: Krzysztof Kozlowski @ 2022-04-09 13:33 UTC (permalink / raw)
  To: Andy Shevchenko, Krzysztof Kozlowski
  Cc: Qianggui Song, Geert Uytterhoeven, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32, Neil Armstrong, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Bartosz Golaszewski, Philipp Zabel

On 08/04/2022 17:39, Andy Shevchenko wrote:
> On Fri, Apr 08, 2022 at 05:22:21PM +0200, Krzysztof Kozlowski wrote:
>> On 01/04/2022 12:35, Andy Shevchenko wrote:
>>> Switch the code to use for_each_gpiochip_node() helper.
> 
> (...)
> 
>>>  /*
>>>   * Iterate over all driver pin banks to find one matching the name of node,
>>>   * skipping optional "-gpio" node suffix. When found, assign node to the bank.
>>>   */
>>> -static void samsung_banks_of_node_get(struct device *dev,
>>> -				      struct samsung_pinctrl_drv_data *d,
>>> -				      struct device_node *node)
>>> +static void samsung_banks_node_get(struct device *dev, struct samsung_pinctrl_drv_data *d)
>>
>> This is worth simplification anyway, so please split it to separate patch.
> 
> Not sure what to do and why it worth an additional churn.

Makes this change smaller so it's easier to review.

> 
>>>  {
>>>  	const char *suffix = "-gpio-bank";
>>>  	struct samsung_pin_bank *bank;
>>> -	struct device_node *child;
>>> +	struct fwnode_handle *child;
>>>  	/* Pin bank names are up to 4 characters */
>>>  	char node_name[20];
>>>  	unsigned int i;
>>> @@ -1038,17 +1037,17 @@ static void samsung_banks_of_node_get(struct device *dev,
>>>  			continue;
>>>  		}
>>>  
>>> -		for_each_child_of_node(node, child) {
>>> -			if (!of_find_property(child, "gpio-controller", NULL))
>>> -				continue;
>>
>> This does not look equivalent. There are nodes without this property.
> 
> Not sure I understand why not. The macro checks for the property and
> iterates over nodes that have this property.
> 
> Can you elaborate, please?

Eh, my bad, it is equivalent.

> 
>>> -			if (of_node_name_eq(child, node_name))
>>> +		for_each_gpiochip_node(dev, child) {
>>> +			struct device_node *np = to_of_node(child);
>>> +
>>> +			if (of_node_name_eq(np, node_name))
>>>  				break;
>>> -			else if (of_node_name_eq(child, bank->name))
>>> +			if (of_node_name_eq(np, bank->name))
>>>  				break;
>>>  		}
>>
>> This patch has to wait till someone provides you a tested-by. I might do
>> it around next week.
> 
> Fine with me, I will drop it from my repo for now.


Best regards,
Krzysztof

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

* Re: [PATCH v4 09/13] pinctrl: meson: Rename REG_* to MESON_REG_*
  2022-04-01 10:36 ` [PATCH v4 09/13] pinctrl: meson: Rename REG_* to MESON_REG_* Andy Shevchenko
@ 2022-04-11  9:04   ` Geert Uytterhoeven
  2022-04-11 10:19     ` Andy Shevchenko
  0 siblings, 1 reply; 33+ messages in thread
From: Geert Uytterhoeven @ 2022-04-11  9:04 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Qianggui Song, Krzysztof Kozlowski, Marc Zyngier,
	Fabien Dessenne, Linus Walleij, open list:GPIO SUBSYSTEM,
	Linux ARM, open list:ARM/Amlogic Meson...,
	Linux Kernel Mailing List, openbmc, Linux-Renesas,
	linux-samsung-soc, linux-stm32, Neil Armstrong, Kevin Hilman,
	Jerome Brunet, Martin Blumenstingl, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Bartosz Golaszewski, Philipp Zabel

Hi Andy,

On Fri, Apr 1, 2022 at 12:36 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
> Currently compilation test fails on x86 due to name collision. The usual
> way to fix that is to move both conflicting parts to their own namespaces.
>
> Rename REG_* to MESON_REG_* as a prerequisite for enabling COMPILE_TEST.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Thanks for your patch!

> --- a/drivers/pinctrl/meson/pinctrl-meson.h
> +++ b/drivers/pinctrl/meson/pinctrl-meson.h
> @@ -63,12 +63,12 @@ struct meson_reg_desc {
>   * enum meson_reg_type - type of registers encoded in @meson_reg_desc
>   */
>  enum meson_reg_type {
> -       REG_PULLEN,
> -       REG_PULL,
> -       REG_DIR,
> -       REG_OUT,
> -       REG_IN,
> -       REG_DS,
> +       MESON_REG_PULLEN,
> +       MESON_REG_PULL,
> +       MESON_REG_DIR,
> +       MESON_REG_OUT,
> +       MESON_REG_IN,
> +       MESON_REG_DS,
>         NUM_REG,

MESON_NUM_REG?

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v4 09/13] pinctrl: meson: Rename REG_* to MESON_REG_*
  2022-04-11  9:04   ` Geert Uytterhoeven
@ 2022-04-11 10:19     ` Andy Shevchenko
  2022-04-11 11:41       ` Andy Shevchenko
  0 siblings, 1 reply; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-11 10:19 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Qianggui Song, Krzysztof Kozlowski, Marc Zyngier,
	Fabien Dessenne, Linus Walleij, open list:GPIO SUBSYSTEM,
	Linux ARM, open list:ARM/Amlogic Meson...,
	Linux Kernel Mailing List, openbmc, Linux-Renesas,
	linux-samsung-soc, linux-stm32, Neil Armstrong, Kevin Hilman,
	Jerome Brunet, Martin Blumenstingl, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Bartosz Golaszewski, Philipp Zabel

On Mon, Apr 11, 2022 at 11:04:00AM +0200, Geert Uytterhoeven wrote:
> On Fri, Apr 1, 2022 at 12:36 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> > Currently compilation test fails on x86 due to name collision. The usual
> > way to fix that is to move both conflicting parts to their own namespaces.
> >
> > Rename REG_* to MESON_REG_* as a prerequisite for enabling COMPILE_TEST.

> >         NUM_REG,
> 
> MESON_NUM_REG?

Hmm... Only one place where it's defined and used, but I can do it, sure.

$ git grep -n -w NUM_REG
drivers/pinctrl/meson/pinctrl-meson.h:72:       NUM_REG,
drivers/pinctrl/meson/pinctrl-meson.h:105:      struct meson_reg_desc regs[NUM_REG];

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH v4 09/13] pinctrl: meson: Rename REG_* to MESON_REG_*
  2022-04-11 10:19     ` Andy Shevchenko
@ 2022-04-11 11:41       ` Andy Shevchenko
  0 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-11 11:41 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Qianggui Song, Krzysztof Kozlowski, Marc Zyngier,
	Fabien Dessenne, Linus Walleij, open list:GPIO SUBSYSTEM,
	Linux ARM, open list:ARM/Amlogic Meson...,
	Linux Kernel Mailing List, openbmc, Linux-Renesas,
	linux-samsung-soc, linux-stm32, Neil Armstrong, Kevin Hilman,
	Jerome Brunet, Martin Blumenstingl, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Bartosz Golaszewski, Philipp Zabel

On Mon, Apr 11, 2022 at 01:19:11PM +0300, Andy Shevchenko wrote:
> On Mon, Apr 11, 2022 at 11:04:00AM +0200, Geert Uytterhoeven wrote:
> > On Fri, Apr 1, 2022 at 12:36 PM Andy Shevchenko
> > <andriy.shevchenko@linux.intel.com> wrote:

...

> > >         NUM_REG,
> > 
> > MESON_NUM_REG?
> 
> Hmm... Only one place where it's defined and used, but I can do it, sure.

Updated locally.

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH v4 05/13] pinctrl: samsung: Switch to use for_each_gpiochip_node() helper
  2022-04-09 13:33       ` Krzysztof Kozlowski
@ 2022-04-11 11:56         ` Andy Shevchenko
  2022-04-11 12:03           ` Krzysztof Kozlowski
  0 siblings, 1 reply; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-11 11:56 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Qianggui Song, Geert Uytterhoeven, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32, Neil Armstrong, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Bartosz Golaszewski, Philipp Zabel

On Sat, Apr 09, 2022 at 03:33:49PM +0200, Krzysztof Kozlowski wrote:
> On 08/04/2022 17:39, Andy Shevchenko wrote:
> > On Fri, Apr 08, 2022 at 05:22:21PM +0200, Krzysztof Kozlowski wrote:
> >> On 01/04/2022 12:35, Andy Shevchenko wrote:
> >>> Switch the code to use for_each_gpiochip_node() helper.
> > 
> > (...)
> > 
> >>>  /*
> >>>   * Iterate over all driver pin banks to find one matching the name of node,
> >>>   * skipping optional "-gpio" node suffix. When found, assign node to the bank.
> >>>   */
> >>> -static void samsung_banks_of_node_get(struct device *dev,
> >>> -				      struct samsung_pinctrl_drv_data *d,
> >>> -				      struct device_node *node)
> >>> +static void samsung_banks_node_get(struct device *dev, struct samsung_pinctrl_drv_data *d)
> >>
> >> This is worth simplification anyway, so please split it to separate patch.
> > 
> > Not sure what to do and why it worth an additional churn.
> 
> Makes this change smaller so it's easier to review.

https://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel.git/log/?h=review-andy

That's how it looks like. Tell me if it is what you have had in mind.

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode
  2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
                   ` (12 preceding siblings ...)
  2022-04-01 10:36 ` [PATCH v4 13/13] pinctrl: armada-37xx: Reuse GPIO fwnode in armada_37xx_irqchip_register() Andy Shevchenko
@ 2022-04-11 11:59 ` Andy Shevchenko
  13 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-11 11:59 UTC (permalink / raw)
  To: Qianggui Song, Geert Uytterhoeven, Krzysztof Kozlowski,
	Marc Zyngier, Fabien Dessenne, Linus Walleij, linux-gpio,
	linux-arm-kernel, linux-amlogic, linux-kernel, openbmc,
	linux-renesas-soc, linux-samsung-soc, linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

On Fri, Apr 01, 2022 at 01:35:51PM +0300, Andy Shevchenko wrote:
> This is a spin-off of the previous work of switching GPIO library
> to use fwnode instead of of_node. Here we introduce a couple of
> a new macro helpers, which allows to switch some of the drivers
> to use fwnode and partially fwnode APIs. As a result of this cleanup
> a few drivers switched to use GPIO fwnode instead of of_node.
> 
> Bart, Linus, I can take it thru my tree with an immutable branch if
> it's the way you prefer, otherwise please suggest on how to proceed.

I'm going to push this, without samsung patch(es), but addresing latest
Geert's comment, to my for-next branch pending for PR to GPIO subsystem.

Please inform me within a few hours, if something should be postponed /
dropped / etc.

Thanks!

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH v4 05/13] pinctrl: samsung: Switch to use for_each_gpiochip_node() helper
  2022-04-11 11:56         ` Andy Shevchenko
@ 2022-04-11 12:03           ` Krzysztof Kozlowski
  0 siblings, 0 replies; 33+ messages in thread
From: Krzysztof Kozlowski @ 2022-04-11 12:03 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Qianggui Song, Geert Uytterhoeven, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32, Neil Armstrong, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Bartosz Golaszewski, Philipp Zabel

On 11/04/2022 13:56, Andy Shevchenko wrote:
>>
>> Makes this change smaller so it's easier to review.
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel.git/log/?h=review-andy
> 
> That's how it looks like. Tell me if it is what you have had in mind.

Yes, thanks.


Best regards,
Krzysztof

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

* Re: [PATCH v4 05/13] pinctrl: samsung: Switch to use for_each_gpiochip_node() helper
  2022-04-01 10:35 ` [PATCH v4 05/13] pinctrl: samsung: " Andy Shevchenko
  2022-04-08 15:22   ` Krzysztof Kozlowski
@ 2022-04-11 12:21   ` Krzysztof Kozlowski
  2022-04-11 13:13     ` Andy Shevchenko
  1 sibling, 1 reply; 33+ messages in thread
From: Krzysztof Kozlowski @ 2022-04-11 12:21 UTC (permalink / raw)
  To: Andy Shevchenko, Qianggui Song, Geert Uytterhoeven, Marc Zyngier,
	Fabien Dessenne, Linus Walleij, linux-gpio, linux-arm-kernel,
	linux-amlogic, linux-kernel, openbmc, linux-renesas-soc,
	linux-samsung-soc, linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

On 01/04/2022 12:35, Andy Shevchenko wrote:
> Switch the code to use for_each_gpiochip_node() helper.
> 
> While at it, in order to avoid additional churn in the future,
> switch to fwnode APIs where it makes sense.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>  drivers/pinctrl/samsung/pinctrl-exynos.c  |  8 +++---
>  drivers/pinctrl/samsung/pinctrl-s3c24xx.c |  2 +-
>  drivers/pinctrl/samsung/pinctrl-s3c64xx.c |  4 +--
>  drivers/pinctrl/samsung/pinctrl-samsung.c | 30 +++++++++++------------
>  drivers/pinctrl/samsung/pinctrl-samsung.h |  2 +-
>  5 files changed, 22 insertions(+), 24 deletions(-)
> 


Tested-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>


Best regards,
Krzysztof

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

* Re: [PATCH v4 05/13] pinctrl: samsung: Switch to use for_each_gpiochip_node() helper
  2022-04-11 12:21   ` Krzysztof Kozlowski
@ 2022-04-11 13:13     ` Andy Shevchenko
  0 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-11 13:13 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Qianggui Song, Geert Uytterhoeven, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32, Neil Armstrong, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Bartosz Golaszewski, Philipp Zabel

On Mon, Apr 11, 2022 at 02:21:00PM +0200, Krzysztof Kozlowski wrote:
> On 01/04/2022 12:35, Andy Shevchenko wrote:
> > Switch the code to use for_each_gpiochip_node() helper.
> > 
> > While at it, in order to avoid additional churn in the future,
> > switch to fwnode APIs where it makes sense.
> > 
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > ---
> >  drivers/pinctrl/samsung/pinctrl-exynos.c  |  8 +++---
> >  drivers/pinctrl/samsung/pinctrl-s3c24xx.c |  2 +-
> >  drivers/pinctrl/samsung/pinctrl-s3c64xx.c |  4 +--
> >  drivers/pinctrl/samsung/pinctrl-samsung.c | 30 +++++++++++------------
> >  drivers/pinctrl/samsung/pinctrl-samsung.h |  2 +-
> >  5 files changed, 22 insertions(+), 24 deletions(-)
> 
> Tested-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

Thanks!
I'm going to spread this to two patches to which I pointed out before.

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH v4 11/13] pinctrl: meson: Replace custom code by gpiochip_node_count() call
       [not found]   ` <CGME20220414063849eucas1p126e41b53ff0d342f5c48408994b704e9@eucas1p1.samsung.com>
@ 2022-04-14  6:38     ` Marek Szyprowski
  2022-04-14 13:51       ` Andy Shevchenko
  0 siblings, 1 reply; 33+ messages in thread
From: Marek Szyprowski @ 2022-04-14  6:38 UTC (permalink / raw)
  To: Andy Shevchenko, Qianggui Song, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, linux-gpio, linux-arm-kernel, linux-amlogic,
	linux-kernel, openbmc, linux-renesas-soc, linux-samsung-soc,
	linux-stm32
  Cc: Neil Armstrong, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Andrew Lunn, Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Hi

On 01.04.2022 12:36, Andy Shevchenko wrote:
> Since we have generic function to count GPIO controller nodes
> under a given device, there is no need to open code it. Replace
> custom code by gpiochip_node_count() call.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>

This patch landed in linux next-20220413 as commit 88834c75cae5 
("pinctrl: meson: Replace custom code by gpiochip_node_count() call"). 
Unfortunately it breaks booting of all my Amlogic-based test boards 
(Odroid C4, N2, Khadas VIM3, VIM3l). MMC driver is no longer probed and 
boards are unable to mount rootfs. Reverting this patch on top of 
linux-next fixes the issue.

> ---
>   drivers/pinctrl/meson/pinctrl-meson.c | 28 ++++++++++++---------------
>   1 file changed, 12 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c
> index 5b46a0979db7..1b078da81523 100644
> --- a/drivers/pinctrl/meson/pinctrl-meson.c
> +++ b/drivers/pinctrl/meson/pinctrl-meson.c
> @@ -49,6 +49,7 @@
>   #include <linux/pinctrl/pinctrl.h>
>   #include <linux/pinctrl/pinmux.h>
>   #include <linux/platform_device.h>
> +#include <linux/property.h>
>   #include <linux/regmap.h>
>   #include <linux/seq_file.h>
>   
> @@ -662,27 +663,22 @@ static struct regmap *meson_map_resource(struct meson_pinctrl *pc,
>   	return devm_regmap_init_mmio(pc->dev, base, &meson_regmap_config);
>   }
>   
> -static int meson_pinctrl_parse_dt(struct meson_pinctrl *pc,
> -				  struct device_node *node)
> +static int meson_pinctrl_parse_dt(struct meson_pinctrl *pc)
>   {
> -	struct device_node *np, *gpio_np = NULL;
> +	struct device_node *gpio_np;
> +	unsigned int chips;
>   
> -	for_each_child_of_node(node, np) {
> -		if (!of_find_property(np, "gpio-controller", NULL))
> -			continue;
> -		if (gpio_np) {
> -			dev_err(pc->dev, "multiple gpio nodes\n");
> -			of_node_put(np);
> -			return -EINVAL;
> -		}
> -		gpio_np = np;
> -	}
> -
> -	if (!gpio_np) {
> +	chips = gpiochip_node_count(pc->dev);
> +	if (!chips) {
>   		dev_err(pc->dev, "no gpio node found\n");
>   		return -EINVAL;
>   	}
> +	if (chips > 1) {
> +		dev_err(pc->dev, "multiple gpio nodes\n");
> +		return -EINVAL;
> +	}
>   
> +	gpio_np = to_of_node(device_get_named_child_node(pc->dev, "gpio-controller"));
>   	pc->of_node = gpio_np;
>   
>   	pc->reg_mux = meson_map_resource(pc, gpio_np, "mux");
> @@ -751,7 +747,7 @@ int meson_pinctrl_probe(struct platform_device *pdev)
>   	pc->dev = dev;
>   	pc->data = (struct meson_pinctrl_data *) of_device_get_match_data(dev);
>   
> -	ret = meson_pinctrl_parse_dt(pc, dev->of_node);
> +	ret = meson_pinctrl_parse_dt(pc);
>   	if (ret)
>   		return ret;
>   

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


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

* Re: [PATCH v4 11/13] pinctrl: meson: Replace custom code by gpiochip_node_count() call
  2022-04-14  6:38     ` Marek Szyprowski
@ 2022-04-14 13:51       ` Andy Shevchenko
  2022-04-14 15:32         ` Martin Blumenstingl
  0 siblings, 1 reply; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-14 13:51 UTC (permalink / raw)
  To: Marek Szyprowski
  Cc: Andy Shevchenko, Qianggui Song, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, open list:GPIO SUBSYSTEM, linux-arm Mailing List,
	linux-amlogic, Linux Kernel Mailing List, OpenBMC Maillist,
	Linux-Renesas, Linux Samsung SOC, linux-stm32, Neil Armstrong,
	Kevin Hilman, Jerome Brunet, Martin Blumenstingl, Andrew Lunn,
	Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

On Thu, Apr 14, 2022 at 12:44 PM Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
> On 01.04.2022 12:36, Andy Shevchenko wrote:
> > Since we have generic function to count GPIO controller nodes
> > under a given device, there is no need to open code it. Replace
> > custom code by gpiochip_node_count() call.

...

> This patch landed in linux next-20220413 as commit 88834c75cae5
> ("pinctrl: meson: Replace custom code by gpiochip_node_count() call").
> Unfortunately it breaks booting of all my Amlogic-based test boards
> (Odroid C4, N2, Khadas VIM3, VIM3l). MMC driver is no longer probed and
> boards are unable to mount rootfs. Reverting this patch on top of
> linux-next fixes the issue.

Thank you for letting me know, I'll withdraw it and investigate.

-- 
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH v4 11/13] pinctrl: meson: Replace custom code by gpiochip_node_count() call
  2022-04-14 13:51       ` Andy Shevchenko
@ 2022-04-14 15:32         ` Martin Blumenstingl
  2022-04-14 16:06           ` Andy Shevchenko
  0 siblings, 1 reply; 33+ messages in thread
From: Martin Blumenstingl @ 2022-04-14 15:32 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Marek Szyprowski, Andy Shevchenko, Qianggui Song,
	Geert Uytterhoeven, Krzysztof Kozlowski, Marc Zyngier,
	Fabien Dessenne, Linus Walleij, open list:GPIO SUBSYSTEM,
	linux-arm Mailing List, linux-amlogic, Linux Kernel Mailing List,
	OpenBMC Maillist, Linux-Renesas, Linux Samsung SOC, linux-stm32,
	Neil Armstrong, Kevin Hilman, Jerome Brunet, Andrew Lunn,
	Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

Hi Andy,

On Thu, Apr 14, 2022 at 3:51 PM Andy Shevchenko
<andy.shevchenko@gmail.com> wrote:
[...]
> > This patch landed in linux next-20220413 as commit 88834c75cae5
> > ("pinctrl: meson: Replace custom code by gpiochip_node_count() call").
> > Unfortunately it breaks booting of all my Amlogic-based test boards
> > (Odroid C4, N2, Khadas VIM3, VIM3l). MMC driver is no longer probed and
> > boards are unable to mount rootfs. Reverting this patch on top of
> > linux-next fixes the issue.
>
> Thank you for letting me know, I'll withdraw it and investigate.
If needed I can investigate further later today/tomorrow. I think the
problem is that our node name doesn't follow the .dts recommendation.

For GXL (arch/arm64/boot/dts/amlogic/meson-gxl.dtsi) the GPIO
controller nodes are for example:
  gpio: bank@4b0 {
      ...
  }
and
  gpio_ao: bank@14 {
      ...
  }

See also:
$ git grep -C6 gpio-controller arch/arm64/boot/dts/amlogic/*.dtsi

Marek did not state which error he's getting but I suspect it fails
with "no gpio node found".


Best regards,
Martin

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

* Re: [PATCH v4 11/13] pinctrl: meson: Replace custom code by gpiochip_node_count() call
  2022-04-14 15:32         ` Martin Blumenstingl
@ 2022-04-14 16:06           ` Andy Shevchenko
  2022-04-14 18:28             ` Andy Shevchenko
  0 siblings, 1 reply; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-14 16:06 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: Marek Szyprowski, Andy Shevchenko, Qianggui Song,
	Geert Uytterhoeven, Krzysztof Kozlowski, Marc Zyngier,
	Fabien Dessenne, Linus Walleij, open list:GPIO SUBSYSTEM,
	linux-arm Mailing List, linux-amlogic, Linux Kernel Mailing List,
	OpenBMC Maillist, Linux-Renesas, Linux Samsung SOC, linux-stm32,
	Neil Armstrong, Kevin Hilman, Jerome Brunet, Andrew Lunn,
	Gregory Clement, Sebastian Hesselbarth, Avi Fishman,
	Tomer Maimon, Tali Perry, Patrick Venture, Nancy Yuen,
	Benjamin Fair, Tomasz Figa, Sylwester Nawrocki, Alim Akhtar,
	Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski,
	Philipp Zabel

On Thu, Apr 14, 2022 at 6:32 PM Martin Blumenstingl
<martin.blumenstingl@googlemail.com> wrote:
> On Thu, Apr 14, 2022 at 3:51 PM Andy Shevchenko
> <andy.shevchenko@gmail.com> wrote:
> [...]
> > > This patch landed in linux next-20220413 as commit 88834c75cae5
> > > ("pinctrl: meson: Replace custom code by gpiochip_node_count() call").
> > > Unfortunately it breaks booting of all my Amlogic-based test boards
> > > (Odroid C4, N2, Khadas VIM3, VIM3l). MMC driver is no longer probed and
> > > boards are unable to mount rootfs. Reverting this patch on top of
> > > linux-next fixes the issue.
> >
> > Thank you for letting me know, I'll withdraw it and investigate.
> If needed I can investigate further later today/tomorrow. I think the
> problem is that our node name doesn't follow the .dts recommendation.
>
> For GXL (arch/arm64/boot/dts/amlogic/meson-gxl.dtsi) the GPIO
> controller nodes are for example:
>   gpio: bank@4b0 {
>       ...
>   }
> and
>   gpio_ao: bank@14 {
>       ...
>   }
>
> See also:
> $ git grep -C6 gpio-controller arch/arm64/boot/dts/amlogic/*.dtsi
>
> Marek did not state which error he's getting but I suspect it fails
> with "no gpio node found".

Would be interesting to know that, yeah.

The subtle difference between the patched and unpatched version is
that the former uses only available nodes, it means that node is not
available by some reason and then the error would be the one you
guessed.

-- 
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH v4 11/13] pinctrl: meson: Replace custom code by gpiochip_node_count() call
  2022-04-14 16:06           ` Andy Shevchenko
@ 2022-04-14 18:28             ` Andy Shevchenko
  2022-04-14 18:33               ` Andy Shevchenko
  0 siblings, 1 reply; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-14 18:28 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: Marek Szyprowski, Qianggui Song, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, open list:GPIO SUBSYSTEM, linux-arm Mailing List,
	linux-amlogic, Linux Kernel Mailing List, OpenBMC Maillist,
	Linux-Renesas, Linux Samsung SOC, linux-stm32, Neil Armstrong,
	Kevin Hilman, Jerome Brunet, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Bartosz Golaszewski, Philipp Zabel

On Thu, Apr 14, 2022 at 07:06:21PM +0300, Andy Shevchenko wrote:
> On Thu, Apr 14, 2022 at 6:32 PM Martin Blumenstingl
> <martin.blumenstingl@googlemail.com> wrote:
> > On Thu, Apr 14, 2022 at 3:51 PM Andy Shevchenko
> > <andy.shevchenko@gmail.com> wrote:
> > [...]
> > > > This patch landed in linux next-20220413 as commit 88834c75cae5
> > > > ("pinctrl: meson: Replace custom code by gpiochip_node_count() call").
> > > > Unfortunately it breaks booting of all my Amlogic-based test boards
> > > > (Odroid C4, N2, Khadas VIM3, VIM3l). MMC driver is no longer probed and
> > > > boards are unable to mount rootfs. Reverting this patch on top of
> > > > linux-next fixes the issue.
> > >
> > > Thank you for letting me know, I'll withdraw it and investigate.
> > If needed I can investigate further later today/tomorrow. I think the
> > problem is that our node name doesn't follow the .dts recommendation.
> >
> > For GXL (arch/arm64/boot/dts/amlogic/meson-gxl.dtsi) the GPIO
> > controller nodes are for example:
> >   gpio: bank@4b0 {
> >       ...
> >   }
> > and
> >   gpio_ao: bank@14 {
> >       ...
> >   }
> >
> > See also:
> > $ git grep -C6 gpio-controller arch/arm64/boot/dts/amlogic/*.dtsi
> >
> > Marek did not state which error he's getting but I suspect it fails
> > with "no gpio node found".
> 
> Would be interesting to know that, yeah.
> 
> The subtle difference between the patched and unpatched version is
> that the former uses only available nodes, it means that node is not
> available by some reason and then the error would be the one you
> guessed.

Looking into the difference between iterating via available nodes I have found
nothing suspicious. Your DTSes do not have status property, so it assumes the
node is available.

I'm quite puzzled what's going on there. Because I can't see what the logical
difference the patch brought in.

P.S. In any case it's withdrawn now and shouldn't appear in the next Linux
Next. But I would really appreciate more input on this.

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH v4 11/13] pinctrl: meson: Replace custom code by gpiochip_node_count() call
  2022-04-14 18:28             ` Andy Shevchenko
@ 2022-04-14 18:33               ` Andy Shevchenko
  0 siblings, 0 replies; 33+ messages in thread
From: Andy Shevchenko @ 2022-04-14 18:33 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: Marek Szyprowski, Qianggui Song, Geert Uytterhoeven,
	Krzysztof Kozlowski, Marc Zyngier, Fabien Dessenne,
	Linus Walleij, open list:GPIO SUBSYSTEM, linux-arm Mailing List,
	linux-amlogic, Linux Kernel Mailing List, OpenBMC Maillist,
	Linux-Renesas, Linux Samsung SOC, linux-stm32, Neil Armstrong,
	Kevin Hilman, Jerome Brunet, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Avi Fishman, Tomer Maimon, Tali Perry,
	Patrick Venture, Nancy Yuen, Benjamin Fair, Tomasz Figa,
	Sylwester Nawrocki, Alim Akhtar, Maxime Coquelin,
	Alexandre Torgue, Bartosz Golaszewski, Philipp Zabel

On Thu, Apr 14, 2022 at 09:28:30PM +0300, Andy Shevchenko wrote:
> On Thu, Apr 14, 2022 at 07:06:21PM +0300, Andy Shevchenko wrote:
> > On Thu, Apr 14, 2022 at 6:32 PM Martin Blumenstingl
> > <martin.blumenstingl@googlemail.com> wrote:
> > > On Thu, Apr 14, 2022 at 3:51 PM Andy Shevchenko
> > > <andy.shevchenko@gmail.com> wrote:
> > > [...]
> > > > > This patch landed in linux next-20220413 as commit 88834c75cae5
> > > > > ("pinctrl: meson: Replace custom code by gpiochip_node_count() call").
> > > > > Unfortunately it breaks booting of all my Amlogic-based test boards
> > > > > (Odroid C4, N2, Khadas VIM3, VIM3l). MMC driver is no longer probed and
> > > > > boards are unable to mount rootfs. Reverting this patch on top of
> > > > > linux-next fixes the issue.
> > > >
> > > > Thank you for letting me know, I'll withdraw it and investigate.
> > > If needed I can investigate further later today/tomorrow. I think the
> > > problem is that our node name doesn't follow the .dts recommendation.
> > >
> > > For GXL (arch/arm64/boot/dts/amlogic/meson-gxl.dtsi) the GPIO
> > > controller nodes are for example:
> > >   gpio: bank@4b0 {
> > >       ...
> > >   }
> > > and
> > >   gpio_ao: bank@14 {
> > >       ...
> > >   }
> > >
> > > See also:
> > > $ git grep -C6 gpio-controller arch/arm64/boot/dts/amlogic/*.dtsi
> > >
> > > Marek did not state which error he's getting but I suspect it fails
> > > with "no gpio node found".
> > 
> > Would be interesting to know that, yeah.
> > 
> > The subtle difference between the patched and unpatched version is
> > that the former uses only available nodes, it means that node is not
> > available by some reason and then the error would be the one you
> > guessed.
> 
> Looking into the difference between iterating via available nodes I have found
> nothing suspicious. Your DTSes do not have status property, so it assumes the
> node is available.
> 
> I'm quite puzzled what's going on there. Because I can't see what the logical
> difference the patch brought in.
> 
> P.S. In any case it's withdrawn now and shouldn't appear in the next Linux
> Next. But I would really appreciate more input on this.

Okay, now I got it. The "name" of the node is not the same as containing the
property with a given name. So, the faulting line of the code is this one:

gpio_np = to_of_node(device_get_named_child_node(pc->dev, "gpio-controller"));


-- 
With Best Regards,
Andy Shevchenko



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

end of thread, other threads:[~2022-04-14 18:33 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-01 10:35 [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko
2022-04-01 10:35 ` [PATCH v4 01/13] gpiolib: Introduce for_each_gpiochip_node() loop helper Andy Shevchenko
2022-04-05 12:12   ` Bartosz Golaszewski
2022-04-01 10:35 ` [PATCH v4 02/13] gpiolib: Introduce gpiochip_node_count() helper Andy Shevchenko
2022-04-05 12:13   ` Bartosz Golaszewski
2022-04-01 10:35 ` [PATCH v4 03/13] pinctrl: stm32: Replace custom code by gpiochip_node_count() call Andy Shevchenko
2022-04-01 10:35 ` [PATCH v4 04/13] pinctrl: stm32: Switch to use for_each_gpiochip_node() helper Andy Shevchenko
2022-04-01 10:35 ` [PATCH v4 05/13] pinctrl: samsung: " Andy Shevchenko
2022-04-08 15:22   ` Krzysztof Kozlowski
2022-04-08 15:39     ` Andy Shevchenko
2022-04-09 13:33       ` Krzysztof Kozlowski
2022-04-11 11:56         ` Andy Shevchenko
2022-04-11 12:03           ` Krzysztof Kozlowski
2022-04-11 12:21   ` Krzysztof Kozlowski
2022-04-11 13:13     ` Andy Shevchenko
2022-04-01 10:35 ` [PATCH v4 06/13] pinctrl: renesas: rza1: Replace custom code by gpiochip_node_count() call Andy Shevchenko
2022-04-01 10:35 ` [PATCH v4 07/13] pinctrl: renesas: rza1: Switch to use for_each_gpiochip_node() helper Andy Shevchenko
2022-04-01 10:35 ` [PATCH v4 08/13] pinctrl: npcm7xx: " Andy Shevchenko
2022-04-01 10:36 ` [PATCH v4 09/13] pinctrl: meson: Rename REG_* to MESON_REG_* Andy Shevchenko
2022-04-11  9:04   ` Geert Uytterhoeven
2022-04-11 10:19     ` Andy Shevchenko
2022-04-11 11:41       ` Andy Shevchenko
2022-04-01 10:36 ` [PATCH v4 10/13] pinctrl: meson: Enable COMPILE_TEST Andy Shevchenko
2022-04-01 10:36 ` [PATCH v4 11/13] pinctrl: meson: Replace custom code by gpiochip_node_count() call Andy Shevchenko
     [not found]   ` <CGME20220414063849eucas1p126e41b53ff0d342f5c48408994b704e9@eucas1p1.samsung.com>
2022-04-14  6:38     ` Marek Szyprowski
2022-04-14 13:51       ` Andy Shevchenko
2022-04-14 15:32         ` Martin Blumenstingl
2022-04-14 16:06           ` Andy Shevchenko
2022-04-14 18:28             ` Andy Shevchenko
2022-04-14 18:33               ` Andy Shevchenko
2022-04-01 10:36 ` [PATCH v4 12/13] pinctrl: armada-37xx: Switch to use fwnode instead of of_node Andy Shevchenko
2022-04-01 10:36 ` [PATCH v4 13/13] pinctrl: armada-37xx: Reuse GPIO fwnode in armada_37xx_irqchip_register() Andy Shevchenko
2022-04-11 11:59 ` [PATCH v4 00/13] gpiolib: Two new helpers and way toward fwnode Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).