-
-From patchwork Fri May 29 01:42:20 2015
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [5/7] net: dsa: ar8xxx: enable QCA header support on AR8xxx
-From: Mathieu Olivari <mathieu@codeaurora.org>
-X-Patchwork-Id: 477527
-X-Patchwork-Delegate: davem@davemloft.net
-Message-Id: <1432863742-18427-6-git-send-email-mathieu@codeaurora.org>
-To: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
- ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
- davem@davemloft.net, mathieu@codeaurora.org, andrew@lunn.ch,
- f.fainelli@gmail.com, linux@roeck-us.net, gang.chen.5i5j@gmail.com,
- jiri@resnulli.us, leitec@staticky.com, fabf@skynet.be,
- alexander.h.duyck@intel.com, pavel.nakonechny@skitlab.ru,
- joe@perches.com, sfeldma@gmail.com, nbd@nbd.name, juhosg@openwrt.org
-Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
- netdev@vger.kernel.org
-Date: Thu, 28 May 2015 18:42:20 -0700
-
-This change enable support for the QCA headers in QCA83337 driver.
-A 2 bytes header will be added by the switch on every incoming packet
-to identify the ingress port, and the DSA tagging code will add a
-similar 2 bytes header to control which port is used to send a
-particular packet.
-
-Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
----
- drivers/net/dsa/Kconfig | 1 +
- drivers/net/dsa/ar8xxx.c | 28 ++++++++++++++++++++++++++--
- drivers/net/dsa/ar8xxx.h | 22 ++++++++++++++++++++++
- 3 files changed, 49 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/net/dsa/Kconfig b/drivers/net/dsa/Kconfig
-index 17fb296..fa8b484 100644
---- a/drivers/net/dsa/Kconfig
-+++ b/drivers/net/dsa/Kconfig
-@@ -68,6 +68,7 @@ config NET_DSA_BCM_SF2
- config NET_DSA_AR8XXX
- tristate "Qualcomm Atheros AR8XXX Ethernet switch family support"
- depends on NET_DSA
-+ select NET_DSA_TAG_QCA
- select REGMAP
- ---help---
- This enables support for the Qualcomm Atheros AR8XXX Ethernet
-diff --git a/drivers/net/dsa/ar8xxx.c b/drivers/net/dsa/ar8xxx.c
-index 327abd4..4044614 100644
---- a/drivers/net/dsa/ar8xxx.c
-+++ b/drivers/net/dsa/ar8xxx.c
-@@ -292,15 +292,31 @@ static int ar8xxx_setup(struct dsa_switch *ds)
- if (ret < 0)
- return ret;
-
-+ /* Enable CPU Port */
-+ ar8xxx_reg_set(ds, AR8327_REG_GLOBAL_FW_CTRL0,
-+ AR8327_GLOBAL_FW_CTRL0_CPU_PORT_EN);
-+
- /* Enable MIB counters */
- ar8xxx_reg_set(ds, AR8327_REG_MIB, AR8327_MIB_CPU_KEEP);
- ar8xxx_write(ds, AR8327_REG_MODULE_EN, AR8327_MODULE_EN_MIB);
-
-+ /* Enable QCA header mode on Port 0 */
-+ ar8xxx_write(ds, AR8327_REG_PORT_HDR_CTRL(0),
-+ AR8327_PORT_HDR_CTRL_ALL << AR8327_PORT_HDR_CTRL_TX_S |
-+ AR8327_PORT_HDR_CTRL_ALL << AR8327_PORT_HDR_CTRL_RX_S);
-+
- /* Disable forwarding by default on all ports */
- for (i = 0; i < AR8327_NUM_PORTS; i++)
- ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(i),
- AR8327_PORT_LOOKUP_MEMBER, 0);
-
-+ /* Forward all unknown frames to CPU port for Linux processing */
-+ ar8xxx_write(ds, AR8327_REG_GLOBAL_FW_CTRL1,
-+ BIT(0) << AR8327_GLOBAL_FW_CTRL1_IGMP_DP_S |
-+ BIT(0) << AR8327_GLOBAL_FW_CTRL1_BC_DP_S |
-+ BIT(0) << AR8327_GLOBAL_FW_CTRL1_MC_DP_S |
-+ BIT(0) << AR8327_GLOBAL_FW_CTRL1_UC_DP_S);
-+
- /* Setup connection between CPU ports & PHYs */
- for (i = 0; i < DSA_MAX_PORTS; i++) {
- /* CPU port gets connected to all PHYs in the switch */
-@@ -312,8 +328,16 @@ static int ar8xxx_setup(struct dsa_switch *ds)
-
- /* Invividual PHYs gets connected to CPU port only */
- if (ds->phys_port_mask & BIT(i)) {
-- ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(phy_to_port(i)),
-+ int phy = phy_to_port(i);
-+
-+ ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(phy),
- AR8327_PORT_LOOKUP_MEMBER, BIT(0));
-+
-+ /* Disable Auto-learning by default so the switch
-+ * doesn't try to forward the frame to another port
-+ */
-+ ar8xxx_reg_clear(ds, AR8327_PORT_LOOKUP_CTRL(phy),
-+ AR8327_PORT_LOOKUP_LEARN);
- }
- }
-
-@@ -423,7 +447,7 @@ static void ar8xxx_poll_link(struct dsa_switch *ds)
- }
-
- static struct dsa_switch_driver ar8xxx_switch_driver = {
-- .tag_protocol = DSA_TAG_PROTO_NONE,
-+ .tag_protocol = DSA_TAG_PROTO_QCA,
- .priv_size = sizeof(struct ar8xxx_priv),
- .probe = ar8xxx_probe,
- .setup = ar8xxx_setup,
-diff --git a/drivers/net/dsa/ar8xxx.h b/drivers/net/dsa/ar8xxx.h
-index 98cc7ed..e68b92a 100644
---- a/drivers/net/dsa/ar8xxx.h
-+++ b/drivers/net/dsa/ar8xxx.h
-@@ -62,6 +62,28 @@ struct ar8xxx_mib_desc {
- #define AR8XXX_PORT_STATUS_LINK_AUTO BIT(9)
- #define AR8XXX_PORT_STATUS_LINK_PAUSE BIT(10)
-
-+#define AR8327_REG_PORT_HDR_CTRL(_i) (0x9c + (_i * 4))
-+#define AR8327_PORT_HDR_CTRL_RX_MASK GENMASK(3, 2)
-+#define AR8327_PORT_HDR_CTRL_RX_S 2
-+#define AR8327_PORT_HDR_CTRL_TX_MASK GENMASK(1, 0)
-+#define AR8327_PORT_HDR_CTRL_TX_S 0
-+#define AR8327_PORT_HDR_CTRL_ALL 2
-+#define AR8327_PORT_HDR_CTRL_MGMT 1
-+#define AR8327_PORT_HDR_CTRL_NONE 0
-+
-+#define AR8327_REG_GLOBAL_FW_CTRL0 0x620
-+#define AR8327_GLOBAL_FW_CTRL0_CPU_PORT_EN BIT(10)
-+
-+#define AR8327_REG_GLOBAL_FW_CTRL1 0x624
-+#define AR8327_GLOBAL_FW_CTRL1_IGMP_DP_MASK GENMASK(30, 24)
-+#define AR8327_GLOBAL_FW_CTRL1_IGMP_DP_S 24
-+#define AR8327_GLOBAL_FW_CTRL1_BC_DP_MASK GENMASK(22, 16)
-+#define AR8327_GLOBAL_FW_CTRL1_BC_DP_S 16
-+#define AR8327_GLOBAL_FW_CTRL1_MC_DP_MASK GENMASK(14, 8)
-+#define AR8327_GLOBAL_FW_CTRL1_MC_DP_S 8
-+#define AR8327_GLOBAL_FW_CTRL1_UC_DP_MASK GENMASK(6, 0)
-+#define AR8327_GLOBAL_FW_CTRL1_UC_DP_S 0
-+
- #define AR8327_PORT_LOOKUP_CTRL(_i) (0x660 + (_i) * 0xc)
- #define AR8327_PORT_LOOKUP_MEMBER GENMASK(6, 0)
- #define AR8327_PORT_LOOKUP_IN_MODE GENMASK(9, 8)
-
-From patchwork Fri May 29 01:42:21 2015
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [6/7] net: dsa: ar8xxx: add support for second xMII interfaces
- through DT
-From: Mathieu Olivari <mathieu@codeaurora.org>
-X-Patchwork-Id: 477525
-X-Patchwork-Delegate: davem@davemloft.net
-Message-Id: <1432863742-18427-7-git-send-email-mathieu@codeaurora.org>
-To: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
- ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
- davem@davemloft.net, mathieu@codeaurora.org, andrew@lunn.ch,
- f.fainelli@gmail.com, linux@roeck-us.net, gang.chen.5i5j@gmail.com,
- jiri@resnulli.us, leitec@staticky.com, fabf@skynet.be,
- alexander.h.duyck@intel.com, pavel.nakonechny@skitlab.ru,
- joe@perches.com, sfeldma@gmail.com, nbd@nbd.name, juhosg@openwrt.org
-Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
- netdev@vger.kernel.org
-Date: Thu, 28 May 2015 18:42:21 -0700
-
-This patch is adding support for port6 specific options to device tree.
-They can be used to setup the second xMII interface, and connect it to
-one of the switch port.
-
-Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
----
- drivers/net/dsa/ar8xxx.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 50 insertions(+)
-
-diff --git a/drivers/net/dsa/ar8xxx.c b/drivers/net/dsa/ar8xxx.c
-index 4044614..7559249 100644
---- a/drivers/net/dsa/ar8xxx.c
-+++ b/drivers/net/dsa/ar8xxx.c
-@@ -19,6 +19,7 @@
- #include <net/dsa.h>
- #include <linux/phy.h>
- #include <linux/of_net.h>
-+#include <linux/of_platform.h>
-
- #include "ar8xxx.h"
-
-@@ -260,6 +261,9 @@ static int ar8xxx_set_pad_ctrl(struct dsa_switch *ds, int port, int mode)
- ar8xxx_write(ds, AR8327_REG_PORT5_PAD_CTRL,
- AR8327_PORT_PAD_RGMII_RX_DELAY_EN);
- break;
-+ case PHY_INTERFACE_MODE_SGMII:
-+ ar8xxx_write(ds, reg, AR8327_PORT_PAD_SGMII_EN);
-+ break;
- default:
- pr_err("xMII mode %d not supported\n", mode);
- return -EINVAL;
-@@ -268,6 +272,48 @@ static int ar8xxx_set_pad_ctrl(struct dsa_switch *ds, int port, int mode)
- return 0;
- }
-
-+static int ar8xxx_of_setup(struct dsa_switch *ds)
-+{
-+ struct device_node *dn = ds->pd->of_node;
-+ const char *s_phymode;
-+ int ret, mode;
-+ u32 phy_id, ctrl;
-+
-+ /* If port6-phy-mode property exists, configure it accordingly */
-+ if (!of_property_read_string(dn, "qca,port6-phy-mode", &s_phymode)) {
-+ for (mode = 0; mode < PHY_INTERFACE_MODE_MAX; mode++)
-+ if (!strcasecmp(s_phymode, phy_modes(mode)))
-+ break;
-+
-+ if (mode == PHY_INTERFACE_MODE_MAX)
-+ pr_err("Unknown phy-mode: \"%s\"\n", s_phymode);
-+
-+ ret = ar8xxx_set_pad_ctrl(ds, 6, mode);
-+ if (ret < 0)
-+ return ret;
-+ }
-+
-+ /* If a phy ID is specified for PORT6 mac, connect them together */
-+ if (!of_property_read_u32(dn, "qca,port6-phy-id", &phy_id)) {
-+ ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(6),
-+ AR8327_PORT_LOOKUP_MEMBER, BIT(phy_to_port(phy_id)));
-+ ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(phy_to_port(phy_id)),
-+ AR8327_PORT_LOOKUP_MEMBER, BIT(6));
-+
-+ /* We want the switch to be pass-through and act like a PHY on
-+ * these ports. So BC/MC/UC & IGMP frames need to be accepted
-+ */
-+ ctrl = BIT(phy_to_port(phy_id)) | BIT(6);
-+ ar8xxx_reg_set(ds, AR8327_REG_GLOBAL_FW_CTRL1,
-+ ctrl << AR8327_GLOBAL_FW_CTRL1_IGMP_DP_S |
-+ ctrl << AR8327_GLOBAL_FW_CTRL1_BC_DP_S |
-+ ctrl << AR8327_GLOBAL_FW_CTRL1_MC_DP_S |
-+ ctrl << AR8327_GLOBAL_FW_CTRL1_UC_DP_S);
-+ }
-+
-+ return 0;
-+}
-+
- static int ar8xxx_setup(struct dsa_switch *ds)
- {
- struct ar8xxx_priv *priv = ds_to_priv(ds);
-@@ -341,6 +387,10 @@ static int ar8xxx_setup(struct dsa_switch *ds)
- }
- }
-
-+ ret = ar8xxx_of_setup(ds);
-+ if (ret < 0)
-+ return ret;
-+
- return 0;
- }
-
-
-From patchwork Fri May 29 01:42:22 2015
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [7/7] Documentation: devicetree: add ar8xxx binding
-From: Mathieu Olivari <mathieu@codeaurora.org>
-X-Patchwork-Id: 477528
-X-Patchwork-Delegate: davem@davemloft.net
-Message-Id: <1432863742-18427-8-git-send-email-mathieu@codeaurora.org>
-To: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
- ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
- davem@davemloft.net, mathieu@codeaurora.org, andrew@lunn.ch,
- f.fainelli@gmail.com, linux@roeck-us.net, gang.chen.5i5j@gmail.com,
- jiri@resnulli.us, leitec@staticky.com, fabf@skynet.be,
- alexander.h.duyck@intel.com, pavel.nakonechny@skitlab.ru,
- joe@perches.com, sfeldma@gmail.com, nbd@nbd.name, juhosg@openwrt.org
-Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
- netdev@vger.kernel.org
-Date: Thu, 28 May 2015 18:42:22 -0700
-
-Add device-tree binding for ar8xxx switch families.
-
-Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
----
- .../devicetree/bindings/net/dsa/qca-ar8xxx.txt | 70 ++++++++++++++++++++++
- 1 file changed, 70 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/net/dsa/qca-ar8xxx.txt
-
-diff --git a/Documentation/devicetree/bindings/net/dsa/qca-ar8xxx.txt b/Documentation/devicetree/bindings/net/dsa/qca-ar8xxx.txt
-new file mode 100644
-index 0000000..f4fd3f1