Skip to contentSkip to conversation

ARM: shmobile: sh-eth pins in DT for armadillo800eva

PATCH In review Guennadi Liakhovetski 5 participants 15 messages Jan 24, 2013 – Jul 8, 2013 1 message not in the archive

Subsystems (9)
lore
Share & tools
lore
#0 lore raw

cover ARM: shmobile: sh-eth pins in DT for armadillo800eva

This patch series gets rid of gpio_request()-style ethernet pin configuration on armadillo800eva in reference implementation.

Guennadi Liakhovetski (3):
pinctrl: add ethernet pin groups to r8a7740
ethernet: add a PHY reset GPIO DT binding to sh_eth
ARM: shmobile: move pin configuration on armadillo800eva-reference to
DT

 Documentation/devicetree/bindings/net/sh_ether.txt |    2 +
 .../boot/dts/r8a7740-armadillo800eva-reference.dts |    7 ++++
 .../board-armadillo800eva-reference.c              |   24 ---------------
 drivers/net/ethernet/renesas/sh_eth.c              |    9 +++++-
 drivers/pinctrl/sh-pfc/pfc-r8a7740.c               |   31 ++++++++++++++++++++
 5 files changed, 48 insertions(+), 25 deletions(-)
Signature · 8 lines
1.7.2.5

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
#1 lore raw

PATCH 1/3 pinctrl: add ethernet pin groups to r8a7740

r8a7740 SoCs have an integrated gigabit ethernet MAC. This patch adds two pin groups: base for 100mbps and additional pins for the gigabit mode.

---
 drivers/pinctrl/sh-pfc/pfc-r8a7740.c |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)
drivers/pinctrl/sh-pfc/pfc-r8a7740.c +31 -0
index 4c92af8..d7f69dd 100644
@@ -2052,6 +2052,29 @@ static const unsigned int mmc0_ctrl_1_mux[] = {
 	MMC1_CMD_PORT104_MARK, MMC1_CLK_PORT103_MARK,
 };
 
+static const unsigned int eth_base_pins[] = {
+	203, 204, 205, 206, 207,
+	183, 184,
+	185, 186, 187, 188,
+	171, 170, 169, 168,
+	161, 163, 164, 174,
+};
+static const unsigned int eth_base_mux[] = {
+	ET_TX_ER_MARK, ET_RX_ER_MARK, ET_CRS_MARK, ET_MDC_MARK, ET_MDIO_MARK,
+	ET_TX_EN_MARK, ET_TX_CLK_MARK,
+	ET_ERXD0_MARK, ET_ERXD1_MARK, ET_ERXD2_MARK, ET_ERXD3_MARK,
+	ET_ETXD0_MARK, ET_ETXD1_MARK, ET_ETXD2_MARK, ET_ETXD3_MARK,
+	ET_RX_DV_MARK, ET_COL_MARK, ET_PHY_INT_MARK, ET_RX_CLK_MARK,
+};
+static const unsigned int eth_gbit_pins[] = {
+	189, 190, 191, 192,
+	167, 166, 173, 172,
+};
+static const unsigned int eth_gbit_mux[] = {
+	ET_ERXD4_MARK, ET_ERXD5_MARK, ET_ERXD6_MARK, ET_ERXD7_MARK,
+	ET_ETXD4_MARK, ET_ETXD5_MARK, ET_ETXD6_MARK, ET_ETXD7_MARK,
+};
+
 static const struct sh_pfc_pin_group pinmux_groups[] = {
 	SH_PFC_PIN_GROUP(lcd0_data8),
 	SH_PFC_PIN_GROUP(lcd0_data9),
@@ -2100,6 +2123,8 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
 	SH_PFC_PIN_GROUP(mmc0_data4_1),
 	SH_PFC_PIN_GROUP(mmc0_data8_1),
 	SH_PFC_PIN_GROUP(mmc0_ctrl_1),
+	SH_PFC_PIN_GROUP(eth_base),
+	SH_PFC_PIN_GROUP(eth_gbit),
 };
 
 static const char * const lcd0_groups[] = {
@@ -2167,6 +2192,11 @@ static const char * const mmc0_groups[] = {
 	"mmc0_ctrl_1",
 };
 
+static const char * const eth_groups[] = {
+	"eth_base",
+	"eth_gbit",
+};
+
 static const struct sh_pfc_function pinmux_functions[] = {
 	SH_PFC_FUNCTION(lcd0),
 	SH_PFC_FUNCTION(lcd1),
@@ -2174,6 +2204,7 @@ static const struct sh_pfc_function pinmux_functions[] = {
 	SH_PFC_FUNCTION(sdhi1),
 	SH_PFC_FUNCTION(sdhi2),
 	SH_PFC_FUNCTION(mmc0),
+	SH_PFC_FUNCTION(eth),
 };
 
 #define PINMUX_FN_BASE	ARRAY_SIZE(pinmux_pins)
Signature · 1 line
1.7.2.5
#2 lore raw

PATCH 1/3 pinctrl: add ethernet pin groups to r8a7740

Hi Guennadi,

Thanks for the patch.

Quoted 52 lines · On Thursday 24 January 2013 17:07:31 Guennadi Liakhovetski wrote:

r8a7740 SoCs have an integrated gigabit ethernet MAC. This patch adds two pin groups: base for 100mbps and additional pins for the gigabit mode.

---
 drivers/pinctrl/sh-pfc/pfc-r8a7740.c |   31 +++++++++++++++++++++++++++++++
1 files changed, 31 insertions(+), 0 deletions(-)
(quoted diff) +0 -0

b/drivers/pinctrl/sh-pfc/pfc-r8a7740.c index 4c92af8..d7f69dd 100644

drivers/pinctrl/sh-pfc/pfc-r8a7740.c +25 -0
@@ -2052,6 +2052,29 @@ static const unsigned int mmc0_ctrl_1_mux[] = {
 	MMC1_CMD_PORT104_MARK, MMC1_CLK_PORT103_MARK,
 };
 
+static const unsigned int eth_base_pins[] = {
+	203, 204, 205, 206, 207,
+	183, 184,
+	185, 186, 187, 188,
+	171, 170, 169, 168,
+	161, 163, 164, 174,
+};
+static const unsigned int eth_base_mux[] = {
+	ET_TX_ER_MARK, ET_RX_ER_MARK, ET_CRS_MARK, ET_MDC_MARK, ET_MDIO_MARK,
+	ET_TX_EN_MARK, ET_TX_CLK_MARK,
+	ET_ERXD0_MARK, ET_ERXD1_MARK, ET_ERXD2_MARK, ET_ERXD3_MARK,
+	ET_ETXD0_MARK, ET_ETXD1_MARK, ET_ETXD2_MARK, ET_ETXD3_MARK,
+	ET_RX_DV_MARK, ET_COL_MARK, ET_PHY_INT_MARK, ET_RX_CLK_MARK,
+};
+static const unsigned int eth_gbit_pins[] = {
+	189, 190, 191, 192,
+	167, 166, 173, 172,
+};
+static const unsigned int eth_gbit_mux[] = {
+	ET_ERXD4_MARK, ET_ERXD5_MARK, ET_ERXD6_MARK, ET_ERXD7_MARK,
+	ET_ETXD4_MARK, ET_ETXD5_MARK, ET_ETXD6_MARK, ET_ETXD7_MARK,
+};
+
 static const struct sh_pfc_pin_group pinmux_groups[] = {
 	SH_PFC_PIN_GROUP(lcd0_data8),
 	SH_PFC_PIN_GROUP(lcd0_data9),
@@ -2100,6 +2123,8 @@ static const struct sh_pfc_pin_group pinmux_groups[] =
 { SH_PFC_PIN_GROUP(mmc0_data4_1),
 	SH_PFC_PIN_GROUP(mmc0_data8_1),
 	SH_PFC_PIN_GROUP(mmc0_ctrl_1),
+	SH_PFC_PIN_GROUP(eth_base),
+	SH_PFC_PIN_GROUP(eth_gbit),
 };
 
 static const char * const lcd0_groups[] = {

drivers/pinctrl/sh-pfc/pfc-r8a7740.c static const char * const mmc0_groups[] = { · line 2199

Quoted 8 lines
drivers/pinctrl/sh-pfc/pfc-r8a7740.c +5 -0
@@ -2167,6 +2192,11 @@ static const char * const mmc0_groups[] = {
 	"mmc0_ctrl_1",
 };
 
+static const char * const eth_groups[] = {
+	"eth_base",
+	"eth_gbit",
+};
+

What about calling the groups mdio (for management), mii, gmii and rmii ? You can duplicate common pins in mii and gmii.

The WOL, GTK_CLK and LINK pins are missing BTW.

Quoted 11 lines
drivers/pinctrl/sh-pfc/pfc-r8a7740.c +1 -0
 static const struct sh_pfc_function pinmux_functions[] = {
 	SH_PFC_FUNCTION(lcd0),
 	SH_PFC_FUNCTION(lcd1),
@@ -2174,6 +2204,7 @@ static const struct sh_pfc_function pinmux_functions[]
 = { SH_PFC_FUNCTION(sdhi1),
 	SH_PFC_FUNCTION(sdhi2),
 	SH_PFC_FUNCTION(mmc0),
+	SH_PFC_FUNCTION(eth),
 };
 
 #define PINMUX_FN_BASE	ARRAY_SIZE(pinmux_pins)
Signature · 3 lines
Regards,

Laurent Pinchart
#3 lore raw

PATCH 2/3 ethernet: add a PHY reset GPIO DT binding to sh_eth

In reply to Guennadi Liakhovetski

If an ethernet PHY can be reset by a GPIO, it can be specified in DT. Add a binding and code to parse it, request the GPIO and take the PHY out of reset.

Cc devicetree-discuss at lists.ozlabs.org
Cc netdev at vger.kernel.org
---
 Documentation/devicetree/bindings/net/sh_ether.txt |    2 ++
 drivers/net/ethernet/renesas/sh_eth.c              |    9 ++++++++-
 2 files changed, 10 insertions(+), 1 deletions(-)
Documentation/devicetree/bindings/net/sh_ether.txt +2 -0
index c11e45d..edaf683 100644
@@ -12,6 +12,7 @@ Required properties:
 - interrupts:                   Interrupt mapping for the sh_eth interrupt
                                 sources (vector id).
 - phy-mode:              String, operation mode of the PHY interface.
+- phy-reset-gpios:              PHY reset GPIO tuple
 - sh-eth,edmac-endian:          String, endian of sh_eth dmac.
 - sh-eth,register-type:         String, register type of sh_eth.
                                 Please select "gigabit", "fast-sh4" or
@@ -37,6 +38,7 @@ Example (armadillo800eva):
 		reg = <0xe9a00000 0x800>, <0xe9a01800 0x800>;
 		interrupts = <0x500>;
 		phy-mode = "mii";
+		phy-reset-gpios = <&gpio 18 0>;
 		sh-eth,edmac-endian = "little";
 		sh-eth,register-type = "gigabit";
 		sh-eth,phy-id = <0>;
drivers/net/ethernet/renesas/sh_eth.c +8 -1
index 1f64848..06035a2 100644
@@ -20,6 +20,7 @@
  *  the file called "COPYING".
  */
 
+#include <linux/gpio.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -33,6 +34,7 @@
 #include <linux/netdevice.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
+#include <linux/of_gpio.h>
 #include <linux/of_platform.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
@@ -2376,10 +2378,11 @@ sh_eth_of_get_register_type(struct device_node *np)
 static struct sh_eth_plat_data *
 sh_eth_parse_dt(struct device *dev, struct net_device *ndev)
 {
-	int ret;
+	int ret, gpio;
 	const char *of_str;
 	struct device_node *np = dev->of_node;
 	struct sh_eth_plat_data *pdata;
+	enum of_gpio_flags flags;
 
 	pdata = devm_kzalloc(dev, sizeof(struct sh_eth_plat_data),
 					GFP_KERNEL);
@@ -2420,6 +2423,10 @@ sh_eth_parse_dt(struct device *dev, struct net_device *ndev)
 	else
 		pdata->needs_init = 0;
 
+	gpio = of_get_named_gpio_flags(np, "phy-reset-gpios", 0, &flags);
+	if (gpio_is_valid(gpio) && !devm_gpio_request(dev, gpio, NULL))
+		gpio_direction_output(gpio, !!(flags & OF_GPIO_ACTIVE_LOW));
+
 #ifdef CONFIG_OF_NET
 	if (!is_valid_ether_addr(ndev->dev_addr)) {
 		const char *macaddr = of_get_mac_address(np);
Signature · 1 line
1.7.2.5
#4 lore raw

Re: [PATCH/RFC 2/3] ethernet: add a PHY reset GPIO DT binding to sh_eth

Hi Guennadi,

Quoted 18 lines · On Thursday 24 January 2013 17:07:32 Guennadi Liakhovetski wrote:

If an ethernet PHY can be reset by a GPIO, it can be specified in DT. Add a binding and code to parse it, request the GPIO and take the PHY out of reset.

Cc devicetree-discuss at lists.ozlabs.org
Cc netdev at vger.kernel.org
---
 Documentation/devicetree/bindings/net/sh_ether.txt |    2 ++
 drivers/net/ethernet/renesas/sh_eth.c              |    9 ++++++++-
 2 files changed, 10 insertions(+), 1 deletions(-)
(quoted diff) +0 -0

b/Documentation/devicetree/bindings/net/sh_ether.txt index c11e45d..edaf683 100644

Documentation/devicetree/bindings/net/sh_ether.txt Required properties: · line 15

Quoted 4 lines
Documentation/devicetree/bindings/net/sh_ether.txt +1 -0
@@ -12,6 +12,7 @@ Required properties:
 - interrupts:                   Interrupt mapping for the sh_eth interrupt
                                 sources (vector id).
 - phy-mode:              String, operation mode of the PHY interface.
+- phy-reset-gpios:              PHY reset GPIO tuple

If you can't have more than one GPIO here, what about calling it phy-reset- gpio ?

Quoted 45 lines
Documentation/devicetree/bindings/net/sh_ether.txt +1 -0
 - sh-eth,edmac-endian:          String, endian of sh_eth dmac.
 - sh-eth,register-type:         String, register type of sh_eth.
                                 Please select "gigabit", "fast-sh4" or
@@ -37,6 +38,7 @@ Example (armadillo800eva):
 		reg = <0xe9a00000 0x800>, <0xe9a01800 0x800>;
 		interrupts = <0x500>;
 		phy-mode = "mii";
+		phy-reset-gpios = <&gpio 18 0>;
 		sh-eth,edmac-endian = "little";
 		sh-eth,register-type = "gigabit";
 		sh-eth,phy-id = <0>;
(quoted diff) +0 -0

b/drivers/net/ethernet/renesas/sh_eth.c index 1f64848..06035a2 100644

drivers/net/ethernet/renesas/sh_eth.c +4 -1
@@ -20,6 +20,7 @@
  *  the file called "COPYING".
  */
 
+#include <linux/gpio.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -33,6 +34,7 @@
 #include <linux/netdevice.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
+#include <linux/of_gpio.h>
 #include <linux/of_platform.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
@@ -2376,10 +2378,11 @@ sh_eth_of_get_register_type(struct device_node *np)
 static struct sh_eth_plat_data *
 sh_eth_parse_dt(struct device *dev, struct net_device *ndev)
 {
-	int ret;
+	int ret, gpio;
 	const char *of_str;
 	struct device_node *np = dev->of_node;
 	struct sh_eth_plat_data *pdata;
+	enum of_gpio_flags flags;
 
 	pdata = devm_kzalloc(dev, sizeof(struct sh_eth_plat_data),
 					GFP_KERNEL);

drivers/net/ethernet/renesas/sh_eth.c sh_eth_parse_dt(struct device *dev, struct net_device · line 2428

Quoted 6 lines
drivers/net/ethernet/renesas/sh_eth.c +3 -0
@@ -2420,6 +2423,10 @@ sh_eth_parse_dt(struct device *dev, struct net_device
 *ndev) else
 		pdata->needs_init = 0;
 
+	gpio = of_get_named_gpio_flags(np, "phy-reset-gpios", 0, &flags);
+	if (gpio_is_valid(gpio) && !devm_gpio_request(dev, gpio, NULL))
+		gpio_direction_output(gpio, !!(flags & OF_GPIO_ACTIVE_LOW));

You could use devm_gpio_request_one() here.

Is there no need to reset the phy at runtime ?

Quoted 4 lines
drivers/net/ethernet/renesas/sh_eth.c +1 -0
+
 #ifdef CONFIG_OF_NET
 	if (!is_valid_ether_addr(ndev->dev_addr)) {
 		const char *macaddr = of_get_mac_address(np);
Signature · 3 lines
Regards,

Laurent Pinchart
#5 lore raw

Re: [PATCH/RFC 2/3] ethernet: add a PHY reset GPIO DT binding to sh_eth

Hi Laurent

Quoted 29 lines · Laurent Pinchart

Hi Guennadi,

Quoted 18 lines · On Thursday 24 January 2013 17:07:32 Guennadi Liakhovetski wrote:

If an ethernet PHY can be reset by a GPIO, it can be specified in DT. Add a binding and code to parse it, request the GPIO and take the PHY out of reset.

Cc devicetree-discuss at lists.ozlabs.org
Cc netdev at vger.kernel.org
---
 Documentation/devicetree/bindings/net/sh_ether.txt |    2 ++
 drivers/net/ethernet/renesas/sh_eth.c              |    9 ++++++++-
 2 files changed, 10 insertions(+), 1 deletions(-)
(quoted diff) +0 -0

b/Documentation/devicetree/bindings/net/sh_ether.txt index c11e45d..edaf683 100644

Documentation/devicetree/bindings/net/sh_ether.txt Required properties: · line 15

Quoted 4 lines
Documentation/devicetree/bindings/net/sh_ether.txt +1 -0
@@ -12,6 +12,7 @@ Required properties:
 - interrupts:                   Interrupt mapping for the sh_eth interrupt
                                 sources (vector id).
 - phy-mode:              String, operation mode of the PHY interface.
+- phy-reset-gpios:              PHY reset GPIO tuple

If you can't have more than one GPIO here, what about calling it phy-reset- gpio ?

Quoted 1 line

From Documentation/devicetree/bindings/gpio/gpio.txt:

<quote>
GPIO properties should be named "[<name>-]gpios".
</quote>

Quoted 48 lines
Quoted 48 lines
Documentation/devicetree/bindings/net/sh_ether.txt +1 -0
 - sh-eth,edmac-endian:          String, endian of sh_eth dmac.
 - sh-eth,register-type:         String, register type of sh_eth.
                                 Please select "gigabit", "fast-sh4" or
@@ -37,6 +38,7 @@ Example (armadillo800eva):
 		reg = <0xe9a00000 0x800>, <0xe9a01800 0x800>;
 		interrupts = <0x500>;
 		phy-mode = "mii";
+		phy-reset-gpios = <&gpio 18 0>;
 		sh-eth,edmac-endian = "little";
 		sh-eth,register-type = "gigabit";
 		sh-eth,phy-id = <0>;
(quoted diff) +0 -0

b/drivers/net/ethernet/renesas/sh_eth.c index 1f64848..06035a2 100644

drivers/net/ethernet/renesas/sh_eth.c +4 -1
@@ -20,6 +20,7 @@
  *  the file called "COPYING".
  */
 
+#include <linux/gpio.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -33,6 +34,7 @@
 #include <linux/netdevice.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
+#include <linux/of_gpio.h>
 #include <linux/of_platform.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
@@ -2376,10 +2378,11 @@ sh_eth_of_get_register_type(struct device_node *np)
 static struct sh_eth_plat_data *
 sh_eth_parse_dt(struct device *dev, struct net_device *ndev)
 {
-	int ret;
+	int ret, gpio;
 	const char *of_str;
 	struct device_node *np = dev->of_node;
 	struct sh_eth_plat_data *pdata;
+	enum of_gpio_flags flags;
 
 	pdata = devm_kzalloc(dev, sizeof(struct sh_eth_plat_data),
 					GFP_KERNEL);
@@ -2420,6 +2423,10 @@ sh_eth_parse_dt(struct device *dev, struct net_device
 *ndev) else
 		pdata->needs_init = 0;
 
Quoted 5 lines

drivers/net/ethernet/renesas/sh_eth.c sh_eth_parse_dt(struct device *dev, struct net_device *ndev) · line 2428

Quoted 3 lines
drivers/net/ethernet/renesas/sh_eth.c +3 -0
+	gpio = of_get_named_gpio_flags(np, "phy-reset-gpios", 0, &flags);
+	if (gpio_is_valid(gpio) && !devm_gpio_request(dev, gpio, NULL))
+		gpio_direction_output(gpio, !!(flags & OF_GPIO_ACTIVE_LOW));

You could use devm_gpio_request_one() here.

Yes, but then the flag would look uglier, something like

devm_gpio_request_one(dev, gpio, flags &
OF_GPIO_ACTIVE_LOW ? GPIOF_OUT_INIT_HIGH :
GPIOF_OUT_INIT_LOW);

Does it really look like an improvement? :)

Quoted 1 line

Is there no need to reset the phy at runtime ?

No idea, I'm not developing the driver, I'm just porting one specific feature from one API to another with no functional changes (apart from postponing setting the GPIO).

Thanks
Guennadi

Quoted 9 lines
Quoted 4 lines
drivers/net/ethernet/renesas/sh_eth.c +1 -0
+
 #ifdef CONFIG_OF_NET
 	if (!is_valid_ether_addr(ndev->dev_addr)) {
 		const char *macaddr = of_get_mac_address(np);
Signature · 3 lines
Regards,

Laurent Pinchart

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/

#6 lore raw

Re: [PATCH/RFC 2/3] ethernet: add a PHY reset GPIO DT binding to sh_eth

Quoted 5 lines · Guennadi Liakhovetski
Quoted 1 line

Is there no need to reset the phy at runtime ?

No idea, I'm not developing the driver, I'm just porting one specific feature from one API to another with no functional changes (apart from postponing setting the GPIO).

Generally Linux relies on resetting the phy via the inband MDIO method, which is what Linux does. It is pretty much never required to reset via the hard pin - but you do need to generate a robust reset edge on the reset pin once after power up.

Jason

A message that is not in the archive (sent off-list or not yet received): 20130125182137.GB7393-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org

#8 lore raw

Re: [PATCH/RFC 2/3] ethernet: add a PHY reset GPIO DT binding to sh_eth

Hi Jason

Sorry for resuming an old thread, but I'd like to get this solved eventually.

Quoted 4 lines · Jason Gunthorpe
Quoted 2 lines · Guennadi Liakhovetski
Quoted 1 line

Is there no need to reset the phy at runtime ?

Quoted 8 lines
Quoted 3 lines

No idea, I'm not developing the driver, I'm just porting one specific feature from one API to another with no functional changes (apart from postponing setting the GPIO).

Generally Linux relies on resetting the phy via the inband MDIO method, which is what Linux does. It is pretty much never required to reset via the hard pin - but you do need to generate a robust reset edge on the reset pin once after power up.

This all sounds good. So, is there a preferred way to do that? Where in the ethernet framework would you propose to hook up such a reset edge generation?

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/

#9 lore raw

Re: [PATCH/RFC 2/3] ethernet: add a PHY reset GPIO DT binding to sh_eth

In reply to Guennadi Liakhovetski

Hi Guennadi,

Quoted 14 lines · On Friday 25 January 2013 11:34:55 Guennadi Liakhovetski wrote:
Quoted 13 lines · Laurent Pinchart
Quoted 12 lines · On Thursday 24 January 2013 17:07:32 Guennadi Liakhovetski wrote:

If an ethernet PHY can be reset by a GPIO, it can be specified in DT. Add a binding and code to parse it, request the GPIO and take the PHY out of reset.

Cc devicetree-discuss at lists.ozlabs.org
Cc netdev at vger.kernel.org

---

 Documentation/devicetree/bindings/net/sh_ether.txt |    2 ++
 drivers/net/ethernet/renesas/sh_eth.c              |    9 ++++++++-
 2 files changed, 10 insertions(+), 1 deletions(-)

[snip]

Quoted 4 lines
Quoted 4 lines
Quoted 4 lines
(quoted diff) +0 -0

b/drivers/net/ethernet/renesas/sh_eth.c index 1f64848..06035a2 100644

drivers/net/ethernet/renesas/sh_eth.c +0 -0

[snip]

Quoted 11 lines
Quoted 10 lines

drivers/net/ethernet/renesas/sh_eth.c sh_eth_parse_dt(struct device *dev, struct net_device *ndev) · line 2428

Quoted 8 lines
drivers/net/ethernet/renesas/sh_eth.c +0 -0
@@ -2420,6 +2423,10 @@ sh_eth_parse_dt(struct device *dev, struct

net_device *ndev) else

drivers/net/ethernet/renesas/sh_eth.c +3 -0
 		pdata->needs_init = 0;
 
+	gpio = of_get_named_gpio_flags(np, "phy-reset-gpios", 0, &flags);
+	if (gpio_is_valid(gpio) && !devm_gpio_request(dev, gpio, NULL))
+		gpio_direction_output(gpio, !!(flags & OF_GPIO_ACTIVE_LOW));

You could use devm_gpio_request_one() here.

Quoted 7 lines

Yes, but then the flag would look uglier, something like

devm_gpio_request_one(dev, gpio, flags &
OF_GPIO_ACTIVE_LOW ? GPIOF_OUT_INIT_HIGH :
GPIOF_OUT_INIT_LOW);

Does it really look like an improvement? :)

It's one less function call, so to me it does :-) Feel free to ignore that though.

Signature · 3 lines
Regards,

Laurent Pinchart
#10 lore raw

PATCH 3/3 ARM: shmobile: move pin configuration on armadillo800eva-reference to DT

In reply to Guennadi Liakhovetski

Use pinctrl and sh-eth DT bindings to configure sh-eth MAC pins on armadillo800eva in reference implementation.

---
 .../boot/dts/r8a7740-armadillo800eva-reference.dts |    7 +++++
 .../board-armadillo800eva-reference.c              |   24 --------------------
 2 files changed, 7 insertions(+), 24 deletions(-)
arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts +7 -0
index 11cb0f9..b815ffd9 100644
@@ -26,9 +26,12 @@
 		reg = <0xe9a00000 0x800>, <0xe9a01800 0x800>;
 		interrupts = <0x500>;
 		phy-mode = "mii";
+		phy-reset-gpios = <&gpio 18 1>;
 		sh-eth,edmac-endian = "little";
 		sh-eth,register-type = "gigabit";
 		sh-eth,phy-id = <0>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&eth_pins>;
 	};
 
 	reg_3p3v: regulator at 0 {
@@ -137,4 +140,8 @@
 		renesas,pins = "mmc0_data8_1", "mmc0_ctrl_1";
 		renesas,function = "mmc0";
 	};
+	eth_pins: pfc_eth_pins {
+		renesas,pins = "eth_base";
+		renesas,function = "eth";
+	};
 };
arch/arm/mach-shmobile/board-armadillo800eva-reference.c +0 -24
index 92d7106..54ec573e 100644
@@ -152,30 +152,6 @@ static void __init eva_init(void)
 	gpio_request(GPIO_FN_SCIFA1_RXD, NULL);
 	gpio_request(GPIO_FN_SCIFA1_TXD, NULL);
 
-	/* GETHER */
-	gpio_request(GPIO_FN_ET_CRS,		NULL);
-	gpio_request(GPIO_FN_ET_MDC,		NULL);
-	gpio_request(GPIO_FN_ET_MDIO,		NULL);
-	gpio_request(GPIO_FN_ET_TX_ER,		NULL);
-	gpio_request(GPIO_FN_ET_RX_ER,		NULL);
-	gpio_request(GPIO_FN_ET_ERXD0,		NULL);
-	gpio_request(GPIO_FN_ET_ERXD1,		NULL);
-	gpio_request(GPIO_FN_ET_ERXD2,		NULL);
-	gpio_request(GPIO_FN_ET_ERXD3,		NULL);
-	gpio_request(GPIO_FN_ET_TX_CLK,		NULL);
-	gpio_request(GPIO_FN_ET_TX_EN,		NULL);
-	gpio_request(GPIO_FN_ET_ETXD0,		NULL);
-	gpio_request(GPIO_FN_ET_ETXD1,		NULL);
-	gpio_request(GPIO_FN_ET_ETXD2,		NULL);
-	gpio_request(GPIO_FN_ET_ETXD3,		NULL);
-	gpio_request(GPIO_FN_ET_PHY_INT,	NULL);
-	gpio_request(GPIO_FN_ET_COL,		NULL);
-	gpio_request(GPIO_FN_ET_RX_DV,		NULL);
-	gpio_request(GPIO_FN_ET_RX_CLK,		NULL);
-
-	gpio_request(GPIO_PORT18, NULL); /* PHY_RST */
-	gpio_direction_output(GPIO_PORT18, 1);
-
 #ifdef CONFIG_CACHE_L2X0
 	/* Early BRESP enable, Shared attribute override enable, 32K*8way */
 	l2x0_init(IOMEM(0xf0002000), 0x40440000, 0x82000fff);
Signature · 1 line
1.7.2.5
#11 lore raw

cover ARM: shmobile: sh-eth pins in DT for armadillo800eva

In reply to Guennadi Liakhovetski
Quoted 2 lines · Guennadi Liakhovetski

This patch series gets rid of gpio_request()-style ethernet pin configuration on armadillo800eva in reference implementation.

Hi Guennadi,

these changes seem to be reasonable to me.

Are there any dependencies for the sh_eth patch?
I assume this will be handled by David Miller through the net-next tree. Are there any dependencies? The last time I checked the DT bindings for sh_eth had not been merged.

For the remaining two patches, which I assume will go through my renesas tree:
* Are there any dependencies that aren't satisfied by the of-intc branch?
* Could you get some Acks. At least from Laurent?

Quoted 23 lines

Guennadi Liakhovetski (3):
pinctrl: add ethernet pin groups to r8a7740
ethernet: add a PHY reset GPIO DT binding to sh_eth
ARM: shmobile: move pin configuration on armadillo800eva-reference to
DT

 Documentation/devicetree/bindings/net/sh_ether.txt |    2 +
 .../boot/dts/r8a7740-armadillo800eva-reference.dts |    7 ++++
 .../board-armadillo800eva-reference.c              |   24 ---------------
 drivers/net/ethernet/renesas/sh_eth.c              |    9 +++++-
 drivers/pinctrl/sh-pfc/pfc-r8a7740.c               |   31 ++++++++++++++++++++
 5 files changed, 48 insertions(+), 25 deletions(-)
Signature · 8 lines
1.7.2.5

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
#12 lore raw

cover ARM: shmobile: sh-eth pins in DT for armadillo800eva

Hi Simon

Quoted 4 lines · Simon Horman
Quoted 2 lines · Guennadi Liakhovetski

This patch series gets rid of gpio_request()-style ethernet pin configuration on armadillo800eva in reference implementation.

Quoted 8 lines

Hi Guennadi,

these changes seem to be reasonable to me.

Are there any dependencies for the sh_eth patch?
I assume this will be handled by David Miller through the net-next tree. Are there any dependencies? The last time I checked the DT bindings for sh_eth had not been merged.

Obviously, it can only be applied, if the Documentation/devicetree/bindings/net/sh_ether.txt file and the sh_eth_parse_dt() function exist. Also, if there are no objections against the new phy-reset-gpios DT property. Otherwise there are no dependencies - as long as the phy-reset-gpios property isn't found in DT, the patch doesn't affect the driver.

Quoted 3 lines

For the remaining two patches, which I assume will go through my renesas tree:
* Are there any dependencies that aren't satisfied by the of-intc branch?

AFAICS, that your branch doesn't contain Laurent's pinctrl patches, which are needed for patch 1 to apply and for patch 3 to make sense. My earlier MMC DT / pinctrl patches aren't required for these patches to function, but these patches won't apply cleanly without them, since they touch the same code fragments. So, it would be easier to merge them in the order of submission.

Quoted 1 line

* Could you get some Acks. At least from Laurent?

Sure, let's give reviewers some more time :)

Thanks
Guennadi

Quoted 16 lines
Quoted 16 lines

Guennadi Liakhovetski (3):
pinctrl: add ethernet pin groups to r8a7740
ethernet: add a PHY reset GPIO DT binding to sh_eth
ARM: shmobile: move pin configuration on armadillo800eva-reference to
DT

 Documentation/devicetree/bindings/net/sh_ether.txt |    2 +
 .../boot/dts/r8a7740-armadillo800eva-reference.dts |    7 ++++
 .../board-armadillo800eva-reference.c              |   24 ---------------
 drivers/net/ethernet/renesas/sh_eth.c              |    9 +++++-
 drivers/pinctrl/sh-pfc/pfc-r8a7740.c               |   31 ++++++++++++++++++++
 5 files changed, 48 insertions(+), 25 deletions(-)
Signature · 1 line
1.7.2.5
Quoted 8 lines
Quoted 7 lines

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/

#13 lore raw

cover ARM: shmobile: sh-eth pins in DT for armadillo800eva

Quoted 17 lines · Guennadi Liakhovetski

Hi Simon

Quoted 4 lines · Simon Horman
Quoted 2 lines · Guennadi Liakhovetski

This patch series gets rid of gpio_request()-style ethernet pin configuration on armadillo800eva in reference implementation.

Quoted 8 lines

Hi Guennadi,

these changes seem to be reasonable to me.

Are there any dependencies for the sh_eth patch?
I assume this will be handled by David Miller through the net-next tree. Are there any dependencies? The last time I checked the DT bindings for sh_eth had not been merged.

Quoted 6 lines

Obviously, it can only be applied, if the Documentation/devicetree/bindings/net/sh_ether.txt file and the sh_eth_parse_dt() function exist. Also, if there are no objections against the new phy-reset-gpios DT property. Otherwise there are no dependencies - as long as the phy-reset-gpios property isn't found in DT, the patch doesn't affect the driver.

Thanks, I'm slightly concerned that the other patch(es) relating to Documentation/devicetree/bindings/net/sh_ether.txt have gone missing in action.

Do you have an interest in chasing them down or would you like me to?

Quoted 11 lines
Quoted 3 lines

For the remaining two patches, which I assume will go through my renesas tree:
* Are there any dependencies that aren't satisfied by the of-intc branch?

AFAICS, that your branch doesn't contain Laurent's pinctrl patches, which are needed for patch 1 to apply and for patch 3 to make sense. My earlier MMC DT / pinctrl patches aren't required for these patches to function, but these patches won't apply cleanly without them, since they touch the same code fragments. So, it would be easier to merge them in the order of submission.

Quoted 3 lines
Quoted 1 line

* Could you get some Acks. At least from Laurent?

Sure, let's give reviewers some more time :)

Indeed.

Laurent, if there are patches ready for me to take into the renesas tree please let me know. I'm reluctant to add any more pinmux changes for 3.9. But if a topic branch would help let me know.

#14 lore raw

cover ARM: shmobile: sh-eth pins in DT for armadillo800eva

Hi Simon,

Quoted 42 lines · On Friday 25 January 2013 18:05:44 Simon Horman wrote:
Quoted 14 lines · Guennadi Liakhovetski
Quoted 4 lines · Simon Horman
Quoted 2 lines · Guennadi Liakhovetski

This patch series gets rid of gpio_request()-style ethernet pin configuration on armadillo800eva in reference implementation.

Quoted 8 lines

Hi Guennadi,

these changes seem to be reasonable to me.

Are there any dependencies for the sh_eth patch?
I assume this will be handled by David Miller through the net-next tree. Are there any dependencies? The last time I checked the DT bindings for sh_eth had not been merged.

Quoted 6 lines

Obviously, it can only be applied, if the Documentation/devicetree/bindings/net/sh_ether.txt file and the sh_eth_parse_dt() function exist. Also, if there are no objections against the new phy-reset-gpios DT property. Otherwise there are no dependencies - as long as the phy-reset-gpios property isn't found in DT, the patch doesn't affect the driver.

Thanks, I'm slightly concerned that the other patch(es) relating to Documentation/devicetree/bindings/net/sh_ether.txt have gone missing in action.

Do you have an interest in chasing them down or would you like me to?

Quoted 14 lines
Quoted 4 lines

For the remaining two patches, which I assume will go through my renesas tree:
* Are there any dependencies that aren't satisfied by the of-intc branch?

AFAICS, that your branch doesn't contain Laurent's pinctrl patches, which are needed for patch 1 to apply and for patch 3 to make sense. My earlier MMC DT / pinctrl patches aren't required for these patches to function, but these patches won't apply cleanly without them, since they touch the same code fragments. So, it would be easier to merge them in the order of submission.

Quoted 1 line

* Could you get some Acks. At least from Laurent?

Quoted 7 lines
Quoted 1 line

Sure, let's give reviewers some more time :)

Indeed.

Laurent, if there are patches ready for me to take into the renesas tree please let me know. I'm reluctant to add any more pinmux changes for 3.9. But if a topic branch would help let me know.

I'd like the gpio_request_one() patches to go to v3.9 if possible. The other pinctrl patches will need to wait until v3.10 I'm afraid.

Signature · 3 lines
Regards,

Laurent Pinchart
#15 lore raw

cover ARM: shmobile: sh-eth pins in DT for armadillo800eva

Quoted 47 lines · Laurent Pinchart

Hi Simon,

Quoted 44 lines · On Friday 25 January 2013 18:05:44 Simon Horman wrote:
Quoted 14 lines · Guennadi Liakhovetski
Quoted 4 lines · Simon Horman
Quoted 2 lines · Guennadi Liakhovetski

This patch series gets rid of gpio_request()-style ethernet pin configuration on armadillo800eva in reference implementation.

Quoted 8 lines

Hi Guennadi,

these changes seem to be reasonable to me.

Are there any dependencies for the sh_eth patch?
I assume this will be handled by David Miller through the net-next tree. Are there any dependencies? The last time I checked the DT bindings for sh_eth had not been merged.

Quoted 6 lines

Obviously, it can only be applied, if the Documentation/devicetree/bindings/net/sh_ether.txt file and the sh_eth_parse_dt() function exist. Also, if there are no objections against the new phy-reset-gpios DT property. Otherwise there are no dependencies - as long as the phy-reset-gpios property isn't found in DT, the patch doesn't affect the driver.

Thanks, I'm slightly concerned that the other patch(es) relating to Documentation/devicetree/bindings/net/sh_ether.txt have gone missing in action.

Do you have an interest in chasing them down or would you like me to?

Quoted 15 lines
Quoted 4 lines

For the remaining two patches, which I assume will go through my renesas tree:
* Are there any dependencies that aren't satisfied by the of-intc branch?

AFAICS, that your branch doesn't contain Laurent's pinctrl patches, which are needed for patch 1 to apply and for patch 3 to make sense. My earlier MMC DT / pinctrl patches aren't required for these patches to function, but these patches won't apply cleanly without them, since they touch the same code fragments. So, it would be easier to merge them in the order of submission.

Quoted 1 line

* Could you get some Acks. At least from Laurent?

Sure, let's give reviewers some more time :)

Quoted 8 lines
Quoted 5 lines

Indeed.

Laurent, if there are patches ready for me to take into the renesas tree please let me know. I'm reluctant to add any more pinmux changes for 3.9. But if a topic branch would help let me know.

I'd like the gpio_request_one() patches to go to v3.9 if possible. The other pinctrl patches will need to wait until v3.10 I'm afraid.

Understood. I have now queued the gpio_request_one() patches up for v3.9.