From patchwork Mon Feb 19 13:16:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 203071 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:693c:2685:b0:108:e6aa:91d0 with SMTP id mn5csp1276880dyc; Mon, 19 Feb 2024 05:17:23 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUT1dfu3Koy9e4voQM9g7FD2WhRyBII4FJE5XwKrL1OUzSHh6Yzuy5hF53PwGUjZD2pjNJ1fW/ZLhyJROywTu4mfdt93Q== X-Google-Smtp-Source: AGHT+IFc0P1hV3ZJ9znZ3dcPRB9RPMilwXJ7Iycrld8rutZ7xUkFj8QXgT1ZjL3M2VhSI3ICQWIB X-Received: by 2002:a17:906:bc47:b0:a3e:c3cd:9730 with SMTP id s7-20020a170906bc4700b00a3ec3cd9730mr909503ejv.63.1708348643035; Mon, 19 Feb 2024 05:17:23 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708348643; cv=pass; d=google.com; s=arc-20160816; b=en9Fi39Rdj2kZtJiyP+H3+w2o/kbhpdjB9HV05Phc7eFrML+Yywa87KI4+34HkoEZZ PnRp/YiEq9zLde9EBNrgsxO9izV8UluKVF13g/ouF6nd61cvGCmv5EbYwtB/iQlUtdun QNDLdTinvQKAXKH5d+6fg8X4GppDcIeFhcoW2d579l6JBkCGjY+T/9+XQn3t929tpWUh LsqZ2s8mtc/2Dj+T4NdhHnIkzcV+gjRzNRNSzbt6DLTuviaalGMgWe+aTUpDiyirrPcj MDQztDjj/ve6Eps8yiT6GqmbKfYxJDw18AlbOJO4LJKTHf/V6ib5oia9gJQCxSlg5rM8 iTLA== 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:message-id:date:subject:cc:to :from; bh=nnkMOvIllNp7CMxjs8UsImMmTKw2kt4mJ2oYggoN3VI=; fh=M1qfrahb/qW7n6G/0kHpmUybK+Ky3Jq5+sps382+aZ4=; b=qLBVIbkZJEVZUn3Jxut0mihWsLMEhjlNnSfWlTBZmXMOxG170sp0zRy+lNKjkzRNmx LoMWw0ftkK/0eXxVxgYrfvQUv+EhEcGu7d8POrtqC+YBQjGJ1Ob3c1uW7G1H6AQzGk/h FWbDEfVna8K1q8Fj4RhwO1lEFYb0DqtSu1Fqrj11i8vEKq5cMgowVuYmDS6Yqfg1fMeK SeOyO4AmPQ645k6RPaEoB0/PRqKcdufAaWKPXpNvF0NdSR9tAPuZWsty4ZG5LbBWIpAG WkTFC5lMS9+Jn7/A694QCAYpf7u1ue1aUqZRrh6j8tijioyhbEyhyPD3sLGJVWXK/zxF j5jQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-71393-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71393-ouuuleilei=gmail.com@vger.kernel.org" Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id z20-20020a170906241400b00a3e7229fb3dsi1279185eja.807.2024.02.19.05.17.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 05:17:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71393-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-71393-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71393-ouuuleilei=gmail.com@vger.kernel.org" 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 am.mirrors.kernel.org (Postfix) with ESMTPS id A31721F20F53 for ; Mon, 19 Feb 2024 13:17:22 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F33C4364D9; Mon, 19 Feb 2024 13:16:27 +0000 (UTC) Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9782536122 for ; Mon, 19 Feb 2024 13:16:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708348586; cv=none; b=Go7JCilU42FIIt2Mm+3mVQpd1S4LTVR6dsU8RgqJt3pQDeUE8Yt3kwJuOGu8MvBmi8WiqYJ4wQI+H78l7He0vtWqgijnJSMkT99kglsAOLzgBFwXb2RmJwDmv6rKAfhnHDssT9/h5NClMaXZTzlNss/IxcRPpZCGfxPHbgOTigA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708348586; c=relaxed/simple; bh=viLe7fGFuuP1eD4ZJQHWtFdibptfI/8RvafqbQAvd2U=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=YaxeLiWsp1a7vzvCam/jlwyi4+EJ2DmFueJPq0ZpyRH+eqISajVdNhl/rud4FdFqpf25XR0qNpGbUirXO8jtOaiobUXkDJTL90nS5Q6QW8QhBUNNl0Xgrl6AQhDSK18XKoW28wGy5M05n372g2Oep7W47mEM9wnoaKMZz4Ru1Lo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rc3VJ-0000LF-2m; Mon, 19 Feb 2024 14:16:17 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rc3VG-001ey9-S4; Mon, 19 Feb 2024 14:16:14 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1rc3VG-00FcnU-2Z; Mon, 19 Feb 2024 14:16:14 +0100 From: Oleksij Rempel To: "David S. Miller" , Andrew Lunn , Eric Dumazet , Florian Fainelli , Jakub Kicinski , Paolo Abeni , Vladimir Oltean , Woojung Huh , Arun Ramadoss Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, UNGLinuxDriver@microchip.com Subject: [PATCH net-next v1 1/1] net: dsa: microchip: Add support for bridge port isolation Date: Mon, 19 Feb 2024 14:16:13 +0100 Message-Id: <20240219131614.3724037-1-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.39.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791333386518155465 X-GMAIL-MSGID: 1791333386518155465 Implement bridge port isolation for KSZ switches. Enabling the isolation of switch ports from each other while maintaining connectivity with the CPU and other forwarding ports. For instance, to isolate swp1 and swp2 from each other, use the following commands: - bridge link set dev swp1 isolated on - bridge link set dev swp2 isolated on Signed-off-by: Oleksij Rempel Acked-by: Arun Ramadoss --- drivers/net/dsa/microchip/ksz_common.c | 16 +++++++++++----- drivers/net/dsa/microchip/ksz_common.h | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c index 7cd37133ec05..10e4a14671e2 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -1926,7 +1926,8 @@ static void ksz_update_port_member(struct ksz_device *dev, int port) if (other_p->stp_state != BR_STATE_FORWARDING) continue; - if (p->stp_state == BR_STATE_FORWARDING) { + if (p->stp_state == BR_STATE_FORWARDING && + !(p->isolated && other_p->isolated)) { val |= BIT(port); port_member |= BIT(i); } @@ -1946,7 +1947,8 @@ static void ksz_update_port_member(struct ksz_device *dev, int port) if (third_p->stp_state != BR_STATE_FORWARDING) continue; third_dp = dsa_to_port(ds, j); - if (dsa_port_bridge_same(other_dp, third_dp)) + if (dsa_port_bridge_same(other_dp, third_dp) && + !(other_p->isolated && third_p->isolated)) val |= BIT(j); } @@ -2699,7 +2701,7 @@ static int ksz_port_pre_bridge_flags(struct dsa_switch *ds, int port, struct switchdev_brport_flags flags, struct netlink_ext_ack *extack) { - if (flags.mask & ~BR_LEARNING) + if (flags.mask & ~(BR_LEARNING | BR_ISOLATED)) return -EINVAL; return 0; @@ -2712,8 +2714,12 @@ static int ksz_port_bridge_flags(struct dsa_switch *ds, int port, struct ksz_device *dev = ds->priv; struct ksz_port *p = &dev->ports[port]; - if (flags.mask & BR_LEARNING) { - p->learning = !!(flags.val & BR_LEARNING); + if (flags.mask & (BR_LEARNING | BR_ISOLATED)) { + if (flags.mask & BR_LEARNING) + p->learning = !!(flags.val & BR_LEARNING); + + if (flags.mask & BR_ISOLATED) + p->isolated = !!(flags.val & BR_ISOLATED); /* Make the change take effect immediately */ ksz_port_stp_state_set(ds, port, p->stp_state); diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/microchip/ksz_common.h index a3f69a036fa9..fb76637596fc 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -111,6 +111,7 @@ struct ksz_switch_macaddr { struct ksz_port { bool remove_tag; /* Remove Tag flag set, for ksz8795 only */ bool learning; + bool isolated; int stp_state; struct phy_device phydev;