Message ID | 1331561157-3820-1-git-send-email-sr@denx.de |
---|---|
State | Not Applicable, archived |
Delegated to: | David Miller |
Headers | show |
On 03/12/2012 09:05 AM, Stefan Roese wrote: > 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 <peppe.cavallaro@st.com> > Cc: Viresh Kumar <viresh.kumar@st.com> > --- > 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 > +- 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), > }, > }; > -- 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
On 15:05 Mon 12 Mar , Stefan Roese wrote: > 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 <peppe.cavallaro@st.com> > Cc: Viresh Kumar <viresh.kumar@st.com> > --- > 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 IP have 2 version at least the GMAC for the second generation and mac for the first generation > +- 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 optionnal > +- 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 this IP support more mode 10/100/300/1000 > +- 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 This must be check at runtime, we can boot a kernel with or without DT. Best Reards, J. > 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 > > -- > 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 -- 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
Hi Rob, On Monday 12 March 2012 15:34:59 Rob Herring wrote: > On 03/12/2012 09:05 AM, Stefan Roese wrote: > > 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 <peppe.cavallaro@st.com> > > Cc: Viresh Kumar <viresh.kumar@st.com> > > --- > > > > 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. > > +- 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? > > +- 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. > > + > > +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 -- 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
On 16:06 Mon 12 Mar , Stefan Roese wrote: > Hi Rob, > > On Monday 12 March 2012 15:34:59 Rob Herring wrote: > > On 03/12/2012 09:05 AM, Stefan Roese wrote: > > > 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 <peppe.cavallaro@st.com> > > > Cc: Viresh Kumar <viresh.kumar@st.com> > > > --- > > > > > > 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. -- 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
On 16:25 Mon 12 Mar , Stefan Roese wrote: > On Monday 12 March 2012 15:38:25 Jean-Christophe PLAGNIOL-VILLARD wrote: > > > @@ -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 > > > > This must be check at runtime, we can boot a kernel with or without DT. > > Are you referring to using "if (pdev->dev.of_node)" to distinguish between DT > and non-DT version instead of this #ifdef? yes Best Regards, J. -- 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
On Monday 12 March 2012 15:38:25 Jean-Christophe PLAGNIOL-VILLARD wrote: > > @@ -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 > > This must be check at runtime, we can boot a kernel with or without DT. Are you referring to using "if (pdev->dev.of_node)" to distinguish between DT and non-DT version instead of this #ifdef? 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
On 3/12/2012 4:06 PM, Stefan Roese wrote: > Hi Rob, > > On Monday 12 March 2012 15:34:59 Rob Herring wrote: >> On 03/12/2012 09:05 AM, Stefan Roese wrote: >>> 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 <peppe.cavallaro@st.com> >>> Cc: Viresh Kumar <viresh.kumar@st.com> >>> --- >>> >>> 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. 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. > >>> +- 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? > >>> +- 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. > >>> + >>> +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 > -- 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
On Monday 12 March 2012 16:30:37 Giuseppe CAVALLARO wrote: > >>> +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. > > 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? > > Okay. > > > >>> +- 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? > > > >>> +- 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. > > > >>> + > >>> +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 -- 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
On 3/12/2012 5:23 PM, Stefan Roese wrote: > On Monday 12 March 2012 16:30:37 Giuseppe CAVALLARO wrote: >>>>> +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. >> >> 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" > >>> Okay. >>> >>>>> +- 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? >>> >>>>> +- 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. >>> >>>>> + >>>>> +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 > -- 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
On 16:30 Mon 12 Mar , Giuseppe CAVALLARO wrote: > On 3/12/2012 4:06 PM, Stefan Roese wrote: > > Hi Rob, > > > > On Monday 12 March 2012 15:34:59 Rob Herring wrote: > >> On 03/12/2012 09:05 AM, Stefan Roese wrote: > >>> 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 <peppe.cavallaro@st.com> > >>> Cc: Viresh Kumar <viresh.kumar@st.com> > >>> --- > >>> > >>> 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. > > 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. -- 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
On 03/12/2012 11:46 AM, Giuseppe CAVALLARO wrote: > On 3/12/2012 5:23 PM, Stefan Roese wrote: >> On Monday 12 March 2012 16:30:37 Giuseppe CAVALLARO wrote: >>>>>> +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. >>> >>> 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 >> >>>> Okay. >>>> >>>>>> +- 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? >>>> >>>>>> +- 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. >>>> >>>>>> + >>>>>> +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 >> > -- 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
On 3/12/2012 3:38 PM, Jean-Christophe PLAGNIOL-VILLARD wrote: > On 15:05 Mon 12 Mar , Stefan Roese wrote: >> 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 <peppe.cavallaro@st.com> >> Cc: Viresh Kumar <viresh.kumar@st.com> >> --- >> 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 IP have 2 version at least the GMAC for the second generation and mac for > the first generation yes you are right. STMMAC supports two device generations I named: dwma10/100 and dwmac1000 (gmac). Concerning the latter, we support several different versions of the synopsys GMAC cores ... from 3.30 to 3.61a. For example, stx7108 and Stx7109 have the same GMAC core (also SPEAr600 IIRC). SPEAr13xx has 3.50a New ST SoC Stxh415 has the 3.60a. etc. >> +- 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 > optionnal yes note that there will be a new field for lpi IRQ as well >> +- 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 > this IP support more mode 10/100/300/1000 has_gmac was used to understand on devices w/o the HW cap registers if the core is a gmac... another useful parameter could be : enh_desc In fact, there are several possible HW configurations: gmac core + enh desc gmac core + norm_desc mac core + norm_des ... W/o cap register (present in new cores newer than 3.50) we need to pass this info from the plt. >> +- 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 > This must be check at runtime, we can boot a kernel with or without DT. > > Best Reards, > J. >> 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 >> >> -- >> 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 > -- > 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 > -- 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
On Wednesday 14 March 2012, Giuseppe CAVALLARO wrote: > On 3/12/2012 3:38 PM, Jean-Christophe PLAGNIOL-VILLARD wrote: > > On 15:05 Mon 12 Mar , Stefan Roese wrote: > >> 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 <peppe.cavallaro@st.com> > >> Cc: Viresh Kumar <viresh.kumar@st.com> > >> --- > >> 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 IP have 2 version at least the GMAC for the second generation and mac for > > the first generation > > yes you are right. STMMAC supports two device generations I named: > dwma10/100 and dwmac1000 (gmac). > > Concerning the latter, we support several different versions of the > synopsys GMAC cores ... from 3.30 to 3.61a. > > For example, stx7108 and Stx7109 have the same GMAC core (also SPEAr600 > IIRC). > SPEAr13xx has 3.50a > New ST SoC Stxh415 has the 3.60a. etc. In that case, you should definitely list the exact device versions in the compatible string, like: compatible = "stm,spear600-gmac", "snps,dw-gmac-3.50a", "snps,dw-gmac"; When we have other socs with the same version, that lets us add quirks for the specific version by checking the compatible property once in the driver. It also sounds to me that the entire stmmac driver should live in the drivers/net/ethernet/synopsys directory, not stmicro, but that is a different issue. Arnd -- 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
On 3/14/2012 2:07 PM, Arnd Bergmann wrote: > On Wednesday 14 March 2012, Giuseppe CAVALLARO wrote: >> On 3/12/2012 3:38 PM, Jean-Christophe PLAGNIOL-VILLARD wrote: >>> On 15:05 Mon 12 Mar , Stefan Roese wrote: >>>> 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 <peppe.cavallaro@st.com> >>>> Cc: Viresh Kumar <viresh.kumar@st.com> >>>> --- >>>> 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 IP have 2 version at least the GMAC for the second generation and mac for >>> the first generation >> >> yes you are right. STMMAC supports two device generations I named: >> dwma10/100 and dwmac1000 (gmac). >> >> Concerning the latter, we support several different versions of the >> synopsys GMAC cores ... from 3.30 to 3.61a. >> >> For example, stx7108 and Stx7109 have the same GMAC core (also SPEAr600 >> IIRC). >> SPEAr13xx has 3.50a >> New ST SoC Stxh415 has the 3.60a. etc. > > In that case, you should definitely list the exact device versions in the > compatible string, like: > > compatible = "stm,spear600-gmac", "snps,dw-gmac-3.50a", "snps,dw-gmac"; looks good to me > > When we have other socs with the same version, that lets us add quirks > for the specific version by checking the compatible property once in the > driver. > > It also sounds to me that the entire stmmac driver should live in the > drivers/net/ethernet/synopsys directory, not stmicro, but that is a > different issue. > I had also proposed to rename it from stmmac to synmac. peppe > Arnd > -- > 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 > -- 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
On Wednesday 14 March 2012 14:16:56 Giuseppe CAVALLARO wrote: > >> Concerning the latter, we support several different versions of the > >> synopsys GMAC cores ... from 3.30 to 3.61a. > >> > >> For example, stx7108 and Stx7109 have the same GMAC core (also SPEAr600 > >> IIRC). > >> SPEAr13xx has 3.50a > >> New ST SoC Stxh415 has the 3.60a. etc. > > > > In that case, you should definitely list the exact device versions in the > > compatible string, like: > > > > compatible = "stm,spear600-gmac", "snps,dw-gmac-3.50a", "snps,dw-gmac"; > > looks good to me So whats the Synopsys version for SPEAr600? "snps,dw-gmac-3.50a" ??? Perhaps you should add this info for all supported SoC's into the device driver? Or even better into the devicetree bindings Documentation? 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
On 12:38 Wed 14 Mar , Giuseppe CAVALLARO wrote: > On 3/12/2012 3:38 PM, Jean-Christophe PLAGNIOL-VILLARD wrote: > > On 15:05 Mon 12 Mar , Stefan Roese wrote: > >> 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 <peppe.cavallaro@st.com> > >> Cc: Viresh Kumar <viresh.kumar@st.com> > >> --- > >> 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 IP have 2 version at least the GMAC for the second generation and mac for > > the first generation > > yes you are right. STMMAC supports two device generations I named: > dwma10/100 and dwmac1000 (gmac). > > Concerning the latter, we support several different versions of the > synopsys GMAC cores ... from 3.30 to 3.61a. > > For example, stx7108 and Stx7109 have the same GMAC core (also SPEAr600 > IIRC). no PM the PM was only since 7108 IIRC 7109 use mac not gmac IIRC it's 7105 that start to use the GMAC with 300Mbps max > SPEAr13xx has 3.50a > New ST SoC Stxh415 has the 3.60a. etc. > > >> +- 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 > > optionnal > > yes > > note that there will be a new field for lpi IRQ as well > > >> +- 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 > > this IP support more mode 10/100/300/1000 > > has_gmac was used to understand on devices w/o the HW cap registers if > the core is a gmac... another useful parameter could be : enh_desc this need to manage via compatible Best Regards, J. -- 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
On 3/14/2012 5:26 PM, Jean-Christophe PLAGNIOL-VILLARD wrote: > On 12:38 Wed 14 Mar , Giuseppe CAVALLARO wrote: >> On 3/12/2012 3:38 PM, Jean-Christophe PLAGNIOL-VILLARD wrote: >>> On 15:05 Mon 12 Mar , Stefan Roese wrote: >>>> 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 <peppe.cavallaro@st.com> >>>> Cc: Viresh Kumar <viresh.kumar@st.com> >>>> --- >>>> 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 IP have 2 version at least the GMAC for the second generation and mac for >>> the first generation >> >> yes you are right. STMMAC supports two device generations I named: >> dwma10/100 and dwmac1000 (gmac). >> >> Concerning the latter, we support several different versions of the >> synopsys GMAC cores ... from 3.30 to 3.61a. >> >> For example, stx7108 and Stx7109 have the same GMAC core (also SPEAr600 >> IIRC). > no PM the PM was only since 7108 IIRC Sorry! you are right :-) 7109 has the mac10/100 (databook 1.91) and 7105/8 have the gmac databook 3.30. peppe > > 7109 use mac not gmac IIRC it's 7105 that start to use the GMAC with 300Mbps > max >> SPEAr13xx has 3.50a >> New ST SoC Stxh415 has the 3.60a. etc. >> >>>> +- 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 >>> optionnal >> >> yes >> >> note that there will be a new field for lpi IRQ as well >> >>>> +- 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 >>> this IP support more mode 10/100/300/1000 >> >> has_gmac was used to understand on devices w/o the HW cap registers if >> the core is a gmac... another useful parameter could be : enh_desc > this need to manage via compatible > > Best Regards, > J. > -- 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
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), }, };
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 <peppe.cavallaro@st.com> Cc: Viresh Kumar <viresh.kumar@st.com> --- 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