[PATCH] stmmac: Add device-tree support

Subsystems: networking drivers, open firmware and flattened device tree bindings, stmmac ethernet driver, the rest

STALE5299d

9 messages, 4 authors, 2012-03-12 · open the first message on its own page

[PATCH] stmmac: Add device-tree support

From: Stefan Roese <sr@denx.de>
Date: 2012-03-12 14:05:57

This patch adds support to configure the STMMAC ethernet driver via
device-tree instead of platform_data.

Currently, only the properties needed on SPEAr600 are provided. All
other properties should be added once needed on other platforms.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Giuseppe Cavallaro <redacted>
Cc: Viresh Kumar <redacted>
---
 Documentation/devicetree/bindings/net/stmmac.txt   |   38 +++++++++++
 .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |   66 +++++++++++++++++++-
 2 files changed, 103 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/net/stmmac.txt
diff --git a/Documentation/devicetree/bindings/net/stmmac.txt b/Documentation/devicetree/bindings/net/stmmac.txt
new file mode 100644
index 0000000..386a47f
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/stmmac.txt
@@ -0,0 +1,38 @@
+* STMicroelectronics 10/100/1000 Ethernet driver (GMAC)
+
+Required properties:
+- compatible: Should be "stm,gmac"
+- reg: Address and length of the register set for the device
+- interrupt-parent: Should be the phandle for the interrupt controller
+  that services interrupts for this device
+- interrupts: Should contain the STMMAC interrupts
+- interrupt-names: Should contain the interrupt names "macirq"
+  "eth_wake_irq" if this interrupt is supported in the "interrupts"
+  property
+- phy-mode: String, operation mode of the PHY interface.
+  Supported values are: "mii", "rmii", "gmii", "rgmii".
+- phy-addr: MDIO address of the PHY
+
+Optional properties:
+- stm,prog-burst-len: Specify the burst length
+- stm,has-gmac: Indicates that the controller supports 1000Mbps
+- stm,has-pmt: Indicates that the controller supports power management
+- mac-address: 6 bytes, mac address
+
+Examples:
+
+	gmac0: stmmac@e0800000 {
+		compatible = "stm,gmac";
+		reg = <0xe0800000 0x8000>;
+		interrupt-parent = <&vic1>;
+		interrupts = <24 23>;
+		interrupt-names = "macirq", "eth_wake_irq";
+		mac-address = [000000000000]; /* Filled in by U-Boot */
+
+		stm,prog-burst-len = <8>;
+		stm,has-gmac;
+		stm,has-pmt;
+
+		phy-mode = "gmii";
+		phy-addr = <0>;
+	};
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
index 3aad981..fcf46c7 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
@@ -24,8 +24,43 @@
 
 #include <linux/platform_device.h>
 #include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_net.h>
 #include "stmmac.h"
 
+#ifdef CONFIG_OF
+static int __devinit stmmac_probe_config_dt(struct platform_device *pdev,
+					    struct plat_stmmacenet_data *plat,
+					    const char **mac)
+{
+	struct device_node *np = pdev->dev.of_node;
+
+	if (!np)
+		return -ENODEV;
+
+	*mac = of_get_mac_address(np);
+
+	plat->interface = of_get_phy_mode(np);
+	of_property_read_u32(np, "phy-addr", &plat->phy_addr);
+	plat->mdio_bus_data = devm_kzalloc(&pdev->dev,
+					   sizeof(struct stmmac_mdio_bus_data),
+					   GFP_KERNEL);
+
+	/*
+	 * Currently only the properties needed on SPEAr600
+	 * are provided. All other properties should be added
+	 * once needed on other platforms.
+	 */
+	of_property_read_u32(np, "stm,prog-burst-len", &plat->pbl);
+	if (of_get_property(np, "stm,has-gmac", NULL))
+		plat->has_gmac = 1;
+	if (of_get_property(np, "stm,has-pmt", NULL))
+		plat->pmt = 1;
+
+	return 0;
+}
+#endif /* CONFIG_OF */
+
 /**
  * stmmac_pltfr_probe
  * @pdev: platform device pointer
@@ -39,7 +74,8 @@ static int stmmac_pltfr_probe(struct platform_device *pdev)
 	struct resource *res;
 	void __iomem *addr = NULL;
 	struct stmmac_priv *priv = NULL;
-	struct plat_stmmacenet_data *plat_dat;
+	struct plat_stmmacenet_data *plat_dat = NULL;
+	const char *mac = NULL;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!res)
@@ -58,6 +94,22 @@ static int stmmac_pltfr_probe(struct platform_device *pdev)
 		ret = -ENOMEM;
 		goto out_release_region;
 	}
+
+#ifdef CONFIG_OF
+	plat_dat = devm_kzalloc(&pdev->dev, sizeof(struct plat_stmmacenet_data),
+				GFP_KERNEL);
+	if (!plat_dat) {
+		pr_err("%s: ERROR: no memory", __func__);
+		ret = -ENOMEM;
+		goto out_unmap;
+	}
+
+	ret = stmmac_probe_config_dt(pdev, plat_dat, &mac);
+	if (ret) {
+		pr_err("%s: main dt probe failed", __func__);
+		goto out_unmap;
+	}
+#else
 	plat_dat = pdev->dev.platform_data;
 
 	/* Custom initialisation (if needed)*/
@@ -66,6 +118,7 @@ static int stmmac_pltfr_probe(struct platform_device *pdev)
 		if (unlikely(ret))
 			goto out_unmap;
 	}
+#endif
 
 	priv = stmmac_dvr_probe(&(pdev->dev), plat_dat, addr);
 	if (!priv) {
@@ -73,6 +126,10 @@ static int stmmac_pltfr_probe(struct platform_device *pdev)
 		goto out_unmap;
 	}
 
+	/* Get MAC address if available (DT) */
+	if (mac)
+		memcpy(priv->dev->dev_addr, mac, ETH_ALEN);
+
 	/* Get the MAC information */
 	priv->dev->irq = platform_get_irq_byname(pdev, "macirq");
 	if (priv->dev->irq == -ENXIO) {
@@ -178,6 +235,12 @@ static const struct dev_pm_ops stmmac_pltfr_pm_ops = {
 static const struct dev_pm_ops stmmac_pltfr_pm_ops;
 #endif /* CONFIG_PM */
 
+static const struct of_device_id stmmac_dt_ids[] = {
+	{ .compatible = "stm,gmac", },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, stmmac_dt_ids);
+
 static struct platform_driver stmmac_driver = {
 	.probe = stmmac_pltfr_probe,
 	.remove = stmmac_pltfr_remove,
@@ -185,6 +248,7 @@ static struct platform_driver stmmac_driver = {
 		   .name = STMMAC_RESOURCE_NAME,
 		   .owner = THIS_MODULE,
 		   .pm = &stmmac_pltfr_pm_ops,
+		   .of_match_table = of_match_ptr(stmmac_dt_ids),
 		   },
 };
 
-- 
1.7.9.2

Re: [PATCH] stmmac: Add device-tree support

From: Rob Herring <hidden>
Date: 2012-03-12 14:34:59

On 03/12/2012 09:05 AM, Stefan Roese wrote:
quoted hunk
This patch adds support to configure the STMMAC ethernet driver via
device-tree instead of platform_data.

Currently, only the properties needed on SPEAr600 are provided. All
other properties should be added once needed on other platforms.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Giuseppe Cavallaro <redacted>
Cc: Viresh Kumar <redacted>
---
 Documentation/devicetree/bindings/net/stmmac.txt   |   38 +++++++++++
 .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |   66 +++++++++++++++++++-
 2 files changed, 103 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/net/stmmac.txt
diff --git a/Documentation/devicetree/bindings/net/stmmac.txt b/Documentation/devicetree/bindings/net/stmmac.txt
new file mode 100644
index 0000000..386a47f
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/stmmac.txt
@@ -0,0 +1,38 @@
+* STMicroelectronics 10/100/1000 Ethernet driver (GMAC)
+
+Required properties:
+- compatible: Should be "stm,gmac"
This is too generic. This should be 1 string per version of h/w.

'stm' should be 'st' according to vendor-prefixes.txt.
+- reg: Address and length of the register set for the device
+- interrupt-parent: Should be the phandle for the interrupt controller
+  that services interrupts for this device
+- interrupts: Should contain the STMMAC interrupts
+- interrupt-names: Should contain the interrupt names "macirq"
+  "eth_wake_irq" if this interrupt is supported in the "interrupts"
+  property
You should be able to tell this from the compatible string and number of
interrupts.
+- phy-mode: String, operation mode of the PHY interface.
+  Supported values are: "mii", "rmii", "gmii", "rgmii".
+- phy-addr: MDIO address of the PHY
This is normally probed or the mdio bus is a sub-node of the MAC node.
See arch/powerpc/boot/dts/mpc8377_mds.dts for an example.
+
+Optional properties:
+- stm,prog-burst-len: Specify the burst length
+- stm,has-gmac: Indicates that the controller supports 1000Mbps
+- stm,has-pmt: Indicates that the controller supports power management
I think these should all be encoded by the compatible string.

Rob
quoted hunk
+- mac-address: 6 bytes, mac address
+
+Examples:
+
+	gmac0: stmmac@e0800000 {
+		compatible = "stm,gmac";
+		reg = <0xe0800000 0x8000>;
+		interrupt-parent = <&vic1>;
+		interrupts = <24 23>;
+		interrupt-names = "macirq", "eth_wake_irq";
+		mac-address = [000000000000]; /* Filled in by U-Boot */
+
+		stm,prog-burst-len = <8>;
+		stm,has-gmac;
+		stm,has-pmt;
+
+		phy-mode = "gmii";
+		phy-addr = <0>;
+	};
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
index 3aad981..fcf46c7 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
@@ -24,8 +24,43 @@
 
 #include <linux/platform_device.h>
 #include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_net.h>
 #include "stmmac.h"
 
+#ifdef CONFIG_OF
+static int __devinit stmmac_probe_config_dt(struct platform_device *pdev,
+					    struct plat_stmmacenet_data *plat,
+					    const char **mac)
+{
+	struct device_node *np = pdev->dev.of_node;
+
+	if (!np)
+		return -ENODEV;
+
+	*mac = of_get_mac_address(np);
+
+	plat->interface = of_get_phy_mode(np);
+	of_property_read_u32(np, "phy-addr", &plat->phy_addr);
+	plat->mdio_bus_data = devm_kzalloc(&pdev->dev,
+					   sizeof(struct stmmac_mdio_bus_data),
+					   GFP_KERNEL);
+
+	/*
+	 * Currently only the properties needed on SPEAr600
+	 * are provided. All other properties should be added
+	 * once needed on other platforms.
+	 */
+	of_property_read_u32(np, "stm,prog-burst-len", &plat->pbl);
+	if (of_get_property(np, "stm,has-gmac", NULL))
+		plat->has_gmac = 1;
+	if (of_get_property(np, "stm,has-pmt", NULL))
+		plat->pmt = 1;
+
+	return 0;
+}
+#endif /* CONFIG_OF */
+
 /**
  * stmmac_pltfr_probe
  * @pdev: platform device pointer
@@ -39,7 +74,8 @@ static int stmmac_pltfr_probe(struct platform_device *pdev)
 	struct resource *res;
 	void __iomem *addr = NULL;
 	struct stmmac_priv *priv = NULL;
-	struct plat_stmmacenet_data *plat_dat;
+	struct plat_stmmacenet_data *plat_dat = NULL;
+	const char *mac = NULL;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!res)
@@ -58,6 +94,22 @@ static int stmmac_pltfr_probe(struct platform_device *pdev)
 		ret = -ENOMEM;
 		goto out_release_region;
 	}
+
+#ifdef CONFIG_OF
+	plat_dat = devm_kzalloc(&pdev->dev, sizeof(struct plat_stmmacenet_data),
+				GFP_KERNEL);
+	if (!plat_dat) {
+		pr_err("%s: ERROR: no memory", __func__);
+		ret = -ENOMEM;
+		goto out_unmap;
+	}
+
+	ret = stmmac_probe_config_dt(pdev, plat_dat, &mac);
+	if (ret) {
+		pr_err("%s: main dt probe failed", __func__);
+		goto out_unmap;
+	}
+#else
 	plat_dat = pdev->dev.platform_data;
 
 	/* Custom initialisation (if needed)*/
@@ -66,6 +118,7 @@ static int stmmac_pltfr_probe(struct platform_device *pdev)
 		if (unlikely(ret))
 			goto out_unmap;
 	}
+#endif
 
 	priv = stmmac_dvr_probe(&(pdev->dev), plat_dat, addr);
 	if (!priv) {
@@ -73,6 +126,10 @@ static int stmmac_pltfr_probe(struct platform_device *pdev)
 		goto out_unmap;
 	}
 
+	/* Get MAC address if available (DT) */
+	if (mac)
+		memcpy(priv->dev->dev_addr, mac, ETH_ALEN);
+
 	/* Get the MAC information */
 	priv->dev->irq = platform_get_irq_byname(pdev, "macirq");
 	if (priv->dev->irq == -ENXIO) {
@@ -178,6 +235,12 @@ static const struct dev_pm_ops stmmac_pltfr_pm_ops = {
 static const struct dev_pm_ops stmmac_pltfr_pm_ops;
 #endif /* CONFIG_PM */
 
+static const struct of_device_id stmmac_dt_ids[] = {
+	{ .compatible = "stm,gmac", },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, stmmac_dt_ids);
+
 static struct platform_driver stmmac_driver = {
 	.probe = stmmac_pltfr_probe,
 	.remove = stmmac_pltfr_remove,
@@ -185,6 +248,7 @@ static struct platform_driver stmmac_driver = {
 		   .name = STMMAC_RESOURCE_NAME,
 		   .owner = THIS_MODULE,
 		   .pm = &stmmac_pltfr_pm_ops,
+		   .of_match_table = of_match_ptr(stmmac_dt_ids),
 		   },
 };
 

Re: [PATCH] stmmac: Add device-tree support

From: Stefan Roese <sr@denx.de>
Date: 2012-03-12 15:06:26

Hi Rob,

On Monday 12 March 2012 15:34:59 Rob Herring wrote:
On 03/12/2012 09:05 AM, Stefan Roese wrote:
quoted
This patch adds support to configure the STMMAC ethernet driver via
device-tree instead of platform_data.

Currently, only the properties needed on SPEAr600 are provided. All
other properties should be added once needed on other platforms.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Giuseppe Cavallaro <redacted>
Cc: Viresh Kumar <redacted>
---

 Documentation/devicetree/bindings/net/stmmac.txt   |   38 +++++++++++
 .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |   66
 +++++++++++++++++++- 2 files changed, 103 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/net/stmmac.txt
diff --git a/Documentation/devicetree/bindings/net/stmmac.txt
b/Documentation/devicetree/bindings/net/stmmac.txt new file mode 100644
index 0000000..386a47f
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/stmmac.txt
@@ -0,0 +1,38 @@
+* STMicroelectronics 10/100/1000 Ethernet driver (GMAC)
+
+Required properties:
+- compatible: Should be "stm,gmac"
This is too generic. This should be 1 string per version of h/w.
Viresh, Giuseppe, can you please suggest a proper string for the SPEAr600 
STMMAC core, including version?
 
'stm' should be 'st' according to vendor-prefixes.txt.
Okay.
 
quoted
+- reg: Address and length of the register set for the device
+- interrupt-parent: Should be the phandle for the interrupt controller
+  that services interrupts for this device
+- interrupts: Should contain the STMMAC interrupts
+- interrupt-names: Should contain the interrupt names "macirq"
+  "eth_wake_irq" if this interrupt is supported in the "interrupts"
+  property
You should be able to tell this from the compatible string and number of
interrupts.
Yes. Currently the driver uses platform_get_irq_byname() to register the 
irq's. That's why I added these properties. Is there something wrong with 
using it this way?
 
quoted
+- phy-mode: String, operation mode of the PHY interface.
+  Supported values are: "mii", "rmii", "gmii", "rgmii".
+- phy-addr: MDIO address of the PHY
This is normally probed or the mdio bus is a sub-node of the MAC node.
See arch/powerpc/boot/dts/mpc8377_mds.dts for an example.
Okay, I'll rework this.
quoted
+
+Optional properties:
+- stm,prog-burst-len: Specify the burst length
+- stm,has-gmac: Indicates that the controller supports 1000Mbps
+- stm,has-pmt: Indicates that the controller supports power management
I think these should all be encoded by the compatible string.
You mean that by defining a specific compatible string (e.g.
"st,gmac-spear600"), these settings are implicitly set? And should therefore 
be omitted from the dts?

Thanks,
Stefan

Re: [PATCH] stmmac: Add device-tree support

From: Jean-Christophe PLAGNIOL-VILLARD <hidden>
Date: 2012-03-12 15:14:37

On 16:06 Mon 12 Mar     , Stefan Roese wrote:
Hi Rob,

On Monday 12 March 2012 15:34:59 Rob Herring wrote:
quoted
On 03/12/2012 09:05 AM, Stefan Roese wrote:
quoted
This patch adds support to configure the STMMAC ethernet driver via
device-tree instead of platform_data.

Currently, only the properties needed on SPEAr600 are provided. All
other properties should be added once needed on other platforms.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Giuseppe Cavallaro <redacted>
Cc: Viresh Kumar <redacted>
---

 Documentation/devicetree/bindings/net/stmmac.txt   |   38 +++++++++++
 .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |   66
 +++++++++++++++++++- 2 files changed, 103 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/net/stmmac.txt
diff --git a/Documentation/devicetree/bindings/net/stmmac.txt
b/Documentation/devicetree/bindings/net/stmmac.txt new file mode 100644
index 0000000..386a47f
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/stmmac.txt
@@ -0,0 +1,38 @@
+* STMicroelectronics 10/100/1000 Ethernet driver (GMAC)
+
+Required properties:
+- compatible: Should be "stm,gmac"
This is too generic. This should be 1 string per version of h/w.
Viresh, Giuseppe, can you please suggest a proper string for the SPEAr600 
STMMAC core, including version?
IIRC this IP is the same as the sti7108

st,sti7018-gmac

as this IP has been used first on SH4

Best Regards,
J.

Re: [PATCH] stmmac: Add device-tree support

From: Giuseppe CAVALLARO <hidden>
Date: 2012-03-12 15:30:37

On 3/12/2012 4:06 PM, Stefan Roese wrote:
Hi Rob,

On Monday 12 March 2012 15:34:59 Rob Herring wrote:
quoted
On 03/12/2012 09:05 AM, Stefan Roese wrote:
quoted
This patch adds support to configure the STMMAC ethernet driver via
device-tree instead of platform_data.

Currently, only the properties needed on SPEAr600 are provided. All
other properties should be added once needed on other platforms.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Giuseppe Cavallaro <redacted>
Cc: Viresh Kumar <redacted>
---

 Documentation/devicetree/bindings/net/stmmac.txt   |   38 +++++++++++
 .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |   66
 +++++++++++++++++++- 2 files changed, 103 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/net/stmmac.txt
diff --git a/Documentation/devicetree/bindings/net/stmmac.txt
b/Documentation/devicetree/bindings/net/stmmac.txt new file mode 100644
index 0000000..386a47f
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/stmmac.txt
@@ -0,0 +1,38 @@
+* STMicroelectronics 10/100/1000 Ethernet driver (GMAC)
+
+Required properties:
+- compatible: Should be "stm,gmac"
This is too generic. This should be 1 string per version of h/w.
Viresh, Giuseppe, can you please suggest a proper string for the SPEAr600 
STMMAC core, including version?
 
quoted
'stm' should be 'st' according to vendor-prefixes.txt.
I'm not familiar with devicetree; maybe we should have:

"stmicro,mac100"
"stmicro,gmac"

or: st instead of stmicro if you prefer.

in fact, stmmac is for mac100 and gmac devices.
Okay.
 
quoted
quoted
+- reg: Address and length of the register set for the device
+- interrupt-parent: Should be the phandle for the interrupt controller
+  that services interrupts for this device
+- interrupts: Should contain the STMMAC interrupts
+- interrupt-names: Should contain the interrupt names "macirq"
+  "eth_wake_irq" if this interrupt is supported in the "interrupts"
+  property
You should be able to tell this from the compatible string and number of
interrupts.
Yes. Currently the driver uses platform_get_irq_byname() to register the 
irq's. That's why I added these properties. Is there something wrong with 
using it this way?
 
quoted
quoted
+- phy-mode: String, operation mode of the PHY interface.
+  Supported values are: "mii", "rmii", "gmii", "rgmii".
+- phy-addr: MDIO address of the PHY
This is normally probed or the mdio bus is a sub-node of the MAC node.
See arch/powerpc/boot/dts/mpc8377_mds.dts for an example.
Okay, I'll rework this.
quoted
quoted
+
+Optional properties:
+- stm,prog-burst-len: Specify the burst length
+- stm,has-gmac: Indicates that the controller supports 1000Mbps
+- stm,has-pmt: Indicates that the controller supports power management
I think these should all be encoded by the compatible string.
and should we have all the other flags e.g. tx_coe etc?
(see stmmac.txt)

Peppe
You mean that by defining a specific compatible string (e.g.
"st,gmac-spear600"), these settings are implicitly set? And should therefore 
be omitted from the dts?

Thanks,
Stefan
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Re: [PATCH] stmmac: Add device-tree support

From: Stefan Roese <sr@denx.de>
Date: 2012-03-12 16:23:38

On Monday 12 March 2012 16:30:37 Giuseppe CAVALLARO wrote:
quoted
quoted
quoted
+Required properties:
+- compatible: Should be "stm,gmac"
This is too generic. This should be 1 string per version of h/w.
Viresh, Giuseppe, can you please suggest a proper string for the SPEAr600
STMMAC core, including version?
quoted
'stm' should be 'st' according to vendor-prefixes.txt.
I'm not familiar with devicetree; maybe we should have:

"stmicro,mac100"
"stmicro,gmac"

or: st instead of stmicro if you prefer.

in fact, stmmac is for mac100 and gmac devices.
How about "st,spear600-gmac" for SPEAr600 then?
 
quoted
Okay.
quoted
quoted
+- reg: Address and length of the register set for the device
+- interrupt-parent: Should be the phandle for the interrupt controller
+  that services interrupts for this device
+- interrupts: Should contain the STMMAC interrupts
+- interrupt-names: Should contain the interrupt names "macirq"
+  "eth_wake_irq" if this interrupt is supported in the "interrupts"
+  property
You should be able to tell this from the compatible string and number of
interrupts.
Yes. Currently the driver uses platform_get_irq_byname() to register the
irq's. That's why I added these properties. Is there something wrong with
using it this way?
quoted
quoted
+- phy-mode: String, operation mode of the PHY interface.
+  Supported values are: "mii", "rmii", "gmii", "rgmii".
+- phy-addr: MDIO address of the PHY
This is normally probed or the mdio bus is a sub-node of the MAC node.
See arch/powerpc/boot/dts/mpc8377_mds.dts for an example.
Okay, I'll rework this.
quoted
quoted
+
+Optional properties:
+- stm,prog-burst-len: Specify the burst length
+- stm,has-gmac: Indicates that the controller supports 1000Mbps
+- stm,has-pmt: Indicates that the controller supports power management
I think these should all be encoded by the compatible string.
and should we have all the other flags e.g. tx_coe etc?
(see stmmac.txt)
As Rob suggested, some of these flags/parameters are implicitly defined by the 
compatible string. If this is not the case, then sure, those flags/parameters 
need to be provided via the device-tree as well. I just don't need "tx_coe" 
etc. for my platform (SPEAr600) as far as I know. I suggest to add support for 
them once they are really needed/used by other platforms.

Thanks,
Stefan

Re: [PATCH] stmmac: Add device-tree support

From: Giuseppe CAVALLARO <hidden>
Date: 2012-03-12 16:46:16

On 3/12/2012 5:23 PM, Stefan Roese wrote:
On Monday 12 March 2012 16:30:37 Giuseppe CAVALLARO wrote:
quoted
quoted
quoted
quoted
+Required properties:
+- compatible: Should be "stm,gmac"
This is too generic. This should be 1 string per version of h/w.
Viresh, Giuseppe, can you please suggest a proper string for the SPEAr600
STMMAC core, including version?
quoted
'stm' should be 'st' according to vendor-prefixes.txt.
I'm not familiar with devicetree; maybe we should have:

"stmicro,mac100"
"stmicro,gmac"

or: st instead of stmicro if you prefer.

in fact, stmmac is for mac100 and gmac devices.
How about "st,spear600-gmac" for SPEAr600 then?
IIUC, as final result we should have something like this... that sounds
quite good to me.

ST/ARM SPEAr
"st,spear600-gmac"
"st,spear1310-gmac"
  ...

ST/SH

"st,stx7108-gmac"
"st,stx7106-gmac"
"st,stx7109-mac"    ->>> mac10/100
...

MIPS
"st,Loongson1B"
 
quoted
quoted
Okay.
quoted
quoted
+- reg: Address and length of the register set for the device
+- interrupt-parent: Should be the phandle for the interrupt controller
+  that services interrupts for this device
+- interrupts: Should contain the STMMAC interrupts
+- interrupt-names: Should contain the interrupt names "macirq"
+  "eth_wake_irq" if this interrupt is supported in the "interrupts"
+  property
You should be able to tell this from the compatible string and number of
interrupts.
Yes. Currently the driver uses platform_get_irq_byname() to register the
irq's. That's why I added these properties. Is there something wrong with
using it this way?
quoted
quoted
+- phy-mode: String, operation mode of the PHY interface.
+  Supported values are: "mii", "rmii", "gmii", "rgmii".
+- phy-addr: MDIO address of the PHY
This is normally probed or the mdio bus is a sub-node of the MAC node.
See arch/powerpc/boot/dts/mpc8377_mds.dts for an example.
Okay, I'll rework this.
quoted
quoted
+
+Optional properties:
+- stm,prog-burst-len: Specify the burst length
+- stm,has-gmac: Indicates that the controller supports 1000Mbps
+- stm,has-pmt: Indicates that the controller supports power management
I think these should all be encoded by the compatible string.
and should we have all the other flags e.g. tx_coe etc?
(see stmmac.txt)
As Rob suggested, some of these flags/parameters are implicitly defined by the 
compatible string. If this is not the case, then sure, those flags/parameters 
need to be provided via the device-tree as well. I just don't need "tx_coe" 
etc. for my platform (SPEAr600) as far as I know. I suggest to add support for 
them once they are really needed/used by other platforms.
Ok, but on SPEAr indeed some of these are not used at all.
If you agree, we can go head with these and then we will add new ones
next time. In the meantime, I will try to be more familiar with
devicetree and provide further patches

peppe
Thanks,
Stefan
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Re: [PATCH] stmmac: Add device-tree support

From: Jean-Christophe PLAGNIOL-VILLARD <hidden>
Date: 2012-03-12 17:02:26

On 16:30 Mon 12 Mar     , Giuseppe CAVALLARO wrote:
On 3/12/2012 4:06 PM, Stefan Roese wrote:
quoted
Hi Rob,

On Monday 12 March 2012 15:34:59 Rob Herring wrote:
quoted
On 03/12/2012 09:05 AM, Stefan Roese wrote:
quoted
This patch adds support to configure the STMMAC ethernet driver via
device-tree instead of platform_data.

Currently, only the properties needed on SPEAr600 are provided. All
other properties should be added once needed on other platforms.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Giuseppe Cavallaro <redacted>
Cc: Viresh Kumar <redacted>
---

 Documentation/devicetree/bindings/net/stmmac.txt   |   38 +++++++++++
 .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |   66
 +++++++++++++++++++- 2 files changed, 103 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/net/stmmac.txt
diff --git a/Documentation/devicetree/bindings/net/stmmac.txt
b/Documentation/devicetree/bindings/net/stmmac.txt new file mode 100644
index 0000000..386a47f
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/stmmac.txt
@@ -0,0 +1,38 @@
+* STMicroelectronics 10/100/1000 Ethernet driver (GMAC)
+
+Required properties:
+- compatible: Should be "stm,gmac"
This is too generic. This should be 1 string per version of h/w.
Viresh, Giuseppe, can you please suggest a proper string for the SPEAr600 
STMMAC core, including version?
 
quoted
'stm' should be 'st' according to vendor-prefixes.txt.
I'm not familiar with devicetree; maybe we should have:

"stmicro,mac100"
"stmicro,gmac"

or: st instead of stmicro if you prefer.
you need to put the first soc where the ip appear on gmac it's sti7105

but with PM IIRC it's sti7108

Best Regards,
J.

Re: [PATCH] stmmac: Add device-tree support

From: Rob Herring <hidden>
Date: 2012-03-12 20:07:26

On 03/12/2012 11:46 AM, Giuseppe CAVALLARO wrote:
On 3/12/2012 5:23 PM, Stefan Roese wrote:
quoted
On Monday 12 March 2012 16:30:37 Giuseppe CAVALLARO wrote:
quoted
quoted
quoted
quoted
+Required properties:
+- compatible: Should be "stm,gmac"
This is too generic. This should be 1 string per version of h/w.
Viresh, Giuseppe, can you please suggest a proper string for the SPEAr600
STMMAC core, including version?
quoted
'stm' should be 'st' according to vendor-prefixes.txt.
I'm not familiar with devicetree; maybe we should have:

"stmicro,mac100"
"stmicro,gmac"

or: st instead of stmicro if you prefer.

in fact, stmmac is for mac100 and gmac devices.
How about "st,spear600-gmac" for SPEAr600 then?
IIUC, as final result we should have something like this... that sounds
quite good to me.

ST/ARM SPEAr
"st,spear600-gmac"
"st,spear1310-gmac"
  ...

ST/SH

"st,stx7108-gmac"
"st,stx7106-gmac"
"st,stx7109-mac"    ->>> mac10/100
...

MIPS
"st,Loongson1B"
This seems fine to me.

Rob
quoted
 
quoted
quoted
Okay.
quoted
quoted
+- reg: Address and length of the register set for the device
+- interrupt-parent: Should be the phandle for the interrupt controller
+  that services interrupts for this device
+- interrupts: Should contain the STMMAC interrupts
+- interrupt-names: Should contain the interrupt names "macirq"
+  "eth_wake_irq" if this interrupt is supported in the "interrupts"
+  property
You should be able to tell this from the compatible string and number of
interrupts.
Yes. Currently the driver uses platform_get_irq_byname() to register the
irq's. That's why I added these properties. Is there something wrong with
using it this way?
quoted
quoted
+- phy-mode: String, operation mode of the PHY interface.
+  Supported values are: "mii", "rmii", "gmii", "rgmii".
+- phy-addr: MDIO address of the PHY
This is normally probed or the mdio bus is a sub-node of the MAC node.
See arch/powerpc/boot/dts/mpc8377_mds.dts for an example.
Okay, I'll rework this.
quoted
quoted
+
+Optional properties:
+- stm,prog-burst-len: Specify the burst length
+- stm,has-gmac: Indicates that the controller supports 1000Mbps
+- stm,has-pmt: Indicates that the controller supports power management
I think these should all be encoded by the compatible string.
and should we have all the other flags e.g. tx_coe etc?
(see stmmac.txt)
As Rob suggested, some of these flags/parameters are implicitly defined by the 
compatible string. If this is not the case, then sure, those flags/parameters 
need to be provided via the device-tree as well. I just don't need "tx_coe" 
etc. for my platform (SPEAr600) as far as I know. I suggest to add support for 
them once they are really needed/used by other platforms.
Ok, but on SPEAr indeed some of these are not used at all.
If you agree, we can go head with these and then we will add new ones
next time. In the meantime, I will try to be more familiar with
devicetree and provide further patches

peppe
quoted
Thanks,
Stefan
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help