devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>
To: Giuseppe Cavallaro <peppe.cavallaro-qxv4g6HH51o@public.gmane.org>,
	netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Cc: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>,
	Srinivas Kandagatla
	<srinivas.kandagatla-qxv4g6HH51o@public.gmane.org>,
	Maxime Ripard
	<maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
Subject: [PATCH 04/10] net: stmmac: sunxi platfrom extensions for GMAC in Allwinner A20 SoC's
Date: Sat,  7 Dec 2013 01:29:37 +0800	[thread overview]
Message-ID: <1386350983-13281-5-git-send-email-wens@csie.org> (raw)
In-Reply-To: <1386350983-13281-1-git-send-email-wens-jdAy2FN1RRM@public.gmane.org>

The Allwinner A20 has an ethernet controller that seems to be
an early version of Synopsys DesignWare MAC 10/100/1000 Universal,
which is supported by the stmmac driver.

Allwinner's GMAC requires setting additional registers in the SoC's
clock control unit.

The exact version of the DWMAC IP that Allwinner uses is unknown,
thus the exact feature set is unknown.

Signed-off-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>
---
 .../bindings/net/allwinner,sun7i-gmac.txt          | 22 +++++++
 drivers/net/ethernet/stmicro/stmmac/Kconfig        | 12 ++++
 drivers/net/ethernet/stmicro/stmmac/Makefile       |  1 +
 drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c  | 76 ++++++++++++++++++++++
 drivers/net/ethernet/stmicro/stmmac/stmmac.h       |  3 +
 .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |  3 +
 6 files changed, 117 insertions(+)

diff --git a/Documentation/devicetree/bindings/net/allwinner,sun7i-gmac.txt b/Documentation/devicetree/bindings/net/allwinner,sun7i-gmac.txt
new file mode 100644
index 0000000..271554a
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/allwinner,sun7i-gmac.txt
@@ -0,0 +1,22 @@
+* Allwinner GMAC ethernet controller
+
+This device is a platform glue layer for stmmac.
+Please see stmmac.txt for the other unchanged properties.
+
+Required properties:
+ - compatible:  Should be "allwinner,sun7i-gmac"
+ - reg: Address and length of register set for the device and corresponding
+   clock control
+
+Examples:
+
+	gmac: ethernet@01c50000 {
+		compatible = "allwinner,sun7i-gmac";
+		reg = <0x01c50000 0x10000>,
+		      <0x01c20164 0x4>;
+		interrupts = <0 85 1>;
+		interrupt-names = "macirq";
+		clocks = <&ahb_gates 49>;
+		clock-names = "stmmaceth";
+		phy-mode = "mii";
+	};
diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
index 6e52c0f..6d71210 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -25,6 +25,18 @@ config STMMAC_PLATFORM
 
 	  If unsure, say N.
 
+config DWMAC_SUNXI
+	bool "Allwinner GMAC support"
+	depends on STMMAC_PLATFORM
+	depends on ARCH_SUNXI
+	default y
+	---help---
+	  Support for Allwinner A20 GMAC ethernet driver.
+
+	  This selects Allwinner SoC glue layer support for the
+	  stmmac device driver. This driver is used for A20 GMAC
+	  ethernet controller.
+
 config STMMAC_PCI
 	bool "STMMAC PCI bus support"
 	depends on STMMAC_ETH && PCI
diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile
index 356a9dd..ecadece 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Makefile
+++ b/drivers/net/ethernet/stmicro/stmmac/Makefile
@@ -1,6 +1,7 @@
 obj-$(CONFIG_STMMAC_ETH) += stmmac.o
 stmmac-$(CONFIG_STMMAC_PLATFORM) += stmmac_platform.o
 stmmac-$(CONFIG_STMMAC_PCI) += stmmac_pci.o
+stmmac-$(CONFIG_DWMAC_SUNXI) += dwmac-sunxi.o
 stmmac-objs:= stmmac_main.o stmmac_ethtool.o stmmac_mdio.o ring_mode.o	\
 	      chain_mode.o dwmac_lib.o dwmac1000_core.o  dwmac1000_dma.o \
 	      dwmac100_core.o dwmac100_dma.o enh_desc.o  norm_desc.o \
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
new file mode 100644
index 0000000..6c9fdb0
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
@@ -0,0 +1,76 @@
+/**
+ * dwmac-sunxi.c - Allwinner sunxi DWMAC specific glue layer
+ *
+ * Copyright (C) 2013 Chen-Yu Tsai
+ *
+ * Chen-Yu Tsai  <wens-jdAy2FN1RRM@public.gmane.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/clk.h>
+#include <linux/phy.h>
+#include <linux/stmmac.h>
+
+#define GMAC_IF_TYPE_RGMII	0x4
+
+#define GMAC_TX_CLK_MASK	0x3
+#define GMAC_TX_CLK_MII		0x0
+#define GMAC_TX_CLK_RGMII_INT	0x2
+
+static int sun7i_gmac_init(struct platform_device *pdev)
+{
+	struct resource *res;
+	struct device *dev = &pdev->dev;
+	void __iomem *addr = NULL;
+	struct plat_stmmacenet_data *plat_dat = NULL;
+	u32 priv_clk_reg;
+
+	plat_dat = dev_get_platdata(&pdev->dev);
+	if (!plat_dat)
+		return -EINVAL;
+
+	/* Get GMAC clock register in CCU */
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+	addr = devm_ioremap_resource(dev, res);
+	if (IS_ERR(addr))
+		return PTR_ERR(addr);
+
+	priv_clk_reg = readl(addr);
+
+	/* Set GMAC interface port mode */
+	if (plat_dat->interface == PHY_INTERFACE_MODE_RGMII)
+		priv_clk_reg |= GMAC_IF_TYPE_RGMII;
+	else
+		priv_clk_reg &= ~GMAC_IF_TYPE_RGMII;
+
+	/* Set GMAC transmit clock source. */
+	priv_clk_reg &= ~GMAC_TX_CLK_MASK;
+	if (plat_dat->interface == PHY_INTERFACE_MODE_RGMII
+			|| plat_dat->interface == PHY_INTERFACE_MODE_GMII)
+		priv_clk_reg |= GMAC_TX_CLK_RGMII_INT;
+	else
+		priv_clk_reg |= GMAC_TX_CLK_MII;
+
+	writel(priv_clk_reg, addr);
+
+	/* mask out phy addr 0x0 */
+	plat_dat->mdio_bus_data->phy_mask = 0x1;
+
+	return 0;
+}
+
+const struct plat_stmmacenet_data sun7i_gmac_data = {
+	.has_gmac = 1,
+	.tx_coe = 1,
+	.init = sun7i_gmac_init,
+};
+
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
index f16a9bd..c6e1f93 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
@@ -130,6 +130,9 @@ void stmmac_disable_eee_mode(struct stmmac_priv *priv);
 bool stmmac_eee_init(struct stmmac_priv *priv);
 
 #ifdef CONFIG_STMMAC_PLATFORM
+#ifdef CONFIG_DWMAC_SUNXI
+extern const struct plat_stmmacenet_data sun7i_gmac_data;
+#endif
 extern struct platform_driver stmmac_pltfr_driver;
 static inline int stmmac_register_platform(void)
 {
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
index df3fd1c..6cf8292 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
@@ -35,6 +35,9 @@ static const struct of_device_id stmmac_dt_ids[] = {
 	{ .compatible = "snps,dwmac-3.70a"},
 	{ .compatible = "snps,dwmac-3.710"},
 	{ .compatible = "snps,dwmac"},
+#ifdef CONFIG_DWMAC_SUNXI
+	{ .compatible = "allwinner,sun7i-gmac", .data = &sun7i_gmac_data},
+#endif
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, stmmac_dt_ids);
-- 
1.8.5.1

  parent reply	other threads:[~2013-12-06 17:29 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-06 17:29 [PATCH 00/10] net: stmmac: Add sun7i GMAC glue layer Chen-Yu Tsai
     [not found] ` <1386350983-13281-1-git-send-email-wens-jdAy2FN1RRM@public.gmane.org>
2013-12-06 17:29   ` [PATCH 01/10] net: stmmac: Enable stmmac main clock when probing hardware Chen-Yu Tsai
     [not found]     ` <1386350983-13281-2-git-send-email-wens-jdAy2FN1RRM@public.gmane.org>
2013-12-07 10:33       ` Maxime Ripard
2013-12-09  2:43         ` Chen-Yu Tsai
     [not found]           ` <CAGb2v65YOSq_BMWSzSHX8w_hbo+0vwquBT2pnLuwNVZkWRfLvA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-12-09 10:09             ` Hans de Goede
2013-12-10 20:05             ` Maxime Ripard
2013-12-12  4:31               ` Chen-Yu Tsai
2013-12-09  7:14     ` Giuseppe CAVALLARO
     [not found]       ` <52A56DE5.5010206-qxv4g6HH51o@public.gmane.org>
2013-12-09  7:26         ` Chen-Yu Tsai
2013-12-06 17:29   ` [PATCH 02/10] net: stmmac: Honor DT parameter to force DMA store and forward mode Chen-Yu Tsai
2013-12-06 21:26     ` David Miller
     [not found]       ` <20131206.162606.2277176361893801778.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2013-12-07  1:19         ` Chen-Yu Tsai
2013-12-07  1:23         ` Chen-Yu Tsai
     [not found]           ` <CAGb2v67ZNtbQm+ZW5v_3wNbz1=oLhXks6gbTSjLYa=Nnoz8w-A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-12-07 10:07             ` maxime.ripard
2013-12-07 11:06               ` Tomasz Figa
2013-12-09  2:59                 ` Chen-Yu Tsai
     [not found]                   ` <CAGb2v64BMNjbbc7j2XesuPEXZV+RnjtP1sAPQ4icU=-wjh3YNQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-12-10 20:10                     ` maxime.ripard
2013-12-06 17:29   ` [PATCH 03/10] net: stmmac: Use platform data tied with compatible strings Chen-Yu Tsai
2013-12-06 21:26     ` David Miller
     [not found]       ` <20131206.162633.125107323851595113.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2013-12-07  2:13         ` Chen-Yu Tsai
2013-12-06 17:29   ` Chen-Yu Tsai [this message]
     [not found]     ` <1386350983-13281-5-git-send-email-wens-jdAy2FN1RRM@public.gmane.org>
2013-12-07 10:27       ` [PATCH 04/10] net: stmmac: sunxi platfrom extensions for GMAC in Allwinner A20 SoC's Maxime Ripard
2013-12-07 11:12         ` Tomasz Figa
2013-12-07 11:46           ` Maxime Ripard
2013-12-07 12:50             ` Tomasz Figa
2013-12-07 13:34               ` Emilio López
2013-12-09 11:10     ` srinivas kandagatla
     [not found]       ` <52A5A52C.50605-qxv4g6HH51o@public.gmane.org>
2013-12-09 16:16         ` Hans de Goede
     [not found]           ` <52A5ECF4.6030301-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-12-09 17:56             ` Chen-Yu Tsai
     [not found]               ` <CAGb2v64LNxnz--vn0u9zwmt7MQJZ=uz2fs0H3zDSse_XDfdK4Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-12-09 19:04                 ` Hans de Goede
     [not found]                   ` <52A61435.6040803-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-12-10 20:14                     ` Maxime Ripard
2013-12-09 17:34         ` Chen-Yu Tsai
     [not found]           ` <CAGb2v67WiCaMpJEzA_X6o7uOu6i3w3FCEz7=N5HY0amQb01SZA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-12-10 14:59             ` srinivas kandagatla
     [not found]               ` <52A72C6D.60100-qxv4g6HH51o@public.gmane.org>
2013-12-10 20:23                 ` Maxime Ripard
2013-12-11 12:17                 ` Chen-Yu Tsai
     [not found]                   ` <CAGb2v64qQvqJSicA6MTAxeh1sGjWY=Pk=vDq=9J3pTQW+wkXrA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-12-11 14:45                     ` srinivas kandagatla
     [not found]                       ` <52A87A74.8040807-qxv4g6HH51o@public.gmane.org>
2013-12-12  7:27                         ` Chen-Yu Tsai
2013-12-12  9:04                         ` Maxime Ripard
2013-12-12 10:31                           ` Chen-Yu Tsai
2013-12-13 10:38                             ` Maxime Ripard
2013-12-24  3:27                               ` Chen-Yu Tsai
     [not found]                                 ` <CAGb2v64Q1PSMw_nULBHMR5eOC44hWBPewchxE_4sO+4XN8_sDA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-01-02 13:11                                   ` srinivas kandagatla
     [not found]                                     ` <52C5656A.4060402-qxv4g6HH51o@public.gmane.org>
2014-01-07 10:24                                       ` Chen-Yu Tsai
2013-12-09 11:21     ` srinivas kandagatla
     [not found]       ` <52A5A7B2.4000509-qxv4g6HH51o@public.gmane.org>
2013-12-09 13:44         ` Sergei Shtylyov
     [not found]           ` <52A5C950.7070903-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org>
2013-12-09 15:45             ` Chen-Yu Tsai
2013-12-06 17:29   ` [PATCH 05/10] ARM: dts: sun7i: Add GMAC controller node to sun7i DTSI Chen-Yu Tsai
2013-12-06 17:29   ` [PATCH 06/10] ARM: dts: sun7i: Add pin muxing options for the GMAC Chen-Yu Tsai
2013-12-06 17:29   ` [PATCH 07/10] ARM: dts: sun7i: cubietruck: Enable " Chen-Yu Tsai
2013-12-06 21:09     ` Florian Fainelli
     [not found]       ` <CAGVrzcb_r9_p4urz4XkE2A-G85KAHJa4PJ=Gt9a4RPYQNJ6j0g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-12-07  1:35         ` Chen-Yu Tsai
     [not found]           ` <CAGb2v64yFhkTXvdq=1VpemULhXew-5fvmSoTBzEb6iFDiSqy1Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-12-07  1:57             ` Florian Fainelli
     [not found]               ` <CAGVrzcaxV88dU3vEVGUiEQihUHLxq+QvQVQ6VvmOFVRsqbbX7w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-12-09  2:55                 ` Chen-Yu Tsai
     [not found]                   ` <CAGb2v675Cg6S512zfM1z4b+wqE_PesDGWdgcmpzWmPzyzXqbeA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-12-09 17:48                     ` Florian Fainelli
2013-12-10  4:11                       ` Chen-Yu Tsai
     [not found]                         ` <CAGb2v665xtY4m4uCTb_iMojG+ox0HvyCgz6p0P7oxJVvZ0SW9w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-12-10 17:23                           ` Florian Fainelli
2013-12-13 10:21                 ` Giuseppe CAVALLARO
2013-12-06 17:29   ` [PATCH 08/10] ARM: dts: sun7i: cubieboard2: Enable GMAC instead of EMAC Chen-Yu Tsai
     [not found]     ` <1386350983-13281-9-git-send-email-wens-jdAy2FN1RRM@public.gmane.org>
2013-12-06 21:10       ` Florian Fainelli
2013-12-06 17:29   ` [PATCH 09/10] ARM: dts: sun7i: olinuxino-micro: " Chen-Yu Tsai
2013-12-06 17:29   ` [PATCH 10/10] ARM: dts: sun7i: Add ethernet alias for GMAC Chen-Yu Tsai
     [not found]     ` <1386350983-13281-11-git-send-email-wens-jdAy2FN1RRM@public.gmane.org>
2013-12-07 10:15       ` Maxime Ripard
2013-12-07 16:20         ` Chen-Yu Tsai
2013-12-06 20:52   ` [PATCH 00/10] net: stmmac: Add sun7i GMAC glue layer Michal Suchanek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1386350983-13281-5-git-send-email-wens@csie.org \
    --to=wens-jday2fn1rrm@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
    --cc=maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
    --cc=netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=peppe.cavallaro-qxv4g6HH51o@public.gmane.org \
    --cc=rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \
    --cc=srinivas.kandagatla-qxv4g6HH51o@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).