Received: by 2002:ab2:1149:0:b0:1f3:1f8c:d0c6 with SMTP id z9csp2616261lqz; Wed, 3 Apr 2024 03:41:33 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXefXoowFGqBFq4auJQjfUNf5kQQUpK7yt/Cxs0LRPeYwZS5953g2BW2zAtc5KIQgxIRMERIjrTLrnIHxFLSVzh84fl3vgw+aOpvuNnzA== X-Google-Smtp-Source: AGHT+IFyOThj0W2ASvPSvoJ1W9z/BJ9PLc5BJJwdqTfNlVVsnPg3p0Z2SQk8rn5P2RLc0KJdgimu X-Received: by 2002:a05:620a:4797:b0:789:da81:8f2f with SMTP id dt23-20020a05620a479700b00789da818f2fmr14454903qkb.26.1712140892809; Wed, 03 Apr 2024 03:41:32 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712140892; cv=pass; d=google.com; s=arc-20160816; b=XXyKQInYDSrYJxIOLbX7oFh/RfTVd+RYfTP774Gq4uxbpBQcPmW2ED4YP9sTdOfYFn GDGawY+UPwQczaMpKIEuUUMocapoD4m/QmcYAOEEQCgIeT0Xj+7eZjOlPbMQERiZtY9F Z11JwdPP20ptQTl0OF2n0/0umQ3Wlc4aSpyqz2lY5To4h4xppWi8fQEjAmWrMlISJsAq OkSD6D4ySHIYgQpQDXtlO/Iu/fEeLKmjJPGI8bdH0d0VfAaTiYT2yU3wXrLny+geMChH DzTmynMQXTQp0imqpKC0lMaTQqb5jC9+RIQdFvaV0gdva4QX27gTGoSU/W5GeX/yId4F tVmQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=Ld+TlEUXaIfhlSelNHD3BFPvG2cdfufnxxnaBz2fSz4=; fh=+Qag5YsYQn6OgudCVi929sxA3txEqf6rlHbTe8OYGI4=; b=k/VrzZPdLppgCkM0ZM7uA34jtgjn/0/L7x+9owVXqHZYPVXVYtOWfjYDUCLZFROYrD b+HQmBZgQuwjlGgSvmj6KtHvDnjS7D5TkliaZntmO9eGjs9zhMFmlI+UatTEn4zXC5/v eMFEIjLs6y9yrzV3409qUsuQfWvUZRmgoEuN3wpC/ObWx/VBbA5bn71DwsV3LeuwVP8C syJxUGLISaui3nmcbg3DZ7TWPd91ahQXZY/ajY+0PECZuDZ/pzK2LPg5EthjKKT+YkIW pQJYyveK2UDrx4AROHPhHxx/kLrj+tvclGkP2z4ks2kIRCsGRPMSCxKXc1F1r7JKtA8i vlAw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=mmUHWaVd; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-129581-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-129581-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id a24-20020a05620a02f800b0078a00a41f69si13993311qko.678.2024.04.03.03.41.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Apr 2024 03:41:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-129581-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=mmUHWaVd; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-129581-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-129581-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 692551C26AD2 for ; Wed, 3 Apr 2024 10:41:32 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DB076148FF2; Wed, 3 Apr 2024 10:38:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mmUHWaVd" Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 32707148845; Wed, 3 Apr 2024 10:38:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712140710; cv=none; b=hovXXff6Xj9zyY3el6tJoLzYGgtJ+K/aj0RDtyNk2H8me5axn8TqSwaJIa4QjXDGl9r8GbYdcVQXspudLiPJSHzEZmEx/o+wJO9pCD/IDxfixdk2tTGyDS7PdAP0dLH7tSFqIoJ7JPg2r1sI0HqpOHM4n3kCi63BA0B6qly15S8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712140710; c=relaxed/simple; bh=mztkueEaHUWwyOxHGSG/LopNkc0bMHAuP6twyCs8i8w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=uRPWS0ZDtkd8EW8YPnUFhinxWYW8zBHOhejHAPdMF5KwxUrCoE7IIfEONjpg2avTjzFYk0SynrjCKGxaSuESjvlwY2B1THTe3ydn4W4va/GFd0fj+VufcEPRVDbmg+SzVcWKssbM4iWG2WN2tMMKKeQuBwmLta6RaWGhupxBBLE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mmUHWaVd; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-a44f2d894b7so725747966b.1; Wed, 03 Apr 2024 03:38:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712140707; x=1712745507; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Ld+TlEUXaIfhlSelNHD3BFPvG2cdfufnxxnaBz2fSz4=; b=mmUHWaVdxNJaKr4123x/MsN0PeL+9Mq/8w9oFMBVRlGR+4n2CuLIurCcUT3qktQ4AI d3ZXpUahrATJD3EMkN1dExh8YWhSuqWshcEowEuluPh558CVeI5YvnWevEmEWT5b43W6 eHE3+sKaiQmtgXtJuqMIqS7xph0BL8be5mhYL4kido6+svUzh4605LLM/8jduC+MUANM LBCFj4Rm+XZ15ppyBzkp8L0zaUHe84YWRn3DqjUO84jdy7PK8Ts/nE9P/vRNQ+Rusdb9 VifH6nQBcqvhMairz1Fk0zT+aoMUJSEpCPOlcFK8Gkd06XPkIyRByWke2Vb3sV62Gj+n Wj/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712140707; x=1712745507; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ld+TlEUXaIfhlSelNHD3BFPvG2cdfufnxxnaBz2fSz4=; b=lhQRfKOzuBTrjtd23OBXt/S44NmDBod0OiQw/hF8S67w2e6hB+XcOGbB4cvVmG5BEv q7LppnC7lXIYE0cXWTWkkYhJxAPcrwyOyFFhwRvrvUwTIndK3v3B9p2qidsTR4WxzF02 7JmHZmztKSAx5U/5OZ3UV0DW/KX4AMtgIbeYHtr6J/Opj3nsDIR1aQhgYXwATWUqv2Bp /Wn7WD8yT7VQBTWayqJuOb/He6GerxX0sbhNuOYqzz42SSVOkZ2AfZP0x1azEUxrg9QI A2AehsSr9lhBHM903IPZ8eZzoT6vMWRCVojX+z+xCZiYueV2gay6q5QfsCCFn1TpTG5l Q1HQ== X-Forwarded-Encrypted: i=1; AJvYcCXypAE+7qCQUzDaACfXAhG2knofKtqNRpSF7iVUgcSVqk+M1XL9zgq/G3w6XzuITSr4sFdnQNV0bpcgSXTtC/8BRV+5aYzy44oKXmP7 X-Gm-Message-State: AOJu0YwZs4D1yQh+imjkYWME4BBcckq6EtPJWEVb88Serve0wSb2Ic2c 1FknVD8CUontlnGKQfhaZZpOLzHiekLd7U9/BN7VLPPHMZguJsZ3254PHOPfvS8= X-Received: by 2002:a17:906:512:b0:a4d:f98e:dc3e with SMTP id j18-20020a170906051200b00a4df98edc3emr9498403eja.12.1712140707343; Wed, 03 Apr 2024 03:38:27 -0700 (PDT) Received: from WBEC325.dom.lan ([185.188.71.122]) by smtp.gmail.com with ESMTPSA id xd2-20020a170907078200b00a4e2e16805bsm6858169ejb.11.2024.04.03.03.38.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Apr 2024 03:38:27 -0700 (PDT) From: Pawel Dembicki To: netdev@vger.kernel.org Cc: Linus Walleij , Simon Horman , Pawel Dembicki , Florian Fainelli , Vladimir Oltean , Andrew Lunn , Florian Fainelli , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Russell King , linux-kernel@vger.kernel.org Subject: [PATCH net-next v8 12/16] net: dsa: vsc73xx: introduce tag 8021q for vsc73xx Date: Wed, 3 Apr 2024 12:37:28 +0200 Message-Id: <20240403103734.3033398-13-paweldembicki@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240403103734.3033398-1-paweldembicki@gmail.com> References: <20240403103734.3033398-1-paweldembicki@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit This commit introduces a new tagger based on 802.1q tagging. It's designed for the vsc73xx driver. The VSC73xx family doesn't have any tag support for the RGMII port, but it could be based on VLANs. Reviewed-by: Florian Fainelli Reviewed-by: Vladimir Oltean Signed-off-by: Pawel Dembicki Reviewed-by: Linus Walleij --- v8: - added 'Reviewed-by' only v7: - replace netdev_warn by dev_warn_ratelimited v6: - added missing MODULE_DESCRIPTION() v5: - removed skb_vlan_tag_present(skb) checking - use 80 characters per line limit v4: - rebase to net-next/main v3: - Introduce a patch after the tagging patch split include/net/dsa.h | 2 ++ net/dsa/Kconfig | 6 ++++ net/dsa/Makefile | 1 + net/dsa/tag_vsc73xx_8021q.c | 68 +++++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 net/dsa/tag_vsc73xx_8021q.c diff --git a/include/net/dsa.h b/include/net/dsa.h index 7c0da9effe4e..b79e136e4c41 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -56,6 +56,7 @@ struct phylink_link_state; #define DSA_TAG_PROTO_RTL8_4T_VALUE 25 #define DSA_TAG_PROTO_RZN1_A5PSW_VALUE 26 #define DSA_TAG_PROTO_LAN937X_VALUE 27 +#define DSA_TAG_PROTO_VSC73XX_8021Q_VALUE 28 enum dsa_tag_protocol { DSA_TAG_PROTO_NONE = DSA_TAG_PROTO_NONE_VALUE, @@ -86,6 +87,7 @@ enum dsa_tag_protocol { DSA_TAG_PROTO_RTL8_4T = DSA_TAG_PROTO_RTL8_4T_VALUE, DSA_TAG_PROTO_RZN1_A5PSW = DSA_TAG_PROTO_RZN1_A5PSW_VALUE, DSA_TAG_PROTO_LAN937X = DSA_TAG_PROTO_LAN937X_VALUE, + DSA_TAG_PROTO_VSC73XX_8021Q = DSA_TAG_PROTO_VSC73XX_8021Q_VALUE, }; struct dsa_switch; diff --git a/net/dsa/Kconfig b/net/dsa/Kconfig index 8e698bea99a3..e59360071c67 100644 --- a/net/dsa/Kconfig +++ b/net/dsa/Kconfig @@ -166,6 +166,12 @@ config NET_DSA_TAG_TRAILER Say Y or M if you want to enable support for tagging frames at with a trailed. e.g. Marvell 88E6060. +config NET_DSA_TAG_VSC73XX_8021Q + tristate "Tag driver for Microchip/Vitesse VSC73xx family of switches, using VLAN" + help + Say Y or M if you want to enable support for tagging frames with a + custom VLAN-based header. + config NET_DSA_TAG_XRS700X tristate "Tag driver for XRS700x switches" help diff --git a/net/dsa/Makefile b/net/dsa/Makefile index 8a1894a42552..555c07cfeb71 100644 --- a/net/dsa/Makefile +++ b/net/dsa/Makefile @@ -37,6 +37,7 @@ obj-$(CONFIG_NET_DSA_TAG_RTL8_4) += tag_rtl8_4.o obj-$(CONFIG_NET_DSA_TAG_RZN1_A5PSW) += tag_rzn1_a5psw.o obj-$(CONFIG_NET_DSA_TAG_SJA1105) += tag_sja1105.o obj-$(CONFIG_NET_DSA_TAG_TRAILER) += tag_trailer.o +obj-$(CONFIG_NET_DSA_TAG_VSC73XX_8021Q) += tag_vsc73xx_8021q.o obj-$(CONFIG_NET_DSA_TAG_XRS700X) += tag_xrs700x.o # for tracing framework to find trace.h diff --git a/net/dsa/tag_vsc73xx_8021q.c b/net/dsa/tag_vsc73xx_8021q.c new file mode 100644 index 000000000000..af121a9aff7f --- /dev/null +++ b/net/dsa/tag_vsc73xx_8021q.c @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +/* Copyright (C) 2024 Pawel Dembicki + */ +#include + +#include "tag.h" +#include "tag_8021q.h" + +#define VSC73XX_8021Q_NAME "vsc73xx-8021q" + +static struct sk_buff * +vsc73xx_xmit(struct sk_buff *skb, struct net_device *netdev) +{ + struct dsa_port *dp = dsa_user_to_port(netdev); + u16 queue_mapping = skb_get_queue_mapping(skb); + u16 tx_vid = dsa_tag_8021q_standalone_vid(dp); + u8 pcp; + + if (skb->offload_fwd_mark) { + unsigned int bridge_num = dsa_port_bridge_num_get(dp); + struct net_device *br = dsa_port_bridge_dev_get(dp); + + if (br_vlan_enabled(br)) + return skb; + + tx_vid = dsa_tag_8021q_bridge_vid(bridge_num); + } + + pcp = netdev_txq_to_tc(netdev, queue_mapping); + + return dsa_8021q_xmit(skb, netdev, ETH_P_8021Q, + ((pcp << VLAN_PRIO_SHIFT) | tx_vid)); +} + +static struct sk_buff * +vsc73xx_rcv(struct sk_buff *skb, struct net_device *netdev) +{ + int src_port = -1, switch_id = -1, vbid = -1, vid = -1; + + dsa_8021q_rcv(skb, &src_port, &switch_id, &vbid, &vid); + + skb->dev = dsa_tag_8021q_find_user(netdev, src_port, switch_id, + vid, vbid); + if (!skb->dev) { + dev_warn_ratelimited(&netdev->dev, + "Couldn't decode source port\n"); + return NULL; + } + + dsa_default_offload_fwd_mark(skb); + + return skb; +} + +static const struct dsa_device_ops vsc73xx_8021q_netdev_ops = { + .name = VSC73XX_8021Q_NAME, + .proto = DSA_TAG_PROTO_VSC73XX_8021Q, + .xmit = vsc73xx_xmit, + .rcv = vsc73xx_rcv, + .needed_headroom = VLAN_HLEN, + .promisc_on_conduit = true, +}; + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("DSA tag driver for VSC73XX family of switches, using VLAN"); +MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_VSC73XX_8021Q, VSC73XX_8021Q_NAME); + +module_dsa_tag_driver(vsc73xx_8021q_netdev_ops); -- 2.34.1