From patchwork Thu Nov 9 22:26:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 836534 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="MX9iq4Tm"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yXySB6wrtz9t2r for ; Fri, 10 Nov 2017 09:26:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754122AbdKIW0P (ORCPT ); Thu, 9 Nov 2017 17:26:15 -0500 Received: from mail-qk0-f195.google.com ([209.85.220.195]:52949 "EHLO mail-qk0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753216AbdKIW0N (ORCPT ); Thu, 9 Nov 2017 17:26:13 -0500 Received: by mail-qk0-f195.google.com with SMTP id a194so7570987qkc.9 for ; Thu, 09 Nov 2017 14:26:12 -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=irTc2bv6dO/vU4v+gTOLhjV3rk6fflym6E9UdWtqIhk=; b=MX9iq4TmpkIsydJ13Q70l12phG0CW/b5puvl+qTCduhEeTo3SIusPSwsyXQZ6PnYUZ 8nNKLqA8VP83ZvWv8kiqLEd/QbgGgqUfCeRva5S4FQiPTdiUvVa7ZIWvxzDxAwGqIaNT 7nWBYVgVIOZCj6ar7DOIgTwl+26tCE/zKL4O3xU1A6auPinMgJjFAGcDR7ZDH3Nu0Mjh dJxh6AGxAc2CwI8pSEUmLJkJBjMYPjpk4fm7IvpEKb7+I0iHJqWChYHaJ2RQYZpnTZyY NC/YsK+fgDsgNstUmWhlqJ0zdNnqG4WFyxwOx8Aj/GuEci1EC7DIUqEdP/U3Tp913aml LgPA== 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=irTc2bv6dO/vU4v+gTOLhjV3rk6fflym6E9UdWtqIhk=; b=jNDmQ7TRULh8A9K2kxhXGjK6KA5XFrXXi4tAEEak/IyNmQZoe6xebG4vdwVR4+V6+A tzmK20esxFOXGT73JTn4DuQKDSeWnImDV7tYGsi3msYLfT44FXCAGZw5f0g/8dW27LrQ Ao9HTiN69ITT6jHjUv2XBtBSGrUK8ykqdRC9y+HKBMnvfeY+MsOTIolbIVG9SW+hkL9C vPlKFFetT7rpHlzCX669LAL9Qpnbovbx/M92wmipMUcPVFQA/Vh8y0ECUnr8VpZFXXmb 7BTPQi+zeNg3wUgvyA3L1zQ3I06RqBjagplhhayDheGMXSDcn7kbog4P7eoDypPK6YA4 CW1g== X-Gm-Message-State: AJaThX6hq6nnwK23oJRBPxzFjbwd92HyMZ8d1SbwnSH+ykmX0XTtvrnT ECHC1TKz/nLQPWYhlaHSsB5WDBaP X-Google-Smtp-Source: ABhQp+TijczrExIKubt2WxJOiFaFCZTP5UnbGAN7Ix0gLJNjbNf0i2gpAcJkRH1rolgzXUMmGBD3OA== X-Received: by 10.55.182.129 with SMTP id g123mr3303180qkf.163.1510266372178; Thu, 09 Nov 2017 14:26:12 -0800 (PST) Received: from fainelli-desktop.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id m39sm5384924qtk.30.2017.11.09.14.26.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Nov 2017 14:26:11 -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 1/3] net: bgmac: Pad packets to a minimum size Date: Thu, 9 Nov 2017 14:26:04 -0800 Message-Id: <20171109222606.2987-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20171109222606.2987-1-f.fainelli@gmail.com> References: <20171109222606.2987-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 --- drivers/net/ethernet/broadcom/bgmac.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c index 48d672b204a4..5130fc96940d 100644 --- a/drivers/net/ethernet/broadcom/bgmac.c +++ b/drivers/net/ethernet/broadcom/bgmac.c @@ -127,6 +127,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 +141,16 @@ 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 (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 +237,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 Thu Nov 9 22:26:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 836538 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="RXpiL7j+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yXySV2CS3z9t2r for ; Fri, 10 Nov 2017 09:26:34 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754638AbdKIW0d (ORCPT ); Thu, 9 Nov 2017 17:26:33 -0500 Received: from mail-qk0-f193.google.com ([209.85.220.193]:54341 "EHLO mail-qk0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751174AbdKIW0O (ORCPT ); Thu, 9 Nov 2017 17:26:14 -0500 Received: by mail-qk0-f193.google.com with SMTP id l69so3153403qkl.11 for ; Thu, 09 Nov 2017 14:26:14 -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=ezhmS/5KCGLb/uEJTqNLfm2AQLJC/teJ21Z4DBM8I2Q=; b=RXpiL7j+4QQzGdMPMazApON1j5byFsb0KAQD+kGXrfKPAp8k5TuAYQ32YrJUodHu6S 1EkQuAEUBxVPPl5gvvZyZeILuDrqvIxCs3Nen2R4/Pnmlg4UWkLfbWwB2H6SxzXnJqVz K+DJowWwsiHCHBueOrILvoKyXWuzrn7Gmz8NzHi/mTPB3YYj9pTuM076gxkjQJPMUPAX RJOlLgmZYRNdVSG926flt+tfvwBC3EyXW4AUEYzktre0OTrI+uW8xe4TZJQgjNTJRIlb q1x1/DGj9KfV0zHXyKASIDjZKy+PY6csQqvlHATg38VJimz1P+qi1KsdB+cm4a16gk5e S0iQ== 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=ezhmS/5KCGLb/uEJTqNLfm2AQLJC/teJ21Z4DBM8I2Q=; b=JIrTPPFWBklSXf2JySztMM8725Grk72Eo4l407dbRR7kSRIkft334c3rbusoT7HWG7 VgWuqIZHTVOIxVfZY8B26edWhiOaIM4Uehx47TEFcUQhOkadyyCvzVaRZW1bcPIUTAsj wCjyGetKHS1hxGKu2UAHFRNRu4j60tCMXFEYTGKUV1/EF7ejDtu/n8JEXbuV4auQ9fbq TO6NhaGdsQ/l5f0wIGXP1DMijkJKCtGZxdqtXcaA4k7Ku8kiZpOT3lKNlQszPr09eXqV QuL4LPFv7jKbpoI5BwMaL0+s1m3c+eUWUHHKYObi9x9IlU9rCorLbXyNom3Aql2GkdNm i8ZA== X-Gm-Message-State: AJaThX4FAqVld1F2iRGSGD8HGhL9c6yDAUaFF8uKwkgTAZj31RbNbNKA r51cYHZpFsPPFYVhCStinWFhvP7d X-Google-Smtp-Source: ABhQp+Q6P02KB8mnV0z9Nc1GvfcCNFqyw9A8GTDUOMps1Yk81tUMSnpUWNy+IdQnU/xsJ62/++AsrQ== X-Received: by 10.55.155.202 with SMTP id d193mr3301501qke.311.1510266373898; Thu, 09 Nov 2017 14:26:13 -0800 (PST) Received: from fainelli-desktop.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id m39sm5384924qtk.30.2017.11.09.14.26.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Nov 2017 14:26:12 -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 2/3] net: dsa: b53: Stop using dev->cpu_port incorrectly Date: Thu, 9 Nov 2017 14:26:05 -0800 Message-Id: <20171109222606.2987-3-f.fainelli@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20171109222606.2987-1-f.fainelli@gmail.com> References: <20171109222606.2987-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 --- drivers/net/dsa/b53/b53_common.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index a7ca62ba27b7..5e48e98b6187 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); @@ -505,7 +504,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 +1053,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 +1061,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 +1429,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 Thu Nov 9 22:26:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 836536 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="Uj5wuBfa"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yXySJ59Xcz9t2r for ; Fri, 10 Nov 2017 09:26:24 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754477AbdKIW0U (ORCPT ); Thu, 9 Nov 2017 17:26:20 -0500 Received: from mail-qk0-f194.google.com ([209.85.220.194]:51660 "EHLO mail-qk0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754172AbdKIW0Q (ORCPT ); Thu, 9 Nov 2017 17:26:16 -0500 Received: by mail-qk0-f194.google.com with SMTP id n66so9725981qki.8 for ; Thu, 09 Nov 2017 14:26:16 -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=+rsS2CcEHy1asxD2JBvlamvnu1JeXkpmfMMtrGFnSB4=; b=Uj5wuBfa/obaIkODz2hAFvNB6RYSU0Dz/E5JgmBcfdyPyGEB+S8LbrFJYmauYIIgTM Wrr3Akd23sbxBjagaisJcPoHBILGyNWKnpU6UHWpceEe6mhnqGaibd0r0kX4764MDlt3 8f+y5eJlqmpcZSBlzVZOkcJSAQDFxtd9ufyRbfpG7wq8isyvISRbC2g1W8NsPaHsaYwU 7s0fl5Mg4OP924l0lloVPV91XFzEpXlF2n1ueyD4dSSUva5nOQpzYMjXL6JUo2qzZrD1 5trc964Xl2tZO+id6SoD5XL3EY814iUneDAVKVQ+tj9+drG+0Hs+JMW7ecWS5mlH3ZEh oc3w== 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=+rsS2CcEHy1asxD2JBvlamvnu1JeXkpmfMMtrGFnSB4=; b=d2b0ky2MvldlFuH4uRUXQ6VbG5xwaP52uaHUj+Is4xjL439vLq0Ez2Lhz8G40A0dV5 S5CX7NUc6uWH98XprL9CtsfVVlMyfwG1s5aDA7XMHaNuoWdgFs0Z1oVL/tc9hwEzpntQ HXPEuol5aEPJU8jm7NQhxwwh74jYbtwriF6vLLMNLNAQYocpJKM63IafYUD5aJJGzV1x GaJcERhNI9KXrZkcZCOI4/ep9kwK3Klx2oYm2a3S30wCu27+V1JsJktzunci3CQztyJu 8D5KMhWHsFvLFCGOFRr/s92itm3uQh2cD/NH/wwwdguL1I5MRiDk8n/AipND/mfRsFhM 8nWg== X-Gm-Message-State: AJaThX5II6mIaK5Hugsy5+lss2pPpKHgwyUgKkA5o9XDIHV/bnyO9ycP wC5lkibgUICbX0+BH05jf0/oRtL5 X-Google-Smtp-Source: AGs4zMatgYy32+kugw3Kbpj/vniyvPvdRfaVCvKhyIU/SoP93XFoVUd7pNDss+HVOEmf7baQwXl7ww== X-Received: by 10.55.73.129 with SMTP id w123mr3450155qka.156.1510266375802; Thu, 09 Nov 2017 14:26:15 -0800 (PST) Received: from fainelli-desktop.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id m39sm5384924qtk.30.2017.11.09.14.26.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Nov 2017 14:26:14 -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 3/3] net: dsa: b53: Turn on Broadcom tags Date: Thu, 9 Nov 2017 14:26:06 -0800 Message-Id: <20171109222606.2987-4-f.fainelli@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20171109222606.2987-1-f.fainelli@gmail.com> References: <20171109222606.2987-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 --- drivers/net/dsa/b53/b53_common.c | 47 +++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index 5e48e98b6187..44a9a03bff55 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -336,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) @@ -611,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) @@ -1479,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,