From patchwork Tue Dec 11 19:33:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Wunderlich X-Patchwork-Id: 1011337 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=public-files.de Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43Dqs641vXz9sC7 for ; Wed, 12 Dec 2018 06:34:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726960AbeLKTeS (ORCPT ); Tue, 11 Dec 2018 14:34:18 -0500 Received: from mout.gmx.net ([212.227.15.19]:54073 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726867AbeLKTeQ (ORCPT ); Tue, 11 Dec 2018 14:34:16 -0500 Received: from localhost.localdomain ([91.14.83.44]) by mail.gmx.com (mrgmx002 [212.227.17.190]) with ESMTPSA (Nemesis) id 0MIMQR-1gawO50CBr-004BML; Tue, 11 Dec 2018 20:33:38 +0100 From: Frank Wunderlich To: Andrew Lunn , Vivien Didelot , Florian Fainelli , "David S. Miller" , Matthias Brugger , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Cc: Frank Wunderlich Subject: [PATCH 5/7] [DSA] dsa multi cpu (mt7530.c) Date: Tue, 11 Dec 2018 20:33:12 +0100 Message-Id: <20181211193314.10695-5-frank-w@public-files.de> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181211193314.10695-1-frank-w@public-files.de> References: <20181211193314.10695-1-frank-w@public-files.de> X-Provags-ID: V03:K1:5uvOk/q14HGD/2jzna7B3U2QGMeJRss93L6l5tAEsPqt/qo3/Hw t7VaXEHRIIA7NMGwrxTwhiX8YWXtwfc11WQHdBJ1SWuQqRvy5JKjYFxEgWMT2HoVlUUIT6C PCumzkRhSKMVPZOCsVVLgByZK/mcQb5qnDR0S5uAQV7A29uuY5YeCgJ4lSfy9ZgCcEVclLy buWSmwu++8+erchKPNfCQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:BMNNK1OnT98=:h1qKaSYRqTo/SAex7o6JMe +xB5izfUyJ8DAFJvvoIm3EWFPo+wu252uy3adsuRB+TDLCzOzpLqVCBUU8Cg5d+pzsJgVtD6R +JrvxIPcEYAmkJp7k3B9ag0rF6t9q36bW/N3gjwQvw0ciXHWzy/D3q7Q1gGPNOCCd8DabE8Ew t/nSH0vGsne50a7Yp9x8prNRbLhqqJSd9LM9jKE5ReGbQmqmr/W8+5ZfsYuI1xhOmNHVDGXr5 +CIamvt/Q1Y+tEQuYEVcZgGAAppRmEUZOXFvR1b7fFP7KpfVIp5I7Pe3OjyHtjQGvmY7flKVk KY1EMIyYC59xwMmneq+n3Rjo3woBzRC1jgZNxLqh1pMqW68LdyczPleMiEmb/VMbfrR/POc0y oaqxTgtfkJQZ4kZ6jLN2HLHxzcAdoQ6Gq7wTU5AmaP+6zMXgIf3ryOj91zhEZgsm33xT3ry/J H9lYJq3A4dSIKQS2Wf0uxMo7QLnpHHqd7PaOTeOq+7JRFPm6jz10f1bASY4/tmx9g6kaBSZqG +oD6gOrYqCjcPxX01H5+KrJvIaAoM5E42xLEjYlA9wfJlhJdO/lzvwdGoR3WTyAg0O6i+deym QKencgKCp2yfsVwqvKqT4448fCGpHKxkMP+UxPFLAp31BYIEgHrdsio0iGCYsc471sGecuNmI cldDx7eheSeCgtI2oabkkBNPykfQ7RDS8byKYWhg2aeE6bKh1LJqbGsjFUscoLlTaiCc0+0SJ x6hdguX5BWoZyscaS+/6JYft7snG8zHXcm2Q3I0fO6wrqLTrI9ahmphFsBaQoxtVXfi0oaVcC bigyBayu9tA5z7vfabydBHxLkAPBzWVGEtbqO4x4qB8b9zG4CD+AiDlDwx9kssQAC2IuOqMoY Mz++mS1aqOoBenLrkpwvAXGNisUufN5V/UTbR8pTLCA1txg9tPcYzkXXhsYGB4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org based on https://github.com/openwrt/openwrt/blob/master/target/linux/mediatek/patches-4.14/0033-dsa-multi-cpu.patch Signed-off-by: Frank Wunderlich --- drivers/net/dsa/mt7530.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index a6a15a063e3e..441320d4d779 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -674,6 +674,9 @@ static int mt7530_cpu_port_enable(struct mt7530_priv *priv, int port) { + u8 port_mask = 0; + int i; + /* Enable Mediatek header mode on the cpu port */ mt7530_write(priv, MT7530_PVC_P(port), PORT_SPEC_TAG); @@ -690,8 +693,14 @@ mt7530_cpu_port_enable(struct mt7530_priv *priv, /* CPU port gets connected to all user ports of * the switch */ + + for (i = 0; i < MT7530_NUM_PORTS; i++) + if ((priv->ds->ports[port].type == DSA_PORT_TYPE_USER) && + (dsa_port_upstream_port(priv->ds, i) == port)) + port_mask |= BIT(i); + mt7530_write(priv, MT7530_PCR_P(port), - PCR_MATRIX(dsa_user_ports(priv->ds))); + PCR_MATRIX(port_mask)); return 0; } @@ -701,6 +710,7 @@ mt7530_port_enable(struct dsa_switch *ds, int port, struct phy_device *phy) { struct mt7530_priv *priv = ds->priv; + u8 upstream = dsa_port_upstream_port(ds, port); mutex_lock(&priv->reg_mutex); @@ -711,7 +721,7 @@ mt7530_port_enable(struct dsa_switch *ds, int port, * restore the port matrix if the port is the member of a certain * bridge. */ - priv->ports[port].pm |= PCR_MATRIX(BIT(MT7530_CPU_PORT)); + priv->ports[port].pm |= PCR_MATRIX(BIT(upstream)); priv->ports[port].enable = true; mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK, priv->ports[port].pm); @@ -774,7 +784,8 @@ mt7530_port_bridge_join(struct dsa_switch *ds, int port, struct net_device *bridge) { struct mt7530_priv *priv = ds->priv; - u32 port_bitmap = BIT(MT7530_CPU_PORT); + u8 upstream = dsa_port_upstream_port(ds, port); + u32 port_bitmap = BIT(upstream); int i; mutex_lock(&priv->reg_mutex); @@ -875,6 +886,7 @@ mt7530_port_bridge_leave(struct dsa_switch *ds, int port, struct net_device *bridge) { struct mt7530_priv *priv = ds->priv; + u8 upstream = dsa_port_upstream_port(ds, port); int i; mutex_lock(&priv->reg_mutex); @@ -902,8 +914,8 @@ mt7530_port_bridge_leave(struct dsa_switch *ds, int port, */ if (priv->ports[port].enable) mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK, - PCR_MATRIX(BIT(MT7530_CPU_PORT))); - priv->ports[port].pm = PCR_MATRIX(BIT(MT7530_CPU_PORT)); + PCR_MATRIX(BIT(upstream))); + priv->ports[port].pm = PCR_MATRIX(BIT(upstream)); mt7530_port_set_vlan_unaware(ds, port); @@ -1194,15 +1206,7 @@ mt7530_port_vlan_del(struct dsa_switch *ds, int port, static enum dsa_tag_protocol mtk_get_tag_protocol(struct dsa_switch *ds, int port) { - struct mt7530_priv *priv = ds->priv; - - if (port != MT7530_CPU_PORT) { - dev_warn(priv->dev, - "port not matched with tagging CPU port\n"); - return DSA_TAG_PROTO_NONE; - } else { - return DSA_TAG_PROTO_MTK; - } + return DSA_TAG_PROTO_MTK; } static int @@ -1275,7 +1279,7 @@ mt7530_setup(struct dsa_switch *ds) /* Enable Port 6 only; P5 as GMAC5 which currently is not supported */ val = mt7530_read(priv, MT7530_MHWTRAP); - val &= ~MHWTRAP_P6_DIS & ~MHWTRAP_PHY_ACCESS; + val &= ~MHWTRAP_P5_DIS & ~MHWTRAP_P6_DIS & ~MHWTRAP_PHY_ACCESS; val |= MHWTRAP_MANUAL; if (!dsa_is_cpu_port(ds, 5)) { val |= MHWTRAP_P5_DIS;