linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO
@ 2019-06-09 18:06 Martin Blumenstingl
  2019-06-09 18:06 ` [RFC next v1 1/5] net: stmmac: drop redundant check in stmmac_mdio_reset Martin Blumenstingl
                   ` (5 more replies)
  0 siblings, 6 replies; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-09 18:06 UTC (permalink / raw)
  To: netdev, linux-gpio, linux-amlogic, linus.walleij, bgolaszewski,
	peppe.cavallaro, alexandre.torgue, joabreu
  Cc: devicetree, davem, linux-arm-kernel, linux-kernel, khilman,
	narmstrong, Martin Blumenstingl

Recent Amlogic SoCs (G12A which includes S905X2 and S905D2 as well as
G12B which includes S922X) use GPIOZ_14 or GPIOZ_15 for the PHY reset
line. These GPIOs are special because they are marked as "3.3V input
tolerant open drain (OD) pins" which means they can only drive the pin
output LOW (to reset the PHY) or to switch to input mode (to take the
PHY out of reset).
The GPIO subsystem already supports this with the GPIO_OPEN_DRAIN and
GPIO_OPEN_SOURCE flags in the devicetree bindings.

The goal of this series to add support for these special GPIOs in
stmmac.

Patch #2 prepares gpiolib-of for the switch from (legacy) GPIO numbers
to GPIO descriptors in stmmac. This requires the gpiolib-of to take
care of the "snps,reset-active-low" property.

Patch #3 switches stmmac from (legacy) GPIO numbers to GPIO descriptors
because this enables tracking of the GPIO flags which are passed via
devicetree. In other words: GPIO_OPEN_DRAIN and GPIO_OPEN_SOURCE are
now honored correctly, which is exactly what is needed for these
Amlogic platforms.

Patch #1 and #4 are minor cleanups which follow the boyscout rule:
"Always leave the campground cleaner than you found it."

Patch #5 is included here to show how this new functionality is used.

My test-cases were:
- X96 Max: snps,reset-gpio = <&gpio GPIOZ_15 0> with and without
           snps,reset-active-low before these patches. The PHY was
           not detected.
- X96 Max: snps,reset-gpio = <&gpio GPIOZ_15 GPIO_OPEN_SOURCE>. The
           PHY is now detected correctly
- Meson8b EC100: snps,reset-gpio = <&gpio GPIOH_4 0> with
                 snps,reset-active-low. Before and after these
                 patches the PHY is detected correctly.
- Meson8b EC100: snps,reset-gpio = <&gpio GPIOH_4 0> without
                 snps,reset-active-low. Before and after these
                 patches the PHY is not detected (this is expected
                 because we need to set the output LOW to take the
                 PHY out of reset).
- Meson8b EC100: snps,reset-gpio = <&gpio GPIOH_4 GPIO_ACTIVE_LOW>
                 but without snps,reset-active-low. Before these
                 patches the PHY was not detected. With these patches
                 the PHY is now detected correctly.

I am sending this as RFC because I'm not very familiar with the GPIO
subsystem. What I came up with seems fine to me, but I'm not sure so
I don't want this to be applied before Linus W. is happy with it. I
am also looking for suggestions how to handle these cross-tree changes
(patch #2 belongs to the linux-gpio tree, patches #1, 3 and #4 should
go through the net-next tree. I will re-send patch #5 separately as
this should go through Kevin's linux-amlogic tree).


Martin Blumenstingl (5):
  net: stmmac: drop redundant check in stmmac_mdio_reset
  gpio: of: parse stmmac PHY reset line specific active-low property
  net: stmmac: use GPIO descriptors in stmmac_mdio_reset
  net: stmmac: use device_property_read_u32_array to read the reset
    delays
  arm64: dts: meson: g12a: x96-max: fix the Ethernet PHY reset line

 .../boot/dts/amlogic/meson-g12a-x96-max.dts   |  3 +-
 drivers/gpio/gpiolib-of.c                     |  6 +++
 .../net/ethernet/stmicro/stmmac/stmmac_mdio.c | 43 ++++++++-----------
 3 files changed, 26 insertions(+), 26 deletions(-)

-- 
2.21.0


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

* [RFC next v1 1/5] net: stmmac: drop redundant check in stmmac_mdio_reset
  2019-06-09 18:06 [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Martin Blumenstingl
@ 2019-06-09 18:06 ` Martin Blumenstingl
  2019-06-09 18:06 ` [RFC next v1 2/5] gpio: of: parse stmmac PHY reset line specific active-low property Martin Blumenstingl
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-09 18:06 UTC (permalink / raw)
  To: netdev, linux-gpio, linux-amlogic, linus.walleij, bgolaszewski,
	peppe.cavallaro, alexandre.torgue, joabreu
  Cc: devicetree, davem, linux-arm-kernel, linux-kernel, khilman,
	narmstrong, Martin Blumenstingl

A simplified version of the existing code looks like this:
  if (priv->device->of_node) {
      struct device_node *np = priv->device->of_node;
      if (!np)
          return 0;

The second "if" never evaluates to true because the first "if" checks
for exactly the opposite.
Drop the redundant check and early return to make the code easier to
understand.

No functional changes intended.

Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
index 093a223fe408..cb9aad090cc9 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
@@ -254,9 +254,6 @@ int stmmac_mdio_reset(struct mii_bus *bus)
 		if (data->reset_gpio < 0) {
 			struct device_node *np = priv->device->of_node;
 
-			if (!np)
-				return 0;
-
 			data->reset_gpio = of_get_named_gpio(np,
 						"snps,reset-gpio", 0);
 			if (data->reset_gpio < 0)
-- 
2.21.0


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

* [RFC next v1 2/5] gpio: of: parse stmmac PHY reset line specific active-low property
  2019-06-09 18:06 [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Martin Blumenstingl
  2019-06-09 18:06 ` [RFC next v1 1/5] net: stmmac: drop redundant check in stmmac_mdio_reset Martin Blumenstingl
@ 2019-06-09 18:06 ` Martin Blumenstingl
  2019-06-09 20:38   ` Andrew Lunn
  2019-06-09 18:06 ` [RFC next v1 3/5] net: stmmac: use GPIO descriptors in stmmac_mdio_reset Martin Blumenstingl
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-09 18:06 UTC (permalink / raw)
  To: netdev, linux-gpio, linux-amlogic, linus.walleij, bgolaszewski,
	peppe.cavallaro, alexandre.torgue, joabreu
  Cc: devicetree, davem, linux-arm-kernel, linux-kernel, khilman,
	narmstrong, Martin Blumenstingl

The stmmac driver currently ignores the GPIO flags which are passed via
devicetree because it operates with legacy GPIO numbers instead of GPIO
descriptors. stmmac assumes that the GPIO is "active HIGH" by default.
This can be overwritten by setting "snps,reset-active-low" to make the
reset line "active LOW".

Recent Amlogic SoCs (G12A which includes S905X2 and S905D2 as well as
G12B which includes S922X) use GPIOZ_14 or GPIOZ_15 for the PHY reset
line. These GPIOs are special because they are marked as "3.3V input
tolerant open drain" pins which means they can only drive the pin output
LOW (to reset the PHY) or to switch to input mode (to take the PHY out
of reset).
The GPIO subsystem already supports this with the GPIO_OPEN_DRAIN and
GPIO_OPEN_SOURCE flags in the devicetree bindings.

Add the stmmac PHY reset line specific active low parsing to gpiolib-of
so stmmac can be ported to GPIO descriptors while being backwards
compatible with device trees which use the "old" way of specifying the
polarity.

Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
 drivers/gpio/gpiolib-of.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c
index aec7bd86ae7e..2533f2471821 100644
--- a/drivers/gpio/gpiolib-of.c
+++ b/drivers/gpio/gpiolib-of.c
@@ -158,6 +158,12 @@ static void of_gpio_flags_quirks(struct device_node *np,
 			}
 		}
 	}
+
+	/* Legacy handling of stmmac's active-low PHY reset line */
+	if (IS_ENABLED(CONFIG_STMMAC_ETH) &&
+	    !strcmp(propname, "snps,reset-gpio") &&
+	    of_property_read_bool(np, "snps,reset-active-low"))
+		*flags |= OF_GPIO_ACTIVE_LOW;
 }
 
 /**
-- 
2.21.0


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

* [RFC next v1 3/5] net: stmmac: use GPIO descriptors in stmmac_mdio_reset
  2019-06-09 18:06 [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Martin Blumenstingl
  2019-06-09 18:06 ` [RFC next v1 1/5] net: stmmac: drop redundant check in stmmac_mdio_reset Martin Blumenstingl
  2019-06-09 18:06 ` [RFC next v1 2/5] gpio: of: parse stmmac PHY reset line specific active-low property Martin Blumenstingl
@ 2019-06-09 18:06 ` Martin Blumenstingl
  2019-06-09 20:52   ` Andrew Lunn
  2019-06-09 21:50   ` Linus Walleij
  2019-06-09 18:06 ` [RFC next v1 4/5] net: stmmac: use device_property_read_u32_array to read the reset delays Martin Blumenstingl
                   ` (2 subsequent siblings)
  5 siblings, 2 replies; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-09 18:06 UTC (permalink / raw)
  To: netdev, linux-gpio, linux-amlogic, linus.walleij, bgolaszewski,
	peppe.cavallaro, alexandre.torgue, joabreu
  Cc: devicetree, davem, linux-arm-kernel, linux-kernel, khilman,
	narmstrong, Martin Blumenstingl

Switch stmmac_mdio_reset to use GPIO descriptors. GPIO core handles the
"snps,reset-gpio" for GPIO descriptors so we don't need to take care of
it inside the driver anymore.

The advantage of this is that we now preserve the GPIO flags which are
passed via devicetree. This is required on some newer Amlogic boards
which use an Open Drain pin for the reset GPIO. This pin can only output
a LOW signal or switch to input mode but it cannot output a HIGH signal.
There are already devicetree bindings for these special cases and GPIO
core already takes care of them but only if we use GPIO descriptors
instead of GPIO numbers.

Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
 .../net/ethernet/stmicro/stmmac/stmmac_mdio.c | 27 +++++++++----------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
index cb9aad090cc9..21bbe3ba3e8e 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
@@ -20,11 +20,11 @@
   Maintainer: Giuseppe Cavallaro <peppe.cavallaro@st.com>
 *******************************************************************************/
 
+#include <linux/gpio/consumer.h>
 #include <linux/io.h>
 #include <linux/iopoll.h>
 #include <linux/mii.h>
 #include <linux/of.h>
-#include <linux/of_gpio.h>
 #include <linux/of_mdio.h>
 #include <linux/phy.h>
 #include <linux/slab.h>
@@ -251,34 +251,33 @@ int stmmac_mdio_reset(struct mii_bus *bus)
 
 #ifdef CONFIG_OF
 	if (priv->device->of_node) {
+		struct gpio_desc *reset_gpio;
+
 		if (data->reset_gpio < 0) {
 			struct device_node *np = priv->device->of_node;
 
-			data->reset_gpio = of_get_named_gpio(np,
-						"snps,reset-gpio", 0);
-			if (data->reset_gpio < 0)
-				return 0;
+			reset_gpio = devm_gpiod_get_optional(priv->device,
+							     "snps,reset",
+							     GPIOD_OUT_LOW);
+			if (IS_ERR(reset_gpio))
+				return PTR_ERR(reset_gpio);
 
-			data->active_low = of_property_read_bool(np,
-						"snps,reset-active-low");
 			of_property_read_u32_array(np,
 				"snps,reset-delays-us", data->delays, 3);
+		} else {
+			reset_gpio = gpio_to_desc(data->reset_gpio);
 
-			if (devm_gpio_request(priv->device, data->reset_gpio,
-					      "mdio-reset"))
-				return 0;
+			gpiod_direction_output(reset_gpio, 0);
 		}
 
-		gpio_direction_output(data->reset_gpio,
-				      data->active_low ? 1 : 0);
 		if (data->delays[0])
 			msleep(DIV_ROUND_UP(data->delays[0], 1000));
 
-		gpio_set_value(data->reset_gpio, data->active_low ? 0 : 1);
+		gpiod_set_value_cansleep(reset_gpio, 1);
 		if (data->delays[1])
 			msleep(DIV_ROUND_UP(data->delays[1], 1000));
 
-		gpio_set_value(data->reset_gpio, data->active_low ? 1 : 0);
+		gpiod_set_value_cansleep(reset_gpio, 0);
 		if (data->delays[2])
 			msleep(DIV_ROUND_UP(data->delays[2], 1000));
 	}
-- 
2.21.0


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

* [RFC next v1 4/5] net: stmmac: use device_property_read_u32_array to read the reset delays
  2019-06-09 18:06 [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Martin Blumenstingl
                   ` (2 preceding siblings ...)
  2019-06-09 18:06 ` [RFC next v1 3/5] net: stmmac: use GPIO descriptors in stmmac_mdio_reset Martin Blumenstingl
@ 2019-06-09 18:06 ` Martin Blumenstingl
  2019-06-09 18:06 ` [RFC next v1 5/5] arm64: dts: meson: g12a: x96-max: fix the Ethernet PHY reset line Martin Blumenstingl
  2019-06-09 20:45 ` [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Andrew Lunn
  5 siblings, 0 replies; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-09 18:06 UTC (permalink / raw)
  To: netdev, linux-gpio, linux-amlogic, linus.walleij, bgolaszewski,
	peppe.cavallaro, alexandre.torgue, joabreu
  Cc: devicetree, davem, linux-arm-kernel, linux-kernel, khilman,
	narmstrong, Martin Blumenstingl

Change stmmac_mdio_reset() to use device_property_read_u32_array()
instead of of_property_read_u32_array().

This is meant as a cleanup because we can drop the struct device_node
variable. Also it will make it easier to get rid of struct
stmmac_mdio_bus_data (or at least make it private) in the future because
non-OF platforms can now pass the reset delays as device properties.

No functional changes (neither for OF platforms nor for ones that are
not using OF, because the modified code is still contained in an "if
(priv->device->of_node)").

Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
index 21bbe3ba3e8e..4614f1f2bffb 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
@@ -24,9 +24,9 @@
 #include <linux/io.h>
 #include <linux/iopoll.h>
 #include <linux/mii.h>
-#include <linux/of.h>
 #include <linux/of_mdio.h>
 #include <linux/phy.h>
+#include <linux/property.h>
 #include <linux/slab.h>
 
 #include "dwxgmac2.h"
@@ -254,16 +254,15 @@ int stmmac_mdio_reset(struct mii_bus *bus)
 		struct gpio_desc *reset_gpio;
 
 		if (data->reset_gpio < 0) {
-			struct device_node *np = priv->device->of_node;
-
 			reset_gpio = devm_gpiod_get_optional(priv->device,
 							     "snps,reset",
 							     GPIOD_OUT_LOW);
 			if (IS_ERR(reset_gpio))
 				return PTR_ERR(reset_gpio);
 
-			of_property_read_u32_array(np,
-				"snps,reset-delays-us", data->delays, 3);
+			device_property_read_u32_array(priv->device,
+						       "snps,reset-delays-us",
+						       data->delays, 3);
 		} else {
 			reset_gpio = gpio_to_desc(data->reset_gpio);
 
-- 
2.21.0


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

* [RFC next v1 5/5] arm64: dts: meson: g12a: x96-max: fix the Ethernet PHY reset line
  2019-06-09 18:06 [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Martin Blumenstingl
                   ` (3 preceding siblings ...)
  2019-06-09 18:06 ` [RFC next v1 4/5] net: stmmac: use device_property_read_u32_array to read the reset delays Martin Blumenstingl
@ 2019-06-09 18:06 ` Martin Blumenstingl
  2019-06-09 21:17   ` Linus Walleij
  2019-06-09 20:45 ` [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Andrew Lunn
  5 siblings, 1 reply; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-09 18:06 UTC (permalink / raw)
  To: netdev, linux-gpio, linux-amlogic, linus.walleij, bgolaszewski,
	peppe.cavallaro, alexandre.torgue, joabreu
  Cc: devicetree, davem, linux-arm-kernel, linux-kernel, khilman,
	narmstrong, Martin Blumenstingl

The PHY reset line and interrupt line are swapped on the X96 Max
compared to the Odroid-N2 schematics. This means:
- GPIOZ_14 is the interrupt line (on the Odroid-N2 it's the reset line)
- GPIOZ_15 is the reset line (on the Odroid-N2 it's the interrupt line)

Also the GPIOZ_14 and GPIOZ_15 pins are special. The datasheet describes
that they are "3.3V input tolerant open drain (OD) output pins". This
means the GPIO controller can drive the output LOW to reset the PHY. To
release the reset it can only switch the pin to input mode. The output
cannot be driven HIGH for these pins.
This requires configuring the reset line as GPIO_OPEN_SOURCE because
otherwise the PHY will be stuck in "reset" state (because driving the
pin HIGH seeems to result in the same signal as driving it LOW).

Switch to GPIOZ_15 for the reset GPIO with the correct flags and drop
the "snps,reset-active-low" property as this is now encoded in the
GPIO_OPEN_SOURCE flag.

Fixes: 51d116557b2044 ("arm64: dts: meson-g12a-x96-max: Add Gigabit Ethernet Support")
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
 arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts b/arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts
index 98bc56e650a0..c93b639679c0 100644
--- a/arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts
+++ b/arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts
@@ -186,9 +186,8 @@
 	phy-mode = "rgmii";
 	phy-handle = <&external_phy>;
 	amlogic,tx-delay-ns = <2>;
-	snps,reset-gpio = <&gpio GPIOZ_14 0>;
+	snps,reset-gpio = <&gpio GPIOZ_15 GPIO_OPEN_SOURCE>;
 	snps,reset-delays-us = <0 10000 1000000>;
-	snps,reset-active-low;
 };
 
 &pwm_ef {
-- 
2.21.0


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

* Re: [RFC next v1 2/5] gpio: of: parse stmmac PHY reset line specific active-low property
  2019-06-09 18:06 ` [RFC next v1 2/5] gpio: of: parse stmmac PHY reset line specific active-low property Martin Blumenstingl
@ 2019-06-09 20:38   ` Andrew Lunn
  2019-06-09 21:21     ` Martin Blumenstingl
  0 siblings, 1 reply; 24+ messages in thread
From: Andrew Lunn @ 2019-06-09 20:38 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: netdev, linux-gpio, linux-amlogic, linus.walleij, bgolaszewski,
	peppe.cavallaro, alexandre.torgue, joabreu, devicetree,
	narmstrong, khilman, linux-kernel, davem, linux-arm-kernel

On Sun, Jun 09, 2019 at 08:06:18PM +0200, Martin Blumenstingl wrote:
> The stmmac driver currently ignores the GPIO flags which are passed via
> devicetree because it operates with legacy GPIO numbers instead of GPIO
> descriptors.

Hi Martin

I don't think this is the reason. I think historically stmmac messed
up and ignored the flags. There are a number of device tree blobs
which have the incorrect flag value, but since it was always ignored,
it did not matter. Then came along a board which really did need the
flag, but it was too late, it could not be enabled because too many
boards would break. So the hack was made, and snps,reset-active-low
was added.

Since snps,reset-active-low is a hack, it should not be in the
core. Please don't add it to gpiolib-of.c, keep it within stmmac
driver.

	Andrew

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

* Re: [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO
  2019-06-09 18:06 [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Martin Blumenstingl
                   ` (4 preceding siblings ...)
  2019-06-09 18:06 ` [RFC next v1 5/5] arm64: dts: meson: g12a: x96-max: fix the Ethernet PHY reset line Martin Blumenstingl
@ 2019-06-09 20:45 ` Andrew Lunn
  2019-06-09 21:52   ` Linus Walleij
                     ` (2 more replies)
  5 siblings, 3 replies; 24+ messages in thread
From: Andrew Lunn @ 2019-06-09 20:45 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: netdev, linux-gpio, linux-amlogic, linus.walleij, bgolaszewski,
	peppe.cavallaro, alexandre.torgue, joabreu, devicetree,
	narmstrong, khilman, linux-kernel, davem, linux-arm-kernel

> Patch #1 and #4 are minor cleanups which follow the boyscout rule:
> "Always leave the campground cleaner than you found it."

> I
> am also looking for suggestions how to handle these cross-tree changes
> (patch #2 belongs to the linux-gpio tree, patches #1, 3 and #4 should
> go through the net-next tree. I will re-send patch #5 separately as
> this should go through Kevin's linux-amlogic tree).

Hi Martin

Patches 1 and 4 don't seem to have and dependencies. So i would
suggest splitting them out and submitting them to netdev for merging
independent of the rest.

Linus can probably create a stable branch with the GPIO changes, which
David can pull into net-next, and then apply the stmmac changes on
top.

	Andrew

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

* Re: [RFC next v1 3/5] net: stmmac: use GPIO descriptors in stmmac_mdio_reset
  2019-06-09 18:06 ` [RFC next v1 3/5] net: stmmac: use GPIO descriptors in stmmac_mdio_reset Martin Blumenstingl
@ 2019-06-09 20:52   ` Andrew Lunn
  2019-06-09 21:50   ` Linus Walleij
  1 sibling, 0 replies; 24+ messages in thread
From: Andrew Lunn @ 2019-06-09 20:52 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: netdev, linux-gpio, linux-amlogic, linus.walleij, bgolaszewski,
	peppe.cavallaro, alexandre.torgue, joabreu, devicetree,
	narmstrong, khilman, linux-kernel, davem, linux-arm-kernel

> +		struct gpio_desc *reset_gpio;
> +
>  		if (data->reset_gpio < 0) {
>  			struct device_node *np = priv->device->of_node;
>  
> -			data->reset_gpio = of_get_named_gpio(np,
> -						"snps,reset-gpio", 0);
> -			if (data->reset_gpio < 0)
> -				return 0;
> +			reset_gpio = devm_gpiod_get_optional(priv->device,
> +							     "snps,reset",
> +							     GPIOD_OUT_LOW);
> +			if (IS_ERR(reset_gpio))
> +				return PTR_ERR(reset_gpio);
>  
> -			data->active_low = of_property_read_bool(np,
> -						"snps,reset-active-low");

Hi Martin

I think you need to keep this here. You can then use it to decide how
to change gpio_desc to remove flags that should be ignored.

   Andrew

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

* Re: [RFC next v1 5/5] arm64: dts: meson: g12a: x96-max: fix the Ethernet PHY reset line
  2019-06-09 18:06 ` [RFC next v1 5/5] arm64: dts: meson: g12a: x96-max: fix the Ethernet PHY reset line Martin Blumenstingl
@ 2019-06-09 21:17   ` Linus Walleij
  2019-06-09 21:36     ` Martin Blumenstingl
  0 siblings, 1 reply; 24+ messages in thread
From: Linus Walleij @ 2019-06-09 21:17 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: netdev, open list:GPIO SUBSYSTEM, open list:ARM/Amlogic Meson...,
	Bartosz Golaszewski, Giuseppe CAVALLARO, Alexandre TORGUE,
	Jose Abreu,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	David S. Miller, Linux ARM, linux-kernel, Kevin Hilman,
	Neil Armstrong

On Sun, Jun 9, 2019 at 8:06 PM Martin Blumenstingl
<martin.blumenstingl@googlemail.com> wrote:

> The PHY reset line and interrupt line are swapped on the X96 Max
> compared to the Odroid-N2 schematics. This means:
> - GPIOZ_14 is the interrupt line (on the Odroid-N2 it's the reset line)
> - GPIOZ_15 is the reset line (on the Odroid-N2 it's the interrupt line)
>
> Also the GPIOZ_14 and GPIOZ_15 pins are special. The datasheet describes
> that they are "3.3V input tolerant open drain (OD) output pins". This
> means the GPIO controller can drive the output LOW to reset the PHY. To
> release the reset it can only switch the pin to input mode. The output
> cannot be driven HIGH for these pins.
> This requires configuring the reset line as GPIO_OPEN_SOURCE because
> otherwise the PHY will be stuck in "reset" state (because driving the
> pin HIGH seeems to result in the same signal as driving it LOW).

This far it seems all right.

> Switch to GPIOZ_15 for the reset GPIO with the correct flags and drop
> the "snps,reset-active-low" property as this is now encoded in the
> GPIO_OPEN_SOURCE flag.

Open source doesn't imply active low.

We have this in stmmac_mdio_reset():

                gpio_direction_output(data->reset_gpio,
                                      data->active_low ? 1 : 0);
                if (data->delays[0])
                        msleep(DIV_ROUND_UP(data->delays[0], 1000));

                gpio_set_value(data->reset_gpio, data->active_low ? 0 : 1);
                if (data->delays[1])
                        msleep(DIV_ROUND_UP(data->delays[1], 1000));

                gpio_set_value(data->reset_gpio, data->active_low ? 1 : 0);
                if (data->delays[2])
                        msleep(DIV_ROUND_UP(data->delays[2], 1000));

If "snps,reset-active-low" was set it results in the sequence 1, 0, 1
if it is not set it results in the sequence 0, 1, 0.

The high (reset) is asserted by switching the pin into high-z open drain
mode, which happens by switching the line into input mode in some
cases.

I think the real reason it works now is that reset is actually active high.

It makes a lot of sense, since if it resets the device when set as input
(open drain) it holds all devices on that line in reset, which is likely
what you want as most GPIOs come up as inputs (open drain).
A pull-up resistor will ascertain that the devices are in reset.

After power on you need to actively de-assert the reset (to low) for
it to go out of reset.

> Fixes: 51d116557b2044 ("arm64: dts: meson-g12a-x96-max: Add Gigabit Ethernet Support")
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>

Other than the commit message:
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

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

* Re: [RFC next v1 2/5] gpio: of: parse stmmac PHY reset line specific active-low property
  2019-06-09 20:38   ` Andrew Lunn
@ 2019-06-09 21:21     ` Martin Blumenstingl
  2019-06-09 21:29       ` Linus Walleij
  0 siblings, 1 reply; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-09 21:21 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: netdev, linux-gpio, linux-amlogic, linus.walleij, bgolaszewski,
	peppe.cavallaro, alexandre.torgue, joabreu, devicetree,
	Neil Armstrong, khilman, linux-kernel, davem, linux-arm-kernel

Hi Andrew,

On Sun, Jun 9, 2019 at 10:38 PM Andrew Lunn <andrew@lunn.ch> wrote:
>
> On Sun, Jun 09, 2019 at 08:06:18PM +0200, Martin Blumenstingl wrote:
> > The stmmac driver currently ignores the GPIO flags which are passed via
> > devicetree because it operates with legacy GPIO numbers instead of GPIO
> > descriptors.
>
> Hi Martin
>
> I don't think this is the reason. I think historically stmmac messed
> up and ignored the flags. There are a number of device tree blobs
> which have the incorrect flag value, but since it was always ignored,
> it did not matter. Then came along a board which really did need the
> flag, but it was too late, it could not be enabled because too many
> boards would break. So the hack was made, and snps,reset-active-low
> was added.
that seems appropriate. I don't know whether you can fetch the GPIO
flags when using legacy GPIO numbers.
so it may also be a mix of your explanation and mine.
in the end it's the same though: stmmac ignores the GPIO flags

> Since snps,reset-active-low is a hack, it should not be in the
> core. Please don't add it to gpiolib-of.c, keep it within stmmac
> driver.
I don't know how to keep backwards compatibility with old .dtb / .dts
when moving this into the stmmac driver again.

let's assume I put the "snps,reset-active-low" inversion logic back into stmmac.
then I need to ignore the flags because some .dts file use the flag
GPIO_ACTIVE_LOW *and* set "snps,reset-active-low" at the same time.
"snps,reset-active-low" would then invert GPIO_ACTIVE_LOW again, which
basically results in GPIO_ACTIVE_HIGH

however, I can't ignore the flags because then I'm losing the
information I need for the newer Amlogic SoCs like open drain / open
source.

so the logic that I need is:
- use GPIO flags from .dtb / .dts
- set GPIO_ACTIVE_LOW in addition to the flags if
"snps,reset-active-low" is set (this is different to "always invert
the output value")

my understanding that of_gpio_flags_quirks (which I'm touching with
this patch) is supposed to manage similar quirks to what we have in
stmmac (it also contains some regulator and MMC quirks too).
however, that's exactly the reason why I decided to mark this as RFC -
so I'm eager to hear Linus comments on this


Martin

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

* Re: [RFC next v1 2/5] gpio: of: parse stmmac PHY reset line specific active-low property
  2019-06-09 21:21     ` Martin Blumenstingl
@ 2019-06-09 21:29       ` Linus Walleij
  0 siblings, 0 replies; 24+ messages in thread
From: Linus Walleij @ 2019-06-09 21:29 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: Andrew Lunn, netdev, open list:GPIO SUBSYSTEM,
	open list:ARM/Amlogic Meson...,
	Bartosz Golaszewski, Giuseppe CAVALLARO, Alexandre TORGUE,
	Jose Abreu,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	Neil Armstrong, Kevin Hilman, linux-kernel, David S. Miller,
	Linux ARM

On Sun, Jun 9, 2019 at 11:21 PM Martin Blumenstingl
<martin.blumenstingl@googlemail.com> wrote:

> my understanding that of_gpio_flags_quirks (which I'm touching with
> this patch) is supposed to manage similar quirks to what we have in
> stmmac (it also contains some regulator and MMC quirks too).
> however, that's exactly the reason why I decided to mark this as RFC -
> so I'm eager to hear Linus comments on this

The idea with the quirks in gpiolib-of.c is to make device drivers simpler,
and phase them over to ignoring quirks for mistakes done in the early
days of DT standardization. This feature of the gpiolib API is supposed
to make it "narrow and deep": make the generic case simple
and handle any hardware description languages (DT or ACPI or
board files) and quirks (mostly historical) under the hood. Especially
drivers should not need to worry about polarity inversion instead just
grab a GPIO descriptor and play away with it, asserting it as
1 and deasserting it as 0 whether that is the right polarity or not,
the gpiolib should keep track of polarity no matter how that is described,
even with historical weird bools like "snps,active-low" etc.

So I think you are probably doing the right thing here.
This patch is:
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

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

* Re: [RFC next v1 5/5] arm64: dts: meson: g12a: x96-max: fix the Ethernet PHY reset line
  2019-06-09 21:17   ` Linus Walleij
@ 2019-06-09 21:36     ` Martin Blumenstingl
  2019-06-09 22:06       ` Linus Walleij
  0 siblings, 1 reply; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-09 21:36 UTC (permalink / raw)
  To: Linus Walleij
  Cc: netdev, open list:GPIO SUBSYSTEM, open list:ARM/Amlogic Meson...,
	Bartosz Golaszewski, Giuseppe CAVALLARO, Alexandre TORGUE,
	Jose Abreu,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	David S. Miller, Linux ARM, linux-kernel, Kevin Hilman,
	Neil Armstrong

Hi Linus,

On Sun, Jun 9, 2019 at 11:17 PM Linus Walleij <linus.walleij@linaro.org> wrote:
>
> On Sun, Jun 9, 2019 at 8:06 PM Martin Blumenstingl
> <martin.blumenstingl@googlemail.com> wrote:
>
> > The PHY reset line and interrupt line are swapped on the X96 Max
> > compared to the Odroid-N2 schematics. This means:
> > - GPIOZ_14 is the interrupt line (on the Odroid-N2 it's the reset line)
> > - GPIOZ_15 is the reset line (on the Odroid-N2 it's the interrupt line)
> >
> > Also the GPIOZ_14 and GPIOZ_15 pins are special. The datasheet describes
> > that they are "3.3V input tolerant open drain (OD) output pins". This
> > means the GPIO controller can drive the output LOW to reset the PHY. To
> > release the reset it can only switch the pin to input mode. The output
> > cannot be driven HIGH for these pins.
> > This requires configuring the reset line as GPIO_OPEN_SOURCE because
> > otherwise the PHY will be stuck in "reset" state (because driving the
> > pin HIGH seeems to result in the same signal as driving it LOW).
>
> This far it seems all right.
...except the "seeems" typo which I just noticed.
thank you for sanity-checking this so far!

> > Switch to GPIOZ_15 for the reset GPIO with the correct flags and drop
> > the "snps,reset-active-low" property as this is now encoded in the
> > GPIO_OPEN_SOURCE flag.
>
> Open source doesn't imply active low.
>
> We have this in stmmac_mdio_reset():
>
>                 gpio_direction_output(data->reset_gpio,
>                                       data->active_low ? 1 : 0);
>                 if (data->delays[0])
>                         msleep(DIV_ROUND_UP(data->delays[0], 1000));
>
>                 gpio_set_value(data->reset_gpio, data->active_low ? 0 : 1);
>                 if (data->delays[1])
>                         msleep(DIV_ROUND_UP(data->delays[1], 1000));
>
>                 gpio_set_value(data->reset_gpio, data->active_low ? 1 : 0);
>                 if (data->delays[2])
>                         msleep(DIV_ROUND_UP(data->delays[2], 1000));
>
> If "snps,reset-active-low" was set it results in the sequence 1, 0, 1
> if it is not set it results in the sequence 0, 1, 0.
I'm changing this logic with earlier patches of this series.
can you please look at these as well because GPIO_OPEN_SOURCE doesn't
work with the old version of stmmac_mdio_reset() that you are showing.

> The high (reset) is asserted by switching the pin into high-z open drain
> mode, which happens by switching the line into input mode in some
> cases.
>
> I think the real reason it works now is that reset is actually active high.
let me write down what I definitely know so far

the RTL8211F PHY wants the reset line to be LOW for a few milliseconds
to put it into reset mode.
driving the reset line HIGH again takes it out of reset.

Odroid-N2's schematics [0] (page 30) shows that there's a pull-up for
the PHYRSTB pin, which is also connected to the NRST signal which is
GPIOZ_15

> It makes a lot of sense, since if it resets the device when set as input
> (open drain) it holds all devices on that line in reset, which is likely
> what you want as most GPIOs come up as inputs (open drain).
> A pull-up resistor will ascertain that the devices are in reset.
my understanding is that the pull-up resistor holds it out of reset
driving GPIOZ_15's (open drain) output LOW pulls the signal to ground
and asserts the reset

> Other than the commit message:
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
thank you for looking into this!


Martin


[0] https://dn.odroid.com/S922X/ODROID-N2/Schematic/odroid-n2_rev0.4_20190307.pdf

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

* Re: [RFC next v1 3/5] net: stmmac: use GPIO descriptors in stmmac_mdio_reset
  2019-06-09 18:06 ` [RFC next v1 3/5] net: stmmac: use GPIO descriptors in stmmac_mdio_reset Martin Blumenstingl
  2019-06-09 20:52   ` Andrew Lunn
@ 2019-06-09 21:50   ` Linus Walleij
  1 sibling, 0 replies; 24+ messages in thread
From: Linus Walleij @ 2019-06-09 21:50 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: netdev, open list:GPIO SUBSYSTEM, open list:ARM/Amlogic Meson...,
	Bartosz Golaszewski, Giuseppe CAVALLARO, Alexandre TORGUE,
	Jose Abreu,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	David S. Miller, Linux ARM, linux-kernel, Kevin Hilman,
	Neil Armstrong

On Sun, Jun 9, 2019 at 8:06 PM Martin Blumenstingl
<martin.blumenstingl@googlemail.com> wrote:

> Switch stmmac_mdio_reset to use GPIO descriptors. GPIO core handles the
> "snps,reset-gpio" for GPIO descriptors so we don't need to take care of
> it inside the driver anymore.
>
> The advantage of this is that we now preserve the GPIO flags which are
> passed via devicetree. This is required on some newer Amlogic boards
> which use an Open Drain pin for the reset GPIO. This pin can only output
> a LOW signal or switch to input mode but it cannot output a HIGH signal.
> There are already devicetree bindings for these special cases and GPIO
> core already takes care of them but only if we use GPIO descriptors
> instead of GPIO numbers.
>
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>

This is in line with how I want the gpiolib to just swallow all quirks,
so:
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

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

* Re: [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO
  2019-06-09 20:45 ` [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Andrew Lunn
@ 2019-06-09 21:52   ` Linus Walleij
  2019-06-09 22:32   ` Martin Blumenstingl
  2019-06-10 11:47   ` Maxime Ripard
  2 siblings, 0 replies; 24+ messages in thread
From: Linus Walleij @ 2019-06-09 21:52 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: Martin Blumenstingl, netdev, open list:GPIO SUBSYSTEM,
	open list:ARM/Amlogic Meson...,
	Bartosz Golaszewski, Giuseppe CAVALLARO, Alexandre TORGUE,
	Jose Abreu,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	Neil Armstrong, Kevin Hilman, linux-kernel, David S. Miller,
	Linux ARM

On Sun, Jun 9, 2019 at 10:45 PM Andrew Lunn <andrew@lunn.ch> wrote:

> Linus can probably create a stable branch with the GPIO changes, which
> David can pull into net-next, and then apply the stmmac changes on
> top.

Sure thing, just tell me what to queue and I'll create an immutable
branch for this that David can pull.

Yours,
Linus Walleij

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

* Re: [RFC next v1 5/5] arm64: dts: meson: g12a: x96-max: fix the Ethernet PHY reset line
  2019-06-09 21:36     ` Martin Blumenstingl
@ 2019-06-09 22:06       ` Linus Walleij
  2019-06-09 22:28         ` Martin Blumenstingl
  0 siblings, 1 reply; 24+ messages in thread
From: Linus Walleij @ 2019-06-09 22:06 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: netdev, open list:GPIO SUBSYSTEM, open list:ARM/Amlogic Meson...,
	Bartosz Golaszewski, Giuseppe CAVALLARO, Alexandre TORGUE,
	Jose Abreu,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	David S. Miller, Linux ARM, linux-kernel, Kevin Hilman,
	Neil Armstrong

On Sun, Jun 9, 2019 at 11:36 PM Martin Blumenstingl
<martin.blumenstingl@googlemail.com> wrote:

> > If "snps,reset-active-low" was set it results in the sequence 1, 0, 1
> > if it is not set it results in the sequence 0, 1, 0.
>
> I'm changing this logic with earlier patches of this series.
> can you please look at these as well because GPIO_OPEN_SOURCE doesn't
> work with the old version of stmmac_mdio_reset() that you are showing.

OK but the logic is the same, just that the polarity handling is moved
into gpiolib.

> > The high (reset) is asserted by switching the pin into high-z open drain
> > mode, which happens by switching the line into input mode in some
> > cases.
> >
> > I think the real reason it works now is that reset is actually active high.
>
> let me write down what I definitely know so far
>
> the RTL8211F PHY wants the reset line to be LOW for a few milliseconds
> to put it into reset mode.
> driving the reset line HIGH again takes it out of reset.
>
> Odroid-N2's schematics [0] (page 30) shows that there's a pull-up for
> the PHYRSTB pin, which is also connected to the NRST signal which is
> GPIOZ_15

Looks correct, R143 is indeed a pull up indicating that the line is
open drain, active low.

> > It makes a lot of sense, since if it resets the device when set as input
> > (open drain) it holds all devices on that line in reset, which is likely
> > what you want as most GPIOs come up as inputs (open drain).
> > A pull-up resistor will ascertain that the devices are in reset.
>
> my understanding is that the pull-up resistor holds it out of reset
> driving GPIOZ_15's (open drain) output LOW pulls the signal to ground
> and asserts the reset

Yep that seems correct.

Oh I guess it is this:

        amlogic,tx-delay-ns = <2>;
-       snps,reset-gpio = <&gpio GPIOZ_14 0>;
+       snps,reset-gpio = <&gpio GPIOZ_15 GPIO_OPEN_SOURCE>;
        snps,reset-delays-us = <0 10000 1000000>;
-       snps,reset-active-low;

Can you try:
snps,reset-gpio = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
?

Open source is nominally (and rarely) used for lines that are active high.
For lines that are active low, we want to use open drain combined
with active low.

Yours,
Linus Walleij

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

* Re: [RFC next v1 5/5] arm64: dts: meson: g12a: x96-max: fix the Ethernet PHY reset line
  2019-06-09 22:06       ` Linus Walleij
@ 2019-06-09 22:28         ` Martin Blumenstingl
  0 siblings, 0 replies; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-09 22:28 UTC (permalink / raw)
  To: Linus Walleij
  Cc: netdev, open list:GPIO SUBSYSTEM, open list:ARM/Amlogic Meson...,
	Bartosz Golaszewski, Giuseppe CAVALLARO, Alexandre TORGUE,
	Jose Abreu,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	David S. Miller, Linux ARM, linux-kernel, Kevin Hilman,
	Neil Armstrong

Hi Linus,

On Mon, Jun 10, 2019 at 12:06 AM Linus Walleij <linus.walleij@linaro.org> wrote:
>
> On Sun, Jun 9, 2019 at 11:36 PM Martin Blumenstingl
> <martin.blumenstingl@googlemail.com> wrote:
>
> > > If "snps,reset-active-low" was set it results in the sequence 1, 0, 1
> > > if it is not set it results in the sequence 0, 1, 0.
> >
> > I'm changing this logic with earlier patches of this series.
> > can you please look at these as well because GPIO_OPEN_SOURCE doesn't
> > work with the old version of stmmac_mdio_reset() that you are showing.
>
> OK but the logic is the same, just that the polarity handling is moved
> into gpiolib.
>
> > > The high (reset) is asserted by switching the pin into high-z open drain
> > > mode, which happens by switching the line into input mode in some
> > > cases.
> > >
> > > I think the real reason it works now is that reset is actually active high.
> >
> > let me write down what I definitely know so far
> >
> > the RTL8211F PHY wants the reset line to be LOW for a few milliseconds
> > to put it into reset mode.
> > driving the reset line HIGH again takes it out of reset.
> >
> > Odroid-N2's schematics [0] (page 30) shows that there's a pull-up for
> > the PHYRSTB pin, which is also connected to the NRST signal which is
> > GPIOZ_15
>
> Looks correct, R143 is indeed a pull up indicating that the line is
> open drain, active low.
good so far

> > > It makes a lot of sense, since if it resets the device when set as input
> > > (open drain) it holds all devices on that line in reset, which is likely
> > > what you want as most GPIOs come up as inputs (open drain).
> > > A pull-up resistor will ascertain that the devices are in reset.
> >
> > my understanding is that the pull-up resistor holds it out of reset
> > driving GPIOZ_15's (open drain) output LOW pulls the signal to ground
> > and asserts the reset
>
> Yep that seems correct.
>
> Oh I guess it is this:
>
>         amlogic,tx-delay-ns = <2>;
> -       snps,reset-gpio = <&gpio GPIOZ_14 0>;
> +       snps,reset-gpio = <&gpio GPIOZ_15 GPIO_OPEN_SOURCE>;
>         snps,reset-delays-us = <0 10000 1000000>;
> -       snps,reset-active-low;
>
> Can you try:
> snps,reset-gpio = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
> ?
I tried it and it works!

> Open source is nominally (and rarely) used for lines that are active high.
> For lines that are active low, we want to use open drain combined
> with active low.
thank you for the explanation - I'll take your version for v2 :)


Martin

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

* Re: [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO
  2019-06-09 20:45 ` [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Andrew Lunn
  2019-06-09 21:52   ` Linus Walleij
@ 2019-06-09 22:32   ` Martin Blumenstingl
  2019-06-10 11:47   ` Maxime Ripard
  2 siblings, 0 replies; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-09 22:32 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: netdev, linux-gpio, linux-amlogic, linus.walleij, bgolaszewski,
	peppe.cavallaro, alexandre.torgue, joabreu, devicetree,
	Neil Armstrong, khilman, linux-kernel, davem, linux-arm-kernel

Hi Andrew,

On Sun, Jun 9, 2019 at 10:45 PM Andrew Lunn <andrew@lunn.ch> wrote:
>
> > Patch #1 and #4 are minor cleanups which follow the boyscout rule:
> > "Always leave the campground cleaner than you found it."
>
> > I
> > am also looking for suggestions how to handle these cross-tree changes
> > (patch #2 belongs to the linux-gpio tree, patches #1, 3 and #4 should
> > go through the net-next tree. I will re-send patch #5 separately as
> > this should go through Kevin's linux-amlogic tree).
>
> Hi Martin
>
> Patches 1 and 4 don't seem to have and dependencies. So i would
> suggest splitting them out and submitting them to netdev for merging
> independent of the rest.
OK, I will do that but after the GPIO changes are applied because only
then I can get rid of that "np" variable

> Linus can probably create a stable branch with the GPIO changes, which
> David can pull into net-next, and then apply the stmmac changes on
> top.
let's go this way since Linus is happy with that route also.
I'll re-spin v2 tomorrow


Martin

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

* Re: [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO
  2019-06-09 20:45 ` [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Andrew Lunn
  2019-06-09 21:52   ` Linus Walleij
  2019-06-09 22:32   ` Martin Blumenstingl
@ 2019-06-10 11:47   ` Maxime Ripard
  2019-06-10 12:31     ` Martin Blumenstingl
  2 siblings, 1 reply; 24+ messages in thread
From: Maxime Ripard @ 2019-06-10 11:47 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: Martin Blumenstingl, netdev, linux-gpio, linux-amlogic,
	linus.walleij, bgolaszewski, peppe.cavallaro, alexandre.torgue,
	joabreu, devicetree, narmstrong, khilman, linux-kernel, davem,
	linux-arm-kernel

[-- Attachment #1: Type: text/plain, Size: 1057 bytes --]

Hi Andrew,

On Sun, Jun 09, 2019 at 10:45:10PM +0200, Andrew Lunn wrote:
> > Patch #1 and #4 are minor cleanups which follow the boyscout rule:
> > "Always leave the campground cleaner than you found it."
>
> > I
> > am also looking for suggestions how to handle these cross-tree changes
> > (patch #2 belongs to the linux-gpio tree, patches #1, 3 and #4 should
> > go through the net-next tree. I will re-send patch #5 separately as
> > this should go through Kevin's linux-amlogic tree).
>
> Patches 1 and 4 don't seem to have and dependencies. So i would
> suggest splitting them out and submitting them to netdev for merging
> independent of the rest.

Jumping on the occasion of that series. These properties have been
defined to deal with phy reset, while it seems that the PHY core can
now handle that pretty easily through generic properties.

Wouldn't it make more sense to just move to that generic properties
that already deals with the flags properly?

Maxime

--
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

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

* Re: [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO
  2019-06-10 11:47   ` Maxime Ripard
@ 2019-06-10 12:31     ` Martin Blumenstingl
  2019-06-10 13:25       ` Andrew Lunn
  2019-06-10 13:51       ` Maxime Ripard
  0 siblings, 2 replies; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-10 12:31 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: Andrew Lunn, netdev, linux-gpio, linux-amlogic, linus.walleij,
	bgolaszewski, peppe.cavallaro, alexandre.torgue, joabreu,
	devicetree, Neil Armstrong, khilman, linux-kernel, davem,
	linux-arm-kernel

Hi Maxime,

On Mon, Jun 10, 2019 at 1:47 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
>
> Hi Andrew,
>
> On Sun, Jun 09, 2019 at 10:45:10PM +0200, Andrew Lunn wrote:
> > > Patch #1 and #4 are minor cleanups which follow the boyscout rule:
> > > "Always leave the campground cleaner than you found it."
> >
> > > I
> > > am also looking for suggestions how to handle these cross-tree changes
> > > (patch #2 belongs to the linux-gpio tree, patches #1, 3 and #4 should
> > > go through the net-next tree. I will re-send patch #5 separately as
> > > this should go through Kevin's linux-amlogic tree).
> >
> > Patches 1 and 4 don't seem to have and dependencies. So i would
> > suggest splitting them out and submitting them to netdev for merging
> > independent of the rest.
>
> Jumping on the occasion of that series. These properties have been
> defined to deal with phy reset, while it seems that the PHY core can
> now handle that pretty easily through generic properties.
>
> Wouldn't it make more sense to just move to that generic properties
> that already deals with the flags properly?
thank you for bringing this up!
if anyone else (just like me) doesn't know about it, there are generic
bindings defined here: [0]

I just tested this on my X96 Max by defining the following properties
inside the PHY node:
  reset-delay-us = <10000>;
  reset-assert-us = <10000>;
  reset-deassert-us = <10000>;
  reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;

that means I don't need any stmmac patches which seems nice.
instead I can submit a patch to mark the snps,reset-gpio properties in
the dt-bindings deprecated (and refer to the generic bindings instead)
what do you think?


Martin


[0] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/net/phy.txt?id=b54dd90cab00f5b64ed8ce533991c20bf781a3cd#n58

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

* Re: [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO
  2019-06-10 12:31     ` Martin Blumenstingl
@ 2019-06-10 13:25       ` Andrew Lunn
  2019-06-10 15:52         ` Martin Blumenstingl
  2019-06-10 13:51       ` Maxime Ripard
  1 sibling, 1 reply; 24+ messages in thread
From: Andrew Lunn @ 2019-06-10 13:25 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: Maxime Ripard, netdev, linux-gpio, linux-amlogic, linus.walleij,
	bgolaszewski, peppe.cavallaro, alexandre.torgue, joabreu,
	devicetree, Neil Armstrong, khilman, linux-kernel, davem,
	linux-arm-kernel

> if anyone else (just like me) doesn't know about it, there are generic
> bindings defined here: [0]
> 
> I just tested this on my X96 Max by defining the following properties
> inside the PHY node:
>   reset-delay-us = <10000>;
>   reset-assert-us = <10000>;
>   reset-deassert-us = <10000>;
>   reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
> 
> that means I don't need any stmmac patches which seems nice.
> instead I can submit a patch to mark the snps,reset-gpio properties in
> the dt-bindings deprecated (and refer to the generic bindings instead)
> what do you think?

Hi Martin

I know Linus wants to replace all users of old GPIO numbers with gpio
descriptors. So your patches have value, even if you don't need them.

One other things to watch out for. We have generic code at two
levels. Either the GPIO is per PHY, and the properties should be in
the PHY node, or the reset is for all PHYs of an MDIO bus, and then
the properties should be in the MDIO node.

    Andrew

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

* Re: [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO
  2019-06-10 12:31     ` Martin Blumenstingl
  2019-06-10 13:25       ` Andrew Lunn
@ 2019-06-10 13:51       ` Maxime Ripard
  2019-06-10 15:51         ` Martin Blumenstingl
  1 sibling, 1 reply; 24+ messages in thread
From: Maxime Ripard @ 2019-06-10 13:51 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: Andrew Lunn, netdev, linux-gpio, linux-amlogic, linus.walleij,
	bgolaszewski, peppe.cavallaro, alexandre.torgue, joabreu,
	devicetree, Neil Armstrong, khilman, linux-kernel, davem,
	linux-arm-kernel

[-- Attachment #1: Type: text/plain, Size: 2115 bytes --]

Hi Martin,

On Mon, Jun 10, 2019 at 02:31:17PM +0200, Martin Blumenstingl wrote:
> On Mon, Jun 10, 2019 at 1:47 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
> >
> > Hi Andrew,
> >
> > On Sun, Jun 09, 2019 at 10:45:10PM +0200, Andrew Lunn wrote:
> > > > Patch #1 and #4 are minor cleanups which follow the boyscout rule:
> > > > "Always leave the campground cleaner than you found it."
> > >
> > > > I
> > > > am also looking for suggestions how to handle these cross-tree changes
> > > > (patch #2 belongs to the linux-gpio tree, patches #1, 3 and #4 should
> > > > go through the net-next tree. I will re-send patch #5 separately as
> > > > this should go through Kevin's linux-amlogic tree).
> > >
> > > Patches 1 and 4 don't seem to have and dependencies. So i would
> > > suggest splitting them out and submitting them to netdev for merging
> > > independent of the rest.
> >
> > Jumping on the occasion of that series. These properties have been
> > defined to deal with phy reset, while it seems that the PHY core can
> > now handle that pretty easily through generic properties.
> >
> > Wouldn't it make more sense to just move to that generic properties
> > that already deals with the flags properly?
> thank you for bringing this up!
> if anyone else (just like me) doesn't know about it, there are generic
> bindings defined here: [0]
>
> I just tested this on my X96 Max by defining the following properties
> inside the PHY node:
>   reset-delay-us = <10000>;
>   reset-assert-us = <10000>;
>   reset-deassert-us = <10000>;
>   reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
>
> that means I don't need any stmmac patches which seems nice.

I'm glad it works for you :)

> instead I can submit a patch to mark the snps,reset-gpio properties in
> the dt-bindings deprecated (and refer to the generic bindings instead)
> what do you think?

I already did as part of the binding reworks I did earlier today:
http://lists.infradead.org/pipermail/linux-arm-kernel/2019-June/658427.html

Maxime

--
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

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

* Re: [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO
  2019-06-10 13:51       ` Maxime Ripard
@ 2019-06-10 15:51         ` Martin Blumenstingl
  0 siblings, 0 replies; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-10 15:51 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: Andrew Lunn, netdev, linux-gpio, linux-amlogic, linus.walleij,
	bgolaszewski, peppe.cavallaro, alexandre.torgue, joabreu,
	devicetree, Neil Armstrong, khilman, linux-kernel, davem,
	linux-arm-kernel

On Mon, Jun 10, 2019 at 3:51 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
>
> Hi Martin,
>
> On Mon, Jun 10, 2019 at 02:31:17PM +0200, Martin Blumenstingl wrote:
> > On Mon, Jun 10, 2019 at 1:47 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
> > >
> > > Hi Andrew,
> > >
> > > On Sun, Jun 09, 2019 at 10:45:10PM +0200, Andrew Lunn wrote:
> > > > > Patch #1 and #4 are minor cleanups which follow the boyscout rule:
> > > > > "Always leave the campground cleaner than you found it."
> > > >
> > > > > I
> > > > > am also looking for suggestions how to handle these cross-tree changes
> > > > > (patch #2 belongs to the linux-gpio tree, patches #1, 3 and #4 should
> > > > > go through the net-next tree. I will re-send patch #5 separately as
> > > > > this should go through Kevin's linux-amlogic tree).
> > > >
> > > > Patches 1 and 4 don't seem to have and dependencies. So i would
> > > > suggest splitting them out and submitting them to netdev for merging
> > > > independent of the rest.
> > >
> > > Jumping on the occasion of that series. These properties have been
> > > defined to deal with phy reset, while it seems that the PHY core can
> > > now handle that pretty easily through generic properties.
> > >
> > > Wouldn't it make more sense to just move to that generic properties
> > > that already deals with the flags properly?
> > thank you for bringing this up!
> > if anyone else (just like me) doesn't know about it, there are generic
> > bindings defined here: [0]
> >
> > I just tested this on my X96 Max by defining the following properties
> > inside the PHY node:
> >   reset-delay-us = <10000>;
> >   reset-assert-us = <10000>;
> >   reset-deassert-us = <10000>;
> >   reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
> >
> > that means I don't need any stmmac patches which seems nice.
>
> I'm glad it works for you :)
>
> > instead I can submit a patch to mark the snps,reset-gpio properties in
> > the dt-bindings deprecated (and refer to the generic bindings instead)
> > what do you think?
>
> I already did as part of the binding reworks I did earlier today:
> http://lists.infradead.org/pipermail/linux-arm-kernel/2019-June/658427.html
great, thank you - you have my Reviewed-by!

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

* Re: [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO
  2019-06-10 13:25       ` Andrew Lunn
@ 2019-06-10 15:52         ` Martin Blumenstingl
  0 siblings, 0 replies; 24+ messages in thread
From: Martin Blumenstingl @ 2019-06-10 15:52 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: Maxime Ripard, netdev, linux-gpio, linux-amlogic, linus.walleij,
	bgolaszewski, peppe.cavallaro, alexandre.torgue, joabreu,
	devicetree, Neil Armstrong, khilman, linux-kernel, davem,
	linux-arm-kernel

Hi Andrew,

On Mon, Jun 10, 2019 at 3:25 PM Andrew Lunn <andrew@lunn.ch> wrote:
>
> > if anyone else (just like me) doesn't know about it, there are generic
> > bindings defined here: [0]
> >
> > I just tested this on my X96 Max by defining the following properties
> > inside the PHY node:
> >   reset-delay-us = <10000>;
> >   reset-assert-us = <10000>;
> >   reset-deassert-us = <10000>;
> >   reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
> >
> > that means I don't need any stmmac patches which seems nice.
> > instead I can submit a patch to mark the snps,reset-gpio properties in
> > the dt-bindings deprecated (and refer to the generic bindings instead)
> > what do you think?
>
> Hi Martin
>
> I know Linus wants to replace all users of old GPIO numbers with gpio
> descriptors. So your patches have value, even if you don't need them.
OK, then I will send my patches anyways

> One other things to watch out for. We have generic code at two
> levels. Either the GPIO is per PHY, and the properties should be in
> the PHY node, or the reset is for all PHYs of an MDIO bus, and then
> the properties should be in the MDIO node.
our Amlogic boards only have one PHY and all schematics I'm aware of
route the SoC's GPIO line directly to the PHY's reset line.
so in my opinion defining the resets for the PHY is the right thing to do


Martin

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

end of thread, other threads:[~2019-06-10 15:53 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-09 18:06 [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Martin Blumenstingl
2019-06-09 18:06 ` [RFC next v1 1/5] net: stmmac: drop redundant check in stmmac_mdio_reset Martin Blumenstingl
2019-06-09 18:06 ` [RFC next v1 2/5] gpio: of: parse stmmac PHY reset line specific active-low property Martin Blumenstingl
2019-06-09 20:38   ` Andrew Lunn
2019-06-09 21:21     ` Martin Blumenstingl
2019-06-09 21:29       ` Linus Walleij
2019-06-09 18:06 ` [RFC next v1 3/5] net: stmmac: use GPIO descriptors in stmmac_mdio_reset Martin Blumenstingl
2019-06-09 20:52   ` Andrew Lunn
2019-06-09 21:50   ` Linus Walleij
2019-06-09 18:06 ` [RFC next v1 4/5] net: stmmac: use device_property_read_u32_array to read the reset delays Martin Blumenstingl
2019-06-09 18:06 ` [RFC next v1 5/5] arm64: dts: meson: g12a: x96-max: fix the Ethernet PHY reset line Martin Blumenstingl
2019-06-09 21:17   ` Linus Walleij
2019-06-09 21:36     ` Martin Blumenstingl
2019-06-09 22:06       ` Linus Walleij
2019-06-09 22:28         ` Martin Blumenstingl
2019-06-09 20:45 ` [RFC next v1 0/5] stmmac: honor the GPIO flags for the PHY reset GPIO Andrew Lunn
2019-06-09 21:52   ` Linus Walleij
2019-06-09 22:32   ` Martin Blumenstingl
2019-06-10 11:47   ` Maxime Ripard
2019-06-10 12:31     ` Martin Blumenstingl
2019-06-10 13:25       ` Andrew Lunn
2019-06-10 15:52         ` Martin Blumenstingl
2019-06-10 13:51       ` Maxime Ripard
2019-06-10 15:51         ` Martin Blumenstingl

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).