From patchwork Fri Nov 10 19:33:25 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 836844 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="WAXT7pWG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yYVcq5QX6z9s71 for ; Sat, 11 Nov 2017 06:35:39 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754837AbdKJTfh (ORCPT ); Fri, 10 Nov 2017 14:35:37 -0500 Received: from mail-qk0-f196.google.com ([209.85.220.196]:44417 "EHLO mail-qk0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754193AbdKJTfe (ORCPT ); Fri, 10 Nov 2017 14:35:34 -0500 Received: by mail-qk0-f196.google.com with SMTP id v137so13235341qkb.1 for ; Fri, 10 Nov 2017 11:35:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=lU92OYcjfS8mNCIgrU7q0tNUMLb4Dcf15fxqwqYie6Y=; b=WAXT7pWGfm/+9aygRxSCaMNOLDdZ4u5uUs2y0QfSZ5Y5ZbxNVWLVyghkSrawVnUZkK u79f2YQdesB+t6PN7jY8/+mpx6lPBzwETTIuu51ZSEvwGPPRuyAJu22BmPsopYdLOqNw lpafRDcRWoDlZlwYPRbSv5xoWpA6ygVpOvLnXL2VD7/hEDDm7zn01Ni0GQDgeRql4zp2 THXgCBJzsDh7R7nohpTBx3ZE5eiadcSpK21QIT4KFn7pzGQTxi27tblID1zaFxWmFkDU 7iz+4yKHJ/OmrAXKwr4rC8dDQckt0BYf6O4X2zhGqV+8/xd/BkQspQW1bpWhqPPnQuYu 4iTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=lU92OYcjfS8mNCIgrU7q0tNUMLb4Dcf15fxqwqYie6Y=; b=s5QLQ9wfOFb5YqKOAU4t2GMbMDpf28+Y255hAfcDr+sd9eMxET4E/sHJn7t0r0j7CS ntU2Eeb+6c0qLePn05DpCarRrFVjpajtYFGNvaHXZxeSjGUM2iebNicNm5TmzY+oE8E1 O4wc+8g9oAVLaPZt0ip8xcwyPZXAkaichjSmOl3suXGnnVXj5uXmgg44NPaIYjNjgfMD p83EDotnWl5B3skYiFBJ7qsDOFYO8fD2irEqXZzMe9x6Gfs/NTsqrUC2aNVoiBF+d4Rz ivbPb+3XWYalvvBaXMlL5qPc4CheW18wBmNKOGgl6OdRNaDeV8kP2hfVjTbQOHwItOuW O0RA== X-Gm-Message-State: AJaThX5rhHb4xP/rbYEbeqE26yUfJXGs7nMcpgtbpmLmc+Jd8JbKYXrX e1o2cJAui787Ax5ToJ2Iaq9tNUf6 X-Google-Smtp-Source: AGs4zMb+FpUwnx8jZp+Cl+BYeuKIANy1KgSh/ULcp0NyT7f8no7utPZIIDlqmYCpHL3H1rRH5MN/TA== X-Received: by 10.55.49.149 with SMTP id x143mr2217797qkx.223.1510342533450; Fri, 10 Nov 2017 11:35:33 -0800 (PST) Received: from fainelli-desktop.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id m63sm6712280qke.9.2017.11.10.11.35.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Nov 2017 11:35:32 -0800 (PST) From: Florian Fainelli To: netdev@vger.kernel.org Cc: davem@davemloft.net, andrew@lunn.ch, vivien.didelot@savoirfairelinux.com, Florian Fainelli Subject: [PATCH net-next v3 1/3] net: bgmac: Pad packets to a minimum size Date: Fri, 10 Nov 2017 11:33:25 -0800 Message-Id: <20171110193327.25070-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20171110193327.25070-1-f.fainelli@gmail.com> References: <20171110193327.25070-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org In preparation for enabling Broadcom tags with b53, pad packets to a minimum size of 64 bytes (sans FCS) in order for the Broadcom switch to accept ingressing frames. Without this, we would typically be able to DHCP, but not resolve with ARP because packets are too small and get rejected by the switch. Signed-off-by: Florian Fainelli Reviewed-by: Andrew Lunn --- drivers/net/ethernet/broadcom/bgmac.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c index 48d672b204a4..1d96cd594ade 100644 --- a/drivers/net/ethernet/broadcom/bgmac.c +++ b/drivers/net/ethernet/broadcom/bgmac.c @@ -15,6 +15,7 @@ #include #include #include +#include #include "bgmac.h" static bool bgmac_wait_value(struct bgmac *bgmac, u16 reg, u32 mask, @@ -127,6 +128,8 @@ bgmac_dma_tx_add_buf(struct bgmac *bgmac, struct bgmac_dma_ring *ring, dma_desc->ctl1 = cpu_to_le32(ctl1); } +#define ENET_BRCM_TAG_LEN 4 + static netdev_tx_t bgmac_dma_tx_add(struct bgmac *bgmac, struct bgmac_dma_ring *ring, struct sk_buff *skb) @@ -139,6 +142,18 @@ static netdev_tx_t bgmac_dma_tx_add(struct bgmac *bgmac, u32 flags; int i; + /* The Ethernet switch we are interfaced with needs packets to be at + * least 64 bytes (including FCS) otherwise they will be discarded when + * they enter the switch port logic. When Broadcom tags are enabled, we + * need to make sure that packets are at least 68 bytes + * (including FCS and tag) because the length verification is done after + * the Broadcom tag is stripped off the ingress packet. + */ + if (netdev_uses_dsa(net_dev)) { + if (skb_put_padto(skb, ETH_ZLEN + ENET_BRCM_TAG_LEN)) + goto err_stats; + } + if (skb->len > BGMAC_DESC_CTL1_LEN) { netdev_err(bgmac->net_dev, "Too long skb (%d)\n", skb->len); goto err_drop; @@ -225,6 +240,7 @@ static netdev_tx_t bgmac_dma_tx_add(struct bgmac *bgmac, err_drop: dev_kfree_skb(skb); +err_stats: net_dev->stats.tx_dropped++; net_dev->stats.tx_errors++; return NETDEV_TX_OK; From patchwork Fri Nov 10 19:33:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 836845 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="YUO9G1Be"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yYVcw5bj5z9s71 for ; Sat, 11 Nov 2017 06:35:44 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754933AbdKJTfn (ORCPT ); Fri, 10 Nov 2017 14:35:43 -0500 Received: from mail-qk0-f196.google.com ([209.85.220.196]:47883 "EHLO mail-qk0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754754AbdKJTfg (ORCPT ); Fri, 10 Nov 2017 14:35:36 -0500 Received: by mail-qk0-f196.google.com with SMTP id 136so2366321qkd.4 for ; Fri, 10 Nov 2017 11:35:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=UwR41KD1pSIXwcs0+OmVKenPB2+B60NDbS0aR5EmDx4=; b=YUO9G1Be6rMAKNzgFALVeLVcGLZaRVF9H1YKBckLru7kvtPFdCMUa8fKn3GTPMn3t5 59Ks1XF4oh4+OZhAe0ZmArijcDi5dGCHzoGl2Em+BmNkkk5KmI7qf1cq06sA+5Op5shJ TDjcN4hH1iW3Zjidw9j7V//3JVx2CxihPPj/V832Nz3BTFLLmfZN2nm/YNwZbABep5fl tOYVFXpZREytsDJFV481gbvsNezzzELkLPlWGHu4Uin2u+XRH3APqa/lhKhFociKztVC F7ClX++c6Hkm37WIhIc8FqgGIGYBjzKAyh7iyMt0AAqQE/Nmx2pSQ9fEE7ibjgGwEb4e lW6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=UwR41KD1pSIXwcs0+OmVKenPB2+B60NDbS0aR5EmDx4=; b=qLAPTCoStDLpMbGiRnFEJ1/d3PE8gqvh45hHkUoswH692KI7oLp+16jkL35aAIJiid MXU1RKeBJbTVqrIjX6AGy/n6zQTVvikysT3fiQSiQ+Cl0/Bu+cJ31Dq1wsr0cIv/v031 GrkAKsyk/F0MZik8psN1tOcgypu7adSazwPVuRWxcU/F+8H9f47lmV1mWThZGay3qklf rK3sItuybz43ry/L1yuiK99ms+0zZbSZ7oKBPPce9h3CDX6CbuqG/whrwZv/Jz2XE0lo 0QWdkS1I2DgvbA2xu4kPXqpmMUNEuF4JFEkA98n45KJEjKsO7dPje+JzFj9rbpIpO/zf k6sA== X-Gm-Message-State: AJaThX6ghrehBYzioWPtxHloELodtmWfpoIPtAZCBI42QxFaztPPghET WmSgulCUNHQ2WYoK5884y6qvdNeO X-Google-Smtp-Source: AGs4zMYj7Dpq1s33BgEfQFTmwtEV5iOmqhr2pb22EvIPn1RYSMRPUTpHJCsNzHt11dlCuCZBbhXTdA== X-Received: by 10.55.55.146 with SMTP id e140mr2226352qka.106.1510342535245; Fri, 10 Nov 2017 11:35:35 -0800 (PST) Received: from fainelli-desktop.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id m63sm6712280qke.9.2017.11.10.11.35.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Nov 2017 11:35:34 -0800 (PST) From: Florian Fainelli To: netdev@vger.kernel.org Cc: davem@davemloft.net, andrew@lunn.ch, vivien.didelot@savoirfairelinux.com, Florian Fainelli Subject: [PATCH net-next v3 2/3] net: dsa: b53: Stop using dev->cpu_port incorrectly Date: Fri, 10 Nov 2017 11:33:26 -0800 Message-Id: <20171110193327.25070-3-f.fainelli@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20171110193327.25070-1-f.fainelli@gmail.com> References: <20171110193327.25070-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org dev->cpu_port is the driver local information that should only be used to look up register offsets for a particular port, when they differ (e.g: IMP port override), but it should certainly not be used in place of the DSA configured CPU port. Since the DSA switch layer calls port_vlan_{add,del}() on the CPU port as well, we can remove the specific setting of the CPU port within port_vlan_{add,del}. Fixes: ff39c2d68679 ("net: dsa: b53: Add bridge support") Fixes: 967dd82ffc52 ("net: dsa: b53: Add support for Broadcom RoboSwitch") Signed-off-by: Florian Fainelli Reviewed-by: Andrew Lunn --- drivers/net/dsa/b53/b53_common.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index a7ca62ba27b7..17f12484ce24 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -505,7 +505,7 @@ EXPORT_SYMBOL(b53_imp_vlan_setup); int b53_enable_port(struct dsa_switch *ds, int port, struct phy_device *phy) { struct b53_device *dev = ds->priv; - unsigned int cpu_port = dev->cpu_port; + unsigned int cpu_port = ds->ports[port].cpu_dp->index; u16 pvlan; /* Clear the Rx and Tx disable bits and set to no spanning tree */ @@ -1054,7 +1054,6 @@ void b53_vlan_add(struct dsa_switch *ds, int port, struct b53_device *dev = ds->priv; bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED; bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID; - unsigned int cpu_port = dev->cpu_port; struct b53_vlan *vl; u16 vid; @@ -1063,12 +1062,11 @@ void b53_vlan_add(struct dsa_switch *ds, int port, b53_get_vlan_entry(dev, vid, vl); - vl->members |= BIT(port) | BIT(cpu_port); + vl->members |= BIT(port); if (untagged) vl->untag |= BIT(port); else vl->untag &= ~BIT(port); - vl->untag &= ~BIT(cpu_port); b53_set_vlan_entry(dev, vid, vl); b53_fast_age_vlan(dev, vid); @@ -1432,8 +1430,8 @@ void b53_br_leave(struct dsa_switch *ds, int port, struct net_device *br) b53_write16(dev, B53_VLAN_PAGE, B53_JOIN_ALL_VLAN_EN, reg); } else { b53_get_vlan_entry(dev, pvid, vl); - vl->members |= BIT(port) | BIT(dev->cpu_port); - vl->untag |= BIT(port) | BIT(dev->cpu_port); + vl->members |= BIT(port) | BIT(cpu_port); + vl->untag |= BIT(port) | BIT(cpu_port); b53_set_vlan_entry(dev, pvid, vl); } } From patchwork Fri Nov 10 19:33:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 836846 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="XdYwTxza"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yYVd05570z9s71 for ; Sat, 11 Nov 2017 06:35:48 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754025AbdKJTfl (ORCPT ); Fri, 10 Nov 2017 14:35:41 -0500 Received: from mail-qk0-f195.google.com ([209.85.220.195]:44427 "EHLO mail-qk0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754193AbdKJTfi (ORCPT ); Fri, 10 Nov 2017 14:35:38 -0500 Received: by mail-qk0-f195.google.com with SMTP id v137so13235572qkb.1 for ; Fri, 10 Nov 2017 11:35:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=tnX/4TqsyKSqxn9+I0eh8MHLzyIDsb5lm8AzT3J/6TE=; b=XdYwTxzae9i8YK3dmw+z0ruHgj4we1iVnDDH98CJfwBq8uB8gHwY9o3KLZ8Z3ruZ7M ti6pXl6/KmSNwF7BOc/DsrzIEW21XyhmlBP0lHXuxnP+QklIL8Gy9Am9HJEE8hzRstgT wD4HDk/j9sjN6LTxa5K4FeZhsmr4YllxqzSJGSOCMW3eo0kk5NB54KI++bBb/kl65lQZ 3h5y+o/8cV4MNbxD1smnFeNbp4Oeegu2XxkdI2VNTDgGz+gN/kMdneb4so70tBF37tVl zecDsGlhqc1jDV/CvlEyODvq30iRLjsP1nWxl/mP68J+ngI5vxrjIAs0LHTznsAUFaA2 MYDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=tnX/4TqsyKSqxn9+I0eh8MHLzyIDsb5lm8AzT3J/6TE=; b=NGUPfBXBKvEfgavs4Z/36BmUJJ/yg5vm1z+VyT0rBPGarRGDS4n2SC2NF5ZZKHutpU l8Yz/s8S8RSx2/MoaVa2Re5/NEY+dEm5eoNO98VrDfw+LaMzedcOuQq0f+/cVoiFn8DW wY29RQRxDU5xqZeYuBE0PWh7xBtmyNRMiPrxpJ6T5U2Ei34HHf4PnUxQoQRU3p9Q65mY waD9Y6kKEOVvYnN1rtWHuyuXeQKnQhvGY3QXLAKLdk7DU7+dnp8j+PQIy7aWPy+rBf/a nmAlJ8TTAWRuXPZPi6Vkjv7jQV/YL4/qvXHWNdo53hsXTC5kaXraQLOB/SkogORef6wW UjDg== X-Gm-Message-State: AJaThX59gkWzG9vyiNMo5Mh0XHmmv7Bx+zUhakadRMIEX5LIBj8vJBvC X1v0X2dybObAacGp4ciL9eAuv+nq X-Google-Smtp-Source: AGs4zMYungfuxc59lYG3allmGhmf5jZJaA3Wo6miqSVOVkukJcFYLQaorxRcrQr5phcq49Sze/Ocow== X-Received: by 10.55.104.135 with SMTP id d129mr2281256qkc.349.1510342537080; Fri, 10 Nov 2017 11:35:37 -0800 (PST) Received: from fainelli-desktop.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id m63sm6712280qke.9.2017.11.10.11.35.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Nov 2017 11:35:36 -0800 (PST) From: Florian Fainelli To: netdev@vger.kernel.org Cc: davem@davemloft.net, andrew@lunn.ch, vivien.didelot@savoirfairelinux.com, Florian Fainelli Subject: [PATCH net-next v3 3/3] net: dsa: b53: Turn on Broadcom tags Date: Fri, 10 Nov 2017 11:33:27 -0800 Message-Id: <20171110193327.25070-4-f.fainelli@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20171110193327.25070-1-f.fainelli@gmail.com> References: <20171110193327.25070-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Enable Broadcom tags for b53 devices, except 5325 and 5365 which use a different Broadcom tag format not yet supported by net/dsa/tag_brcm.c. We also make sure that we can turn on Broadcom tags on a CPU port number that is capable of that: 5, 7 or 8. Signed-off-by: Florian Fainelli Reviewed-by: Andrew Lunn --- drivers/net/dsa/b53/Kconfig | 1 + drivers/net/dsa/b53/b53_common.c | 48 ++++++++++++++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/drivers/net/dsa/b53/Kconfig b/drivers/net/dsa/b53/Kconfig index 27f32a50df57..b413d100c6b3 100644 --- a/drivers/net/dsa/b53/Kconfig +++ b/drivers/net/dsa/b53/Kconfig @@ -1,6 +1,7 @@ menuconfig B53 tristate "Broadcom BCM53xx managed switch support" depends on NET_DSA + select NET_DSA_TAG_BRCM help This driver adds support for Broadcom managed switch chips. It supports BCM5325E, BCM5365, BCM539x, BCM53115 and BCM53125 as well as BCM63XX diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index 17f12484ce24..44a9a03bff55 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -325,7 +325,6 @@ static void b53_get_vlan_entry(struct b53_device *dev, u16 vid, static void b53_set_forwarding(struct b53_device *dev, int enable) { - struct dsa_switch *ds = dev->ds; u8 mgmt; b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, &mgmt); @@ -337,14 +336,11 @@ static void b53_set_forwarding(struct b53_device *dev, int enable) b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, mgmt); - /* Include IMP port in dumb forwarding mode when no tagging protocol is - * set + /* Include IMP port in dumb forwarding mode */ - if (ds->ops->get_tag_protocol(ds) == DSA_TAG_PROTO_NONE) { - b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, &mgmt); - mgmt |= B53_MII_DUMB_FWDG_EN; - b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, mgmt); - } + b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, &mgmt); + mgmt |= B53_MII_DUMB_FWDG_EN; + b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, mgmt); } static void b53_enable_vlan(struct b53_device *dev, bool enable) @@ -612,6 +608,8 @@ static void b53_enable_cpu_port(struct b53_device *dev, int port) PORT_CTRL_RX_MCST_EN | PORT_CTRL_RX_UCST_EN; b53_write8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), port_ctrl); + + b53_brcm_hdr_setup(dev->ds, port); } static void b53_enable_mib(struct b53_device *dev) @@ -1480,9 +1478,41 @@ void b53_br_fast_age(struct dsa_switch *ds, int port) } EXPORT_SYMBOL(b53_br_fast_age); +static bool b53_can_enable_brcm_tags(struct dsa_switch *ds) +{ + unsigned int brcm_tag_mask; + unsigned int i; + + /* Broadcom switches will accept enabling Broadcom tags on the + * following ports: 5, 7 and 8, any other port is not supported + */ + brcm_tag_mask = BIT(B53_CPU_PORT_25) | BIT(7) | BIT(B53_CPU_PORT); + + for (i = 0; i < ds->num_ports; i++) { + if (dsa_is_cpu_port(ds, i)) { + if (!(BIT(i) & brcm_tag_mask)) { + dev_warn(ds->dev, + "Port %d is not Broadcom tag capable\n", + i); + return false; + } + } + } + + return true; +} + static enum dsa_tag_protocol b53_get_tag_protocol(struct dsa_switch *ds) { - return DSA_TAG_PROTO_NONE; + struct b53_device *dev = ds->priv; + + /* Older models support a different tag format that we do not + * support in net/dsa/tag_brcm.c yet. + */ + if (is5325(dev) || is5365(dev) || !b53_can_enable_brcm_tags(ds)) + return DSA_TAG_PROTO_NONE; + else + return DSA_TAG_PROTO_BRCM; } int b53_mirror_add(struct dsa_switch *ds, int port,