From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 68291C43217 for ; Mon, 28 Nov 2022 12:02:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231766AbiK1MC4 (ORCPT ); Mon, 28 Nov 2022 07:02:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36182 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231480AbiK1MAn (ORCPT ); Mon, 28 Nov 2022 07:00:43 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3502318E2B for ; Mon, 28 Nov 2022 04:00:43 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoO-0005Fw-RA; Mon, 28 Nov 2022 13:00:36 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoN-000oAW-CB; Mon, 28 Nov 2022 13:00:36 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoM-00H6Le-Vr; Mon, 28 Nov 2022 13:00:34 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 01/26] net: dsa: microchip: add stats64 support for ksz8 series of switches Date: Mon, 28 Nov 2022 13:00:09 +0100 Message-Id: <20221128120034.4075562-2-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add stats64 support for ksz8xxx series of switches. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz_common.c | 87 ++++++++++++++++++++++++++ drivers/net/dsa/microchip/ksz_common.h | 1 + 2 files changed, 88 insertions(+) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index f39b041765fb..423f944cc34c 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -70,6 +70,43 @@ struct ksz_stats_raw { u64 tx_discards; }; =20 +struct ksz88xx_stats_raw { + u64 rx; + u64 rx_hi; + u64 rx_undersize; + u64 rx_fragments; + u64 rx_oversize; + u64 rx_jabbers; + u64 rx_symbol_err; + u64 rx_crc_err; + u64 rx_align_err; + u64 rx_mac_ctrl; + u64 rx_pause; + u64 rx_bcast; + u64 rx_mcast; + u64 rx_ucast; + u64 rx_64_or_less; + u64 rx_65_127; + u64 rx_128_255; + u64 rx_256_511; + u64 rx_512_1023; + u64 rx_1024_1522; + u64 tx; + u64 tx_hi; + u64 tx_late_col; + u64 tx_pause; + u64 tx_bcast; + u64 tx_mcast; + u64 tx_ucast; + u64 tx_deferred; + u64 tx_total_col; + u64 tx_exc_col; + u64 tx_single_col; + u64 tx_mult_col; + u64 rx_discards; + u64 tx_discards; +}; + static const struct ksz_mib_names ksz88xx_mib_names[] =3D { { 0x00, "rx" }, { 0x01, "rx_hi" }, @@ -156,6 +193,7 @@ static const struct ksz_dev_ops ksz8_dev_ops =3D { .w_phy =3D ksz8_w_phy, .r_mib_cnt =3D ksz8_r_mib_cnt, .r_mib_pkt =3D ksz8_r_mib_pkt, + .r_mib_stat64 =3D ksz88xx_r_mib_stats64, .freeze_mib =3D ksz8_freeze_mib, .port_init_cnt =3D ksz8_port_init_cnt, .fdb_dump =3D ksz8_fdb_dump, @@ -1583,6 +1621,55 @@ void ksz_r_mib_stats64(struct ksz_device *dev, int p= ort) spin_unlock(&mib->stats64_lock); } =20 +void ksz88xx_r_mib_stats64(struct ksz_device *dev, int port) +{ + struct ethtool_pause_stats *pstats; + struct rtnl_link_stats64 *stats; + struct ksz88xx_stats_raw *raw; + struct ksz_port_mib *mib; + + mib =3D &dev->ports[port].mib; + stats =3D &mib->stats64; + pstats =3D &mib->pause_stats; + raw =3D (struct ksz88xx_stats_raw *)mib->counters; + + spin_lock(&mib->stats64_lock); + + stats->rx_packets =3D raw->rx_bcast + raw->rx_mcast + raw->rx_ucast + + raw->rx_pause; + stats->tx_packets =3D raw->tx_bcast + raw->tx_mcast + raw->tx_ucast + + raw->tx_pause; + + /* HW counters are counting bytes + FCS which is not acceptable + * for rtnl_link_stats64 interface + */ + stats->rx_bytes =3D raw->rx + raw->rx_hi - stats->rx_packets * ETH_FCS_LE= N; + stats->tx_bytes =3D raw->tx + raw->tx_hi - stats->tx_packets * ETH_FCS_LE= N; + + stats->rx_length_errors =3D raw->rx_undersize + raw->rx_fragments + + raw->rx_oversize; + + stats->rx_crc_errors =3D raw->rx_crc_err; + stats->rx_frame_errors =3D raw->rx_align_err; + stats->rx_dropped =3D raw->rx_discards; + stats->rx_errors =3D stats->rx_length_errors + stats->rx_crc_errors + + stats->rx_frame_errors + stats->rx_dropped; + + stats->tx_window_errors =3D raw->tx_late_col; + stats->tx_fifo_errors =3D raw->tx_discards; + stats->tx_aborted_errors =3D raw->tx_exc_col; + stats->tx_errors =3D stats->tx_window_errors + stats->tx_fifo_errors + + stats->tx_aborted_errors; + + stats->multicast =3D raw->rx_mcast; + stats->collisions =3D raw->tx_total_col; + + pstats->tx_pause_frames =3D raw->tx_pause; + pstats->rx_pause_frames =3D raw->rx_pause; + + spin_unlock(&mib->stats64_lock); +} + static void ksz_get_stats64(struct dsa_switch *ds, int port, struct rtnl_link_stats64 *s) { diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index cb27f5a180c7..055d61ff3fb8 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -345,6 +345,7 @@ void ksz_switch_remove(struct ksz_device *dev); =20 void ksz_init_mib_timer(struct ksz_device *dev); void ksz_r_mib_stats64(struct ksz_device *dev, int port); +void ksz88xx_r_mib_stats64(struct ksz_device *dev, int port); void ksz_port_stp_state_set(struct dsa_switch *ds, int port, u8 state); bool ksz_get_gbit(struct ksz_device *dev, int port); phy_interface_t ksz_get_xmii(struct ksz_device *dev, int port, bool gbit); --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F2C18C43217 for ; Mon, 28 Nov 2022 12:02:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231597AbiK1MCo (ORCPT ); Mon, 28 Nov 2022 07:02:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36500 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231477AbiK1MAn (ORCPT ); Mon, 28 Nov 2022 07:00:43 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BB7FA18E1E for ; Mon, 28 Nov 2022 04:00:42 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoO-0005FY-Js; Mon, 28 Nov 2022 13:00:36 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoN-000oAQ-4c; Mon, 28 Nov 2022 13:00:35 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoN-00H6Lt-2S; Mon, 28 Nov 2022 13:00:35 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 02/26] net: dsa: microchip: ksz8: ksz8_fdb_dump: fix port validation and VID information Date: Mon, 28 Nov 2022 13:00:10 +0100 Message-Id: <20221128120034.4075562-3-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The ksz8_fdb_dump() has multiple issues: - struct alu_struct was used only to store MAC address. - port value was misinterpreted as a bit mask - Filter ID was attempted to use as VID. FID can be used to get VID, but currently it is not supported. - by the attempt to use FID, was used not initialized alu.fid... Before this patch, "bridge fdb" command was providing random results, which are fixed by this patch: - random vid information - assignment to wrong port Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 003b0ac2854c..e0530bc3bec0 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -958,15 +958,14 @@ int ksz8_fdb_dump(struct ksz_device *dev, int port, u16 entries =3D 0; u8 timestamp =3D 0; u8 fid; - u8 member; - struct alu_struct alu; + u8 src_port; + u8 mac[ETH_ALEN]; =20 do { - alu.is_static =3D false; - ret =3D ksz8_r_dyn_mac_table(dev, i, alu.mac, &fid, &member, + ret =3D ksz8_r_dyn_mac_table(dev, i, mac, &fid, &src_port, ×tamp, &entries); - if (!ret && (member & BIT(port))) { - ret =3D cb(alu.mac, alu.fid, alu.is_static, data); + if (!ret && port =3D=3D src_port) { + ret =3D cb(mac, 0, false, data); if (ret) break; } --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AEE24C433FE for ; Mon, 28 Nov 2022 12:03:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231714AbiK1MD3 (ORCPT ); Mon, 28 Nov 2022 07:03:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36578 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231492AbiK1MAq (ORCPT ); Mon, 28 Nov 2022 07:00:46 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D74E31A04E for ; Mon, 28 Nov 2022 04:00:45 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoR-0005Hi-4h; Mon, 28 Nov 2022 13:00:39 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoP-000oB3-GF; Mon, 28 Nov 2022 13:00:38 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoN-00H6MF-4s; Mon, 28 Nov 2022 13:00:35 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 03/26] net: dsa: microchip: ksz8: ksz8_fdb_dump: fix not complete fdb extraction Date: Mon, 28 Nov 2022 13:00:11 +0100 Message-Id: <20221128120034.4075562-4-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Current ksz8_fdb_dump() is able to extract max 249 entries on the ksz8863/ksz8873 series of switches. This happened due to wrong bit mask and offset calculation. With this patch, we will be able to extract all possible 1024 entries. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz_common.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 423f944cc34c..43d94131417b 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -398,10 +398,10 @@ static const u32 ksz8863_masks[] =3D { [STATIC_MAC_TABLE_FID] =3D GENMASK(29, 26), [STATIC_MAC_TABLE_OVERRIDE] =3D BIT(20), [STATIC_MAC_TABLE_FWD_PORTS] =3D GENMASK(18, 16), - [DYNAMIC_MAC_TABLE_ENTRIES_H] =3D GENMASK(5, 0), + [DYNAMIC_MAC_TABLE_ENTRIES_H] =3D GENMASK(1, 0), [DYNAMIC_MAC_TABLE_MAC_EMPTY] =3D BIT(7), [DYNAMIC_MAC_TABLE_NOT_READY] =3D BIT(7), - [DYNAMIC_MAC_TABLE_ENTRIES] =3D GENMASK(31, 28), + [DYNAMIC_MAC_TABLE_ENTRIES] =3D GENMASK(31, 24), [DYNAMIC_MAC_TABLE_FID] =3D GENMASK(19, 16), [DYNAMIC_MAC_TABLE_SRC_PORT] =3D GENMASK(21, 20), [DYNAMIC_MAC_TABLE_TIMESTAMP] =3D GENMASK(23, 22), @@ -411,7 +411,7 @@ static u8 ksz8863_shifts[] =3D { [VLAN_TABLE_MEMBERSHIP_S] =3D 16, [STATIC_MAC_FWD_PORTS] =3D 16, [STATIC_MAC_FID] =3D 22, - [DYNAMIC_MAC_ENTRIES_H] =3D 3, + [DYNAMIC_MAC_ENTRIES_H] =3D 8, [DYNAMIC_MAC_ENTRIES] =3D 24, [DYNAMIC_MAC_FID] =3D 16, [DYNAMIC_MAC_TIMESTAMP] =3D 24, --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 460E6C43217 for ; Mon, 28 Nov 2022 12:03:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231810AbiK1MDg (ORCPT ); Mon, 28 Nov 2022 07:03:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36412 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231489AbiK1MAq (ORCPT ); Mon, 28 Nov 2022 07:00:46 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C796818B3A for ; Mon, 28 Nov 2022 04:00:45 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoS-0005JF-0W; Mon, 28 Nov 2022 13:00:40 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoQ-000oBI-C2; Mon, 28 Nov 2022 13:00:39 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoN-00H6MW-7K; Mon, 28 Nov 2022 13:00:35 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 04/26] net: dsa: microchip: ksz8: ksz8_fdb_dump: fix time stamp extraction Date: Mon, 28 Nov 2022 13:00:12 +0100 Message-Id: <20221128120034.4075562-5-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" FDB fix time stamp extraction. We are using wrong offset, so we will get not a time stamp. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 43d94131417b..7c28dc1edaa1 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -414,7 +414,7 @@ static u8 ksz8863_shifts[] =3D { [DYNAMIC_MAC_ENTRIES_H] =3D 8, [DYNAMIC_MAC_ENTRIES] =3D 24, [DYNAMIC_MAC_FID] =3D 16, - [DYNAMIC_MAC_TIMESTAMP] =3D 24, + [DYNAMIC_MAC_TIMESTAMP] =3D 22, [DYNAMIC_MAC_SRC_PORT] =3D 20, }; =20 --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 82CD9C433FE for ; Mon, 28 Nov 2022 12:04:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231881AbiK1ME1 (ORCPT ); Mon, 28 Nov 2022 07:04:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231529AbiK1MAt (ORCPT ); Mon, 28 Nov 2022 07:00:49 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 927A418B21 for ; Mon, 28 Nov 2022 04:00:48 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoU-0005O2-Di; Mon, 28 Nov 2022 13:00:42 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoS-000oC9-Qn; Mon, 28 Nov 2022 13:00:41 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoN-00H6Mz-AI; Mon, 28 Nov 2022 13:00:35 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 05/26] net: dsa: microchip: ksz8: ksz8_fdb_dump: do not extract ghost entry from empty table Date: Mon, 28 Nov 2022 13:00:13 +0100 Message-Id: <20221128120034.4075562-6-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" If the dynamic MAC table is empty, we will still extract one outdated entry. Fix it by using correct bit offset. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 7c28dc1edaa1..afb846c18b57 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -399,7 +399,7 @@ static const u32 ksz8863_masks[] =3D { [STATIC_MAC_TABLE_OVERRIDE] =3D BIT(20), [STATIC_MAC_TABLE_FWD_PORTS] =3D GENMASK(18, 16), [DYNAMIC_MAC_TABLE_ENTRIES_H] =3D GENMASK(1, 0), - [DYNAMIC_MAC_TABLE_MAC_EMPTY] =3D BIT(7), + [DYNAMIC_MAC_TABLE_MAC_EMPTY] =3D BIT(2), [DYNAMIC_MAC_TABLE_NOT_READY] =3D BIT(7), [DYNAMIC_MAC_TABLE_ENTRIES] =3D GENMASK(31, 24), [DYNAMIC_MAC_TABLE_FID] =3D GENMASK(19, 16), --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8AA1FC43217 for ; Mon, 28 Nov 2022 12:03:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231506AbiK1MDG (ORCPT ); Mon, 28 Nov 2022 07:03:06 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36404 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231486AbiK1MAq (ORCPT ); Mon, 28 Nov 2022 07:00:46 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5551A18B1D for ; Mon, 28 Nov 2022 04:00:45 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoQ-0005HU-Q9; Mon, 28 Nov 2022 13:00:38 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoP-000oAu-51; Mon, 28 Nov 2022 13:00:37 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoN-00H6NG-Db; Mon, 28 Nov 2022 13:00:35 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 06/26] net: dsa: microchip: ksz8863_smi: fix bulk access Date: Mon, 28 Nov 2022 13:00:14 +0100 Message-Id: <20221128120034.4075562-7-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Current regmap bulk access is broken, resulting to wrong reads/writes if ksz_read64/ksz_write64 functions are used. Mostly this issue was visible by using ksz8_fdb_dump(), which returned corrupt MAC address. The reason is that regmap was configured to have max_raw_read/write, even if ksz8863_mdio_read/write functions are able to handle unlimited read/write accesses. On ksz_read64 function we are using multiple 32bit accesses by incrementing each access by 1 instead of 4. Resulting buffer had 01234567.12345678 instead of 01234567.89abcdef. We have multiple ways to fix it: - enable 4 byte alignment for 32bit accesses. Since the HW do not have this requirement. It will break driver. - disable max_raw_* limit. This patch is removing max_raw_* limit for regmap accesses in ksz8863_smi. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8863_smi.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8863_smi.c b/drivers/net/dsa/micr= ochip/ksz8863_smi.c index 2f4623f3bd85..2516c9db7fec 100644 --- a/drivers/net/dsa/microchip/ksz8863_smi.c +++ b/drivers/net/dsa/microchip/ksz8863_smi.c @@ -70,6 +70,7 @@ static int ksz8863_mdio_write(void *ctx, const void *data= , size_t count) tmp, val[i]); if (ret < 0) goto out; + } =20 out: @@ -82,22 +83,16 @@ static const struct regmap_bus regmap_smi[] =3D { { .read =3D ksz8863_mdio_read, .write =3D ksz8863_mdio_write, - .max_raw_read =3D 1, - .max_raw_write =3D 1, }, { .read =3D ksz8863_mdio_read, .write =3D ksz8863_mdio_write, .val_format_endian_default =3D REGMAP_ENDIAN_BIG, - .max_raw_read =3D 2, - .max_raw_write =3D 2, }, { .read =3D ksz8863_mdio_read, .write =3D ksz8863_mdio_write, .val_format_endian_default =3D REGMAP_ENDIAN_BIG, - .max_raw_read =3D 4, - .max_raw_write =3D 4, } }; =20 @@ -108,7 +103,6 @@ static const struct regmap_config ksz8863_regmap_config= [] =3D { .pad_bits =3D 24, .val_bits =3D 8, .cache_type =3D REGCACHE_NONE, - .use_single_read =3D 1, .lock =3D ksz_regmap_lock, .unlock =3D ksz_regmap_unlock, }, @@ -118,7 +112,6 @@ static const struct regmap_config ksz8863_regmap_config= [] =3D { .pad_bits =3D 24, .val_bits =3D 16, .cache_type =3D REGCACHE_NONE, - .use_single_read =3D 1, .lock =3D ksz_regmap_lock, .unlock =3D ksz_regmap_unlock, }, @@ -128,7 +121,6 @@ static const struct regmap_config ksz8863_regmap_config= [] =3D { .pad_bits =3D 24, .val_bits =3D 32, .cache_type =3D REGCACHE_NONE, - .use_single_read =3D 1, .lock =3D ksz_regmap_lock, .unlock =3D ksz_regmap_unlock, } --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BF246C433FE for ; Mon, 28 Nov 2022 12:03:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231804AbiK1MDc (ORCPT ); Mon, 28 Nov 2022 07:03:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231494AbiK1MAr (ORCPT ); Mon, 28 Nov 2022 07:00:47 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 715661A076 for ; Mon, 28 Nov 2022 04:00:46 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoS-0005Jb-19; Mon, 28 Nov 2022 13:00:40 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoQ-000oBM-Gl; Mon, 28 Nov 2022 13:00:39 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoN-00H6Na-Gn; Mon, 28 Nov 2022 13:00:35 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 07/26] net: dsa: microchip: ksz8_r_dyn_mac_table(): remove timestamp support Date: Mon, 28 Nov 2022 13:00:15 +0100 Message-Id: <20221128120034.4075562-8-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" We do not use FDB timestamps. So, drop it. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8.h | 2 +- drivers/net/dsa/microchip/ksz8795.c | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.h b/drivers/net/dsa/microchip/k= sz8.h index ea05abfbd51d..ad8e69051347 100644 --- a/drivers/net/dsa/microchip/ksz8.h +++ b/drivers/net/dsa/microchip/ksz8.h @@ -20,7 +20,7 @@ void ksz8_port_setup(struct ksz_device *dev, int port, bo= ol cpu_port); int ksz8_r_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 *val); int ksz8_w_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 val); int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr, - u8 *fid, u8 *src_port, u8 *timestamp, u16 *entries); + u8 *fid, u8 *src_port, u16 *entries); int ksz8_r_sta_mac_table(struct ksz_device *dev, u16 addr, struct alu_struct *alu); void ksz8_w_sta_mac_table(struct ksz_device *dev, u16 addr, diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index e0530bc3bec0..d0cfe74d5b13 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -395,7 +395,7 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev,= u8 *data) } =20 int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr, - u8 *fid, u8 *src_port, u8 *timestamp, u16 *entries) + u8 *fid, u8 *src_port, u16 *entries) { u32 data_hi, data_lo; const u8 *shifts; @@ -440,8 +440,6 @@ int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 ad= dr, u8 *mac_addr, shifts[DYNAMIC_MAC_FID]; *src_port =3D (data_hi & masks[DYNAMIC_MAC_TABLE_SRC_PORT]) >> shifts[DYNAMIC_MAC_SRC_PORT]; - *timestamp =3D (data_hi & masks[DYNAMIC_MAC_TABLE_TIMESTAMP]) >> - shifts[DYNAMIC_MAC_TIMESTAMP]; =20 mac_addr[5] =3D (u8)data_lo; mac_addr[4] =3D (u8)(data_lo >> 8); @@ -956,14 +954,13 @@ int ksz8_fdb_dump(struct ksz_device *dev, int port, int ret =3D 0; u16 i =3D 0; u16 entries =3D 0; - u8 timestamp =3D 0; u8 fid; u8 src_port; u8 mac[ETH_ALEN]; =20 do { ret =3D ksz8_r_dyn_mac_table(dev, i, mac, &fid, &src_port, - ×tamp, &entries); + &entries); if (!ret && port =3D=3D src_port) { ret =3D cb(mac, 0, false, data); if (ret) --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 01346C43217 for ; Mon, 28 Nov 2022 12:03:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231771AbiK1MC7 (ORCPT ); Mon, 28 Nov 2022 07:02:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36312 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231481AbiK1MAo (ORCPT ); Mon, 28 Nov 2022 07:00:44 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EE8BE18B24 for ; Mon, 28 Nov 2022 04:00:43 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoP-0005Gt-Sk; Mon, 28 Nov 2022 13:00:37 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoO-000oAm-7o; Mon, 28 Nov 2022 13:00:37 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoN-00H6Np-Ji; Mon, 28 Nov 2022 13:00:35 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 08/26] net: dsa: microchip: make ksz8_r_dyn_mac_table() static Date: Mon, 28 Nov 2022 13:00:16 +0100 Message-Id: <20221128120034.4075562-9-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" ksz8_r_dyn_mac_table() is not used any where outside. So, make it static. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8.h | 2 -- drivers/net/dsa/microchip/ksz8795.c | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.h b/drivers/net/dsa/microchip/k= sz8.h index ad8e69051347..96d453af17c5 100644 --- a/drivers/net/dsa/microchip/ksz8.h +++ b/drivers/net/dsa/microchip/ksz8.h @@ -19,8 +19,6 @@ void ksz8_flush_dyn_mac_table(struct ksz_device *dev, int= port); void ksz8_port_setup(struct ksz_device *dev, int port, bool cpu_port); int ksz8_r_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 *val); int ksz8_w_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 val); -int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr, - u8 *fid, u8 *src_port, u16 *entries); int ksz8_r_sta_mac_table(struct ksz_device *dev, u16 addr, struct alu_struct *alu); void ksz8_w_sta_mac_table(struct ksz_device *dev, u16 addr, diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index d0cfe74d5b13..7310abd0d8df 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -394,8 +394,8 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev,= u8 *data) return 0; } =20 -int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr, - u8 *fid, u8 *src_port, u16 *entries) +static int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_= addr, + u8 *fid, u8 *src_port, u16 *entries) { u32 data_hi, data_lo; const u8 *shifts; --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B66D7C433FE for ; Mon, 28 Nov 2022 12:03:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231837AbiK1MD6 (ORCPT ); Mon, 28 Nov 2022 07:03:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36292 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231521AbiK1MAs (ORCPT ); Mon, 28 Nov 2022 07:00:48 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2F56C1A228 for ; Mon, 28 Nov 2022 04:00:48 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoT-0005Ll-E2; Mon, 28 Nov 2022 13:00:41 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoR-000oBa-QJ; Mon, 28 Nov 2022 13:00:40 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoN-00H6O2-MC; Mon, 28 Nov 2022 13:00:35 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 09/26] net: dsa: microchip: ksz8_r_dyn_mac_table(): remove fid support Date: Mon, 28 Nov 2022 13:00:17 +0100 Message-Id: <20221128120034.4075562-10-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" FID !=3D VLAN. FID to VLAN conversation is currently not validated and was not working before within the FDB dump context. So, drop it until we have time to implement this functionality. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 7310abd0d8df..736cf4e54333 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -395,7 +395,7 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev,= u8 *data) } =20 static int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_= addr, - u8 *fid, u8 *src_port, u16 *entries) + u8 *src_port, u16 *entries) { u32 data_hi, data_lo; const u8 *shifts; @@ -436,8 +436,6 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev,= u16 addr, u8 *mac_addr, shifts[DYNAMIC_MAC_ENTRIES]; *entries =3D cnt + 1; =20 - *fid =3D (data_hi & masks[DYNAMIC_MAC_TABLE_FID]) >> - shifts[DYNAMIC_MAC_FID]; *src_port =3D (data_hi & masks[DYNAMIC_MAC_TABLE_SRC_PORT]) >> shifts[DYNAMIC_MAC_SRC_PORT]; =20 @@ -954,12 +952,11 @@ int ksz8_fdb_dump(struct ksz_device *dev, int port, int ret =3D 0; u16 i =3D 0; u16 entries =3D 0; - u8 fid; u8 src_port; u8 mac[ETH_ALEN]; =20 do { - ret =3D ksz8_r_dyn_mac_table(dev, i, mac, &fid, &src_port, + ret =3D ksz8_r_dyn_mac_table(dev, i, mac, &src_port, &entries); if (!ret && port =3D=3D src_port) { ret =3D cb(mac, 0, false, data); --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C09CDC433FE for ; Mon, 28 Nov 2022 12:04:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231638AbiK1MEZ (ORCPT ); Mon, 28 Nov 2022 07:04:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36748 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231528AbiK1MAt (ORCPT ); Mon, 28 Nov 2022 07:00:49 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 873A5186F8 for ; Mon, 28 Nov 2022 04:00:48 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoU-0005Nn-DB; Mon, 28 Nov 2022 13:00:42 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoS-000oC6-OT; Mon, 28 Nov 2022 13:00:41 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoN-00H6OH-P1; Mon, 28 Nov 2022 13:00:35 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 10/26] net: dsa: microchip: ksz8: refactor ksz8_fdb_dump() Date: Mon, 28 Nov 2022 13:00:18 +0100 Message-Id: <20221128120034.4075562-11-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" After fixing different bugs we can refactor this function: - be paranoid - read only max possibly amount of entries supported by the HW. - pass error values returned by regmap Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 41 ++++++++++++++----------- drivers/net/dsa/microchip/ksz8795_reg.h | 1 + 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 736cf4e54333..308b46bb2ce5 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -949,26 +949,31 @@ void ksz8_flush_dyn_mac_table(struct ksz_device *dev,= int port) int ksz8_fdb_dump(struct ksz_device *dev, int port, dsa_fdb_dump_cb_t *cb, void *data) { - int ret =3D 0; - u16 i =3D 0; - u16 entries =3D 0; - u8 src_port; - u8 mac[ETH_ALEN]; + u16 i, entries =3D 0; + int ret; =20 - do { - ret =3D ksz8_r_dyn_mac_table(dev, i, mac, &src_port, - &entries); - if (!ret && port =3D=3D src_port) { - ret =3D cb(mac, 0, false, data); - if (ret) - break; - } - i++; - } while (i < entries); - if (i >=3D entries) - ret =3D 0; + for (i =3D 0; i < KSZ8_DYN_MAC_ENTRIES; i++) { + u8 mac[ETH_ALEN]; + u8 src_port; =20 - return ret; + ret =3D ksz8_r_dyn_mac_table(dev, i, mac, &src_port, &entries); + if (ret =3D=3D -ENXIO) + return 0; + if (ret) + return ret; + + if (i >=3D entries) + return 0; + + if (port !=3D src_port) + continue; + + ret =3D cb(mac, 0, false, data); + if (ret) + return ret; + } + + return 0; } =20 int ksz8_mdb_add(struct ksz_device *dev, int port, diff --git a/drivers/net/dsa/microchip/ksz8795_reg.h b/drivers/net/dsa/micr= ochip/ksz8795_reg.h index 7a57c6088f80..0bdceb534192 100644 --- a/drivers/net/dsa/microchip/ksz8795_reg.h +++ b/drivers/net/dsa/microchip/ksz8795_reg.h @@ -811,5 +811,6 @@ #define TAIL_TAG_LOOKUP BIT(7) =20 #define FID_ENTRIES 128 +#define KSZ8_DYN_MAC_ENTRIES 1024 =20 #endif --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2CCBFC433FE for ; Mon, 28 Nov 2022 12:04:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231841AbiK1MEB (ORCPT ); Mon, 28 Nov 2022 07:04:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231519AbiK1MAs (ORCPT ); Mon, 28 Nov 2022 07:00:48 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2A4F61A223 for ; Mon, 28 Nov 2022 04:00:48 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoT-0005MN-Kn; Mon, 28 Nov 2022 13:00:41 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoS-000oBk-4O; Mon, 28 Nov 2022 13:00:40 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoN-00H6Oe-SM; Mon, 28 Nov 2022 13:00:35 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 11/26] net: dsa: microchip: ksz8: ksz8_fdb_dump: dump static MAC table Date: Mon, 28 Nov 2022 13:00:19 +0100 Message-Id: <20221128120034.4075562-12-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Extend fdb_dump with static MAC table dump. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 308b46bb2ce5..392f6cb1f706 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -952,6 +952,23 @@ int ksz8_fdb_dump(struct ksz_device *dev, int port, u16 i, entries =3D 0; int ret; =20 + for (i =3D 0; i < dev->info->num_statics; i++) { + struct alu_struct alu; + + ret =3D ksz8_r_sta_mac_table(dev, i, &alu); + if (ret =3D=3D -ENXIO) + continue; + if (ret) + return ret; + + if (!(alu.port_forward & BIT(port))) + continue; + + ret =3D cb(alu.mac, 0, true, data); + if (ret) + return ret; + } + for (i =3D 0; i < KSZ8_DYN_MAC_ENTRIES; i++) { u8 mac[ETH_ALEN]; u8 src_port; --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EBDC8C433FE for ; Mon, 28 Nov 2022 12:04:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230518AbiK1MEN (ORCPT ); Mon, 28 Nov 2022 07:04:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36302 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231520AbiK1MAs (ORCPT ); Mon, 28 Nov 2022 07:00:48 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 464521A238 for ; Mon, 28 Nov 2022 04:00:48 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoT-0005MO-Kl; Mon, 28 Nov 2022 13:00:41 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoS-000oBm-6A; Mon, 28 Nov 2022 13:00:40 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoN-00H6Ot-Ui; Mon, 28 Nov 2022 13:00:35 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 12/26] net: dsa: microchip: ksz8: move static mac table operations to a separate functions Date: Mon, 28 Nov 2022 13:00:20 +0100 Message-Id: <20221128120034.4075562-13-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" We need it to reuse the code for add/del_fdb Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 34 +++++++++++++++++++---------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 392f6cb1f706..d16dc8e5ed18 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -993,8 +993,8 @@ int ksz8_fdb_dump(struct ksz_device *dev, int port, return 0; } =20 -int ksz8_mdb_add(struct ksz_device *dev, int port, - const struct switchdev_obj_port_mdb *mdb, struct dsa_db db) +static int ksz8_add_sta_mac(struct ksz_device *dev, int port, + const unsigned char *addr, u16 vid) { struct alu_struct alu; int index; @@ -1004,8 +1004,8 @@ int ksz8_mdb_add(struct ksz_device *dev, int port, for (index =3D 0; index < dev->info->num_statics; index++) { if (!ksz8_r_sta_mac_table(dev, index, &alu)) { /* Found one already in static MAC table. */ - if (!memcmp(alu.mac, mdb->addr, ETH_ALEN) && - alu.fid =3D=3D mdb->vid) + if (!memcmp(alu.mac, addr, ETH_ALEN) && + alu.fid =3D=3D vid) break; /* Remember the first empty entry. */ } else if (!empty) { @@ -1021,23 +1021,23 @@ int ksz8_mdb_add(struct ksz_device *dev, int port, if (index =3D=3D dev->info->num_statics) { index =3D empty - 1; memset(&alu, 0, sizeof(alu)); - memcpy(alu.mac, mdb->addr, ETH_ALEN); + memcpy(alu.mac, addr, ETH_ALEN); alu.is_static =3D true; } alu.port_forward |=3D BIT(port); - if (mdb->vid) { + if (vid) { alu.is_use_fid =3D true; =20 /* Need a way to map VID to FID. */ - alu.fid =3D mdb->vid; + alu.fid =3D vid; } ksz8_w_sta_mac_table(dev, index, &alu); =20 return 0; } =20 -int ksz8_mdb_del(struct ksz_device *dev, int port, - const struct switchdev_obj_port_mdb *mdb, struct dsa_db db) +static int ksz8_del_sta_mac(struct ksz_device *dev, int port, + const unsigned char *addr, u16 vid) { struct alu_struct alu; int index; @@ -1045,8 +1045,8 @@ int ksz8_mdb_del(struct ksz_device *dev, int port, for (index =3D 0; index < dev->info->num_statics; index++) { if (!ksz8_r_sta_mac_table(dev, index, &alu)) { /* Found one already in static MAC table. */ - if (!memcmp(alu.mac, mdb->addr, ETH_ALEN) && - alu.fid =3D=3D mdb->vid) + if (!memcmp(alu.mac, addr, ETH_ALEN) && + alu.fid =3D=3D vid) break; } } @@ -1065,6 +1065,18 @@ int ksz8_mdb_del(struct ksz_device *dev, int port, return 0; } =20 +int ksz8_mdb_add(struct ksz_device *dev, int port, + const struct switchdev_obj_port_mdb *mdb, struct dsa_db db) +{ + return ksz8_add_sta_mac(dev, port, mdb->addr, mdb->vid); +} + +int ksz8_mdb_del(struct ksz_device *dev, int port, + const struct switchdev_obj_port_mdb *mdb, struct dsa_db db) +{ + return ksz8_del_sta_mac(dev, port, mdb->addr, mdb->vid); +} + int ksz8_port_vlan_filtering(struct ksz_device *dev, int port, bool flag, struct netlink_ext_ack *extack) { --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 71086C43217 for ; Mon, 28 Nov 2022 12:03:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231648AbiK1MDO (ORCPT ); Mon, 28 Nov 2022 07:03:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36214 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231485AbiK1MAq (ORCPT ); Mon, 28 Nov 2022 07:00:46 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4FF3118B07 for ; Mon, 28 Nov 2022 04:00:45 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoR-0005He-38; Mon, 28 Nov 2022 13:00:39 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoP-000oB0-F0; Mon, 28 Nov 2022 13:00:38 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6P9-08; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 13/26] net: dsa: microchip: ksz8: add fdb_add/del support Date: Mon, 28 Nov 2022 13:00:21 +0100 Message-Id: <20221128120034.4075562-14-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Provide access to the static MAC table over fdb_add/del callbacks. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8.h | 4 ++++ drivers/net/dsa/microchip/ksz8795.c | 12 ++++++++++++ drivers/net/dsa/microchip/ksz_common.c | 2 ++ 3 files changed, 18 insertions(+) diff --git a/drivers/net/dsa/microchip/ksz8.h b/drivers/net/dsa/microchip/k= sz8.h index 96d453af17c5..a28fa7cd4d98 100644 --- a/drivers/net/dsa/microchip/ksz8.h +++ b/drivers/net/dsa/microchip/ksz8.h @@ -30,6 +30,10 @@ void ksz8_freeze_mib(struct ksz_device *dev, int port, b= ool freeze); void ksz8_port_init_cnt(struct ksz_device *dev, int port); int ksz8_fdb_dump(struct ksz_device *dev, int port, dsa_fdb_dump_cb_t *cb, void *data); +int ksz8_fdb_add(struct ksz_device *dev, int port, const unsigned char *ad= dr, + u16 vid, struct dsa_db db); +int ksz8_fdb_del(struct ksz_device *dev, int port, const unsigned char *ad= dr, + u16 vid, struct dsa_db db); int ksz8_mdb_add(struct ksz_device *dev, int port, const struct switchdev_obj_port_mdb *mdb, struct dsa_db db); int ksz8_mdb_del(struct ksz_device *dev, int port, diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index d16dc8e5ed18..208cf4dde397 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -1077,6 +1077,18 @@ int ksz8_mdb_del(struct ksz_device *dev, int port, return ksz8_del_sta_mac(dev, port, mdb->addr, mdb->vid); } =20 +int ksz8_fdb_add(struct ksz_device *dev, int port, const unsigned char *ad= dr, + u16 vid, struct dsa_db db) +{ + return ksz8_add_sta_mac(dev, port, addr, vid); +} + +int ksz8_fdb_del(struct ksz_device *dev, int port, const unsigned char *ad= dr, + u16 vid, struct dsa_db db) +{ + return ksz8_del_sta_mac(dev, port, addr, vid); +} + int ksz8_port_vlan_filtering(struct ksz_device *dev, int port, bool flag, struct netlink_ext_ack *extack) { diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index afb846c18b57..171cb0063fbf 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -197,6 +197,8 @@ static const struct ksz_dev_ops ksz8_dev_ops =3D { .freeze_mib =3D ksz8_freeze_mib, .port_init_cnt =3D ksz8_port_init_cnt, .fdb_dump =3D ksz8_fdb_dump, + .fdb_add =3D ksz8_fdb_add, + .fdb_del =3D ksz8_fdb_del, .mdb_add =3D ksz8_mdb_add, .mdb_del =3D ksz8_mdb_del, .vlan_filtering =3D ksz8_port_vlan_filtering, --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 08E89C43217 for ; Mon, 28 Nov 2022 12:03:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230330AbiK1MDT (ORCPT ); Mon, 28 Nov 2022 07:03:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36186 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231484AbiK1MAp (ORCPT ); Mon, 28 Nov 2022 07:00:45 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 112DB186D3 for ; Mon, 28 Nov 2022 04:00:45 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoQ-0005HV-TH; Mon, 28 Nov 2022 13:00:38 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoP-000oAv-88; Mon, 28 Nov 2022 13:00:38 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6PN-2w; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 14/26] net: dsa: microchip: KSZ88x3 fix loopback support Date: Mon, 28 Nov 2022 13:00:22 +0100 Message-Id: <20221128120034.4075562-15-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" With current code loopback is not working and selftest will always fail. Fix register and bit offsets to make loopback on KSZ88x3 switches. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 24 ++++++++++++++++++------ drivers/net/dsa/microchip/ksz8795_reg.h | 1 + 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 208cf4dde397..a6d5de41a754 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -625,8 +625,13 @@ int ksz8_r_phy(struct ksz_device *dev, u16 phy, u16 re= g, u16 *val) if (ret) return ret; =20 - if (restart & PORT_PHY_LOOPBACK) - data |=3D BMCR_LOOPBACK; + if (ksz_is_ksz88x3(dev)) { + if (restart & KSZ8873_PORT_PHY_LOOPBACK) + data |=3D BMCR_LOOPBACK; + } else { + if (restart & PORT_PHY_LOOPBACK) + data |=3D BMCR_LOOPBACK; + } if (ctrl & PORT_FORCE_100_MBIT) data |=3D BMCR_SPEED100; if (ksz_is_ksz88x3(dev)) { @@ -849,10 +854,17 @@ int ksz8_w_phy(struct ksz_device *dev, u16 phy, u16 r= eg, u16 val) data |=3D PORT_FORCE_MDIX; else data &=3D ~PORT_FORCE_MDIX; - if (val & BMCR_LOOPBACK) - data |=3D PORT_PHY_LOOPBACK; - else - data &=3D ~PORT_PHY_LOOPBACK; + if (ksz_is_ksz88x3(dev)) { + if (val & BMCR_LOOPBACK) + data |=3D KSZ8873_PORT_PHY_LOOPBACK; + else + data &=3D ~KSZ8873_PORT_PHY_LOOPBACK; + } else { + if (val & BMCR_LOOPBACK) + data |=3D PORT_PHY_LOOPBACK; + else + data &=3D ~PORT_PHY_LOOPBACK; + } =20 if (data !=3D restart) { ret =3D ksz_pwrite8(dev, p, regs[P_NEG_RESTART_CTRL], diff --git a/drivers/net/dsa/microchip/ksz8795_reg.h b/drivers/net/dsa/micr= ochip/ksz8795_reg.h index 0bdceb534192..08204da7d621 100644 --- a/drivers/net/dsa/microchip/ksz8795_reg.h +++ b/drivers/net/dsa/microchip/ksz8795_reg.h @@ -262,6 +262,7 @@ #define PORT_AUTO_MDIX_DISABLE BIT(2) #define PORT_FORCE_MDIX BIT(1) #define PORT_MAC_LOOPBACK BIT(0) +#define KSZ8873_PORT_PHY_LOOPBACK BIT(0) =20 #define REG_PORT_1_STATUS_2 0x1E #define REG_PORT_2_STATUS_2 0x2E --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 506B1C43217 for ; Mon, 28 Nov 2022 12:04:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231793AbiK1MEf (ORCPT ); Mon, 28 Nov 2022 07:04:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36310 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231535AbiK1MAu (ORCPT ); Mon, 28 Nov 2022 07:00:50 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5562918E0F for ; Mon, 28 Nov 2022 04:00:49 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoU-0005NW-Aj; Mon, 28 Nov 2022 13:00:42 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoS-000oBz-Kz; Mon, 28 Nov 2022 13:00:41 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6Pl-5t; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 15/26] net: dsa: microchip: ksz8_r_dyn_mac_table(): move main part of the code out of if statement Date: Mon, 28 Nov 2022 13:00:23 +0100 Message-Id: <20221128120034.4075562-16-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Start reworking error handling of this function Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 56 +++++++++++++++-------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index a6d5de41a754..2674fd553851 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -402,7 +402,9 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev,= u16 addr, u8 *mac_addr, const u32 *masks; const u16 *regs; u16 ctrl_addr; + u64 buf =3D 0; u8 data; + int cnt; int rc; =20 shifts =3D dev->info->shifts; @@ -418,36 +420,36 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *de= v, u16 addr, u8 *mac_addr, if (rc =3D=3D -EAGAIN) { if (addr =3D=3D 0) *entries =3D 0; + goto unlock_alu; } else if (rc =3D=3D -ENXIO) { *entries =3D 0; - /* At least one valid entry in the table. */ - } else { - u64 buf =3D 0; - int cnt; - - ksz_read64(dev, regs[REG_IND_DATA_HI], &buf); - data_hi =3D (u32)(buf >> 32); - data_lo =3D (u32)buf; - - /* Check out how many valid entry in the table. */ - cnt =3D data & masks[DYNAMIC_MAC_TABLE_ENTRIES_H]; - cnt <<=3D shifts[DYNAMIC_MAC_ENTRIES_H]; - cnt |=3D (data_hi & masks[DYNAMIC_MAC_TABLE_ENTRIES]) >> - shifts[DYNAMIC_MAC_ENTRIES]; - *entries =3D cnt + 1; - - *src_port =3D (data_hi & masks[DYNAMIC_MAC_TABLE_SRC_PORT]) >> - shifts[DYNAMIC_MAC_SRC_PORT]; - - mac_addr[5] =3D (u8)data_lo; - mac_addr[4] =3D (u8)(data_lo >> 8); - mac_addr[3] =3D (u8)(data_lo >> 16); - mac_addr[2] =3D (u8)(data_lo >> 24); - - mac_addr[1] =3D (u8)data_hi; - mac_addr[0] =3D (u8)(data_hi >> 8); - rc =3D 0; + goto unlock_alu; } + + ksz_read64(dev, regs[REG_IND_DATA_HI], &buf); + data_hi =3D (u32)(buf >> 32); + data_lo =3D (u32)buf; + + /* Check out how many valid entry in the table. */ + cnt =3D data & masks[DYNAMIC_MAC_TABLE_ENTRIES_H]; + cnt <<=3D shifts[DYNAMIC_MAC_ENTRIES_H]; + cnt |=3D (data_hi & masks[DYNAMIC_MAC_TABLE_ENTRIES]) >> + shifts[DYNAMIC_MAC_ENTRIES]; + *entries =3D cnt + 1; + + *src_port =3D (data_hi & masks[DYNAMIC_MAC_TABLE_SRC_PORT]) >> + shifts[DYNAMIC_MAC_SRC_PORT]; + + mac_addr[5] =3D (u8)data_lo; + mac_addr[4] =3D (u8)(data_lo >> 8); + mac_addr[3] =3D (u8)(data_lo >> 16); + mac_addr[2] =3D (u8)(data_lo >> 24); + + mac_addr[1] =3D (u8)data_hi; + mac_addr[0] =3D (u8)(data_hi >> 8); + rc =3D 0; + +unlock_alu: mutex_unlock(&dev->alu_mutex); =20 return rc; --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B15DC433FE for ; Mon, 28 Nov 2022 12:03:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231782AbiK1MDK (ORCPT ); Mon, 28 Nov 2022 07:03:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36100 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231488AbiK1MAq (ORCPT ); Mon, 28 Nov 2022 07:00:46 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5C766193CE for ; Mon, 28 Nov 2022 04:00:45 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoQ-0005HX-VO; Mon, 28 Nov 2022 13:00:39 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoP-000oAy-AG; Mon, 28 Nov 2022 13:00:38 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6Q3-86; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 16/26] net: dsa: microchip: ksz8_r_dyn_mac_table(): use ret instead of rc Date: Mon, 28 Nov 2022 13:00:24 +0100 Message-Id: <20221128120034.4075562-17-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Other parts of this file use ret. So, unify it. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 2674fd553851..1677f61b138a 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -405,7 +405,7 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev,= u16 addr, u8 *mac_addr, u64 buf =3D 0; u8 data; int cnt; - int rc; + int ret; =20 shifts =3D dev->info->shifts; masks =3D dev->info->masks; @@ -416,12 +416,12 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *de= v, u16 addr, u8 *mac_addr, mutex_lock(&dev->alu_mutex); ksz_write16(dev, regs[REG_IND_CTRL_0], ctrl_addr); =20 - rc =3D ksz8_valid_dyn_entry(dev, &data); - if (rc =3D=3D -EAGAIN) { + ret =3D ksz8_valid_dyn_entry(dev, &data); + if (ret =3D=3D -EAGAIN) { if (addr =3D=3D 0) *entries =3D 0; goto unlock_alu; - } else if (rc =3D=3D -ENXIO) { + } else if (ret =3D=3D -ENXIO) { *entries =3D 0; goto unlock_alu; } @@ -447,12 +447,12 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *de= v, u16 addr, u8 *mac_addr, =20 mac_addr[1] =3D (u8)data_hi; mac_addr[0] =3D (u8)(data_hi >> 8); - rc =3D 0; + ret =3D 0; =20 unlock_alu: mutex_unlock(&dev->alu_mutex); =20 - return rc; + return ret; } =20 int ksz8_r_sta_mac_table(struct ksz_device *dev, u16 addr, --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20461C433FE for ; Mon, 28 Nov 2022 12:04:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231789AbiK1MEb (ORCPT ); Mon, 28 Nov 2022 07:04:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36740 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231524AbiK1MAt (ORCPT ); Mon, 28 Nov 2022 07:00:49 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 777231A380 for ; Mon, 28 Nov 2022 04:00:48 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoU-0005Mc-1I; Mon, 28 Nov 2022 13:00:42 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoS-000oBr-CU; Mon, 28 Nov 2022 13:00:41 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6QS-BE; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 17/26] net: dsa: microchip: ksz8_r_dyn_mac_table(): ksz: do not return EAGAIN on timeout Date: Mon, 28 Nov 2022 13:00:25 +0100 Message-Id: <20221128120034.4075562-18-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" EAGAIN was not used by previous code and not used by current code. So, remove it and use proper error value. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 1677f61b138a..1b067e0cacd5 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -382,7 +382,7 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev,= u8 *data) =20 /* Entry is not ready for accessing. */ if (*data & masks[DYNAMIC_MAC_TABLE_NOT_READY]) { - return -EAGAIN; + return -ETIMEDOUT; /* Entry is ready for accessing. */ } else { ksz_read8(dev, regs[REG_IND_DATA_8], data); @@ -417,15 +417,14 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *de= v, u16 addr, u8 *mac_addr, ksz_write16(dev, regs[REG_IND_CTRL_0], ctrl_addr); =20 ret =3D ksz8_valid_dyn_entry(dev, &data); - if (ret =3D=3D -EAGAIN) { - if (addr =3D=3D 0) - *entries =3D 0; - goto unlock_alu; - } else if (ret =3D=3D -ENXIO) { + if (ret =3D=3D -ENXIO) { *entries =3D 0; goto unlock_alu; } =20 + if (ret) + goto unlock_alu; + ksz_read64(dev, regs[REG_IND_DATA_HI], &buf); data_hi =3D (u32)(buf >> 32); data_lo =3D (u32)buf; --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 58B0BC433FE for ; Mon, 28 Nov 2022 12:04:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231417AbiK1MEP (ORCPT ); Mon, 28 Nov 2022 07:04:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36484 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231522AbiK1MAt (ORCPT ); Mon, 28 Nov 2022 07:00:49 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5F9771A23F for ; Mon, 28 Nov 2022 04:00:48 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoT-0005M1-Gn; Mon, 28 Nov 2022 13:00:41 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoR-000oBh-W0; Mon, 28 Nov 2022 13:00:40 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6Qi-Et; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 18/26] net: dsa: microchip: ksz8_r_dyn_mac_table(): return read/write error if we got any Date: Mon, 28 Nov 2022 13:00:26 +0100 Message-Id: <20221128120034.4075562-19-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The read/write path may fail. So, return error if we got it. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 1b067e0cacd5..3348f5c25942 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -371,12 +371,16 @@ static int ksz8_valid_dyn_entry(struct ksz_device *de= v, u8 *data) int timeout =3D 100; const u32 *masks; const u16 *regs; + int ret; =20 masks =3D dev->info->masks; regs =3D dev->info->regs; =20 do { - ksz_read8(dev, regs[REG_IND_DATA_CHECK], data); + ret =3D ksz_read8(dev, regs[REG_IND_DATA_CHECK], data); + if (ret) + return ret; + timeout--; } while ((*data & masks[DYNAMIC_MAC_TABLE_NOT_READY]) && timeout); =20 @@ -385,7 +389,9 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev,= u8 *data) return -ETIMEDOUT; /* Entry is ready for accessing. */ } else { - ksz_read8(dev, regs[REG_IND_DATA_8], data); + ret =3D ksz_read8(dev, regs[REG_IND_DATA_8], data); + if (ret) + return ret; =20 /* There is no valid entry in the table. */ if (*data & masks[DYNAMIC_MAC_TABLE_MAC_EMPTY]) @@ -414,7 +420,9 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev,= u16 addr, u8 *mac_addr, ctrl_addr =3D IND_ACC_TABLE(TABLE_DYNAMIC_MAC | TABLE_READ) | addr; =20 mutex_lock(&dev->alu_mutex); - ksz_write16(dev, regs[REG_IND_CTRL_0], ctrl_addr); + ret =3D ksz_write16(dev, regs[REG_IND_CTRL_0], ctrl_addr); + if (ret) + goto unlock_alu; =20 ret =3D ksz8_valid_dyn_entry(dev, &data); if (ret =3D=3D -ENXIO) { @@ -425,7 +433,10 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev= , u16 addr, u8 *mac_addr, if (ret) goto unlock_alu; =20 - ksz_read64(dev, regs[REG_IND_DATA_HI], &buf); + ret =3D ksz_read64(dev, regs[REG_IND_DATA_HI], &buf); + if (ret) + goto unlock_alu; + data_hi =3D (u32)(buf >> 32); data_lo =3D (u32)buf; =20 @@ -446,7 +457,6 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev,= u16 addr, u8 *mac_addr, =20 mac_addr[1] =3D (u8)data_hi; mac_addr[0] =3D (u8)(data_hi >> 8); - ret =3D 0; =20 unlock_alu: mutex_unlock(&dev->alu_mutex); --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7CB64C433FE for ; Mon, 28 Nov 2022 12:03:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231345AbiK1MDq (ORCPT ); Mon, 28 Nov 2022 07:03:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231504AbiK1MAs (ORCPT ); Mon, 28 Nov 2022 07:00:48 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0FE2B1A206 for ; Mon, 28 Nov 2022 04:00:47 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoS-0005LP-UP; Mon, 28 Nov 2022 13:00:40 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoR-000oBV-EY; Mon, 28 Nov 2022 13:00:40 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6R0-H2; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 19/26] net: dsa: microchip: ksz8_r_dyn_mac_table(): use entries variable to signal 0 entries Date: Mon, 28 Nov 2022 13:00:27 +0100 Message-Id: <20221128120034.4075562-20-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" We already have a variable to provide number of entries. So use it, instead of using error number. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 3348f5c25942..31c77e086a9d 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -385,19 +385,11 @@ static int ksz8_valid_dyn_entry(struct ksz_device *de= v, u8 *data) } while ((*data & masks[DYNAMIC_MAC_TABLE_NOT_READY]) && timeout); =20 /* Entry is not ready for accessing. */ - if (*data & masks[DYNAMIC_MAC_TABLE_NOT_READY]) { + if (*data & masks[DYNAMIC_MAC_TABLE_NOT_READY]) return -ETIMEDOUT; - /* Entry is ready for accessing. */ - } else { - ret =3D ksz_read8(dev, regs[REG_IND_DATA_8], data); - if (ret) - return ret; =20 - /* There is no valid entry in the table. */ - if (*data & masks[DYNAMIC_MAC_TABLE_MAC_EMPTY]) - return -ENXIO; - } - return 0; + /* Entry is ready for accessing. */ + return ksz_read8(dev, regs[REG_IND_DATA_8], data); } =20 static int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_= addr, @@ -425,13 +417,13 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *de= v, u16 addr, u8 *mac_addr, goto unlock_alu; =20 ret =3D ksz8_valid_dyn_entry(dev, &data); - if (ret =3D=3D -ENXIO) { - *entries =3D 0; + if (ret) goto unlock_alu; - } =20 - if (ret) + if (data & masks[DYNAMIC_MAC_TABLE_MAC_EMPTY]) { + *entries =3D 0; goto unlock_alu; + } =20 ret =3D ksz_read64(dev, regs[REG_IND_DATA_HI], &buf); if (ret) @@ -997,8 +989,6 @@ int ksz8_fdb_dump(struct ksz_device *dev, int port, u8 src_port; =20 ret =3D ksz8_r_dyn_mac_table(dev, i, mac, &src_port, &entries); - if (ret =3D=3D -ENXIO) - return 0; if (ret) return ret; =20 --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A03C8C433FE for ; Mon, 28 Nov 2022 12:03:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231731AbiK1MDl (ORCPT ); Mon, 28 Nov 2022 07:03:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36264 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231490AbiK1MAq (ORCPT ); Mon, 28 Nov 2022 07:00:46 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D4B2319C3A for ; Mon, 28 Nov 2022 04:00:45 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoR-0005I3-Ff; Mon, 28 Nov 2022 13:00:39 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoP-000oBA-RD; Mon, 28 Nov 2022 13:00:38 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6RD-Js; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 20/26] net: dsa: microchip: make ksz8_r_sta_mac_table() static Date: Mon, 28 Nov 2022 13:00:28 +0100 Message-Id: <20221128120034.4075562-21-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It is used only in ksz8795.c, no need to export it. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8.h | 2 -- drivers/net/dsa/microchip/ksz8795.c | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.h b/drivers/net/dsa/microchip/k= sz8.h index a28fa7cd4d98..ed72ec626593 100644 --- a/drivers/net/dsa/microchip/ksz8.h +++ b/drivers/net/dsa/microchip/ksz8.h @@ -19,8 +19,6 @@ void ksz8_flush_dyn_mac_table(struct ksz_device *dev, int= port); void ksz8_port_setup(struct ksz_device *dev, int port, bool cpu_port); int ksz8_r_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 *val); int ksz8_w_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 val); -int ksz8_r_sta_mac_table(struct ksz_device *dev, u16 addr, - struct alu_struct *alu); void ksz8_w_sta_mac_table(struct ksz_device *dev, u16 addr, struct alu_struct *alu); void ksz8_r_mib_cnt(struct ksz_device *dev, int port, u16 addr, u64 *cnt); diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 31c77e086a9d..1c08103c9f50 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -456,8 +456,8 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev,= u16 addr, u8 *mac_addr, return ret; } =20 -int ksz8_r_sta_mac_table(struct ksz_device *dev, u16 addr, - struct alu_struct *alu) +static int ksz8_r_sta_mac_table(struct ksz_device *dev, u16 addr, + struct alu_struct *alu) { u32 data_hi, data_lo; const u8 *shifts; --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5CAE8C43217 for ; Mon, 28 Nov 2022 12:03:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231695AbiK1MDY (ORCPT ); Mon, 28 Nov 2022 07:03:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36446 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231499AbiK1MAr (ORCPT ); Mon, 28 Nov 2022 07:00:47 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B571918E13 for ; Mon, 28 Nov 2022 04:00:46 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoR-0005J4-RV; Mon, 28 Nov 2022 13:00:39 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoQ-000oBD-6c; Mon, 28 Nov 2022 13:00:38 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6RQ-LY; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 21/26] net: dsa: microchip: ksz8_r_sta_mac_table(): do not use error code for empty entries Date: Mon, 28 Nov 2022 13:00:29 +0100 Message-Id: <20221128120034.4075562-22-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This is a preparation for the next patch, to make use of read/write errors. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 94 +++++++++++++++++------------ 1 file changed, 54 insertions(+), 40 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 1c08103c9f50..b7487be91f67 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -457,7 +457,7 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev,= u16 addr, u8 *mac_addr, } =20 static int ksz8_r_sta_mac_table(struct ksz_device *dev, u16 addr, - struct alu_struct *alu) + struct alu_struct *alu, bool *valid) { u32 data_hi, data_lo; const u8 *shifts; @@ -470,28 +470,32 @@ static int ksz8_r_sta_mac_table(struct ksz_device *de= v, u16 addr, ksz8_r_table(dev, TABLE_STATIC_MAC, addr, &data); data_hi =3D data >> 32; data_lo =3D (u32)data; - if (data_hi & (masks[STATIC_MAC_TABLE_VALID] | - masks[STATIC_MAC_TABLE_OVERRIDE])) { - alu->mac[5] =3D (u8)data_lo; - alu->mac[4] =3D (u8)(data_lo >> 8); - alu->mac[3] =3D (u8)(data_lo >> 16); - alu->mac[2] =3D (u8)(data_lo >> 24); - alu->mac[1] =3D (u8)data_hi; - alu->mac[0] =3D (u8)(data_hi >> 8); - alu->port_forward =3D - (data_hi & masks[STATIC_MAC_TABLE_FWD_PORTS]) >> - shifts[STATIC_MAC_FWD_PORTS]; - alu->is_override =3D - (data_hi & masks[STATIC_MAC_TABLE_OVERRIDE]) ? 1 : 0; - data_hi >>=3D 1; - alu->is_static =3D true; - alu->is_use_fid =3D - (data_hi & masks[STATIC_MAC_TABLE_USE_FID]) ? 1 : 0; - alu->fid =3D (data_hi & masks[STATIC_MAC_TABLE_FID]) >> - shifts[STATIC_MAC_FID]; + + if (!(data_hi & (masks[STATIC_MAC_TABLE_VALID] | + masks[STATIC_MAC_TABLE_OVERRIDE]))) { + *valid =3D false; return 0; } - return -ENXIO; + + alu->mac[5] =3D (u8)data_lo; + alu->mac[4] =3D (u8)(data_lo >> 8); + alu->mac[3] =3D (u8)(data_lo >> 16); + alu->mac[2] =3D (u8)(data_lo >> 24); + alu->mac[1] =3D (u8)data_hi; + alu->mac[0] =3D (u8)(data_hi >> 8); + alu->port_forward =3D + (data_hi & masks[STATIC_MAC_TABLE_FWD_PORTS]) >> + shifts[STATIC_MAC_FWD_PORTS]; + alu->is_override =3D (data_hi & masks[STATIC_MAC_TABLE_OVERRIDE]) ? 1 : 0; + data_hi >>=3D 1; + alu->is_static =3D true; + alu->is_use_fid =3D (data_hi & masks[STATIC_MAC_TABLE_USE_FID]) ? 1 : 0; + alu->fid =3D (data_hi & masks[STATIC_MAC_TABLE_FID]) >> + shifts[STATIC_MAC_FID]; + + *valid =3D true; + + return 0; } =20 void ksz8_w_sta_mac_table(struct ksz_device *dev, u16 addr, @@ -969,12 +973,13 @@ int ksz8_fdb_dump(struct ksz_device *dev, int port, =20 for (i =3D 0; i < dev->info->num_statics; i++) { struct alu_struct alu; + bool valid; =20 - ret =3D ksz8_r_sta_mac_table(dev, i, &alu); - if (ret =3D=3D -ENXIO) - continue; + ret =3D ksz8_r_sta_mac_table(dev, i, &alu, &valid); if (ret) return ret; + if (!valid) + continue; =20 if (!(alu.port_forward & BIT(port))) continue; @@ -1010,20 +1015,25 @@ static int ksz8_add_sta_mac(struct ksz_device *dev,= int port, const unsigned char *addr, u16 vid) { struct alu_struct alu; - int index; + int index, ret; int empty =3D 0; =20 alu.port_forward =3D 0; for (index =3D 0; index < dev->info->num_statics; index++) { - if (!ksz8_r_sta_mac_table(dev, index, &alu)) { - /* Found one already in static MAC table. */ - if (!memcmp(alu.mac, addr, ETH_ALEN) && - alu.fid =3D=3D vid) - break; - /* Remember the first empty entry. */ - } else if (!empty) { - empty =3D index + 1; + bool valid; + + ret =3D ksz8_r_sta_mac_table(dev, index, &alu, &valid); + if (ret) + return ret; + if (!valid) { + /* Remember the first empty entry. */ + if (!empty) + empty =3D index + 1; + continue; } + + if (!memcmp(alu.mac, addr, ETH_ALEN) && alu.fid =3D=3D vid) + break; } =20 /* no available entry */ @@ -1053,15 +1063,19 @@ static int ksz8_del_sta_mac(struct ksz_device *dev,= int port, const unsigned char *addr, u16 vid) { struct alu_struct alu; - int index; + int index, ret; =20 for (index =3D 0; index < dev->info->num_statics; index++) { - if (!ksz8_r_sta_mac_table(dev, index, &alu)) { - /* Found one already in static MAC table. */ - if (!memcmp(alu.mac, addr, ETH_ALEN) && - alu.fid =3D=3D vid) - break; - } + bool valid; + + ret =3D ksz8_r_sta_mac_table(dev, index, &alu, &valid); + if (ret) + return ret; + if (!valid) + continue; + + if (!memcmp(alu.mac, addr, ETH_ALEN) && alu.fid =3D=3D vid) + break; } =20 /* no available entry */ --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EEC7EC43217 for ; Mon, 28 Nov 2022 12:04:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231867AbiK1MEU (ORCPT ); Mon, 28 Nov 2022 07:04:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231531AbiK1MAt (ORCPT ); Mon, 28 Nov 2022 07:00:49 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0386F18B19 for ; Mon, 28 Nov 2022 04:00:49 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoU-0005O5-Cx; Mon, 28 Nov 2022 13:00:42 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoS-000oCB-RO; Mon, 28 Nov 2022 13:00:41 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6Rs-OU; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 22/26] net: dsa: microchip: ksz8_r_sta_mac_table(): make use of error values provided by read/write functions Date: Mon, 28 Nov 2022 13:00:30 +0100 Message-Id: <20221128120034.4075562-23-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Read/write operations may fail. So, make use of return values. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index b7487be91f67..1de33ceb50de 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -336,19 +336,26 @@ void ksz8_port_init_cnt(struct ksz_device *dev, int p= ort) } } =20 -static void ksz8_r_table(struct ksz_device *dev, int table, u16 addr, u64 = *data) +static int ksz8_r_table(struct ksz_device *dev, int table, u16 addr, u64 *= data) { const u16 *regs; u16 ctrl_addr; + int ret; =20 regs =3D dev->info->regs; =20 ctrl_addr =3D IND_ACC_TABLE(table | TABLE_READ) | addr; =20 mutex_lock(&dev->alu_mutex); - ksz_write16(dev, regs[REG_IND_CTRL_0], ctrl_addr); - ksz_read64(dev, regs[REG_IND_DATA_HI], data); + ret =3D ksz_write16(dev, regs[REG_IND_CTRL_0], ctrl_addr); + if (ret) + goto unlock_alu; + + ret =3D ksz_read64(dev, regs[REG_IND_DATA_HI], data); +unlock_alu: mutex_unlock(&dev->alu_mutex); + + return ret; } =20 static void ksz8_w_table(struct ksz_device *dev, int table, u16 addr, u64 = data) @@ -463,11 +470,15 @@ static int ksz8_r_sta_mac_table(struct ksz_device *de= v, u16 addr, const u8 *shifts; const u32 *masks; u64 data; + int ret; =20 shifts =3D dev->info->shifts; masks =3D dev->info->masks; =20 - ksz8_r_table(dev, TABLE_STATIC_MAC, addr, &data); + ret =3D ksz8_r_table(dev, TABLE_STATIC_MAC, addr, &data); + if (ret) + return ret; + data_hi =3D data >> 32; data_lo =3D (u32)data; =20 --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C52F1C433FE for ; Mon, 28 Nov 2022 12:03:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231825AbiK1MDu (ORCPT ); Mon, 28 Nov 2022 07:03:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36448 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231508AbiK1MAs (ORCPT ); Mon, 28 Nov 2022 07:00:48 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 61FF41A20C for ; Mon, 28 Nov 2022 04:00:47 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoT-0005Lk-C9; Mon, 28 Nov 2022 13:00:41 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoR-000oBZ-Pt; Mon, 28 Nov 2022 13:00:40 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6SK-Ra; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 23/26] net: dsa: microchip: make ksz8_w_sta_mac_table() static Date: Mon, 28 Nov 2022 13:00:31 +0100 Message-Id: <20221128120034.4075562-24-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" ksz8_w_sta_mac_table() is used only in ksz8795.c. So, make it static. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8.h | 2 -- drivers/net/dsa/microchip/ksz8795.c | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.h b/drivers/net/dsa/microchip/k= sz8.h index ed72ec626593..e3d1bbde008a 100644 --- a/drivers/net/dsa/microchip/ksz8.h +++ b/drivers/net/dsa/microchip/ksz8.h @@ -19,8 +19,6 @@ void ksz8_flush_dyn_mac_table(struct ksz_device *dev, int= port); void ksz8_port_setup(struct ksz_device *dev, int port, bool cpu_port); int ksz8_r_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 *val); int ksz8_w_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 val); -void ksz8_w_sta_mac_table(struct ksz_device *dev, u16 addr, - struct alu_struct *alu); void ksz8_r_mib_cnt(struct ksz_device *dev, int port, u16 addr, u64 *cnt); void ksz8_r_mib_pkt(struct ksz_device *dev, int port, u16 addr, u64 *dropped, u64 *cnt); diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 1de33ceb50de..9c1450782314 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -509,8 +509,8 @@ static int ksz8_r_sta_mac_table(struct ksz_device *dev,= u16 addr, return 0; } =20 -void ksz8_w_sta_mac_table(struct ksz_device *dev, u16 addr, - struct alu_struct *alu) +static void ksz8_w_sta_mac_table(struct ksz_device *dev, u16 addr, + struct alu_struct *alu) { u32 data_hi, data_lo; const u8 *shifts; --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CA38CC433FE for ; Mon, 28 Nov 2022 12:03:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231756AbiK1MDz (ORCPT ); Mon, 28 Nov 2022 07:03:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231515AbiK1MAs (ORCPT ); Mon, 28 Nov 2022 07:00:48 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C975D18B36 for ; Mon, 28 Nov 2022 04:00:47 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoT-0005Lj-Dm; Mon, 28 Nov 2022 13:00:41 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoR-000oBY-P1; Mon, 28 Nov 2022 13:00:40 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoO-00H6Sp-U8; Mon, 28 Nov 2022 13:00:36 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 24/26] net: dsa: microchip: ksz8_w_sta_mac_table(): make use of error values provided by read/write functions Date: Mon, 28 Nov 2022 13:00:32 +0100 Message-Id: <20221128120034.4075562-25-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Read/write operations may fail. So, make use of return values. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 33 ++++++++++++++++------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 9c1450782314..ea08bdea193e 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -358,19 +358,26 @@ static int ksz8_r_table(struct ksz_device *dev, int t= able, u16 addr, u64 *data) return ret; } =20 -static void ksz8_w_table(struct ksz_device *dev, int table, u16 addr, u64 = data) +static int ksz8_w_table(struct ksz_device *dev, int table, u16 addr, u64 d= ata) { const u16 *regs; u16 ctrl_addr; + int ret; =20 regs =3D dev->info->regs; =20 ctrl_addr =3D IND_ACC_TABLE(table) | addr; =20 mutex_lock(&dev->alu_mutex); - ksz_write64(dev, regs[REG_IND_DATA_HI], data); - ksz_write16(dev, regs[REG_IND_CTRL_0], ctrl_addr); + ret =3D ksz_write64(dev, regs[REG_IND_DATA_HI], data); + if (ret) + goto unlock_alu; + + ret =3D ksz_write16(dev, regs[REG_IND_CTRL_0], ctrl_addr); +unlock_alu: mutex_unlock(&dev->alu_mutex); + + return ret; } =20 static int ksz8_valid_dyn_entry(struct ksz_device *dev, u8 *data) @@ -509,8 +516,8 @@ static int ksz8_r_sta_mac_table(struct ksz_device *dev,= u16 addr, return 0; } =20 -static void ksz8_w_sta_mac_table(struct ksz_device *dev, u16 addr, - struct alu_struct *alu) +static int ksz8_w_sta_mac_table(struct ksz_device *dev, u16 addr, + struct alu_struct *alu) { u32 data_hi, data_lo; const u8 *shifts; @@ -538,7 +545,8 @@ static void ksz8_w_sta_mac_table(struct ksz_device *dev= , u16 addr, data_hi &=3D ~masks[STATIC_MAC_TABLE_OVERRIDE]; =20 data =3D (u64)data_hi << 32 | data_lo; - ksz8_w_table(dev, TABLE_STATIC_MAC, addr, data); + + return ksz8_w_table(dev, TABLE_STATIC_MAC, addr, data); } =20 static void ksz8_from_vlan(struct ksz_device *dev, u32 vlan, u8 *fid, @@ -1065,9 +1073,8 @@ static int ksz8_add_sta_mac(struct ksz_device *dev, i= nt port, /* Need a way to map VID to FID. */ alu.fid =3D vid; } - ksz8_w_sta_mac_table(dev, index, &alu); =20 - return 0; + return ksz8_w_sta_mac_table(dev, index, &alu); } =20 static int ksz8_del_sta_mac(struct ksz_device *dev, int port, @@ -1091,16 +1098,14 @@ static int ksz8_del_sta_mac(struct ksz_device *dev,= int port, =20 /* no available entry */ if (index =3D=3D dev->info->num_statics) - goto exit; + return 0; =20 /* clear port */ alu.port_forward &=3D ~BIT(port); if (!alu.port_forward) alu.is_static =3D false; - ksz8_w_sta_mac_table(dev, index, &alu); =20 -exit: - return 0; + return ksz8_w_sta_mac_table(dev, index, &alu); } =20 int ksz8_mdb_add(struct ksz_device *dev, int port, @@ -1424,9 +1429,7 @@ int ksz8_enable_stp_addr(struct ksz_device *dev) alu.is_override =3D true; alu.port_forward =3D dev->info->cpu_ports; =20 - ksz8_w_sta_mac_table(dev, 0, &alu); - - return 0; + return ksz8_w_sta_mac_table(dev, 0, &alu); } =20 int ksz8_setup(struct dsa_switch *ds) --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BCE22C43217 for ; Mon, 28 Nov 2022 12:04:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231846AbiK1MEE (ORCPT ); Mon, 28 Nov 2022 07:04:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231530AbiK1MAt (ORCPT ); Mon, 28 Nov 2022 07:00:49 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 771071A041 for ; Mon, 28 Nov 2022 04:00:48 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoU-0005Mj-1A; Mon, 28 Nov 2022 13:00:42 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoS-000oBt-EU; Mon, 28 Nov 2022 13:00:41 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoP-00H6TM-03; Mon, 28 Nov 2022 13:00:37 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 25/26] net: dsa: microchip: remove ksz_port:on variable Date: Mon, 28 Nov 2022 13:00:33 +0100 Message-Id: <20221128120034.4075562-26-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The only place where this variable would be set to false is the ksz8_config_cpu_port() function. But it is done in a bogus way: for (i =3D 0; i < dev->phy_port_cnt; i++) { if (i =3D=3D dev->phy_port_cnt) <--- will be never executed. break; p->on =3D 1; So, we never have a situation where p->on =3D 0. In this case, we can just remove it. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8795.c | 20 +------------------- drivers/net/dsa/microchip/ksz_common.h | 1 - 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index ea08bdea193e..618366fadfb5 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -952,7 +952,6 @@ void ksz8_flush_dyn_mac_table(struct ksz_device *dev, i= nt port) { u8 learn[DSA_MAX_PORTS]; int first, index, cnt; - struct ksz_port *p; const u16 *regs; =20 regs =3D dev->info->regs; @@ -966,9 +965,6 @@ void ksz8_flush_dyn_mac_table(struct ksz_device *dev, i= nt port) cnt =3D dev->info->port_cnt; } for (index =3D first; index < cnt; index++) { - p =3D &dev->ports[index]; - if (!p->on) - continue; ksz_pread8(dev, index, regs[P_STP_CTRL], &learn[index]); if (!(learn[index] & PORT_LEARN_DISABLE)) ksz_pwrite8(dev, index, regs[P_STP_CTRL], @@ -976,9 +972,6 @@ void ksz8_flush_dyn_mac_table(struct ksz_device *dev, i= nt port) } ksz_cfg(dev, S_FLUSH_TABLE_CTRL, SW_FLUSH_DYN_MAC_TABLE, true); for (index =3D first; index < cnt; index++) { - p =3D &dev->ports[index]; - if (!p->on) - continue; if (!(learn[index] & PORT_LEARN_DISABLE)) ksz_pwrite8(dev, index, regs[P_STP_CTRL], learn[index]); } @@ -1368,25 +1361,14 @@ void ksz8_config_cpu_port(struct dsa_switch *ds) =20 ksz_cfg(dev, regs[S_TAIL_TAG_CTRL], masks[SW_TAIL_TAG_ENABLE], true); =20 - p =3D &dev->ports[dev->cpu_port]; - p->on =3D 1; - ksz8_port_setup(dev, dev->cpu_port, true); =20 for (i =3D 0; i < dev->phy_port_cnt; i++) { - p =3D &dev->ports[i]; - ksz_port_stp_state_set(ds, i, BR_STATE_DISABLED); - - /* Last port may be disabled. */ - if (i =3D=3D dev->phy_port_cnt) - break; - p->on =3D 1; } for (i =3D 0; i < dev->phy_port_cnt; i++) { p =3D &dev->ports[i]; - if (!p->on) - continue; + if (!ksz_is_ksz88x3(dev)) { ksz_pread8(dev, i, regs[P_REMOTE_STATUS], &remote); if (remote & KSZ8_PORT_FIBER_MODE) diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index 055d61ff3fb8..504ad07842a0 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -87,7 +87,6 @@ struct ksz_port { int stp_state; struct phy_device phydev; =20 - u32 on:1; /* port is not disabled by hardware */ u32 fiber:1; /* port is fiber */ u32 force:1; u32 read:1; /* read MIB counters in background */ --=20 2.30.2 From nobody Fri Sep 19 05:24:06 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F337FC43217 for ; Mon, 28 Nov 2022 12:04:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231855AbiK1MEI (ORCPT ); Mon, 28 Nov 2022 07:04:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36744 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231526AbiK1MAt (ORCPT ); Mon, 28 Nov 2022 07:00:49 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 779371A381 for ; Mon, 28 Nov 2022 04:00:48 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozcoU-0005NI-8C; Mon, 28 Nov 2022 13:00:42 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ozcoS-000oBx-Jr; Mon, 28 Nov 2022 13:00:41 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ozcoP-00H6Th-3L; Mon, 28 Nov 2022 13:00:37 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH v1 26/26] net: dsa: microchip: ksz8: do not force flow control by default Date: Mon, 28 Nov 2022 13:00:34 +0100 Message-Id: <20221128120034.4075562-27-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221128120034.4075562-1-o.rempel@pengutronix.de> References: <20221128120034.4075562-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Make flow control configurable by moving it to ksz8_phylink_mac_link_up() Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz8.h | 4 ++ drivers/net/dsa/microchip/ksz8795.c | 54 ++++++++++++++++++++++---- drivers/net/dsa/microchip/ksz_common.c | 1 + 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.h b/drivers/net/dsa/microchip/k= sz8.h index e3d1bbde008a..77439d9c5fc2 100644 --- a/drivers/net/dsa/microchip/ksz8.h +++ b/drivers/net/dsa/microchip/ksz8.h @@ -56,5 +56,9 @@ int ksz8_switch_detect(struct ksz_device *dev); int ksz8_switch_init(struct ksz_device *dev); void ksz8_switch_exit(struct ksz_device *dev); int ksz8_change_mtu(struct ksz_device *dev, int port, int mtu); +void ksz8_phylink_mac_link_up(struct ksz_device *dev, int port, + unsigned int mode, phy_interface_t interface, + struct phy_device *phydev, int speed, int duplex, + bool tx_pause, bool rx_pause); =20 #endif diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchi= p/ksz8795.c index 618366fadfb5..4782747b7b61 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -1374,12 +1374,52 @@ void ksz8_config_cpu_port(struct dsa_switch *ds) if (remote & KSZ8_PORT_FIBER_MODE) p->fiber =3D 1; } - if (p->fiber) - ksz_port_cfg(dev, i, regs[P_STP_CTRL], - PORT_FORCE_FLOW_CTRL, true); - else - ksz_port_cfg(dev, i, regs[P_STP_CTRL], - PORT_FORCE_FLOW_CTRL, false); + } +} + +void ksz8_phylink_mac_link_up(struct ksz_device *dev, int port, + unsigned int mode, phy_interface_t interface, + struct phy_device *phydev, int speed, int duplex, + bool tx_pause, bool rx_pause) +{ + struct dsa_switch *ds =3D dev->ds; + struct ksz_port *p; + u8 ctrl =3D 0; + + p =3D &dev->ports[port]; + + if (dsa_upstream_port(ds, port)) { + u8 mask =3D SW_HALF_DUPLEX_FLOW_CTRL | SW_HALF_DUPLEX | + SW_FLOW_CTRL | SW_10_MBIT; + + if (duplex) { + if (tx_pause && rx_pause) + ctrl |=3D SW_FLOW_CTRL; + } else { + ctrl |=3D SW_HALF_DUPLEX; + if (tx_pause && rx_pause) + ctrl |=3D SW_HALF_DUPLEX_FLOW_CTRL; + } + + if (speed =3D=3D SPEED_10) + ctrl |=3D SW_10_MBIT; + + ksz_rmw8(dev, REG_SW_CTRL_4, mask, ctrl); + + p->phydev.speed =3D speed; + } else { + const u16 *regs =3D dev->info->regs; + + if (duplex) { + if (tx_pause && rx_pause) + ctrl |=3D PORT_FORCE_FLOW_CTRL; + } else { + if (tx_pause && rx_pause) + ctrl |=3D PORT_BACK_PRESSURE; + } + + ksz_rmw8(dev, regs[P_STP_CTRL], PORT_FORCE_FLOW_CTRL | + PORT_BACK_PRESSURE, ctrl); } } =20 @@ -1431,8 +1471,6 @@ int ksz8_setup(struct dsa_switch *ds) */ ds->vlan_filtering_is_global =3D true; =20 - ksz_cfg(dev, S_REPLACE_VID_CTRL, SW_FLOW_CTRL, true); - /* Enable automatic fast aging when link changed detected. */ ksz_cfg(dev, S_LINK_AGING_CTRL, SW_LINK_AUTO_AGING, true); =20 diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 171cb0063fbf..bfdb4f4f36cc 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -207,6 +207,7 @@ static const struct ksz_dev_ops ksz8_dev_ops =3D { .mirror_add =3D ksz8_port_mirror_add, .mirror_del =3D ksz8_port_mirror_del, .get_caps =3D ksz8_get_caps, + .phylink_mac_link_up =3D ksz8_phylink_mac_link_up, .config_cpu_port =3D ksz8_config_cpu_port, .enable_stp_addr =3D ksz8_enable_stp_addr, .reset =3D ksz8_reset_switch, --=20 2.30.2