Received: by 2002:a05:7412:cfc7:b0:fc:a2b0:25d7 with SMTP id by7csp1126573rdb; Mon, 19 Feb 2024 05:17:12 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCW4KLyZuYwgn7XKUnzfjUiuoBUu1I9pOw2UNkEkriCrDDTkDzOPJ9eGUn7egeSq4SsiBKHbPczk5Usvtu2LAJvlBWq65mJ1vqI346gLHg== X-Google-Smtp-Source: AGHT+IGLtuYD0whEFT51nFwl5LS1wPqMRoisNydm9n/jENua+YBs82ds1xb09IakGQLA/5fWYPB4 X-Received: by 2002:a1f:c483:0:b0:4ca:80c5:753d with SMTP id u125-20020a1fc483000000b004ca80c5753dmr1657917vkf.4.1708348631959; Mon, 19 Feb 2024 05:17:11 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708348631; cv=pass; d=google.com; s=arc-20160816; b=Qb5Z6crtHJSxVs95ikeD+7fpyYOS/vhO4KU9UOo5xjekwW20BHPE5lh7t4lzZe149j 4JCVGlA/CpZljI2glsr4upk1PYl7EvgR2jIQcEmw2JckcYM2o5oihq4U3LA8NJLDlCpO m4wd+ldaNlsHMGpDvqh54FRYu8+66kSdb8kvC28zYG4WOfaFlosn7wooh/WNKxGzY3bQ zDxGWPx72Hsn/wAHRhm/S8euJzAN//sCEykRR8LTPE2rHfsgrz2pvW1kLt9dSJF6kNR/ 34owLFuamEGQpoX6I1bkpZ3gParX7XeF0RM7dPOYPzyZbANXEuT+WadWDcgAADCBpnyq FRXQ== 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-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71393-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id 22-20020a0561220a1600b004cde13216aasi67747vkn.50.2024.02.19.05.17.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 05:17:11 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-71393-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; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-71393-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-71393-linux.lists.archive=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 ny.mirrors.kernel.org (Postfix) with ESMTPS id AEBF41C2226B for ; Mon, 19 Feb 2024 13:17:11 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C821A36137; Mon, 19 Feb 2024 13:16:26 +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 Content-Transfer-Encoding: 8bit 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 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 --- 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; -- 2.39.2