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,