From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 734923A4256 for ; Tue, 12 May 2026 13:06:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591201; cv=none; b=DmyILlJMHqAVh4SsKwl3ElX5jdQuCkunoP1AZDJB7gc4AbDiCEBCqngGX5P5mim5s5q7pcdbFqir4mjnumq9bj0bhhD3+Sq7lNlPVAEonljf25nYWkWvT75LjdxAFbLWDAUHrWJEu+lHd6lTrDqgct0Uo1qns/Yf75dsJX9x+FM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591201; c=relaxed/simple; bh=71W9CQ/u8V/IYMtFUt8CnZW9A2VV7G3YlPgnygGV0fE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lnyVO4YWSJfgs2ymLX9iR3oejct9R/mDR30njyoWkXno9FuJzftYNx7fWXBMSlzdhGyaYsVg+wbw/NhwwxVucHMjTCRc2gp2w3rmBs6Gbq/Nt8MXjbBs//6B+YwySUoTK/6J8MBSbzq+t6+oozLvDDHXS5cBJsM9G+DMQ2NehCM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=cXC4KgY9; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="cXC4KgY9" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id CA2361A3580; Tue, 12 May 2026 13:06:37 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 96BD560646; Tue, 12 May 2026 13:06:37 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 3CA1B11AF883A; Tue, 12 May 2026 15:06:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591196; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=xtR3PbQ8LkC7/BxqrO5iWBMQ/JhzVCinCp73MwwnS80=; b=cXC4KgY9qx8Xpf08GkJXaJt8PAEOCe+NhcLLgW6+j4a9xul4lv4rsPejMeHtMWhNjRUZbX F4VrNz3339hJBNtOFHcoNewZEZCdDroVbkZ/2uXgWGYtY177aKIKTeakO1aKpDYymHPLGM EW1oornrPz6+DY/mIDDsSfJIlQHExmbZt/hobrkFYAFu0NEBCG9P9JJ1LimQO5qldhDJpG 8AXMqVRQ2HfObgVQmIoCz1Exr2gHPMO0qVw9uzY2CTySpye/SZOF7xaqXbSkFyrJ9xk59A LhJ13PgEXW/4cw2IRS0u6af3TW+JYcd5NZNOI9Ow13n2X6cYRjTvbgH8bHAJEw== From: "Bastien Curutchet (Schneider Electric)" Date: Tue, 12 May 2026 15:06:23 +0200 Subject: [PATCH net-next 01/15] net: dsa: microchip: remove unused phylink_mac_link_up() callback Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-1-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 ksz_dev_ops::phylink_mac_link_up() isn't used anywhere. Remove it. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz_common.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index 3dde7e7717272..0ab3b4f96595a 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -444,11 +444,6 @@ struct ksz_dev_ops { u8 data); void (*freeze_mib)(struct ksz_device *dev, int port, bool freeze); void (*port_init_cnt)(struct ksz_device *dev, int port); - void (*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); void (*setup_rgmii_delay)(struct ksz_device *dev, int port); int (*tc_cbs_set_cinc)(struct ksz_device *dev, int port, u32 val); void (*config_cpu_port)(struct dsa_switch *ds); --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4546E3A427C for ; Tue, 12 May 2026 13:06:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591203; cv=none; b=pj+1izon2EpxoDc7dTrp5K9VaHxOtDEcNrZzPebOjq9Mf0/5NgRP7LlFyYpLAvD4ga9Q1rMmz5/+6gR9uMrV5kY61yR8sAfArVHmchm4FO3LAjI6ipl8QeTk3KBSy2+sMJg1HnSRaPYZeZxs5X1FMq9DwVAbd+nqDoaXxDrbX+Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591203; c=relaxed/simple; bh=7B7AGQrD1kEL8db3XiLCKDD0mXEAaLjaqYFu4a1l3kU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Dllh7eN8Pr8X72nzz2HKVS/BbfYHiwgnVluCFzSfmoKSQ1klrsVqkSlcUUnjoKwFO5BNUA45PMIY/HsXRyguLybvVo97DRrnTtVBHxBNO0CfBUjGjE5haRctCFZdMNcAZu1Im43iPmKMw0YuGAAEh6sqoBPPXVyuVULmPROUHUU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=JEcNjkvT; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="JEcNjkvT" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id D77A4C5E17B; Tue, 12 May 2026 13:07:29 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id DCF8760646; Tue, 12 May 2026 13:06:39 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id ECBDE11AF88B7; Tue, 12 May 2026 15:06:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591198; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=0/WB3khgGIiKSUkApt5XvxjvEWTRSU1iYvJD6kX/t98=; b=JEcNjkvTv7j4yuPDdPNCM3EYYEtgzDoBTLQqOKwRkPoYRZNs54NSe9gm86WpdlXylWFWfI bZ54xbEk4X2oPqW4tdXcXbidDdvIhquXUdS9l9evqEY5iXxtdvp/1PonKVH/r7p7I4UP1U Ujdb3UhuHmAw3ot9rU4WZDLi1URJtHMAmGRmBGGcIZ0C43k0eAjiTPMfAemdIRhhn4UyXF C2Eget/GKU6F/jWpowETaOyBr/F5kJpd+O2I7o9oxc8vFtJ71pHV3IUGobfewc3dhZQJxK CIQjEoZ43BmyA87UhEYagyMDwIPWgCExbJ0K8FGsODQL5d0kvIJT0ehcSXN3cg== From: Bastien Curutchet Date: Tue, 12 May 2026 15:06:24 +0200 Subject: [PATCH net-next 02/15] net: dsa: microchip: bypass dev_ops for FDB ageing operations Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-2-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" , Vladimir Oltean X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 From: Vladimir Oltean dsa_switch_ops :: set_ageing_time() goes through ksz_set_ageing_time(), further dispatched through ksz_dev_ops :: set_ageing_time(). Only ksz9477 and lan937x provide an implementation for this, so remove the (optional) method from ksz8463_switch_ops, ksz87xx_switch_ops, ksz88xx_switch_ops. Also, hook up ksz9477 and lan937x dsa_switch_ops directly to their respective implementations. Every switch family provides a dsa_switch_ops :: port_fast_age() implementation, which is dispatched through ksz_dev_ops :: flush_dyn_mac_table(). Remove the dev_ops indirection and connect the flush_dyn_mac_table() methods directly to their respective dsa_switch_ops. Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 15 +++++---------- drivers/net/dsa/microchip/ksz9477.c | 12 ++++++------ drivers/net/dsa/microchip/ksz9477.h | 2 +- drivers/net/dsa/microchip/ksz_common.c | 17 ----------------- drivers/net/dsa/microchip/ksz_common.h | 4 ---- drivers/net/dsa/microchip/lan937x_main.c | 9 ++++----- 6 files changed, 16 insertions(+), 43 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index abee0dc5ec04b..10ab89ff93b65 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -1278,8 +1278,9 @@ static void ksz8_cfg_port_member(struct ksz_device *d= ev, int port, u8 member) ksz_pwrite8(dev, port, offset, data); } =20 -static void ksz8_flush_dyn_mac_table(struct ksz_device *dev, int port) +static void ksz8_flush_dyn_mac_table(struct dsa_switch *ds, int port) { + struct ksz_device *dev =3D ds->priv; u8 learn[DSA_MAX_PORTS]; int first, index, cnt; const u16 *regs; @@ -2201,7 +2202,6 @@ const struct ksz_dev_ops ksz8463_dev_ops =3D { .setup =3D ksz8_setup, .get_port_addr =3D ksz8463_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, - .flush_dyn_mac_table =3D ksz8_flush_dyn_mac_table, .port_setup =3D ksz8_port_setup, .r_phy =3D ksz8463_r_phy, .w_phy =3D ksz8463_w_phy, @@ -2233,7 +2233,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops =3D { .setup =3D ksz8_setup, .get_port_addr =3D ksz8_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, - .flush_dyn_mac_table =3D ksz8_flush_dyn_mac_table, .port_setup =3D ksz8_port_setup, .r_phy =3D ksz8_r_phy, .w_phy =3D ksz8_w_phy, @@ -2268,7 +2267,6 @@ const struct ksz_dev_ops ksz88xx_dev_ops =3D { .setup =3D ksz8_setup, .get_port_addr =3D ksz8_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, - .flush_dyn_mac_table =3D ksz8_flush_dyn_mac_table, .port_setup =3D ksz8_port_setup, .r_phy =3D ksz8_r_phy, .w_phy =3D ksz8_w_phy, @@ -2309,7 +2307,6 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .phy_write =3D ksz_phy_write16, .phylink_get_caps =3D ksz_phylink_get_caps, .port_setup =3D ksz_port_setup, - .set_ageing_time =3D ksz_set_ageing_time, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, .get_sset_count =3D ksz_sset_count, @@ -2322,7 +2319,7 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .port_teardown =3D ksz_port_teardown, .port_pre_bridge_flags =3D ksz_port_pre_bridge_flags, .port_bridge_flags =3D ksz_port_bridge_flags, - .port_fast_age =3D ksz_port_fast_age, + .port_fast_age =3D ksz8_flush_dyn_mac_table, .port_vlan_filtering =3D ksz_port_vlan_filtering, .port_vlan_add =3D ksz_port_vlan_add, .port_vlan_del =3D ksz_port_vlan_del, @@ -2370,7 +2367,6 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .phy_write =3D ksz_phy_write16, .phylink_get_caps =3D ksz_phylink_get_caps, .port_setup =3D ksz_port_setup, - .set_ageing_time =3D ksz_set_ageing_time, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, .get_sset_count =3D ksz_sset_count, @@ -2383,7 +2379,7 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .port_teardown =3D ksz_port_teardown, .port_pre_bridge_flags =3D ksz_port_pre_bridge_flags, .port_bridge_flags =3D ksz_port_bridge_flags, - .port_fast_age =3D ksz_port_fast_age, + .port_fast_age =3D ksz8_flush_dyn_mac_table, .port_vlan_filtering =3D ksz_port_vlan_filtering, .port_vlan_add =3D ksz_port_vlan_add, .port_vlan_del =3D ksz_port_vlan_del, @@ -2431,7 +2427,6 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .phy_write =3D ksz_phy_write16, .phylink_get_caps =3D ksz_phylink_get_caps, .port_setup =3D ksz_port_setup, - .set_ageing_time =3D ksz_set_ageing_time, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, .get_sset_count =3D ksz_sset_count, @@ -2444,7 +2439,7 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .port_teardown =3D ksz_port_teardown, .port_pre_bridge_flags =3D ksz_port_pre_bridge_flags, .port_bridge_flags =3D ksz_port_bridge_flags, - .port_fast_age =3D ksz_port_fast_age, + .port_fast_age =3D ksz8_flush_dyn_mac_table, .port_vlan_filtering =3D ksz_port_vlan_filtering, .port_vlan_add =3D ksz_port_vlan_add, .port_vlan_del =3D ksz_port_vlan_del, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index ac2c63fe0588c..11e6fd1f46ce0 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -604,8 +604,9 @@ void ksz9477_cfg_port_member(struct ksz_device *dev, in= t port, u8 member) ksz_pwrite32(dev, port, REG_PORT_VLAN_MEMBERSHIP__4, member); } =20 -void ksz9477_flush_dyn_mac_table(struct ksz_device *dev, int port) +void ksz9477_flush_dyn_mac_table(struct dsa_switch *ds, int port) { + struct ksz_device *dev =3D ds->priv; const u16 *regs =3D dev->info->regs; u8 data; =20 @@ -1170,8 +1171,9 @@ static void ksz9477_get_caps(struct ksz_device *dev, = int port, } } =20 -static int ksz9477_set_ageing_time(struct ksz_device *dev, unsigned int ms= ecs) +static int ksz9477_set_ageing_time(struct dsa_switch *ds, unsigned int mse= cs) { + struct ksz_device *dev =3D ds->priv; u32 secs =3D msecs / 1000; u8 data, mult, value; u32 max_val; @@ -1769,9 +1771,7 @@ const struct ksz_dev_ops ksz9477_dev_ops =3D { .setup =3D ksz9477_setup, .get_port_addr =3D ksz9477_get_port_addr, .cfg_port_member =3D ksz9477_cfg_port_member, - .flush_dyn_mac_table =3D ksz9477_flush_dyn_mac_table, .port_setup =3D ksz9477_port_setup, - .set_ageing_time =3D ksz9477_set_ageing_time, .r_phy =3D ksz9477_r_phy, .w_phy =3D ksz9477_w_phy, .r_mib_cnt =3D ksz9477_r_mib_cnt, @@ -1813,7 +1813,7 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .phy_write =3D ksz_phy_write16, .phylink_get_caps =3D ksz_phylink_get_caps, .port_setup =3D ksz_port_setup, - .set_ageing_time =3D ksz_set_ageing_time, + .set_ageing_time =3D ksz9477_set_ageing_time, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, .get_sset_count =3D ksz_sset_count, @@ -1826,7 +1826,7 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .port_teardown =3D ksz_port_teardown, .port_pre_bridge_flags =3D ksz_port_pre_bridge_flags, .port_bridge_flags =3D ksz_port_bridge_flags, - .port_fast_age =3D ksz_port_fast_age, + .port_fast_age =3D ksz9477_flush_dyn_mac_table, .port_vlan_filtering =3D ksz_port_vlan_filtering, .port_vlan_add =3D ksz_port_vlan_add, .port_vlan_del =3D ksz_port_vlan_del, diff --git a/drivers/net/dsa/microchip/ksz9477.h b/drivers/net/dsa/microchi= p/ksz9477.h index bacadcbc478cc..8012904a21308 100644 --- a/drivers/net/dsa/microchip/ksz9477.h +++ b/drivers/net/dsa/microchip/ksz9477.h @@ -13,7 +13,7 @@ =20 u32 ksz9477_get_port_addr(int port, int offset); void ksz9477_cfg_port_member(struct ksz_device *dev, int port, u8 member); -void ksz9477_flush_dyn_mac_table(struct ksz_device *dev, int port); +void ksz9477_flush_dyn_mac_table(struct dsa_switch *ds, int port); void ksz9477_r_mib_cnt(struct ksz_device *dev, int port, u16 addr, u64 *cn= t); void ksz9477_r_mib_pkt(struct ksz_device *dev, int port, u16 addr, u64 *dropped, u64 *cnt); diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 426414a218455..cfca29007e36b 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3085,23 +3085,6 @@ void ksz_port_bridge_leave(struct dsa_switch *ds, in= t port, */ } =20 -void ksz_port_fast_age(struct dsa_switch *ds, int port) -{ - struct ksz_device *dev =3D ds->priv; - - dev->dev_ops->flush_dyn_mac_table(dev, port); -} - -int ksz_set_ageing_time(struct dsa_switch *ds, unsigned int msecs) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->dev_ops->set_ageing_time) - return -EOPNOTSUPP; - - return dev->dev_ops->set_ageing_time(dev, msecs); -} - int ksz_port_fdb_add(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid, struct dsa_db db) diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index 0ab3b4f96595a..80b3f2483e36d 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -363,9 +363,7 @@ struct ksz_dev_ops { void (*teardown)(struct dsa_switch *ds); u32 (*get_port_addr)(int port, int offset); void (*cfg_port_member)(struct ksz_device *dev, int port, u8 member); - void (*flush_dyn_mac_table)(struct ksz_device *dev, int port); void (*port_setup)(struct ksz_device *dev, int port, bool cpu_port); - int (*set_ageing_time)(struct ksz_device *dev, unsigned int msecs); =20 /** * @mdio_bus_preinit: Function pointer to pre-initialize the MDIO bus @@ -515,8 +513,6 @@ int ksz_port_vlan_add(struct dsa_switch *ds, int port, struct netlink_ext_ack *extack); int ksz_port_vlan_del(struct dsa_switch *ds, int port, const struct switchdev_obj_port_vlan *vlan); -void ksz_port_fast_age(struct dsa_switch *ds, int port); -int ksz_set_ageing_time(struct dsa_switch *ds, unsigned int msecs); int ksz_port_fdb_add(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid, struct dsa_db db); diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index e522990cce22e..19e444cb0a74a 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -461,8 +461,9 @@ static int lan937x_change_mtu(struct ksz_device *dev, i= nt port, int new_mtu) return 0; } =20 -static int lan937x_set_ageing_time(struct ksz_device *dev, unsigned int ms= ecs) +static int lan937x_set_ageing_time(struct dsa_switch *ds, unsigned int mse= cs) { + struct ksz_device *dev =3D ds->priv; u8 data, mult, value8; bool in_msec =3D false; u32 max_val, value; @@ -702,9 +703,7 @@ const struct ksz_dev_ops lan937x_dev_ops =3D { .teardown =3D lan937x_teardown, .get_port_addr =3D ksz9477_get_port_addr, .cfg_port_member =3D ksz9477_cfg_port_member, - .flush_dyn_mac_table =3D ksz9477_flush_dyn_mac_table, .port_setup =3D lan937x_port_setup, - .set_ageing_time =3D lan937x_set_ageing_time, .mdio_bus_preinit =3D lan937x_mdio_bus_preinit, .create_phy_addr_map =3D lan937x_create_phy_addr_map, .r_phy =3D lan937x_r_phy, @@ -745,7 +744,7 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .phy_write =3D ksz_phy_write16, .phylink_get_caps =3D ksz_phylink_get_caps, .port_setup =3D ksz_port_setup, - .set_ageing_time =3D ksz_set_ageing_time, + .set_ageing_time =3D lan937x_set_ageing_time, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, .get_sset_count =3D ksz_sset_count, @@ -758,7 +757,7 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .port_teardown =3D ksz_port_teardown, .port_pre_bridge_flags =3D ksz_port_pre_bridge_flags, .port_bridge_flags =3D ksz_port_bridge_flags, - .port_fast_age =3D ksz_port_fast_age, + .port_fast_age =3D ksz9477_flush_dyn_mac_table, .port_vlan_filtering =3D ksz_port_vlan_filtering, .port_vlan_add =3D ksz_port_vlan_add, .port_vlan_del =3D ksz_port_vlan_del, --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 109253A7D6C for ; Tue, 12 May 2026 13:06:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591205; cv=none; b=fqRjjw4GzxS+R/MzF/F/rSPETqWxq7O+pYFBFT9cuI0wlm8eZWkotCLisZVoUAL9y1y9ZZWasW/fkzOcrJYX8VQppJnNl4bhxwiaF50FdYKFkeOhxtN5oiE9MsZlq1dWMxYkY4+1lvEEwJo22WzILaTm6r5O5Nrz8qAtz5ZuAkc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591205; c=relaxed/simple; bh=P5cb/SjaUr0s4lFVoqM0dRnXHwfEXlzzATfg0MdfsFc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ocDllRvtkx+mx99lA5ARswYQKt5J5DLPGWqaKD6hc47wbICY812MpZ1y8aJY1vjDNutjrWt4FDLJxP73HNwAnmD0D9VukVwv7oXLZ7Ufk+sDy6uZ/jq5kYbFwrpFxdXssE+wM6tH7BL4QCFDqnbaC3/+U1axXw3q+LuMvSEo0nY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=OVnexRTV; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="OVnexRTV" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 3A4AC1A3584; Tue, 12 May 2026 13:06:42 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 0EEE560646; Tue, 12 May 2026 13:06:42 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 2AA3211AF8CCD; Tue, 12 May 2026 15:06:39 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591200; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=/t2ZMXBql4PpayUhBsLupcYfIHY/7tMm/L5V8tBA7MU=; b=OVnexRTVD7ZpUyj45SxE4jcBkwTYGN2wZTbDSMpgTWsrHBMsXm+iBPbWHxAlC8qwT4qyMl x9u4+hmbg0T6zLoJf/A50KR1M+X1dWl/+dJ3iVnbbjHAQcmWfYYnT7RjcQYXUGZ754uVZg WLgegGtjz+Asqkh1FWU3dHIaIpFrrCUJTJazMZCXDuS3cYg0jyolRO//2o8ZlHZdIq+3UG EBaDCuAN7pkomGFSzDwiwzpjDLyrZk5I1zwHT5dUtNYa0uZ51mNmvcq4kmxVQ6d1/McmY6 2gAfD7IAnDRWQWFgNL1l77asR0wGkdWtQvvAt6/x2lBo0qLqDjbAusEqOZbuAQ== From: Bastien Curutchet Date: Tue, 12 May 2026 15:06:25 +0200 Subject: [PATCH net-next 03/15] net: dsa: microchip: bypass dev_ops for change_mtu() operation Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-3-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" , Vladimir Oltean X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 From: Vladimir Oltean MTU changing is done through a common function that redirects the treatment to a specific ksz_dev_ops callback. This layer of indirection isn't needed since we now have a dsa_switch_ops struct for each switch family. Remove this indirection layer in MTU changing for KSZ switches, by directly connecting the ksz_dev_ops :: change_mtu() implementations to dsa_switch_ops. Remove the no longer used change_mtu() callback from ksz_dev_ops Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 12 +++++------- drivers/net/dsa/microchip/ksz9477.c | 6 +++--- drivers/net/dsa/microchip/ksz_common.c | 10 ---------- drivers/net/dsa/microchip/ksz_common.h | 2 -- drivers/net/dsa/microchip/lan937x_main.c | 7 +++---- 5 files changed, 11 insertions(+), 26 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 10ab89ff93b65..dd603e7f1a639 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -188,8 +188,9 @@ static int ksz8795_change_mtu(struct ksz_device *dev, i= nt frame_size) return ksz_rmw8(dev, REG_SW_CTRL_2, SW_LEGAL_PACKET_DISABLE, ctrl2); } =20 -static int ksz8_change_mtu(struct ksz_device *dev, int port, int mtu) +static int ksz8_change_mtu(struct dsa_switch *ds, int port, int mtu) { + struct ksz_device *dev =3D ds->priv; u16 frame_size; =20 if (!dsa_is_cpu_port(dev->ds, port)) @@ -2226,7 +2227,6 @@ const struct ksz_dev_ops ksz8463_dev_ops =3D { .reset =3D ksz8_reset_switch, .init =3D ksz8_switch_init, .exit =3D ksz8_switch_exit, - .change_mtu =3D ksz8_change_mtu, }; =20 const struct ksz_dev_ops ksz87xx_dev_ops =3D { @@ -2257,7 +2257,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops =3D { .reset =3D ksz8_reset_switch, .init =3D ksz8_switch_init, .exit =3D ksz8_switch_exit, - .change_mtu =3D ksz8_change_mtu, .pme_write8 =3D ksz8_pme_write8, .pme_pread8 =3D ksz8_pme_pread8, .pme_pwrite8 =3D ksz8_pme_pwrite8, @@ -2291,7 +2290,6 @@ const struct ksz_dev_ops ksz88xx_dev_ops =3D { .reset =3D ksz8_reset_switch, .init =3D ksz8_switch_init, .exit =3D ksz8_switch_exit, - .change_mtu =3D ksz8_change_mtu, .pme_write8 =3D ksz8_pme_write8, .pme_pread8 =3D ksz8_pme_pread8, .pme_pwrite8 =3D ksz8_pme_pwrite8, @@ -2332,7 +2330,7 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .port_mirror_del =3D ksz_port_mirror_del, .get_stats64 =3D ksz_get_stats64, .get_pause_stats =3D ksz_get_pause_stats, - .port_change_mtu =3D ksz_change_mtu, + .port_change_mtu =3D ksz8_change_mtu, .port_max_mtu =3D ksz_max_mtu, .get_wol =3D ksz_get_wol, .set_wol =3D ksz_set_wol, @@ -2392,7 +2390,7 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .port_mirror_del =3D ksz_port_mirror_del, .get_stats64 =3D ksz_get_stats64, .get_pause_stats =3D ksz_get_pause_stats, - .port_change_mtu =3D ksz_change_mtu, + .port_change_mtu =3D ksz8_change_mtu, .port_max_mtu =3D ksz_max_mtu, .get_wol =3D ksz_get_wol, .set_wol =3D ksz_set_wol, @@ -2452,7 +2450,7 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .port_mirror_del =3D ksz_port_mirror_del, .get_stats64 =3D ksz_get_stats64, .get_pause_stats =3D ksz_get_pause_stats, - .port_change_mtu =3D ksz_change_mtu, + .port_change_mtu =3D ksz8_change_mtu, .port_max_mtu =3D ksz_max_mtu, .get_wol =3D ksz_get_wol, .set_wol =3D ksz_set_wol, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index 11e6fd1f46ce0..f21a05a86b483 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -45,8 +45,9 @@ static void ksz9477_port_cfg32(struct ksz_device *dev, in= t port, int offset, bits, set ? bits : 0); } =20 -static int ksz9477_change_mtu(struct ksz_device *dev, int port, int mtu) +static int ksz9477_change_mtu(struct dsa_switch *ds, int port, int mtu) { + struct ksz_device *dev =3D ds->priv; u16 frame_size; =20 if (!dsa_is_cpu_port(dev->ds, port)) @@ -1790,7 +1791,6 @@ const struct ksz_dev_ops ksz9477_dev_ops =3D { .fdb_del =3D ksz9477_fdb_del, .mdb_add =3D ksz9477_mdb_add, .mdb_del =3D ksz9477_mdb_del, - .change_mtu =3D ksz9477_change_mtu, .pme_write8 =3D ksz_write8, .pme_pread8 =3D ksz_pread8, .pme_pwrite8 =3D ksz_pwrite8, @@ -1839,7 +1839,7 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .port_mirror_del =3D ksz_port_mirror_del, .get_stats64 =3D ksz_get_stats64, .get_pause_stats =3D ksz_get_pause_stats, - .port_change_mtu =3D ksz_change_mtu, + .port_change_mtu =3D ksz9477_change_mtu, .port_max_mtu =3D ksz_max_mtu, .get_wol =3D ksz_get_wol, .set_wol =3D ksz_set_wol, diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index cfca29007e36b..eb13d548ebff9 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3342,16 +3342,6 @@ void ksz_port_mirror_del(struct dsa_switch *ds, int = port, dev->dev_ops->mirror_del(dev, port, mirror); } =20 -int ksz_change_mtu(struct dsa_switch *ds, int port, int mtu) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->dev_ops->change_mtu) - return -EOPNOTSUPP; - - return dev->dev_ops->change_mtu(dev, port, mtu); -} - int ksz_max_mtu(struct dsa_switch *ds, int port) { struct ksz_device *dev =3D ds->priv; diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index 80b3f2483e36d..0aa83c75c40a1 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -434,7 +434,6 @@ struct ksz_dev_ops { struct dsa_db db); void (*get_caps)(struct ksz_device *dev, int port, struct phylink_config *config); - int (*change_mtu)(struct ksz_device *dev, int port, int mtu); int (*pme_write8)(struct ksz_device *dev, u32 reg, u8 value); int (*pme_pread8)(struct ksz_device *dev, int port, int offset, u8 *data); @@ -545,7 +544,6 @@ int ksz_port_mirror_add(struct dsa_switch *ds, int port, bool ingress, struct netlink_ext_ack *extack); void ksz_port_mirror_del(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror); -int ksz_change_mtu(struct dsa_switch *ds, int port, int mtu); int ksz_max_mtu(struct dsa_switch *ds, int port); =20 bool ksz_support_eee(struct dsa_switch *ds, int port); diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index 19e444cb0a74a..feaaaafeace61 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -430,9 +430,9 @@ static void lan937x_config_cpu_port(struct dsa_switch *= ds) } } =20 -static int lan937x_change_mtu(struct ksz_device *dev, int port, int new_mt= u) +static int lan937x_change_mtu(struct dsa_switch *ds, int port, int new_mtu) { - struct dsa_switch *ds =3D dev->ds; + struct ksz_device *dev =3D ds->priv; int ret; =20 new_mtu +=3D VLAN_ETH_HLEN + ETH_FCS_LEN; @@ -725,7 +725,6 @@ const struct ksz_dev_ops lan937x_dev_ops =3D { .fdb_del =3D ksz9477_fdb_del, .mdb_add =3D ksz9477_mdb_add, .mdb_del =3D ksz9477_mdb_del, - .change_mtu =3D lan937x_change_mtu, .config_cpu_port =3D lan937x_config_cpu_port, .tc_cbs_set_cinc =3D lan937x_tc_cbs_set_cinc, .enable_stp_addr =3D ksz9477_enable_stp_addr, @@ -770,7 +769,7 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .port_mirror_del =3D ksz_port_mirror_del, .get_stats64 =3D ksz_get_stats64, .get_pause_stats =3D ksz_get_pause_stats, - .port_change_mtu =3D ksz_change_mtu, + .port_change_mtu =3D lan937x_change_mtu, .port_max_mtu =3D ksz_max_mtu, .get_wol =3D ksz_get_wol, .set_wol =3D ksz_set_wol, --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9A9663A8394; Tue, 12 May 2026 13:06:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591207; cv=none; b=d5ENlTqxOp364296gnl5hVSkrQ2tK6hblo+kkbHTTjO5+S8AlIcwAG8tsVk1QCq56gn3t+vff1ntqScxq8Sdg4VIYa5x3x4PO+YhIKbn9ymx9SWLppOO6zuknvczzBhRGSPdz8YAkh/HUQmIqnkpc4NxbaWD2mRNJ0y9nXeSosw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591207; c=relaxed/simple; bh=zrG7OnJ8FAqW9inZV1Xnuwu3wfypryhSZi3QxYxj4fY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TBC8FMJ0ErywNKrQeUBC5UxjD+Wi6qpM4inPPN5UV+9yNfRRE7k2Vt9uDZVTlJHWtIESBB0DTaBmzFpBr143a8HyTO04MQ0Afddg2QPXGFcmlzGnZYNutSx/vjCs/XRoFQzytYRTBHodRZEXunvBQVe6zRSw3MApUG48YklGwbI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=NxvLNcoi; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="NxvLNcoi" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 740C01A357C; Tue, 12 May 2026 13:06:44 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 4798060646; Tue, 12 May 2026 13:06:44 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 5B1EE11AF876D; Tue, 12 May 2026 15:06:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591203; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=bNSGVI/sPc42OgzF8eEDnrj+ujuWgH0NzgeCRtD/N68=; b=NxvLNcoiy5k0BMFWtG3XbAqEowBD01dp2at2Cc91gd27VonU717nXqkxD8Eb+2H4BZm4a2 Eyotl8ZCD2CAK4aIPieOphgztDooOOq+OgYVUPNDUHsXEszpJVnZXxACuLo5BRB2d3skVL XaxvK+fkhPKHfsZMyk0bceXQXDSnhOYWH9DU2tl4F1yRdsVkbSCSd6iIFQp4ADI4vGs/jU pDmhzeixpdcJhMpCBzn1W9YYI0gw5seuGo7W6K23EbPcq4b+31ejppcRJTGIzR/Py1Ooz9 R1VO7L07q2opKNMX49oOvipsN94lUUJrFezUKiime4+LzY17SB5ih3XFExGmkA== From: Bastien Curutchet Date: Tue, 12 May 2026 15:06:26 +0200 Subject: [PATCH net-next 04/15] net: dsa: microchip: bypass dev_ops for VLAN operations Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-4-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" , Vladimir Oltean X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 From: Vladimir Oltean VLAN operations are handled through a common function that redirects the treatment to ksz_dev_ops callbacks. This level of indirection isn't needed since we now have a dsa_switch_ops for each kind of switch. Remove this useless layer of indirection by connecting directly the VLAN operations to the relevant dsa_switch_ops. Adapt their prototypes to match dsa_switch_ops expectations. Remove the now unused VLAN callbacks from ksz_dev_ops. Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 39 ++++++++++++++--------------= ---- drivers/net/dsa/microchip/ksz9477.c | 21 +++++++++-------- drivers/net/dsa/microchip/ksz9477.h | 6 ++--- drivers/net/dsa/microchip/ksz_common.c | 34 ---------------------------- drivers/net/dsa/microchip/ksz_common.h | 14 ------------ drivers/net/dsa/microchip/lan937x_main.c | 9 +++----- 6 files changed, 34 insertions(+), 89 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index dd603e7f1a639..94c8034a192a9 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -1446,9 +1446,11 @@ static int ksz8_fdb_del(struct ksz_device *dev, int = port, return ksz8_del_sta_mac(dev, port, addr, vid); } =20 -static int ksz8_port_vlan_filtering(struct ksz_device *dev, int port, bool= flag, +static int ksz8_port_vlan_filtering(struct dsa_switch *ds, int port, bool = flag, struct netlink_ext_ack *extack) { + struct ksz_device *dev =3D ds->priv; + if (ksz_is_ksz88x3(dev) || ksz_is_ksz8463(dev)) return -ENOTSUPP; =20 @@ -1476,11 +1478,12 @@ static void ksz8_port_enable_pvid(struct ksz_device= *dev, int port, bool state) } } =20 -static int ksz8_port_vlan_add(struct ksz_device *dev, int port, +static int ksz8_port_vlan_add(struct dsa_switch *ds, int port, const struct switchdev_obj_port_vlan *vlan, struct netlink_ext_ack *extack) { bool untagged =3D vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED; + struct ksz_device *dev =3D ds->priv; struct ksz_port *p =3D &dev->ports[port]; u16 data, new_pvid =3D 0; u8 fid, member, valid; @@ -1548,11 +1551,12 @@ static int ksz8_port_vlan_add(struct ksz_device *de= v, int port, return 0; } =20 -static int ksz8_port_vlan_del(struct ksz_device *dev, int port, +static int ksz8_port_vlan_del(struct dsa_switch *ds, int port, const struct switchdev_obj_port_vlan *vlan) { - u16 data, pvid; + struct ksz_device *dev =3D ds->priv; u8 fid, member, valid; + u16 data, pvid; =20 if (ksz_is_ksz88x3(dev) || ksz_is_ksz8463(dev)) return -ENOTSUPP; @@ -2216,9 +2220,6 @@ const struct ksz_dev_ops ksz8463_dev_ops =3D { .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, - .vlan_add =3D ksz8_port_vlan_add, - .vlan_del =3D ksz8_port_vlan_del, .mirror_add =3D ksz8_port_mirror_add, .mirror_del =3D ksz8_port_mirror_del, .get_caps =3D ksz8_get_caps, @@ -2246,9 +2247,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops =3D { .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, - .vlan_add =3D ksz8_port_vlan_add, - .vlan_del =3D ksz8_port_vlan_del, .mirror_add =3D ksz8_port_mirror_add, .mirror_del =3D ksz8_port_mirror_del, .get_caps =3D ksz8_get_caps, @@ -2279,9 +2277,6 @@ const struct ksz_dev_ops ksz88xx_dev_ops =3D { .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, - .vlan_add =3D ksz8_port_vlan_add, - .vlan_del =3D ksz8_port_vlan_del, .mirror_add =3D ksz8_port_mirror_add, .mirror_del =3D ksz8_port_mirror_del, .get_caps =3D ksz8_get_caps, @@ -2318,9 +2313,9 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .port_pre_bridge_flags =3D ksz_port_pre_bridge_flags, .port_bridge_flags =3D ksz_port_bridge_flags, .port_fast_age =3D ksz8_flush_dyn_mac_table, - .port_vlan_filtering =3D ksz_port_vlan_filtering, - .port_vlan_add =3D ksz_port_vlan_add, - .port_vlan_del =3D ksz_port_vlan_del, + .port_vlan_filtering =3D ksz8_port_vlan_filtering, + .port_vlan_add =3D ksz8_port_vlan_add, + .port_vlan_del =3D ksz8_port_vlan_del, .port_fdb_dump =3D ksz_port_fdb_dump, .port_fdb_add =3D ksz_port_fdb_add, .port_fdb_del =3D ksz_port_fdb_del, @@ -2378,9 +2373,9 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .port_pre_bridge_flags =3D ksz_port_pre_bridge_flags, .port_bridge_flags =3D ksz_port_bridge_flags, .port_fast_age =3D ksz8_flush_dyn_mac_table, - .port_vlan_filtering =3D ksz_port_vlan_filtering, - .port_vlan_add =3D ksz_port_vlan_add, - .port_vlan_del =3D ksz_port_vlan_del, + .port_vlan_filtering =3D ksz8_port_vlan_filtering, + .port_vlan_add =3D ksz8_port_vlan_add, + .port_vlan_del =3D ksz8_port_vlan_del, .port_fdb_dump =3D ksz_port_fdb_dump, .port_fdb_add =3D ksz_port_fdb_add, .port_fdb_del =3D ksz_port_fdb_del, @@ -2438,9 +2433,9 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .port_pre_bridge_flags =3D ksz_port_pre_bridge_flags, .port_bridge_flags =3D ksz_port_bridge_flags, .port_fast_age =3D ksz8_flush_dyn_mac_table, - .port_vlan_filtering =3D ksz_port_vlan_filtering, - .port_vlan_add =3D ksz_port_vlan_add, - .port_vlan_del =3D ksz_port_vlan_del, + .port_vlan_filtering =3D ksz8_port_vlan_filtering, + .port_vlan_add =3D ksz8_port_vlan_add, + .port_vlan_del =3D ksz8_port_vlan_del, .port_fdb_dump =3D ksz_port_fdb_dump, .port_fdb_add =3D ksz_port_fdb_add, .port_fdb_del =3D ksz_port_fdb_del, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index f21a05a86b483..959229185df97 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -629,9 +629,11 @@ void ksz9477_flush_dyn_mac_table(struct dsa_switch *ds= , int port) } } =20 -int ksz9477_port_vlan_filtering(struct ksz_device *dev, int port, +int ksz9477_port_vlan_filtering(struct dsa_switch *ds, int port, bool flag, struct netlink_ext_ack *extack) { + struct ksz_device *dev =3D ds->priv; + if (flag) { ksz_port_cfg(dev, port, REG_PORT_LUE_CTRL, PORT_VLAN_LOOKUP_VID_0, true); @@ -645,12 +647,13 @@ int ksz9477_port_vlan_filtering(struct ksz_device *de= v, int port, return 0; } =20 -int ksz9477_port_vlan_add(struct ksz_device *dev, int port, +int ksz9477_port_vlan_add(struct dsa_switch *ds, int port, const struct switchdev_obj_port_vlan *vlan, struct netlink_ext_ack *extack) { - u32 vlan_table[3]; bool untagged =3D vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED; + struct ksz_device *dev =3D ds->priv; + u32 vlan_table[3]; int err; =20 err =3D ksz9477_get_vlan_table(dev, vlan->vid, vlan_table); @@ -681,10 +684,11 @@ int ksz9477_port_vlan_add(struct ksz_device *dev, int= port, return 0; } =20 -int ksz9477_port_vlan_del(struct ksz_device *dev, int port, +int ksz9477_port_vlan_del(struct dsa_switch *ds, int port, const struct switchdev_obj_port_vlan *vlan) { bool untagged =3D vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED; + struct ksz_device *dev =3D ds->priv; u32 vlan_table[3]; u16 pvid; =20 @@ -1780,9 +1784,6 @@ const struct ksz_dev_ops ksz9477_dev_ops =3D { .r_mib_stat64 =3D ksz_r_mib_stats64, .freeze_mib =3D ksz9477_freeze_mib, .port_init_cnt =3D ksz9477_port_init_cnt, - .vlan_filtering =3D ksz9477_port_vlan_filtering, - .vlan_add =3D ksz9477_port_vlan_add, - .vlan_del =3D ksz9477_port_vlan_del, .mirror_add =3D ksz9477_port_mirror_add, .mirror_del =3D ksz9477_port_mirror_del, .get_caps =3D ksz9477_get_caps, @@ -1827,9 +1828,9 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .port_pre_bridge_flags =3D ksz_port_pre_bridge_flags, .port_bridge_flags =3D ksz_port_bridge_flags, .port_fast_age =3D ksz9477_flush_dyn_mac_table, - .port_vlan_filtering =3D ksz_port_vlan_filtering, - .port_vlan_add =3D ksz_port_vlan_add, - .port_vlan_del =3D ksz_port_vlan_del, + .port_vlan_filtering =3D ksz9477_port_vlan_filtering, + .port_vlan_add =3D ksz9477_port_vlan_add, + .port_vlan_del =3D ksz9477_port_vlan_del, .port_fdb_dump =3D ksz_port_fdb_dump, .port_fdb_add =3D ksz_port_fdb_add, .port_fdb_del =3D ksz_port_fdb_del, diff --git a/drivers/net/dsa/microchip/ksz9477.h b/drivers/net/dsa/microchi= p/ksz9477.h index 8012904a21308..75a7b2bfc7976 100644 --- a/drivers/net/dsa/microchip/ksz9477.h +++ b/drivers/net/dsa/microchip/ksz9477.h @@ -19,12 +19,12 @@ void ksz9477_r_mib_pkt(struct ksz_device *dev, int port= , u16 addr, u64 *dropped, u64 *cnt); void ksz9477_freeze_mib(struct ksz_device *dev, int port, bool freeze); void ksz9477_port_init_cnt(struct ksz_device *dev, int port); -int ksz9477_port_vlan_filtering(struct ksz_device *dev, int port, +int ksz9477_port_vlan_filtering(struct dsa_switch *ds, int port, bool flag, struct netlink_ext_ack *extack); -int ksz9477_port_vlan_add(struct ksz_device *dev, int port, +int ksz9477_port_vlan_add(struct dsa_switch *ds, int port, const struct switchdev_obj_port_vlan *vlan, struct netlink_ext_ack *extack); -int ksz9477_port_vlan_del(struct ksz_device *dev, int port, +int ksz9477_port_vlan_del(struct dsa_switch *ds, int port, const struct switchdev_obj_port_vlan *vlan); int ksz9477_port_mirror_add(struct ksz_device *dev, int port, struct dsa_mall_mirror_tc_entry *mirror, diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index eb13d548ebff9..07d1d58113f05 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3287,40 +3287,6 @@ int ksz_port_bridge_flags(struct dsa_switch *ds, int= port, return 0; } =20 -int ksz_port_vlan_filtering(struct dsa_switch *ds, int port, - bool flag, struct netlink_ext_ack *extack) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->dev_ops->vlan_filtering) - return -EOPNOTSUPP; - - return dev->dev_ops->vlan_filtering(dev, port, flag, extack); -} - -int ksz_port_vlan_add(struct dsa_switch *ds, int port, - const struct switchdev_obj_port_vlan *vlan, - struct netlink_ext_ack *extack) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->dev_ops->vlan_add) - return -EOPNOTSUPP; - - return dev->dev_ops->vlan_add(dev, port, vlan, extack); -} - -int ksz_port_vlan_del(struct dsa_switch *ds, int port, - const struct switchdev_obj_port_vlan *vlan) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->dev_ops->vlan_del) - return -EOPNOTSUPP; - - return dev->dev_ops->vlan_del(dev, port, vlan); -} - int ksz_port_mirror_add(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror, bool ingress, struct netlink_ext_ack *extack) diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index 0aa83c75c40a1..d07b3f5918f8e 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -408,13 +408,6 @@ struct ksz_dev_ops { void (*r_mib_pkt)(struct ksz_device *dev, int port, u16 addr, u64 *dropped, u64 *cnt); void (*r_mib_stat64)(struct ksz_device *dev, int port); - int (*vlan_filtering)(struct ksz_device *dev, int port, - bool flag, struct netlink_ext_ack *extack); - int (*vlan_add)(struct ksz_device *dev, int port, - const struct switchdev_obj_port_vlan *vlan, - struct netlink_ext_ack *extack); - int (*vlan_del)(struct ksz_device *dev, int port, - const struct switchdev_obj_port_vlan *vlan); int (*mirror_add)(struct ksz_device *dev, int port, struct dsa_mall_mirror_tc_entry *mirror, bool ingress, struct netlink_ext_ack *extack); @@ -505,13 +498,6 @@ int ksz_port_pre_bridge_flags(struct dsa_switch *ds, i= nt port, int ksz_port_bridge_flags(struct dsa_switch *ds, int port, struct switchdev_brport_flags flags, struct netlink_ext_ack *extack); -int ksz_port_vlan_filtering(struct dsa_switch *ds, int port, - bool flag, struct netlink_ext_ack *extack); -int ksz_port_vlan_add(struct dsa_switch *ds, int port, - const struct switchdev_obj_port_vlan *vlan, - struct netlink_ext_ack *extack); -int ksz_port_vlan_del(struct dsa_switch *ds, int port, - const struct switchdev_obj_port_vlan *vlan); int ksz_port_fdb_add(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid, struct dsa_db db); diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index feaaaafeace61..be6a457ee8e4b 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -713,9 +713,6 @@ const struct ksz_dev_ops lan937x_dev_ops =3D { .r_mib_stat64 =3D ksz_r_mib_stats64, .freeze_mib =3D ksz9477_freeze_mib, .port_init_cnt =3D ksz9477_port_init_cnt, - .vlan_filtering =3D ksz9477_port_vlan_filtering, - .vlan_add =3D ksz9477_port_vlan_add, - .vlan_del =3D ksz9477_port_vlan_del, .mirror_add =3D ksz9477_port_mirror_add, .mirror_del =3D ksz9477_port_mirror_del, .get_caps =3D lan937x_phylink_get_caps, @@ -757,9 +754,9 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .port_pre_bridge_flags =3D ksz_port_pre_bridge_flags, .port_bridge_flags =3D ksz_port_bridge_flags, .port_fast_age =3D ksz9477_flush_dyn_mac_table, - .port_vlan_filtering =3D ksz_port_vlan_filtering, - .port_vlan_add =3D ksz_port_vlan_add, - .port_vlan_del =3D ksz_port_vlan_del, + .port_vlan_filtering =3D ksz9477_port_vlan_filtering, + .port_vlan_add =3D ksz9477_port_vlan_add, + .port_vlan_del =3D ksz9477_port_vlan_del, .port_fdb_dump =3D ksz_port_fdb_dump, .port_fdb_add =3D ksz_port_fdb_add, .port_fdb_del =3D ksz_port_fdb_del, --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B7FE73A9867 for ; Tue, 12 May 2026 13:06:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591209; cv=none; b=RyTY1kviqae47XIWMPTXrnU40o4yudumCnLv0O4HhW+R2Pi1VQYOyAYTX7V0FHqCLQHPRcYGXIh7d8KulYdOetqy5z4UUFlDBFU/2/b9LQk0qpdQmHLBOoDwvhnjd9UDzLZttqwhw7/Vrg+nXveWid/8XshtoO74tT9m74DPrQI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591209; c=relaxed/simple; bh=ZBTjRmiqhHelyvesIP0CrzdBOjIkyfdorEyyd0m3jjE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z94dtRYtI/Jxw4rDz9QkfaYkzuxZTZBf/eHc/LoVS5Bikn+mKj1tSgsKjHLbx0eHrrh/FXWC9TPXSx/86VekP+lPpWzHO3eLXdbZOj8cMVcfSgN/HsuBtX4SB7k9e/L3jTuc2mXcI8QY+oerzkNVxyBm5y/wq0hmihZwhXzWeok= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=v+MGO5cm; arc=none smtp.client-ip=185.246.85.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="v+MGO5cm" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 8BD014E42C1F; Tue, 12 May 2026 13:06:46 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 5512560646; Tue, 12 May 2026 13:06:46 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 8EC6B11AF883A; Tue, 12 May 2026 15:06:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591205; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=NDdPKN9PalIKQH7yi50b2Tc7S+eRHJ6p0jSsZWWouV8=; b=v+MGO5cmOjN09TLh83InNkE71Byq0kx6hwS+4IU7oqMqNK4W5EXXVOR7qxLgbIgy5utYyD cTRFvApiB/VVM66FZ67idiR7yeeYERG7E/MZpmzB7brFDONNXQ6PPkuacvfzDAuVLz3Pc1 sl0AP0B9cIWIekjmKf1tt7Lg3duHBcRBa6JabxmcDxVnGJXosauVh9dmxOSdn0TQEI9/7g ZqpMOIwRtetK45OTOYjWvJ+ddW3hEdPtwiz8sK08792EwzIJg2v1m69Y6v5L4oYJRnDN8D k1gX/Wcp/iVvxFioCJs1AZ+yrBE0IC/7IETeKiZA2fqfubfkr4UWusd4j6REtg== From: Bastien Curutchet Date: Tue, 12 May 2026 15:06:27 +0200 Subject: [PATCH net-next 05/15] net: dsa: microchip: bypass dev_ops for FDB and MDB operations Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-5-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" , Vladimir Oltean X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 From: Vladimir Oltean FDB and MDB operations are handled through a common function that redirects the treatment to ksz_dev_ops callbacks. This layer of indirection isn't needed since we now have a dsa_switch_ops for each kind of switch. Remove one indirection layer for KSZ switches, by connecting the ksz_dev_ops :: fdb_dump(), fdb_add(), fdb_del(), mdb_add() and mdb_del() operations directly to dsa_switch_ops. Remove the FDB and MDB operations from ksz_dev_ops. Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 64 +++++++++++++---------------= ---- drivers/net/dsa/microchip/ksz9477.c | 42 ++++++++++----------- drivers/net/dsa/microchip/ksz9477.h | 10 ++--- drivers/net/dsa/microchip/ksz_common.c | 59 ----------------------------- drivers/net/dsa/microchip/ksz_common.h | 26 ------------- drivers/net/dsa/microchip/lan937x_main.c | 15 +++----- 6 files changed, 56 insertions(+), 160 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 94c8034a192a9..83795fd66aab2 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -1315,9 +1315,10 @@ static void ksz8_flush_dyn_mac_table(struct dsa_swit= ch *ds, int port) } } =20 -static int ksz8_fdb_dump(struct ksz_device *dev, int port, +static int ksz8_fdb_dump(struct dsa_switch *ds, int port, dsa_fdb_dump_cb_t *cb, void *data) { + struct ksz_device *dev =3D ds->priv; u8 mac[ETH_ALEN]; u8 src_port, fid; u16 entries =3D 0; @@ -1420,30 +1421,30 @@ static int ksz8_del_sta_mac(struct ksz_device *dev,= int port, return ksz8_w_sta_mac_table(dev, index, &alu); } =20 -static int ksz8_mdb_add(struct ksz_device *dev, int port, +static int ksz8_mdb_add(struct dsa_switch *ds, int port, const struct switchdev_obj_port_mdb *mdb, struct dsa_db db) { - return ksz8_add_sta_mac(dev, port, mdb->addr, mdb->vid); + return ksz8_add_sta_mac(ds->priv, port, mdb->addr, mdb->vid); } =20 -static int ksz8_mdb_del(struct ksz_device *dev, int port, +static int ksz8_mdb_del(struct dsa_switch *ds, int port, const struct switchdev_obj_port_mdb *mdb, struct dsa_db db) { - return ksz8_del_sta_mac(dev, port, mdb->addr, mdb->vid); + return ksz8_del_sta_mac(ds->priv, port, mdb->addr, mdb->vid); } =20 -static int ksz8_fdb_add(struct ksz_device *dev, int port, +static int ksz8_fdb_add(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid, struct dsa_db db) { - return ksz8_add_sta_mac(dev, port, addr, vid); + return ksz8_add_sta_mac(ds->priv, port, addr, vid); } =20 -static int ksz8_fdb_del(struct ksz_device *dev, int port, +static int ksz8_fdb_del(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid, struct dsa_db db) { - return ksz8_del_sta_mac(dev, port, addr, vid); + return ksz8_del_sta_mac(ds->priv, port, addr, vid); } =20 static int ksz8_port_vlan_filtering(struct dsa_switch *ds, int port, bool = flag, @@ -2215,11 +2216,6 @@ const struct ksz_dev_ops ksz8463_dev_ops =3D { .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, - .fdb_add =3D ksz8_fdb_add, - .fdb_del =3D ksz8_fdb_del, - .mdb_add =3D ksz8_mdb_add, - .mdb_del =3D ksz8_mdb_del, .mirror_add =3D ksz8_port_mirror_add, .mirror_del =3D ksz8_port_mirror_del, .get_caps =3D ksz8_get_caps, @@ -2242,11 +2238,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops =3D { .r_mib_stat64 =3D ksz_r_mib_stats64, .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, .mirror_add =3D ksz8_port_mirror_add, .mirror_del =3D ksz8_port_mirror_del, .get_caps =3D ksz8_get_caps, @@ -2272,11 +2263,6 @@ const struct ksz_dev_ops ksz88xx_dev_ops =3D { .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, - .fdb_add =3D ksz8_fdb_add, - .fdb_del =3D ksz8_fdb_del, - .mdb_add =3D ksz8_mdb_add, - .mdb_del =3D ksz8_mdb_del, .mirror_add =3D ksz8_port_mirror_add, .mirror_del =3D ksz8_port_mirror_del, .get_caps =3D ksz8_get_caps, @@ -2316,11 +2302,11 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .port_vlan_filtering =3D ksz8_port_vlan_filtering, .port_vlan_add =3D ksz8_port_vlan_add, .port_vlan_del =3D ksz8_port_vlan_del, - .port_fdb_dump =3D ksz_port_fdb_dump, - .port_fdb_add =3D ksz_port_fdb_add, - .port_fdb_del =3D ksz_port_fdb_del, - .port_mdb_add =3D ksz_port_mdb_add, - .port_mdb_del =3D ksz_port_mdb_del, + .port_fdb_dump =3D ksz8_fdb_dump, + .port_fdb_add =3D ksz8_fdb_add, + .port_fdb_del =3D ksz8_fdb_del, + .port_mdb_add =3D ksz8_mdb_add, + .port_mdb_del =3D ksz8_mdb_del, .port_mirror_add =3D ksz_port_mirror_add, .port_mirror_del =3D ksz_port_mirror_del, .get_stats64 =3D ksz_get_stats64, @@ -2376,11 +2362,11 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .port_vlan_filtering =3D ksz8_port_vlan_filtering, .port_vlan_add =3D ksz8_port_vlan_add, .port_vlan_del =3D ksz8_port_vlan_del, - .port_fdb_dump =3D ksz_port_fdb_dump, - .port_fdb_add =3D ksz_port_fdb_add, - .port_fdb_del =3D ksz_port_fdb_del, - .port_mdb_add =3D ksz_port_mdb_add, - .port_mdb_del =3D ksz_port_mdb_del, + .port_fdb_dump =3D ksz8_fdb_dump, + .port_fdb_add =3D ksz8_fdb_add, + .port_fdb_del =3D ksz8_fdb_del, + .port_mdb_add =3D ksz8_mdb_add, + .port_mdb_del =3D ksz8_mdb_del, .port_mirror_add =3D ksz_port_mirror_add, .port_mirror_del =3D ksz_port_mirror_del, .get_stats64 =3D ksz_get_stats64, @@ -2436,11 +2422,11 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .port_vlan_filtering =3D ksz8_port_vlan_filtering, .port_vlan_add =3D ksz8_port_vlan_add, .port_vlan_del =3D ksz8_port_vlan_del, - .port_fdb_dump =3D ksz_port_fdb_dump, - .port_fdb_add =3D ksz_port_fdb_add, - .port_fdb_del =3D ksz_port_fdb_del, - .port_mdb_add =3D ksz_port_mdb_add, - .port_mdb_del =3D ksz_port_mdb_del, + .port_fdb_dump =3D ksz8_fdb_dump, + .port_fdb_add =3D ksz8_fdb_add, + .port_fdb_del =3D ksz8_fdb_del, + .port_mdb_add =3D ksz8_mdb_add, + .port_mdb_del =3D ksz8_mdb_del, .port_mirror_add =3D ksz_port_mirror_add, .port_mirror_del =3D ksz_port_mirror_del, .get_stats64 =3D ksz_get_stats64, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index 959229185df97..69a4fb683b3a1 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -718,9 +718,10 @@ int ksz9477_port_vlan_del(struct dsa_switch *ds, int p= ort, return 0; } =20 -int ksz9477_fdb_add(struct ksz_device *dev, int port, +int ksz9477_fdb_add(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid, struct dsa_db db) { + struct ksz_device *dev =3D ds->priv; u32 alu_table[4]; u32 data; int ret =3D 0; @@ -774,9 +775,10 @@ int ksz9477_fdb_add(struct ksz_device *dev, int port, return ret; } =20 -int ksz9477_fdb_del(struct ksz_device *dev, int port, +int ksz9477_fdb_del(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid, struct dsa_db db) { + struct ksz_device *dev =3D ds->priv; u32 alu_table[4]; u32 data; int ret =3D 0; @@ -863,13 +865,14 @@ static void ksz9477_convert_alu(struct alu_struct *al= u, u32 *alu_table) alu->mac[5] =3D alu_table[3] & 0xFF; } =20 -int ksz9477_fdb_dump(struct ksz_device *dev, int port, +int ksz9477_fdb_dump(struct dsa_switch *ds, int port, dsa_fdb_dump_cb_t *cb, void *data) { - int ret =3D 0; - u32 ksz_data; - u32 alu_table[4]; + struct ksz_device *dev =3D ds->priv; struct alu_struct alu; + u32 alu_table[4]; + u32 ksz_data; + int ret =3D 0; int timeout; =20 mutex_lock(&dev->alu_mutex); @@ -917,9 +920,10 @@ int ksz9477_fdb_dump(struct ksz_device *dev, int port, return ret; } =20 -int ksz9477_mdb_add(struct ksz_device *dev, int port, +int ksz9477_mdb_add(struct dsa_switch *ds, int port, const struct switchdev_obj_port_mdb *mdb, struct dsa_db db) { + struct ksz_device *dev =3D ds->priv; u32 static_table[4]; const u8 *shifts; const u32 *masks; @@ -996,16 +1000,17 @@ int ksz9477_mdb_add(struct ksz_device *dev, int port, return err; } =20 -int ksz9477_mdb_del(struct ksz_device *dev, int port, +int ksz9477_mdb_del(struct dsa_switch *ds, int port, const struct switchdev_obj_port_mdb *mdb, struct dsa_db db) { + struct ksz_device *dev =3D ds->priv; u32 static_table[4]; + u32 mac_hi, mac_lo; const u8 *shifts; const u32 *masks; - u32 data; - int index; int ret =3D 0; - u32 mac_hi, mac_lo; + int index; + u32 data; =20 shifts =3D dev->info->shifts; masks =3D dev->info->masks; @@ -1787,11 +1792,6 @@ const struct ksz_dev_ops ksz9477_dev_ops =3D { .mirror_add =3D ksz9477_port_mirror_add, .mirror_del =3D ksz9477_port_mirror_del, .get_caps =3D ksz9477_get_caps, - .fdb_dump =3D ksz9477_fdb_dump, - .fdb_add =3D ksz9477_fdb_add, - .fdb_del =3D ksz9477_fdb_del, - .mdb_add =3D ksz9477_mdb_add, - .mdb_del =3D ksz9477_mdb_del, .pme_write8 =3D ksz_write8, .pme_pread8 =3D ksz_pread8, .pme_pwrite8 =3D ksz_pwrite8, @@ -1831,11 +1831,11 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .port_vlan_filtering =3D ksz9477_port_vlan_filtering, .port_vlan_add =3D ksz9477_port_vlan_add, .port_vlan_del =3D ksz9477_port_vlan_del, - .port_fdb_dump =3D ksz_port_fdb_dump, - .port_fdb_add =3D ksz_port_fdb_add, - .port_fdb_del =3D ksz_port_fdb_del, - .port_mdb_add =3D ksz_port_mdb_add, - .port_mdb_del =3D ksz_port_mdb_del, + .port_fdb_dump =3D ksz9477_fdb_dump, + .port_fdb_add =3D ksz9477_fdb_add, + .port_fdb_del =3D ksz9477_fdb_del, + .port_mdb_add =3D ksz9477_mdb_add, + .port_mdb_del =3D ksz9477_mdb_del, .port_mirror_add =3D ksz_port_mirror_add, .port_mirror_del =3D ksz_port_mirror_del, .get_stats64 =3D ksz_get_stats64, diff --git a/drivers/net/dsa/microchip/ksz9477.h b/drivers/net/dsa/microchi= p/ksz9477.h index 75a7b2bfc7976..39f042e56f365 100644 --- a/drivers/net/dsa/microchip/ksz9477.h +++ b/drivers/net/dsa/microchip/ksz9477.h @@ -33,15 +33,15 @@ void ksz9477_port_mirror_del(struct ksz_device *dev, in= t port, struct dsa_mall_mirror_tc_entry *mirror); int ksz9477_errata_monitor(struct ksz_device *dev, int port, u64 tx_late_col); -int ksz9477_fdb_dump(struct ksz_device *dev, int port, +int ksz9477_fdb_dump(struct dsa_switch *ds, int port, dsa_fdb_dump_cb_t *cb, void *data); -int ksz9477_fdb_add(struct ksz_device *dev, int port, +int ksz9477_fdb_add(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid, struct dsa_db db); -int ksz9477_fdb_del(struct ksz_device *dev, int port, +int ksz9477_fdb_del(struct dsa_switch *ds, int port, const unsigned char *addr, u16 vid, struct dsa_db db); -int ksz9477_mdb_add(struct ksz_device *dev, int port, +int ksz9477_mdb_add(struct dsa_switch *ds, int port, const struct switchdev_obj_port_mdb *mdb, struct dsa_db db); -int ksz9477_mdb_del(struct ksz_device *dev, int port, +int ksz9477_mdb_del(struct dsa_switch *ds, int port, const struct switchdev_obj_port_mdb *mdb, struct dsa_db db); int ksz9477_enable_stp_addr(struct ksz_device *dev); void ksz9477_port_queue_split(struct ksz_device *dev, int port); diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 07d1d58113f05..d17ce88d49471 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3085,65 +3085,6 @@ void ksz_port_bridge_leave(struct dsa_switch *ds, in= t port, */ } =20 -int ksz_port_fdb_add(struct dsa_switch *ds, int port, - const unsigned char *addr, u16 vid, - struct dsa_db db) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->dev_ops->fdb_add) - return -EOPNOTSUPP; - - return dev->dev_ops->fdb_add(dev, port, addr, vid, db); -} - -int ksz_port_fdb_del(struct dsa_switch *ds, int port, - const unsigned char *addr, - u16 vid, struct dsa_db db) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->dev_ops->fdb_del) - return -EOPNOTSUPP; - - return dev->dev_ops->fdb_del(dev, port, addr, vid, db); -} - -int ksz_port_fdb_dump(struct dsa_switch *ds, int port, - dsa_fdb_dump_cb_t *cb, void *data) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->dev_ops->fdb_dump) - return -EOPNOTSUPP; - - return dev->dev_ops->fdb_dump(dev, port, cb, data); -} - -int ksz_port_mdb_add(struct dsa_switch *ds, int port, - const struct switchdev_obj_port_mdb *mdb, - struct dsa_db db) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->dev_ops->mdb_add) - return -EOPNOTSUPP; - - return dev->dev_ops->mdb_add(dev, port, mdb, db); -} - -int ksz_port_mdb_del(struct dsa_switch *ds, int port, - const struct switchdev_obj_port_mdb *mdb, - struct dsa_db db) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->dev_ops->mdb_del) - return -EOPNOTSUPP; - - return dev->dev_ops->mdb_del(dev, port, mdb, db); -} - static int ksz9477_set_default_prio_queue_mapping(struct ksz_device *dev, int port) { diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index d07b3f5918f8e..fe3b2dad3d684 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -413,18 +413,6 @@ struct ksz_dev_ops { bool ingress, struct netlink_ext_ack *extack); void (*mirror_del)(struct ksz_device *dev, int port, struct dsa_mall_mirror_tc_entry *mirror); - int (*fdb_add)(struct ksz_device *dev, int port, - const unsigned char *addr, u16 vid, struct dsa_db db); - int (*fdb_del)(struct ksz_device *dev, int port, - const unsigned char *addr, u16 vid, struct dsa_db db); - int (*fdb_dump)(struct ksz_device *dev, int port, - dsa_fdb_dump_cb_t *cb, void *data); - int (*mdb_add)(struct ksz_device *dev, int port, - const struct switchdev_obj_port_mdb *mdb, - struct dsa_db db); - int (*mdb_del)(struct ksz_device *dev, int port, - const struct switchdev_obj_port_mdb *mdb, - struct dsa_db db); void (*get_caps)(struct ksz_device *dev, int port, struct phylink_config *config); int (*pme_write8)(struct ksz_device *dev, u32 reg, u8 value); @@ -498,20 +486,6 @@ int ksz_port_pre_bridge_flags(struct dsa_switch *ds, i= nt port, int ksz_port_bridge_flags(struct dsa_switch *ds, int port, struct switchdev_brport_flags flags, struct netlink_ext_ack *extack); -int ksz_port_fdb_add(struct dsa_switch *ds, int port, - const unsigned char *addr, u16 vid, - struct dsa_db db); -int ksz_port_fdb_del(struct dsa_switch *ds, int port, - const unsigned char *addr, - u16 vid, struct dsa_db db); -int ksz_port_fdb_dump(struct dsa_switch *ds, int port, - dsa_fdb_dump_cb_t *cb, void *data); -int ksz_port_mdb_add(struct dsa_switch *ds, int port, - const struct switchdev_obj_port_mdb *mdb, - struct dsa_db db); -int ksz_port_mdb_del(struct dsa_switch *ds, int port, - const struct switchdev_obj_port_mdb *mdb, - struct dsa_db db); =20 void ksz_phylink_get_caps(struct dsa_switch *ds, int port, struct phylink_config *config); diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index be6a457ee8e4b..aa428353818d8 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -717,11 +717,6 @@ const struct ksz_dev_ops lan937x_dev_ops =3D { .mirror_del =3D ksz9477_port_mirror_del, .get_caps =3D lan937x_phylink_get_caps, .setup_rgmii_delay =3D lan937x_setup_rgmii_delay, - .fdb_dump =3D ksz9477_fdb_dump, - .fdb_add =3D ksz9477_fdb_add, - .fdb_del =3D ksz9477_fdb_del, - .mdb_add =3D ksz9477_mdb_add, - .mdb_del =3D ksz9477_mdb_del, .config_cpu_port =3D lan937x_config_cpu_port, .tc_cbs_set_cinc =3D lan937x_tc_cbs_set_cinc, .enable_stp_addr =3D ksz9477_enable_stp_addr, @@ -757,11 +752,11 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .port_vlan_filtering =3D ksz9477_port_vlan_filtering, .port_vlan_add =3D ksz9477_port_vlan_add, .port_vlan_del =3D ksz9477_port_vlan_del, - .port_fdb_dump =3D ksz_port_fdb_dump, - .port_fdb_add =3D ksz_port_fdb_add, - .port_fdb_del =3D ksz_port_fdb_del, - .port_mdb_add =3D ksz_port_mdb_add, - .port_mdb_del =3D ksz_port_mdb_del, + .port_fdb_dump =3D ksz9477_fdb_dump, + .port_fdb_add =3D ksz9477_fdb_add, + .port_fdb_del =3D ksz9477_fdb_del, + .port_mdb_add =3D ksz9477_mdb_add, + .port_mdb_del =3D ksz9477_mdb_del, .port_mirror_add =3D ksz_port_mirror_add, .port_mirror_del =3D ksz_port_mirror_del, .get_stats64 =3D ksz_get_stats64, --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 491C43AB49A; Tue, 12 May 2026 13:06:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591212; cv=none; b=BsuX/sRQIvpSb8ggBR904JHO7PWIx+vmevSCaAb9lh2PtPspHBgeevuupnm3LgibHARnwMDE961fDVBz4BVi86z4LX4jdRGwIqVvKYFNuqE8/tqomCso3XX5xfRbW0nPhyqaiO0HNCaY5umYqkV7KLopp3ZoMeIPvi4mmJcAJzE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591212; c=relaxed/simple; bh=n6BQbZ1mMoi0v8VOVhAd7eMQCk92MCOqkGWRen4VDdQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=H3a5S5nzRqW10B3efKCA6g3z4GJZANXeUQjMlkpVqliotqbhGA3rxpCiUiwnAWiTGdFdC2FmpW1B9wIVRtqHgXUmzBRIkO1rnzfWTQcKIc1rydLGHb7mZUZxzkwvS+Zm7I/hiHjGBqdOo3IVJkc3QhG3G1lHB8RVAqM6LtJdmK4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=M1U/J4/i; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="M1U/J4/i" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 0C8971A357C; Tue, 12 May 2026 13:06:49 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id D644560646; Tue, 12 May 2026 13:06:48 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 9D0A311AF8CC9; Tue, 12 May 2026 15:06:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591207; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=Vqs/YNAR1dOCQ2RaP4mLrQU9/AD6dK33Y46eJ9P6UGk=; b=M1U/J4/iq4tC81Z76GdQbtBHGmCkDV9354nRt2bTTBEFwUVaHxCzg18h5z7+B1HWbXaBJT b4Kret8TC72fbuDgmllhZKqiXAQm1ZeljVDCW/01CcsLqqLLuvrnUEa4yPuRDgAx3h6akI OL0c3vlJLo0ATBZpTj09wXrf4KbYpRHhDb8e1fDMzdq+j+xLK2n81WNBuWYiWs85fzUEkC Jelp8GZ5YvxcwGyfgtTVoOjMJurfp+XEuPH4Y1utq2pBuYVy5s9gIGI0Huz63l+3aKkIqQ GWti3QluMxwqF5q3GiI93FGsAOaG74LgcABFQeHH9ujDMWG0Wsoz25Dsphy0hQ== From: Bastien Curutchet Date: Tue, 12 May 2026 15:06:28 +0200 Subject: [PATCH net-next 06/15] net: dsa: microchip: bypass dev_ops for mirror operations Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-6-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" , Vladimir Oltean X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 From: Vladimir Oltean Mirror operations are handled through a common function that redirects the treatment to ksz_dev_ops callbacks. This layer of indirection isn't needed since we now have a dsa_switch_ops for each switch family. Remove this indirection layer for KSZ switches, by connecting the ksz_dev_ops :: mirror_add() and mirror_del() operations directly to dsa_switch_ops. Remove the now unused mirror callbacks from ksz_dev_ops. Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 24 ++++++++++-------------- drivers/net/dsa/microchip/ksz9477.c | 12 ++++++------ drivers/net/dsa/microchip/ksz9477.h | 4 ++-- drivers/net/dsa/microchip/ksz_common.c | 21 --------------------- drivers/net/dsa/microchip/ksz_common.h | 10 ---------- drivers/net/dsa/microchip/lan937x_main.c | 6 ++---- 6 files changed, 20 insertions(+), 57 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 83795fd66aab2..38876e1779564 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -1585,10 +1585,11 @@ static int ksz8_port_vlan_del(struct dsa_switch *ds= , int port, return 0; } =20 -static int ksz8_port_mirror_add(struct ksz_device *dev, int port, +static int ksz8_port_mirror_add(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror, bool ingress, struct netlink_ext_ack *extack) { + struct ksz_device *dev =3D ds->priv; int offset =3D P_MIRROR_CTRL; =20 if (ksz_is_ksz8463(dev)) @@ -1611,9 +1612,10 @@ static int ksz8_port_mirror_add(struct ksz_device *d= ev, int port, return 0; } =20 -static void ksz8_port_mirror_del(struct ksz_device *dev, int port, +static void ksz8_port_mirror_del(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror) { + struct ksz_device *dev =3D ds->priv; int offset =3D P_MIRROR_CTRL; u8 data; =20 @@ -2216,8 +2218,6 @@ const struct ksz_dev_ops ksz8463_dev_ops =3D { .r_mib_stat64 =3D ksz88xx_r_mib_stats64, .freeze_mib =3D ksz8_freeze_mib, .port_init_cnt =3D ksz8_port_init_cnt, - .mirror_add =3D ksz8_port_mirror_add, - .mirror_del =3D ksz8_port_mirror_del, .get_caps =3D ksz8_get_caps, .config_cpu_port =3D ksz8_config_cpu_port, .enable_stp_addr =3D ksz8_enable_stp_addr, @@ -2238,8 +2238,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops =3D { .r_mib_stat64 =3D ksz_r_mib_stats64, .freeze_mib =3D ksz8_freeze_mib, .port_init_cnt =3D ksz8_port_init_cnt, - .mirror_add =3D ksz8_port_mirror_add, - .mirror_del =3D ksz8_port_mirror_del, .get_caps =3D ksz8_get_caps, .config_cpu_port =3D ksz8_config_cpu_port, .enable_stp_addr =3D ksz8_enable_stp_addr, @@ -2263,8 +2261,6 @@ const struct ksz_dev_ops ksz88xx_dev_ops =3D { .r_mib_stat64 =3D ksz88xx_r_mib_stats64, .freeze_mib =3D ksz8_freeze_mib, .port_init_cnt =3D ksz8_port_init_cnt, - .mirror_add =3D ksz8_port_mirror_add, - .mirror_del =3D ksz8_port_mirror_del, .get_caps =3D ksz8_get_caps, .config_cpu_port =3D ksz8_config_cpu_port, .enable_stp_addr =3D ksz8_enable_stp_addr, @@ -2307,8 +2303,8 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .port_fdb_del =3D ksz8_fdb_del, .port_mdb_add =3D ksz8_mdb_add, .port_mdb_del =3D ksz8_mdb_del, - .port_mirror_add =3D ksz_port_mirror_add, - .port_mirror_del =3D ksz_port_mirror_del, + .port_mirror_add =3D ksz8_port_mirror_add, + .port_mirror_del =3D ksz8_port_mirror_del, .get_stats64 =3D ksz_get_stats64, .get_pause_stats =3D ksz_get_pause_stats, .port_change_mtu =3D ksz8_change_mtu, @@ -2367,8 +2363,8 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .port_fdb_del =3D ksz8_fdb_del, .port_mdb_add =3D ksz8_mdb_add, .port_mdb_del =3D ksz8_mdb_del, - .port_mirror_add =3D ksz_port_mirror_add, - .port_mirror_del =3D ksz_port_mirror_del, + .port_mirror_add =3D ksz8_port_mirror_add, + .port_mirror_del =3D ksz8_port_mirror_del, .get_stats64 =3D ksz_get_stats64, .get_pause_stats =3D ksz_get_pause_stats, .port_change_mtu =3D ksz8_change_mtu, @@ -2427,8 +2423,8 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .port_fdb_del =3D ksz8_fdb_del, .port_mdb_add =3D ksz8_mdb_add, .port_mdb_del =3D ksz8_mdb_del, - .port_mirror_add =3D ksz_port_mirror_add, - .port_mirror_del =3D ksz_port_mirror_del, + .port_mirror_add =3D ksz8_port_mirror_add, + .port_mirror_del =3D ksz8_port_mirror_del, .get_stats64 =3D ksz_get_stats64, .get_pause_stats =3D ksz_get_pause_stats, .port_change_mtu =3D ksz8_change_mtu, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index 69a4fb683b3a1..14ee9686ca0ab 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -1080,10 +1080,11 @@ int ksz9477_mdb_del(struct dsa_switch *ds, int port, return ret; } =20 -int ksz9477_port_mirror_add(struct ksz_device *dev, int port, +int ksz9477_port_mirror_add(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror, bool ingress, struct netlink_ext_ack *extack) { + struct ksz_device *dev =3D ds->priv; u8 data; int p; =20 @@ -1119,9 +1120,10 @@ int ksz9477_port_mirror_add(struct ksz_device *dev, = int port, return 0; } =20 -void ksz9477_port_mirror_del(struct ksz_device *dev, int port, +void ksz9477_port_mirror_del(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror) { + struct ksz_device *dev =3D ds->priv; bool in_use =3D false; u8 data; int p; @@ -1789,8 +1791,6 @@ const struct ksz_dev_ops ksz9477_dev_ops =3D { .r_mib_stat64 =3D ksz_r_mib_stats64, .freeze_mib =3D ksz9477_freeze_mib, .port_init_cnt =3D ksz9477_port_init_cnt, - .mirror_add =3D ksz9477_port_mirror_add, - .mirror_del =3D ksz9477_port_mirror_del, .get_caps =3D ksz9477_get_caps, .pme_write8 =3D ksz_write8, .pme_pread8 =3D ksz_pread8, @@ -1836,8 +1836,8 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .port_fdb_del =3D ksz9477_fdb_del, .port_mdb_add =3D ksz9477_mdb_add, .port_mdb_del =3D ksz9477_mdb_del, - .port_mirror_add =3D ksz_port_mirror_add, - .port_mirror_del =3D ksz_port_mirror_del, + .port_mirror_add =3D ksz9477_port_mirror_add, + .port_mirror_del =3D ksz9477_port_mirror_del, .get_stats64 =3D ksz_get_stats64, .get_pause_stats =3D ksz_get_pause_stats, .port_change_mtu =3D ksz9477_change_mtu, diff --git a/drivers/net/dsa/microchip/ksz9477.h b/drivers/net/dsa/microchi= p/ksz9477.h index 39f042e56f365..599db0a6ba2e3 100644 --- a/drivers/net/dsa/microchip/ksz9477.h +++ b/drivers/net/dsa/microchip/ksz9477.h @@ -26,10 +26,10 @@ int ksz9477_port_vlan_add(struct dsa_switch *ds, int po= rt, struct netlink_ext_ack *extack); int ksz9477_port_vlan_del(struct dsa_switch *ds, int port, const struct switchdev_obj_port_vlan *vlan); -int ksz9477_port_mirror_add(struct ksz_device *dev, int port, +int ksz9477_port_mirror_add(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror, bool ingress, struct netlink_ext_ack *extack); -void ksz9477_port_mirror_del(struct ksz_device *dev, int port, +void ksz9477_port_mirror_del(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror); int ksz9477_errata_monitor(struct ksz_device *dev, int port, u64 tx_late_col); diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index d17ce88d49471..ad7615849c7a4 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3228,27 +3228,6 @@ int ksz_port_bridge_flags(struct dsa_switch *ds, int= port, return 0; } =20 -int ksz_port_mirror_add(struct dsa_switch *ds, int port, - struct dsa_mall_mirror_tc_entry *mirror, - bool ingress, struct netlink_ext_ack *extack) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->dev_ops->mirror_add) - return -EOPNOTSUPP; - - return dev->dev_ops->mirror_add(dev, port, mirror, ingress, extack); -} - -void ksz_port_mirror_del(struct dsa_switch *ds, int port, - struct dsa_mall_mirror_tc_entry *mirror) -{ - struct ksz_device *dev =3D ds->priv; - - if (dev->dev_ops->mirror_del) - dev->dev_ops->mirror_del(dev, port, mirror); -} - int ksz_max_mtu(struct dsa_switch *ds, int port) { struct ksz_device *dev =3D ds->priv; diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index fe3b2dad3d684..94eb79fa34392 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -408,11 +408,6 @@ struct ksz_dev_ops { void (*r_mib_pkt)(struct ksz_device *dev, int port, u16 addr, u64 *dropped, u64 *cnt); void (*r_mib_stat64)(struct ksz_device *dev, int port); - int (*mirror_add)(struct ksz_device *dev, int port, - struct dsa_mall_mirror_tc_entry *mirror, - bool ingress, struct netlink_ext_ack *extack); - void (*mirror_del)(struct ksz_device *dev, int port, - struct dsa_mall_mirror_tc_entry *mirror); void (*get_caps)(struct ksz_device *dev, int port, struct phylink_config *config); int (*pme_write8)(struct ksz_device *dev, u32 reg, u8 value); @@ -499,11 +494,6 @@ void ksz_phylink_mac_link_down(struct phylink_config *= config, unsigned int mode, phy_interface_t interface); =20 -int ksz_port_mirror_add(struct dsa_switch *ds, int port, - struct dsa_mall_mirror_tc_entry *mirror, - bool ingress, struct netlink_ext_ack *extack); -void ksz_port_mirror_del(struct dsa_switch *ds, int port, - struct dsa_mall_mirror_tc_entry *mirror); int ksz_max_mtu(struct dsa_switch *ds, int port); =20 bool ksz_support_eee(struct dsa_switch *ds, int port); diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index aa428353818d8..621139a2c3025 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -713,8 +713,6 @@ const struct ksz_dev_ops lan937x_dev_ops =3D { .r_mib_stat64 =3D ksz_r_mib_stats64, .freeze_mib =3D ksz9477_freeze_mib, .port_init_cnt =3D ksz9477_port_init_cnt, - .mirror_add =3D ksz9477_port_mirror_add, - .mirror_del =3D ksz9477_port_mirror_del, .get_caps =3D lan937x_phylink_get_caps, .setup_rgmii_delay =3D lan937x_setup_rgmii_delay, .config_cpu_port =3D lan937x_config_cpu_port, @@ -757,8 +755,8 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .port_fdb_del =3D ksz9477_fdb_del, .port_mdb_add =3D ksz9477_mdb_add, .port_mdb_del =3D ksz9477_mdb_del, - .port_mirror_add =3D ksz_port_mirror_add, - .port_mirror_del =3D ksz_port_mirror_del, + .port_mirror_add =3D ksz9477_port_mirror_add, + .port_mirror_del =3D ksz9477_port_mirror_del, .get_stats64 =3D ksz_get_stats64, .get_pause_stats =3D ksz_get_pause_stats, .port_change_mtu =3D lan937x_change_mtu, --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 747B63ABD95 for ; Tue, 12 May 2026 13:06:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591214; cv=none; b=R2TNNBUQdKdUUJASsE8qmZfgfBRYLNNVWxPqvOciTF7FwW4W6T+VzmMsUo07hpMkFKDAJOs6l4XUS5xMx0/g6qoXn1mPYxylxsXNqSstCVgs0Yx/I6JxhuggVuTZT5ZEl/gxcbD3g0RG5dzuYEgPJer6VzHZdPw+Y4n4vKM4tCU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591214; c=relaxed/simple; bh=60aFW4V4GTvfB24uYIgPrxz/3uWCxAGVGCyDQlzDzXc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=raFG4EzpmdJaa48PKUYUhlpXj4okJxLN5uAyNq7PtT2U5yvlxCF437G/gl1n1ysKRKDHra6hp+GPR3OZ3DCU2H1ytztj4qcbUxfkr2moJjogRpZcxzEgJeKvOu+yzGgnE1hKNsFRuMXjmDlbF55G5mklBhv8NK1CLgEl2Sz4U7E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=07A3RIqQ; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="07A3RIqQ" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 35D391A3582; Tue, 12 May 2026 13:06:51 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 0A04A60646; Tue, 12 May 2026 13:06:51 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 2F68111AF8CCF; Tue, 12 May 2026 15:06:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591210; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=K7E43902GBnBBbjdgg4XoXQdGAeE/npvQExkC6ETSbM=; b=07A3RIqQFeKJzg5nsmDVXh0oVrARvvLL/vSQm5jTRBzJ8mDyv+ICkKJ+fgl3Q7lPFeOlmP A1suDghej16do5DfvjxNGRh9lVgdOfzjtXtXI+7/VxZAVffNUSwwHrZwRrfo9U8gFBA7PF BAOkMwwdnsGaQsiuwFO4UOAle8WM6F+7MAUNcmR2IF+LgwEOLzlEpxjpevo1ZosNP8X7bq eGU8FUz81cUo/ZfVsgQj04dGbP4OaGkcX11q9QZwPKuWmPxfJRfv04LqqZD0Dx5K+aOteo 9jdPd8R11jy8nYL5LDKPHx5pVRasiMnaZZI7IV+NFH2frRHCU4+qKIXk5utwqw== From: Bastien Curutchet Date: Tue, 12 May 2026 15:06:29 +0200 Subject: [PATCH net-next 07/15] net: dsa: microchip: bypass dev_ops for phylink_get_caps() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-7-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" , Vladimir Oltean X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 From: Vladimir Oltean ksz_phylink_get_caps() is a bit different from other generic methods. It has a dev_ops->get_caps() call in the middle of the function, and it does other stuff before (set some supported_interfaces) and after (set lpi_interfaces from supported_interfaces). Whereas the dev_ops->get_caps() methods set mac_capabilities and (optionally) logically OR the supported_interfaces with that of the PCS. The idea is that this can be expressed simpler, and avoid a indirect function call to dev_ops->get_caps(). If we tail-call the common ksz_phylink_get_caps() from individual phylink_get_caps() methods, we do reorder the settings, but in an inconsequential way (the transfer from supported_interfaces to lpi_interfaces still sees a complete list of the supported_interfaces). Remove the no longer used get_caps() callbacl the ksz_dev_ops. Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 17 +++++++++-------- drivers/net/dsa/microchip/ksz9477.c | 11 +++++++---- drivers/net/dsa/microchip/ksz_common.c | 3 --- drivers/net/dsa/microchip/ksz_common.h | 2 -- drivers/net/dsa/microchip/lan937x_main.c | 9 ++++++--- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 38876e1779564..825133e9ce6e6 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -1995,9 +1995,11 @@ static int ksz8_setup(struct dsa_switch *ds) return ret; } =20 -static void ksz8_get_caps(struct ksz_device *dev, int port, - struct phylink_config *config) +static void ksz8_phylink_get_caps(struct dsa_switch *ds, int port, + struct phylink_config *config) { + struct ksz_device *dev =3D ds->priv; + config->mac_capabilities =3D MAC_10 | MAC_100; =20 /* Silicon Errata Sheet (DS80000830A): @@ -2011,6 +2013,8 @@ static void ksz8_get_caps(struct ksz_device *dev, int= port, /* Asym pause is not supported on KSZ8863 and KSZ8873 */ if (!ksz_is_ksz88x3(dev)) config->mac_capabilities |=3D MAC_ASYM_PAUSE; + + ksz_phylink_get_caps(ds, port, config); } =20 static u32 ksz8_get_port_addr(int port, int offset) @@ -2218,7 +2222,6 @@ const struct ksz_dev_ops ksz8463_dev_ops =3D { .r_mib_stat64 =3D ksz88xx_r_mib_stats64, .freeze_mib =3D ksz8_freeze_mib, .port_init_cnt =3D ksz8_port_init_cnt, - .get_caps =3D ksz8_get_caps, .config_cpu_port =3D ksz8_config_cpu_port, .enable_stp_addr =3D ksz8_enable_stp_addr, .reset =3D ksz8_reset_switch, @@ -2238,7 +2241,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops =3D { .r_mib_stat64 =3D ksz_r_mib_stats64, .freeze_mib =3D ksz8_freeze_mib, .port_init_cnt =3D ksz8_port_init_cnt, - .get_caps =3D ksz8_get_caps, .config_cpu_port =3D ksz8_config_cpu_port, .enable_stp_addr =3D ksz8_enable_stp_addr, .reset =3D ksz8_reset_switch, @@ -2261,7 +2263,6 @@ const struct ksz_dev_ops ksz88xx_dev_ops =3D { .r_mib_stat64 =3D ksz88xx_r_mib_stats64, .freeze_mib =3D ksz8_freeze_mib, .port_init_cnt =3D ksz8_port_init_cnt, - .get_caps =3D ksz8_get_caps, .config_cpu_port =3D ksz8_config_cpu_port, .enable_stp_addr =3D ksz8_enable_stp_addr, .reset =3D ksz8_reset_switch, @@ -2280,7 +2281,7 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .teardown =3D ksz_teardown, .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, - .phylink_get_caps =3D ksz_phylink_get_caps, + .phylink_get_caps =3D ksz8_phylink_get_caps, .port_setup =3D ksz_port_setup, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, @@ -2340,7 +2341,7 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .teardown =3D ksz_teardown, .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, - .phylink_get_caps =3D ksz_phylink_get_caps, + .phylink_get_caps =3D ksz8_phylink_get_caps, .port_setup =3D ksz_port_setup, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, @@ -2400,7 +2401,7 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .teardown =3D ksz_teardown, .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, - .phylink_get_caps =3D ksz_phylink_get_caps, + .phylink_get_caps =3D ksz8_phylink_get_caps, .port_setup =3D ksz_port_setup, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index 14ee9686ca0ab..65fd07ef73ad0 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -1165,9 +1165,11 @@ static phy_interface_t ksz9477_get_interface(struct = ksz_device *dev, int port) return interface; } =20 -static void ksz9477_get_caps(struct ksz_device *dev, int port, - struct phylink_config *config) +static void ksz9477_phylink_get_caps(struct dsa_switch *ds, int port, + struct phylink_config *config) { + struct ksz_device *dev =3D ds->priv; + config->mac_capabilities =3D MAC_10 | MAC_100 | MAC_ASYM_PAUSE | MAC_SYM_PAUSE; =20 @@ -1181,6 +1183,8 @@ static void ksz9477_get_caps(struct ksz_device *dev, = int port, config->supported_interfaces, p->pcs->supported_interfaces); } + + ksz_phylink_get_caps(ds, port, config); } =20 static int ksz9477_set_ageing_time(struct dsa_switch *ds, unsigned int mse= cs) @@ -1791,7 +1795,6 @@ const struct ksz_dev_ops ksz9477_dev_ops =3D { .r_mib_stat64 =3D ksz_r_mib_stats64, .freeze_mib =3D ksz9477_freeze_mib, .port_init_cnt =3D ksz9477_port_init_cnt, - .get_caps =3D ksz9477_get_caps, .pme_write8 =3D ksz_write8, .pme_pread8 =3D ksz_pread8, .pme_pwrite8 =3D ksz_pwrite8, @@ -1812,7 +1815,7 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .teardown =3D ksz_teardown, .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, - .phylink_get_caps =3D ksz_phylink_get_caps, + .phylink_get_caps =3D ksz9477_phylink_get_caps, .port_setup =3D ksz_port_setup, .set_ageing_time =3D ksz9477_set_ageing_time, .get_strings =3D ksz_get_strings, diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index ad7615849c7a4..4a7bcd1a93927 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -1995,9 +1995,6 @@ void ksz_phylink_get_caps(struct dsa_switch *ds, int = port, config->supported_interfaces); } =20 - if (dev->dev_ops->get_caps) - dev->dev_ops->get_caps(dev, port, config); - if (ds->ops->support_eee && ds->ops->support_eee(ds, port)) { memcpy(config->lpi_interfaces, config->supported_interfaces, sizeof(config->lpi_interfaces)); diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index 94eb79fa34392..f6dad256a550f 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -408,8 +408,6 @@ struct ksz_dev_ops { void (*r_mib_pkt)(struct ksz_device *dev, int port, u16 addr, u64 *dropped, u64 *cnt); void (*r_mib_stat64)(struct ksz_device *dev, int port); - void (*get_caps)(struct ksz_device *dev, int port, - struct phylink_config *config); int (*pme_write8)(struct ksz_device *dev, u32 reg, u8 value); int (*pme_pread8)(struct ksz_device *dev, int port, int offset, u8 *data); diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index 621139a2c3025..f84548168b371 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -575,9 +575,11 @@ static void lan937x_set_rgmii_rx_delay(struct ksz_devi= ce *dev, int port) lan937x_set_tune_adj(dev, port, REG_PORT_XMII_CTRL_4, val); } =20 -static void lan937x_phylink_get_caps(struct ksz_device *dev, int port, +static void lan937x_phylink_get_caps(struct dsa_switch *ds, int port, struct phylink_config *config) { + struct ksz_device *dev =3D ds->priv; + config->mac_capabilities =3D MAC_100FD; =20 if (dev->info->supports_rgmii[port]) { @@ -588,6 +590,8 @@ static void lan937x_phylink_get_caps(struct ksz_device = *dev, int port, config->mac_capabilities |=3D MAC_ASYM_PAUSE | MAC_SYM_PAUSE | MAC_100HD | MAC_10; } + + ksz_phylink_get_caps(ds, port, config); } =20 static void lan937x_setup_rgmii_delay(struct ksz_device *dev, int port) @@ -713,7 +717,6 @@ const struct ksz_dev_ops lan937x_dev_ops =3D { .r_mib_stat64 =3D ksz_r_mib_stats64, .freeze_mib =3D ksz9477_freeze_mib, .port_init_cnt =3D ksz9477_port_init_cnt, - .get_caps =3D lan937x_phylink_get_caps, .setup_rgmii_delay =3D lan937x_setup_rgmii_delay, .config_cpu_port =3D lan937x_config_cpu_port, .tc_cbs_set_cinc =3D lan937x_tc_cbs_set_cinc, @@ -731,7 +734,7 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .teardown =3D ksz_teardown, .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, - .phylink_get_caps =3D ksz_phylink_get_caps, + .phylink_get_caps =3D lan937x_phylink_get_caps, .port_setup =3D ksz_port_setup, .set_ageing_time =3D lan937x_set_ageing_time, .get_strings =3D ksz_get_strings, --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C70E3ADBAC; Tue, 12 May 2026 13:06:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591216; cv=none; b=me/vzDq4YZOFQhinLBJAPXIF4oZPmCDM4k+XHsp11IoPrNgiqw3DCLyCXfS+KAZnpDS8xhIPYXhLDCIgsLk9bduDomGyh+jgzNIPwf0MLEFzLTHja8KZMLcoRC0qvS7f/qCszFZNqLvXt1glU/2pVRUHhhSbfaUmGLgMEyxHc1o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591216; c=relaxed/simple; bh=UxwO+r5wuB5bFp15sC2t75Og5LJatnLwjr28V/ET4/0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=b9Zz+lAlWDg1Gx7cfmg81C/RKilUmwQUx+7LmpQPwh7Wp0roJOvvjawkPkonjOzEOCjdcB8K0dixLj55YDnHXWhFRbTII9FR27mJvJvPB/N9SCKo0BMrmWdnmXD+pRyRaMTQyVMWEdpS+uWYYcpuw/uFxxPMgRtk8rOXbNt/4nU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=SVztPN3I; arc=none smtp.client-ip=185.246.85.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="SVztPN3I" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 1F3AF4E42C1F; Tue, 12 May 2026 13:06:53 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id E7A6160646; Tue, 12 May 2026 13:06:52 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 5CC9411AF88B7; Tue, 12 May 2026 15:06:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591211; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=6wlZkhryxLjypQZDrECW3ZNzvfZK73vCLk6cn1DK/vw=; b=SVztPN3IMF485HV3elSVnrUv/io9rgk3Vl0Gdv9L0H21PH6tGsacrFjW9wqc8ANC8JuScF lbSi1iTuByHtoTFF4PzrQsCVlELaxzavsSKiLCAY7tb6AOODe0cfSSwyqLjdXLoYyZQWEA 9Z8abVdQuk11820SZemWaYRQ7g6hdh0+puHFIGaVtnIhCoq+Qq6Nw3TT4LHbCs8nArpNxU BKEUhuIVVzauw2A6yZoydX9lKjKiY3H4grSb2zDNC/I/7Tx5wTTkDF5T2K7bSc06Ds9W4+ /bRSF37EBN8BrGqNKPp9+a2Ph+Rm6pfIPkcw4zmPz1FXz+mVlHX9sTl4D1pISg== From: Bastien Curutchet Date: Tue, 12 May 2026 15:06:30 +0200 Subject: [PATCH net-next 08/15] net: dsa: microchip: don't reset on shutdown or driver removal Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-8-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" , Vladimir Oltean X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 From: Vladimir Oltean The ksz_switch driver is one of the few which reset the switch when unbinding the driver or shutting down - in the same category with ar9331_sw_remove(), bcm_sf2_sw_remove(), and ks8995_remove(), vsc73xx_remove() and lan9303_remove(). I don't think there exists any requirement to do this, and in fact it does create complications for WoL, as the code already shows. My issue with this logic is that it is the only thing keeping dev_ops->reset() necessary, which I would like to remove after individual KSZ switch families get their own setup() and teardown() methods that don't go through dev_ops. Don't reset the switch when unbinding the driver or shutting down. Remove the exit callbacks from the ksz_dev_ops. Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 8 -------- drivers/net/dsa/microchip/ksz9477.c | 6 ------ drivers/net/dsa/microchip/ksz_common.c | 32 ++++++++--------------------= ---- drivers/net/dsa/microchip/ksz_common.h | 1 - drivers/net/dsa/microchip/lan937x_main.c | 6 ------ 5 files changed, 8 insertions(+), 45 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 825133e9ce6e6..ccbc3480717f0 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -2109,11 +2109,6 @@ static int ksz8_switch_init(struct ksz_device *dev) return 0; } =20 -static void ksz8_switch_exit(struct ksz_device *dev) -{ - ksz8_reset_switch(dev); -} - static enum dsa_tag_protocol ksz8463_get_tag_protocol(struct dsa_switch *d= s, int port, enum dsa_tag_protocol mp) @@ -2226,7 +2221,6 @@ const struct ksz_dev_ops ksz8463_dev_ops =3D { .enable_stp_addr =3D ksz8_enable_stp_addr, .reset =3D ksz8_reset_switch, .init =3D ksz8_switch_init, - .exit =3D ksz8_switch_exit, }; =20 const struct ksz_dev_ops ksz87xx_dev_ops =3D { @@ -2245,7 +2239,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops =3D { .enable_stp_addr =3D ksz8_enable_stp_addr, .reset =3D ksz8_reset_switch, .init =3D ksz8_switch_init, - .exit =3D ksz8_switch_exit, .pme_write8 =3D ksz8_pme_write8, .pme_pread8 =3D ksz8_pme_pread8, .pme_pwrite8 =3D ksz8_pme_pwrite8, @@ -2267,7 +2260,6 @@ const struct ksz_dev_ops ksz88xx_dev_ops =3D { .enable_stp_addr =3D ksz8_enable_stp_addr, .reset =3D ksz8_reset_switch, .init =3D ksz8_switch_init, - .exit =3D ksz8_switch_exit, .pme_write8 =3D ksz8_pme_write8, .pme_pread8 =3D ksz8_pme_pread8, .pme_pwrite8 =3D ksz8_pme_pwrite8, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index 65fd07ef73ad0..88a5ff62aae89 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -1624,11 +1624,6 @@ static int ksz9477_switch_init(struct ksz_device *de= v) return 0; } =20 -static void ksz9477_switch_exit(struct ksz_device *dev) -{ - ksz9477_reset_switch(dev); -} - static enum dsa_tag_protocol ksz9477_get_tag_protocol(struct dsa_switch *d= s, int port, enum dsa_tag_protocol mp) @@ -1803,7 +1798,6 @@ const struct ksz_dev_ops ksz9477_dev_ops =3D { .enable_stp_addr =3D ksz9477_enable_stp_addr, .reset =3D ksz9477_reset_switch, .init =3D ksz9477_switch_init, - .exit =3D ksz9477_switch_exit, .pcs_create =3D ksz9477_pcs_create, }; =20 diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 4a7bcd1a93927..78d77a60a6ce2 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -4170,16 +4170,15 @@ int ksz_set_wol(struct dsa_switch *ds, int port, * the wol_enabled flag accordingly to reflect whether WoL is active on any * port. */ -static void ksz_wol_pre_shutdown(struct ksz_device *dev, bool *wol_enabled) +static void ksz_wol_pre_shutdown(struct ksz_device *dev) { const struct ksz_dev_ops *ops =3D dev->dev_ops; const u16 *regs =3D dev->info->regs; u8 pme_pin_en =3D PME_ENABLE; + bool wol_enabled =3D false; struct dsa_port *dp; int ret; =20 - *wol_enabled =3D false; - if (!is_ksz9477(dev) && !ksz_is_ksz87xx(dev)) return; =20 @@ -4192,7 +4191,7 @@ static void ksz_wol_pre_shutdown(struct ksz_device *d= ev, bool *wol_enabled) ret =3D ops->pme_pread8(dev, dp->index, regs[REG_PORT_PME_CTRL], &pme_ctrl); if (!ret && pme_ctrl) - *wol_enabled =3D true; + wol_enabled =3D true; =20 /* make sure there are no pending wake events which would * prevent the device from going to sleep/shutdown. @@ -4201,7 +4200,7 @@ static void ksz_wol_pre_shutdown(struct ksz_device *d= ev, bool *wol_enabled) } =20 /* Now we are save to enable PME pin. */ - if (*wol_enabled) { + if (wol_enabled) { if (dev->pme_active_high) pme_pin_en |=3D PME_POLARITY; ops->pme_write8(dev, regs[REG_SW_PME_CTRL], pme_pin_en); @@ -4480,20 +4479,12 @@ EXPORT_SYMBOL(ksz_switch_alloc); * @dev: The switch device structure. * * This function is responsible for initiating a shutdown sequence for the - * switch device. It invokes the reset operation defined in the device - * operations, if available, to reset the switch. Subsequently, it calls t= he - * DSA framework's shutdown function to ensure a proper shutdown of the DSA - * switch. + * switch device. Subsequently, it calls the DSA framework's shutdown func= tion + * to ensure a proper shutdown of the DSA switch. */ void ksz_switch_shutdown(struct ksz_device *dev) { - bool wol_enabled =3D false; - - ksz_wol_pre_shutdown(dev, &wol_enabled); - - if (dev->dev_ops->reset && !wol_enabled) - dev->dev_ops->reset(dev); - + ksz_wol_pre_shutdown(dev); dsa_switch_shutdown(dev->ds); } EXPORT_SYMBOL(ksz_switch_shutdown); @@ -4943,10 +4934,8 @@ int ksz_switch_register(struct ksz_device *dev) } =20 ret =3D dsa_register_switch(dev->ds); - if (ret) { - dev->dev_ops->exit(dev); + if (ret) return ret; - } =20 /* Read MIB counters every 30 seconds to avoid overflow. */ dev->mib_read_interval =3D msecs_to_jiffies(5000); @@ -4966,12 +4955,7 @@ void ksz_switch_remove(struct ksz_device *dev) cancel_delayed_work_sync(&dev->mib_read); } =20 - dev->dev_ops->exit(dev); dsa_unregister_switch(dev->ds); - - if (dev->reset_gpio) - gpiod_set_value_cansleep(dev->reset_gpio, 1); - } EXPORT_SYMBOL(ksz_switch_remove); =20 diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index f6dad256a550f..1cdb6661729a6 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -421,7 +421,6 @@ struct ksz_dev_ops { int (*enable_stp_addr)(struct ksz_device *dev); int (*reset)(struct ksz_device *dev); int (*init)(struct ksz_device *dev); - void (*exit)(struct ksz_device *dev); =20 int (*pcs_create)(struct ksz_device *dev); }; diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index f84548168b371..778e32f568df4 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -668,11 +668,6 @@ static void lan937x_teardown(struct dsa_switch *ds) =20 } =20 -static void lan937x_switch_exit(struct ksz_device *dev) -{ - lan937x_reset_switch(dev); -} - static enum dsa_tag_protocol lan937x_get_tag_protocol(struct dsa_switch *d= s, int port, enum dsa_tag_protocol mp) @@ -723,7 +718,6 @@ const struct ksz_dev_ops lan937x_dev_ops =3D { .enable_stp_addr =3D ksz9477_enable_stp_addr, .reset =3D lan937x_reset_switch, .init =3D lan937x_switch_init, - .exit =3D lan937x_switch_exit, }; =20 const struct dsa_switch_ops lan937x_switch_ops =3D { --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62BEB3AFAE4 for ; Tue, 12 May 2026 13:06:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591218; cv=none; b=sap74c9Q6fp2bVoMGKy6WoO1seFVtwa+p0l6NdbeZoFLOsHGxpxHzsBMMh26lVLFJbdE/ejAS31bWrTDvuENmMTeV/eGDktqm0hHghvqqTV+LAAOvHQND9mbu7RV6bpTNx0CARhHk2ENapeqNHeinLAAbtbtZ0za0avdG+NpyTM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591218; c=relaxed/simple; bh=3LxElBOxJLRd9Q4qi4cg2fOh9USgK7YBzXtsouHkZ7I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iUCaAFV0sXczh0OSkN53pcHevFnDbpVRGE0ABBhnERZI3T7j0FFRwtR8PwqUiiEYdeiAuQ42c02LUcynX2738eQIuSV7KmTRKbDhP3kSWZKxBtosrF110pcX9/rlpRSDRA1A+aC/HxD8QG8ohIWfy2tDQnd1FoSkdY0jBZPYOXg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=1CpmxlBR; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="1CpmxlBR" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 2C8B3C5E179; Tue, 12 May 2026 13:07:45 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 301A160646; Tue, 12 May 2026 13:06:55 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 414A811AF8CCB; Tue, 12 May 2026 15:06:52 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591214; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=Ju3/kyVC5648lwOekB1EhFgUY0zqwPy+KKgsrhJfkEo=; b=1CpmxlBRsP2333EKyFpaAwRDT2zncqnFQ26qaby51WIyYhkWmdF+RH35JlxtrL4ZgbD0jC oz/WsQRgzGutTvM931wHhzPrXiaAUGv50IGM/sPDSYzUuF6szKNodalMtEk72wi4Uo69xW qjduj5pMHBUAsMQSt1qm9wJWENn67nxA7v/1Ul/HfM/B4+ZYJix+zXpoJA3rXloqP9F3d/ azP3rWCCgh5r+iC4RHzsBu3uyZfdT0nq/8r8XVXpomdc76qLSlsrHJzreGM77g6Bkc+A+4 VG6CkYIJsdEznW2pRMSdsL45746258fL/nZmaGD6Na2NkMaX59TbTv/klNU8jA== From: Bastien Curutchet Date: Tue, 12 May 2026 15:06:31 +0200 Subject: [PATCH net-next 09/15] net: dsa: microchip: bypass dev_ops->setup() and teardown() for lan937x Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-9-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" , Vladimir Oltean X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 From: Vladimir Oltean The KSZ switch families are sufficiently different that a common ds->ops->setup() - ksz_setup() with micro-managed dev_ops->reset(), dev_ops->pcs_create(), dev_ops->config_cpu_port(), dev_ops->enable_stp_addr(), dev_ops->setup() seems to be too convoluted. I am proposing to make each KSZ switch family part ways for dsa_switch_ops :: setup() and teardown(), to allow them greater flexibility. This here is the implementation for lan937x, which is nothing other than a copy of ksz_setup() with the dev_ops function pointers replaced with direct function calls. Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz_common.c | 12 ++-- drivers/net/dsa/microchip/ksz_common.h | 6 ++ drivers/net/dsa/microchip/lan937x_main.c | 116 +++++++++++++++++++++++++++= +--- 3 files changed, 116 insertions(+), 18 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 78d77a60a6ce2..c2624b1930f51 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -2488,7 +2488,7 @@ static int ksz_parse_dt_phy_config(struct ksz_device = *dev, struct mii_bus *bus, * * Return: 0 on success, or a negative error code on failure. */ -static int ksz_mdio_register(struct ksz_device *dev) +int ksz_mdio_register(struct ksz_device *dev) { struct device_node *parent_bus_node; struct mii_bus *parent_bus =3D NULL; @@ -2644,7 +2644,7 @@ static const struct irq_domain_ops ksz_irq_domain_ops= =3D { .xlate =3D irq_domain_xlate_twocell, }; =20 -static void ksz_irq_free(struct ksz_irq *kirq) +void ksz_irq_free(struct ksz_irq *kirq) { int irq, virq; =20 @@ -2713,7 +2713,7 @@ static int ksz_irq_common_setup(struct ksz_device *de= v, struct ksz_irq *kirq) return ret; } =20 -static int ksz_girq_setup(struct ksz_device *dev) +int ksz_girq_setup(struct ksz_device *dev) { struct ksz_irq *girq =3D &dev->girq; =20 @@ -2728,7 +2728,7 @@ static int ksz_girq_setup(struct ksz_device *dev) return ksz_irq_common_setup(dev, girq); } =20 -static int ksz_pirq_setup(struct ksz_device *dev, u8 p) +int ksz_pirq_setup(struct ksz_device *dev, u8 p) { struct ksz_irq *pirq =3D &dev->ports[p].pirq; =20 @@ -2745,8 +2745,6 @@ static int ksz_pirq_setup(struct ksz_device *dev, u8 = p) return ksz_irq_common_setup(dev, pirq); } =20 -static int ksz_parse_drive_strength(struct ksz_device *dev); - int ksz_setup(struct dsa_switch *ds) { struct ksz_device *dev =3D ds->priv; @@ -4698,7 +4696,7 @@ static int ksz88x3_drive_strength_write(struct ksz_de= vice *dev, * * Return: 0 on success, error code otherwise */ -static int ksz_parse_drive_strength(struct ksz_device *dev) +int ksz_parse_drive_strength(struct ksz_device *dev) { struct ksz_driver_strength_prop of_props[] =3D { [KSZ_DRIVER_STRENGTH_HI] =3D { diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index 1cdb6661729a6..5fad56c2d067a 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -518,6 +518,12 @@ int ksz_hsr_leave(struct dsa_switch *ds, int port, int ksz_suspend(struct dsa_switch *ds); int ksz_resume(struct dsa_switch *ds); =20 +int ksz_mdio_register(struct ksz_device *dev); +int ksz_pirq_setup(struct ksz_device *dev, u8 p); +int ksz_girq_setup(struct ksz_device *dev); +void ksz_irq_free(struct ksz_irq *kirq); +int ksz_parse_drive_strength(struct ksz_device *dev); + /* Common register access functions */ static inline struct regmap *ksz_regmap_8(struct ksz_device *dev) { diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index 778e32f568df4..ecb072cd99819 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -626,8 +626,49 @@ static int lan937x_switch_init(struct ksz_device *dev) static int lan937x_setup(struct dsa_switch *ds) { struct ksz_device *dev =3D ds->priv; + u16 storm_mask, storm_rate; + struct dsa_port *dp; + struct ksz_port *p; + const u16 *regs; int ret; =20 + regs =3D dev->info->regs; + + dev->vlan_cache =3D devm_kcalloc(dev->dev, sizeof(struct vlan_table), + dev->info->num_vlans, GFP_KERNEL); + if (!dev->vlan_cache) + return -ENOMEM; + + ret =3D lan937x_reset_switch(dev); + if (ret) { + dev_err(ds->dev, "failed to reset switch\n"); + return ret; + } + + ret =3D ksz_parse_drive_strength(dev); + if (ret) + return ret; + + /* set broadcast storm protection 10% rate */ + storm_mask =3D BROADCAST_STORM_RATE; + storm_rate =3D (BROADCAST_STORM_VALUE * BROADCAST_STORM_PROT_RATE) / 100; + regmap_update_bits(ksz_regmap_16(dev), regs[S_BROADCAST_CTRL], + storm_mask, storm_rate); + + lan937x_config_cpu_port(ds); + + ksz9477_enable_stp_addr(dev); + + ds->num_tx_queues =3D dev->info->num_tx_queues; + + regmap_update_bits(ksz_regmap_8(dev), regs[S_MULTICAST_CTRL], + MULTICAST_STORM_DISABLE, MULTICAST_STORM_DISABLE); + + ksz_init_mib_timer(dev); + + ds->configure_vlan_while_not_filtering =3D false; + ds->dscp_prio_mapping_is_global =3D true; + /* The VLAN aware is a global setting. Mixed vlan * filterings are not supported. */ @@ -659,13 +700,71 @@ static int lan937x_setup(struct dsa_switch *ds) return ret; =20 /* Disable global VPHY support. Related to CPU interface only? */ - return ksz_rmw32(dev, REG_SW_CFG_STRAP_OVR, SW_VPHY_DISABLE, - SW_VPHY_DISABLE); -} + ret =3D ksz_rmw32(dev, REG_SW_CFG_STRAP_OVR, SW_VPHY_DISABLE, + SW_VPHY_DISABLE); + if (ret < 0) + return ret; =20 -static void lan937x_teardown(struct dsa_switch *ds) -{ + /* Start with learning disabled on standalone user ports, and enabled + * on the CPU port. In lack of other finer mechanisms, learning on the + * CPU port will avoid flooding bridge local addresses on the network + * in some cases. + */ + p =3D &dev->ports[dev->cpu_port]; + p->learning =3D true; =20 + if (dev->irq > 0) { + ret =3D ksz_girq_setup(dev); + if (ret) + return ret; + + dsa_switch_for_each_user_port(dp, dev->ds) { + ret =3D ksz_pirq_setup(dev, dp->index); + if (ret) + goto port_release; + + ret =3D ksz_ptp_irq_setup(ds, dp->index); + if (ret) + goto pirq_release; + } + } + + ret =3D ksz_ptp_clock_register(ds); + if (ret) { + dev_err(dev->dev, "Failed to register PTP clock: %d\n", + ret); + goto port_release; + } + + ret =3D ksz_mdio_register(dev); + if (ret < 0) { + dev_err(dev->dev, "failed to register the mdio"); + goto out_ptp_clock_unregister; + } + + ret =3D ksz_dcb_init(dev); + if (ret) + goto out_ptp_clock_unregister; + + /* start switch */ + regmap_update_bits(ksz_regmap_8(dev), regs[S_START_CTRL], + SW_START, SW_START); + + return 0; + +out_ptp_clock_unregister: + ksz_ptp_clock_unregister(ds); +port_release: + if (dev->irq > 0) { + dsa_switch_for_each_user_port_continue_reverse(dp, dev->ds) { + ksz_ptp_irq_free(ds, dp->index); +pirq_release: + ksz_irq_free(&dev->ports[dp->index].pirq); + } + ksz_irq_free(&dev->girq); + } + + return ret; } =20 static enum dsa_tag_protocol lan937x_get_tag_protocol(struct dsa_switch *d= s, @@ -698,8 +797,6 @@ const struct phylink_mac_ops lan937x_phylink_mac_ops = =3D { }; =20 const struct ksz_dev_ops lan937x_dev_ops =3D { - .setup =3D lan937x_setup, - .teardown =3D lan937x_teardown, .get_port_addr =3D ksz9477_get_port_addr, .cfg_port_member =3D ksz9477_cfg_port_member, .port_setup =3D lan937x_port_setup, @@ -713,10 +810,7 @@ const struct ksz_dev_ops lan937x_dev_ops =3D { .freeze_mib =3D ksz9477_freeze_mib, .port_init_cnt =3D ksz9477_port_init_cnt, .setup_rgmii_delay =3D lan937x_setup_rgmii_delay, - .config_cpu_port =3D lan937x_config_cpu_port, .tc_cbs_set_cinc =3D lan937x_tc_cbs_set_cinc, - .enable_stp_addr =3D ksz9477_enable_stp_addr, - .reset =3D lan937x_reset_switch, .init =3D lan937x_switch_init, }; =20 @@ -724,7 +818,7 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .get_tag_protocol =3D lan937x_get_tag_protocol, .connect_tag_protocol =3D lan937x_connect_tag_protocol, .get_phy_flags =3D ksz_get_phy_flags, - .setup =3D ksz_setup, + .setup =3D lan937x_setup, .teardown =3D ksz_teardown, .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 478973B102B for ; Tue, 12 May 2026 13:06:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591220; cv=none; b=IEOaQ5MSN6MMzvSmcjox+YZctuwOq+Xu/sypxl/8GFoLNuxGSv3IwIeykBDCf4WkItZliWJTCXvT8ZoQlM6Gxp+D7S+9jkaBdvbLp/7H5UnhNxW4PvPyPo/Tn2sHibPCWUvAIA1g/xB5MmkvHyVIpIN+JfXhIfr7z9WCNixCRmo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591220; c=relaxed/simple; bh=ZKfxWajAxYQs1sfsZ9MJXJTY63iDTlUlFlRAAn53PaQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VMiqPH8MfxC02cpVzmMQ6NPUdZZLW4ZiMcm1eKV9YihWZHwTqp6RwzGYCY8+AsuvJnR3Q1FJ5KoQnSKwizCCbY4zg91oEiOpRll4X6MiJO3MrCYV897K2pC0pEEATOBUCgqhgxc1MfAoTI+0nVDtRvzbd7nz4U5yWc0KjSUhNaM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=2iNUl7UI; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="2iNUl7UI" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 15AE6C5E17B; Tue, 12 May 2026 13:07:47 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 19D3660646; Tue, 12 May 2026 13:06:57 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 7663111AF8CD0; Tue, 12 May 2026 15:06:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591216; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=PdhuDCwcMhUVRIDe9AhfDuhFhu55EzwmwPrb4Ns3vJA=; b=2iNUl7UIcc9N4dHITVYWYl44uV72V6rw2EqtwAE/4NK5b1Cz2XdiqNQZsNCPkuQjV4/BZh CEhsXxRDSzWuBLgl43oylsp6Z/qEo0ijAuvKMzAyAORlDAe5/3ZbPFsOUUI47AJm/w2j9G K4aJJw7fJUmlYyTb7AiA7TmPPjKszaknJKKgtmt6YdXKFWC8ITwfCItkVGNbVlL3NJ4HDk IxiBY7SGpigV7Z06edfyGTrPE7yeREaobJDKxthNeqqLPJC8BJiePfXTJtvWsA1Gn6CtSi veKSc2Pz9Im8JiN1R4AvDXEpDTr/Pmakn0ysOZ05elmHdpCh0JGvfCegW3NLgw== From: Bastien Curutchet Date: Tue, 12 May 2026 15:06:32 +0200 Subject: [PATCH net-next 10/15] net: dsa: microchip: bypass dev_ops->setup() and teardown() for ksz9477 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-10-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" , Vladimir Oltean X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 From: Vladimir Oltean The KSZ switch families are sufficiently different that a common ds->ops->setup() - ksz_setup() with micro-managed dev_ops->reset(), dev_ops->pcs_create(), dev_ops->config_cpu_port(), dev_ops->enable_stp_addr(), dev_ops->setup() seems to be too convoluted. I am proposing to make each KSZ switch family part ways for dsa_switch_ops :: setup() and teardown(), to allow them greater flexibility. This here is the implementation for ksz9477, which is nothing other than a copy of ksz_setup() with the dev_ops function pointers replaced with direct function calls. Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz9477.c | 127 ++++++++++++++++++++++++++++++++= +--- 1 file changed, 118 insertions(+), 9 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index 88a5ff62aae89..7385aa4e788a1 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -1477,9 +1477,54 @@ int ksz9477_enable_stp_addr(struct ksz_device *dev) static int ksz9477_setup(struct dsa_switch *ds) { struct ksz_device *dev =3D ds->priv; - const u16 *regs =3D dev->info->regs; - int ret =3D 0; + u16 storm_mask, storm_rate; + struct dsa_port *dp; + struct ksz_port *p; + const u16 *regs; + int ret; + + regs =3D dev->info->regs; + + dev->vlan_cache =3D devm_kcalloc(dev->dev, sizeof(struct vlan_table), + dev->info->num_vlans, GFP_KERNEL); + if (!dev->vlan_cache) + return -ENOMEM; + + ret =3D ksz9477_reset_switch(dev); + if (ret) { + dev_err(ds->dev, "failed to reset switch\n"); + return ret; + } + + ret =3D ksz_parse_drive_strength(dev); + if (ret) + return ret; =20 + if (ksz_has_sgmii_port(dev)) { + ret =3D ksz9477_pcs_create(dev); + if (ret) + return ret; + } + + /* set broadcast storm protection 10% rate */ + storm_mask =3D BROADCAST_STORM_RATE; + storm_rate =3D (BROADCAST_STORM_VALUE * BROADCAST_STORM_PROT_RATE) / 100; + regmap_update_bits(ksz_regmap_16(dev), regs[S_BROADCAST_CTRL], + storm_mask, storm_rate); + + ksz9477_config_cpu_port(ds); + + ksz9477_enable_stp_addr(dev); + + ds->num_tx_queues =3D dev->info->num_tx_queues; + + regmap_update_bits(ksz_regmap_8(dev), regs[S_MULTICAST_CTRL], + MULTICAST_STORM_DISABLE, MULTICAST_STORM_DISABLE); + + ksz_init_mib_timer(dev); + + ds->configure_vlan_while_not_filtering =3D false; + ds->dscp_prio_mapping_is_global =3D true; ds->mtu_enforcement_ingress =3D true; =20 /* Required for port partitioning. */ @@ -1512,7 +1557,76 @@ static int ksz9477_setup(struct dsa_switch *ds) * be enabled by ksz_wol_pre_shutdown(). Otherwise, some PMICs * do not like PME events changes before shutdown. */ - return ksz_write8(dev, regs[REG_SW_PME_CTRL], 0); + ret =3D ksz_write8(dev, regs[REG_SW_PME_CTRL], 0); + if (ret < 0) + return ret; + + /* Start with learning disabled on standalone user ports, and enabled + * on the CPU port. In lack of other finer mechanisms, learning on the + * CPU port will avoid flooding bridge local addresses on the network + * in some cases. + */ + p =3D &dev->ports[dev->cpu_port]; + p->learning =3D true; + + if (dev->irq > 0) { + ret =3D ksz_girq_setup(dev); + if (ret) + return ret; + + dsa_switch_for_each_user_port(dp, dev->ds) { + ret =3D ksz_pirq_setup(dev, dp->index); + if (ret) + goto port_release; + + if (dev->info->ptp_capable) { + ret =3D ksz_ptp_irq_setup(ds, dp->index); + if (ret) + goto pirq_release; + } + } + } + + if (dev->info->ptp_capable) { + ret =3D ksz_ptp_clock_register(ds); + if (ret) { + dev_err(dev->dev, "Failed to register PTP clock: %d\n", + ret); + goto port_release; + } + } + + ret =3D ksz_mdio_register(dev); + if (ret < 0) { + dev_err(dev->dev, "failed to register the mdio"); + goto out_ptp_clock_unregister; + } + + ret =3D ksz_dcb_init(dev); + if (ret) + goto out_ptp_clock_unregister; + + /* start switch */ + regmap_update_bits(ksz_regmap_8(dev), regs[S_START_CTRL], + SW_START, SW_START); + + return 0; + +out_ptp_clock_unregister: + if (dev->info->ptp_capable) + ksz_ptp_clock_unregister(ds); +port_release: + if (dev->irq > 0) { + dsa_switch_for_each_user_port_continue_reverse(dp, dev->ds) { + if (dev->info->ptp_capable) + ksz_ptp_irq_free(ds, dp->index); +pirq_release: + ksz_irq_free(&dev->ports[dp->index].pirq); + } + ksz_irq_free(&dev->girq); + } + + return ret; } =20 u32 ksz9477_get_port_addr(int port, int offset) @@ -1779,7 +1893,6 @@ const struct phylink_mac_ops ksz9477_phylink_mac_ops = =3D { }; =20 const struct ksz_dev_ops ksz9477_dev_ops =3D { - .setup =3D ksz9477_setup, .get_port_addr =3D ksz9477_get_port_addr, .cfg_port_member =3D ksz9477_cfg_port_member, .port_setup =3D ksz9477_port_setup, @@ -1793,19 +1906,15 @@ const struct ksz_dev_ops ksz9477_dev_ops =3D { .pme_write8 =3D ksz_write8, .pme_pread8 =3D ksz_pread8, .pme_pwrite8 =3D ksz_pwrite8, - .config_cpu_port =3D ksz9477_config_cpu_port, .tc_cbs_set_cinc =3D ksz9477_tc_cbs_set_cinc, - .enable_stp_addr =3D ksz9477_enable_stp_addr, - .reset =3D ksz9477_reset_switch, .init =3D ksz9477_switch_init, - .pcs_create =3D ksz9477_pcs_create, }; =20 const struct dsa_switch_ops ksz9477_switch_ops =3D { .get_tag_protocol =3D ksz9477_get_tag_protocol, .connect_tag_protocol =3D ksz9477_connect_tag_protocol, .get_phy_flags =3D ksz_get_phy_flags, - .setup =3D ksz_setup, + .setup =3D ksz9477_setup, .teardown =3D ksz_teardown, .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 98AE2394EAC; Tue, 12 May 2026 13:07:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591222; cv=none; b=fd6IX8axYYH/PKnHKR1mCqse0OSQ90nWz4HH1Q0C3gpMdiHr/1qH3lTIoiKZKOI/Z5t8SlWatDMgkXvp0kBVFu/fYc23dNLbgOOtVVZ/gIT7tAkSUmMH0fnn+vT1PuLSUW9PnvTsCzUbLJm67tZvZQvCR8Jx8cvR8cP4jaMQyjs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591222; c=relaxed/simple; bh=8INYcjCosLoWjf5+22nOoZPK/DuHVkrMWEiegOfQqE8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ghF0FnmR7MvnsOOAgXgQVQ6ABy56xUmx6KuSwqt0noSbROskbI5huSzPyBTOZcxkFmUStra06aMgNLf5ZXLghdO355zeBGSg+gvCjwmL+2olCqxRyK2U4vQlTWYHV4+gpXtyb8XdzHqkIaH53hEhGc5C26yx4LUqjxdcHtjgWPE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=IQx+TPDU; arc=none smtp.client-ip=185.246.85.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="IQx+TPDU" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 7076A4E42C1F; Tue, 12 May 2026 13:06:59 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 459DC60646; Tue, 12 May 2026 13:06:59 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 801D411AF8CCA; Tue, 12 May 2026 15:06:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591218; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=wagOjcYVHwlbA375YAevU6ZXDvzMYd+YY6qQOZBQMZk=; b=IQx+TPDUctGHqbyTQzLBs2f+a+XvDPxJP0gDcAPPvjYTIbDWCSDZcS5s8ZDdy4GInocC9a 5pwXFGuSvW5lxLmoN9NxJEFsv2MozeT5EkjZSEhhFeJo6z3opXmURGpfecIVUqGQHe2rLs LSC3bHN5XTXNdJ1WWT/bCNjV2ar592axFgEq1lGTE1SKHtFi50cj0yZrZvx5TiBe/COZkx z0u5p+bNpQcCbys+t17m2TVEfP14C3pwkH3qfto5ZsKAQrGm4LiaM9S+viUK9dtXjN2Ql5 NwxvXsh8gexUVtDxj98IaY0oobXO0CAYgODTs48AXdFii6394244zesbqqqH6w== From: Bastien Curutchet Date: Tue, 12 May 2026 15:06:33 +0200 Subject: [PATCH net-next 11/15] net: dsa: microchip: bypass dev_ops->setup() and teardown() for ksz8 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-11-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" , Vladimir Oltean X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 From: Vladimir Oltean The KSZ switch families are sufficiently different that a common ds->ops->setup() - ksz_setup() with micro-managed dev_ops->reset(), dev_ops->pcs_create(), dev_ops->config_cpu_port(), dev_ops->enable_stp_addr(), dev_ops->setup() seems to be too convoluted. I am proposing to make each KSZ switch family part ways for dsa_switch_ops :: setup() and teardown(), to allow them greater flexibility. This here is the implementation for ksz8, which is nothing other than a copy of ksz_setup() with the dev_ops function pointers replaced with direct function calls. Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 139 +++++++++++++++++++++++++++++++++--= ---- 1 file changed, 119 insertions(+), 20 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index ccbc3480717f0..acc898c68f985 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -1935,9 +1935,52 @@ static int ksz8_enable_stp_addr(struct ksz_device *d= ev) static int ksz8_setup(struct dsa_switch *ds) { struct ksz_device *dev =3D ds->priv; - const u16 *regs =3D dev->info->regs; - int i, ret =3D 0; + u16 storm_mask, storm_rate; + struct dsa_port *dp; + struct ksz_port *p; + const u16 *regs; + int i, ret; + + regs =3D dev->info->regs; + + dev->vlan_cache =3D devm_kcalloc(dev->dev, sizeof(struct vlan_table), + dev->info->num_vlans, GFP_KERNEL); + if (!dev->vlan_cache) + return -ENOMEM; + + ret =3D ksz8_reset_switch(dev); + if (ret) { + dev_err(ds->dev, "failed to reset switch\n"); + return ret; + } + + ret =3D ksz_parse_drive_strength(dev); + if (ret) + return ret; + + /* set broadcast storm protection 10% rate */ + storm_mask =3D BROADCAST_STORM_RATE; + storm_rate =3D (BROADCAST_STORM_VALUE * BROADCAST_STORM_PROT_RATE) / 100; + if (ksz_is_ksz8463(dev)) { + storm_mask =3D swab16(storm_mask); + storm_rate =3D swab16(storm_rate); + } + regmap_update_bits(ksz_regmap_16(dev), regs[S_BROADCAST_CTRL], + storm_mask, storm_rate); + + ksz8_config_cpu_port(ds); + + ksz8_enable_stp_addr(dev); + + ds->num_tx_queues =3D dev->info->num_tx_queues; + + regmap_update_bits(ksz_regmap_8(dev), regs[S_MULTICAST_CTRL], + MULTICAST_STORM_DISABLE, MULTICAST_STORM_DISABLE); + + ksz_init_mib_timer(dev); =20 + ds->configure_vlan_while_not_filtering =3D false; + ds->dscp_prio_mapping_is_global =3D true; ds->mtu_enforcement_ingress =3D true; =20 /* We rely on software untagging on the CPU port, so that we @@ -1987,12 +2030,80 @@ static int ksz8_setup(struct dsa_switch *ds) ret =3D ksz8_pme_write8(dev, regs[REG_SW_PME_CTRL], 0); if (!ret) ret =3D ksz_rmw8(dev, REG_INT_ENABLE, INT_PME, 0); + if (ret) + return ret; } =20 - if (!ret) - return ksz8_handle_global_errata(ds); - else + ret =3D ksz8_handle_global_errata(ds); + if (ret) return ret; + + /* Start with learning disabled on standalone user ports, and enabled + * on the CPU port. In lack of other finer mechanisms, learning on the + * CPU port will avoid flooding bridge local addresses on the network + * in some cases. + */ + p =3D &dev->ports[dev->cpu_port]; + p->learning =3D true; + + if (dev->irq > 0) { + ret =3D ksz_girq_setup(dev); + if (ret) + return ret; + + dsa_switch_for_each_user_port(dp, dev->ds) { + ret =3D ksz_pirq_setup(dev, dp->index); + if (ret) + goto port_release; + + if (dev->info->ptp_capable) { + ret =3D ksz_ptp_irq_setup(ds, dp->index); + if (ret) + goto pirq_release; + } + } + } + + if (dev->info->ptp_capable) { + ret =3D ksz_ptp_clock_register(ds); + if (ret) { + dev_err(dev->dev, "Failed to register PTP clock: %d\n", + ret); + goto port_release; + } + } + + ret =3D ksz_mdio_register(dev); + if (ret < 0) { + dev_err(dev->dev, "failed to register the mdio"); + goto out_ptp_clock_unregister; + } + + ret =3D ksz_dcb_init(dev); + if (ret) + goto out_ptp_clock_unregister; + + /* start switch */ + regmap_update_bits(ksz_regmap_8(dev), regs[S_START_CTRL], + SW_START, SW_START); + + return 0; + +out_ptp_clock_unregister: + if (dev->info->ptp_capable) + ksz_ptp_clock_unregister(ds); +port_release: + if (dev->irq > 0) { + dsa_switch_for_each_user_port_continue_reverse(dp, dev->ds) { + if (dev->info->ptp_capable) + ksz_ptp_irq_free(ds, dp->index); +pirq_release: + ksz_irq_free(&dev->ports[dp->index].pirq); + } + ksz_irq_free(&dev->girq); + } + + return ret; } =20 static void ksz8_phylink_get_caps(struct dsa_switch *ds, int port, @@ -2206,7 +2317,6 @@ const struct phylink_mac_ops ksz8_phylink_mac_ops =3D= { }; =20 const struct ksz_dev_ops ksz8463_dev_ops =3D { - .setup =3D ksz8_setup, .get_port_addr =3D ksz8463_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, .port_setup =3D ksz8_port_setup, @@ -2217,14 +2327,10 @@ const struct ksz_dev_ops ksz8463_dev_ops =3D { .r_mib_stat64 =3D ksz88xx_r_mib_stats64, .freeze_mib =3D ksz8_freeze_mib, .port_init_cnt =3D ksz8_port_init_cnt, - .config_cpu_port =3D ksz8_config_cpu_port, - .enable_stp_addr =3D ksz8_enable_stp_addr, - .reset =3D ksz8_reset_switch, .init =3D ksz8_switch_init, }; =20 const struct ksz_dev_ops ksz87xx_dev_ops =3D { - .setup =3D ksz8_setup, .get_port_addr =3D ksz8_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, .port_setup =3D ksz8_port_setup, @@ -2235,9 +2341,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops =3D { .r_mib_stat64 =3D ksz_r_mib_stats64, .freeze_mib =3D ksz8_freeze_mib, .port_init_cnt =3D ksz8_port_init_cnt, - .config_cpu_port =3D ksz8_config_cpu_port, - .enable_stp_addr =3D ksz8_enable_stp_addr, - .reset =3D ksz8_reset_switch, .init =3D ksz8_switch_init, .pme_write8 =3D ksz8_pme_write8, .pme_pread8 =3D ksz8_pme_pread8, @@ -2245,7 +2348,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops =3D { }; =20 const struct ksz_dev_ops ksz88xx_dev_ops =3D { - .setup =3D ksz8_setup, .get_port_addr =3D ksz8_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, .port_setup =3D ksz8_port_setup, @@ -2256,9 +2358,6 @@ const struct ksz_dev_ops ksz88xx_dev_ops =3D { .r_mib_stat64 =3D ksz88xx_r_mib_stats64, .freeze_mib =3D ksz8_freeze_mib, .port_init_cnt =3D ksz8_port_init_cnt, - .config_cpu_port =3D ksz8_config_cpu_port, - .enable_stp_addr =3D ksz8_enable_stp_addr, - .reset =3D ksz8_reset_switch, .init =3D ksz8_switch_init, .pme_write8 =3D ksz8_pme_write8, .pme_pread8 =3D ksz8_pme_pread8, @@ -2269,7 +2368,7 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .get_tag_protocol =3D ksz8463_get_tag_protocol, .connect_tag_protocol =3D ksz8463_connect_tag_protocol, .get_phy_flags =3D ksz_get_phy_flags, - .setup =3D ksz_setup, + .setup =3D ksz8_setup, .teardown =3D ksz_teardown, .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, @@ -2329,7 +2428,7 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .get_tag_protocol =3D ksz87xx_get_tag_protocol, .connect_tag_protocol =3D ksz87xx_connect_tag_protocol, .get_phy_flags =3D ksz_get_phy_flags, - .setup =3D ksz_setup, + .setup =3D ksz8_setup, .teardown =3D ksz_teardown, .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, @@ -2389,7 +2488,7 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .get_tag_protocol =3D ksz88xx_get_tag_protocol, .connect_tag_protocol =3D ksz88xx_connect_tag_protocol, .get_phy_flags =3D ksz_get_phy_flags, - .setup =3D ksz_setup, + .setup =3D ksz8_setup, .teardown =3D ksz_teardown, .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7D4B3B440D for ; Tue, 12 May 2026 13:07:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591224; cv=none; b=Yez/rusqmlMvjVAISRdSRLHIICU4YIOFENe36PUEEj2K5CVIVhP2IBSpFVVLh/uiAamURbKBrb+o/RR0qWtFgZ1+qtk818Odvs15Q3tCDBa2DRFiD6AHuBwIrop6TXyv5GWUKmgURqHN+FgDUJnq1EPWCYLSeSLJRyvYes/opPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591224; c=relaxed/simple; bh=ll46DGOyhjsJvmihlV5o0j5gGJoeA0LP/URMNEHa6Zo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dEBq8eblydOM5mK2JsqLdCEY8mz6/LTh1TNjV9/9SZrp77ommQY0X4sFSwTPurhxerOgvJ0shf16S489otSJvJ/x0CSohgFaOmAF70gkjQtkVsW0DY8ipdgOiXOqMejJGGGWm4ZbIPLrVbFPTF2BhdNHyGrnhukWcCwCd1R4i7I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=IKJNSF+a; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="IKJNSF+a" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id A48AB1A357C; Tue, 12 May 2026 13:07:01 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 795A560646; Tue, 12 May 2026 13:07:01 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 8D2C711AF8CD2; Tue, 12 May 2026 15:06:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591220; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=zlhduSZrPeOgu/P9X7lc6Qzasj1anHxVDOvRSMRYXuU=; b=IKJNSF+a+ir/XKKzROMdERJMMWGtPQzDaWrcRq7Idlye2WdDJQ3KB7+wgonWWcbjqs07nx 7HsxzWSGZRaO7HPDej4Qm1vfRlappXhwqdCY/7MdgDcMyoPRMH4y/JcX1GEdlpgF3ah1rX diu9ZbmjMd0D+cNA7ianMUXdf2Hu0driDRjZ+IFt4siJJT+pJds2WbT6GVgx74s6R0BBGv CYpSoV6dpaDjegLl+/0VVwGuMv5UmvcgRzURROkh/kieg4Dmiw+Tu592/2ynruPaQbGGEz 5fCEEeaQ2gUVSN1k3QltSdgDFc5HHAG32VDFDHaso7puLg/SKJmtKl6njCd3hA== From: Bastien Curutchet Date: Tue, 12 May 2026 15:06:34 +0200 Subject: [PATCH net-next 12/15] net: dsa: microchip: remove dev_ops->setup() and teardown() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-12-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" , Vladimir Oltean X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 From: Vladimir Oltean All switch families have been converted to have their own ds->ops->setup() methods and to call the common ksz_teardown(). Remove the no longer used ksz_setup() function and the associated ksz_dev_ops callbacks. Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz_common.c | 133 -----------------------------= ---- drivers/net/dsa/microchip/ksz_common.h | 8 -- 2 files changed, 141 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index c2624b1930f51..60edb02846481 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -2745,136 +2745,6 @@ int ksz_pirq_setup(struct ksz_device *dev, u8 p) return ksz_irq_common_setup(dev, pirq); } =20 -int ksz_setup(struct dsa_switch *ds) -{ - struct ksz_device *dev =3D ds->priv; - u16 storm_mask, storm_rate; - struct dsa_port *dp; - struct ksz_port *p; - const u16 *regs; - int ret; - - regs =3D dev->info->regs; - - dev->vlan_cache =3D devm_kcalloc(dev->dev, sizeof(struct vlan_table), - dev->info->num_vlans, GFP_KERNEL); - if (!dev->vlan_cache) - return -ENOMEM; - - ret =3D dev->dev_ops->reset(dev); - if (ret) { - dev_err(ds->dev, "failed to reset switch\n"); - return ret; - } - - ret =3D ksz_parse_drive_strength(dev); - if (ret) - return ret; - - if (ksz_has_sgmii_port(dev) && dev->dev_ops->pcs_create) { - ret =3D dev->dev_ops->pcs_create(dev); - if (ret) - return ret; - } - - /* set broadcast storm protection 10% rate */ - storm_mask =3D BROADCAST_STORM_RATE; - storm_rate =3D (BROADCAST_STORM_VALUE * BROADCAST_STORM_PROT_RATE) / 100; - if (ksz_is_ksz8463(dev)) { - storm_mask =3D swab16(storm_mask); - storm_rate =3D swab16(storm_rate); - } - regmap_update_bits(ksz_regmap_16(dev), regs[S_BROADCAST_CTRL], - storm_mask, storm_rate); - - dev->dev_ops->config_cpu_port(ds); - - dev->dev_ops->enable_stp_addr(dev); - - ds->num_tx_queues =3D dev->info->num_tx_queues; - - regmap_update_bits(ksz_regmap_8(dev), regs[S_MULTICAST_CTRL], - MULTICAST_STORM_DISABLE, MULTICAST_STORM_DISABLE); - - ksz_init_mib_timer(dev); - - ds->configure_vlan_while_not_filtering =3D false; - ds->dscp_prio_mapping_is_global =3D true; - - if (dev->dev_ops->setup) { - ret =3D dev->dev_ops->setup(ds); - if (ret) - return ret; - } - - /* Start with learning disabled on standalone user ports, and enabled - * on the CPU port. In lack of other finer mechanisms, learning on the - * CPU port will avoid flooding bridge local addresses on the network - * in some cases. - */ - p =3D &dev->ports[dev->cpu_port]; - p->learning =3D true; - - if (dev->irq > 0) { - ret =3D ksz_girq_setup(dev); - if (ret) - return ret; - - dsa_switch_for_each_user_port(dp, dev->ds) { - ret =3D ksz_pirq_setup(dev, dp->index); - if (ret) - goto port_release; - - if (dev->info->ptp_capable) { - ret =3D ksz_ptp_irq_setup(ds, dp->index); - if (ret) - goto pirq_release; - } - } - } - - if (dev->info->ptp_capable) { - ret =3D ksz_ptp_clock_register(ds); - if (ret) { - dev_err(dev->dev, "Failed to register PTP clock: %d\n", - ret); - goto port_release; - } - } - - ret =3D ksz_mdio_register(dev); - if (ret < 0) { - dev_err(dev->dev, "failed to register the mdio"); - goto out_ptp_clock_unregister; - } - - ret =3D ksz_dcb_init(dev); - if (ret) - goto out_ptp_clock_unregister; - - /* start switch */ - regmap_update_bits(ksz_regmap_8(dev), regs[S_START_CTRL], - SW_START, SW_START); - - return 0; - -out_ptp_clock_unregister: - if (dev->info->ptp_capable) - ksz_ptp_clock_unregister(ds); -port_release: - if (dev->irq > 0) { - dsa_switch_for_each_user_port_continue_reverse(dp, dev->ds) { - if (dev->info->ptp_capable) - ksz_ptp_irq_free(ds, dp->index); -pirq_release: - ksz_irq_free(&dev->ports[dp->index].pirq); - } - ksz_irq_free(&dev->girq); - } - - return ret; -} - void ksz_teardown(struct dsa_switch *ds) { struct ksz_device *dev =3D ds->priv; @@ -2893,9 +2763,6 @@ void ksz_teardown(struct dsa_switch *ds) =20 ksz_irq_free(&dev->girq); } - - if (dev->dev_ops->teardown) - dev->dev_ops->teardown(ds); } =20 static void port_r_cnt(struct ksz_device *dev, int port) diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index 5fad56c2d067a..f80034488cd1b 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -359,8 +359,6 @@ struct alu_struct { }; =20 struct ksz_dev_ops { - int (*setup)(struct dsa_switch *ds); - void (*teardown)(struct dsa_switch *ds); u32 (*get_port_addr)(int port, int offset); void (*cfg_port_member)(struct ksz_device *dev, int port, u8 member); void (*port_setup)(struct ksz_device *dev, int port, bool cpu_port); @@ -417,12 +415,7 @@ struct ksz_dev_ops { void (*port_init_cnt)(struct ksz_device *dev, int port); void (*setup_rgmii_delay)(struct ksz_device *dev, int port); int (*tc_cbs_set_cinc)(struct ksz_device *dev, int port, u32 val); - void (*config_cpu_port)(struct dsa_switch *ds); - int (*enable_stp_addr)(struct ksz_device *dev); - int (*reset)(struct ksz_device *dev); int (*init)(struct ksz_device *dev); - - int (*pcs_create)(struct ksz_device *dev); }; =20 struct ksz_device *ksz_switch_alloc(struct device *base, @@ -433,7 +426,6 @@ void ksz_switch_remove(struct ksz_device *dev); int ksz_switch_suspend(struct device *dev); int ksz_switch_resume(struct device *dev); =20 -int ksz_setup(struct dsa_switch *ds); void ksz_teardown(struct dsa_switch *ds); int ksz_port_setup(struct dsa_switch *ds, int port); void ksz_port_teardown(struct dsa_switch *ds, int port); --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DCAD8394EA5 for ; Tue, 12 May 2026 13:07:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591226; cv=none; b=LBvPtI6oPVQ6IOcIZLEJBjBVDfwiEoaEmw3jYT2MkYWxwXN/ci2AikMLlviH16H4m3EezTt5jlv130jAZv/1HNJK84QIhTdgHpxXL922v2uaKnYrZRn++0NqjVkNwLlmnYz26v+A0m7rw7p2CEVnFQ1VXhHZRH8RMPx6yBOV1x0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591226; c=relaxed/simple; bh=2PnX4bDPKkU7+9Fn2WXKbpnpgActCHx87eV1a+dXRzg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ExrVOeZlOICglIV4K6hlhwgWFPHV+7+/Hn1ovDI7wddbDp+N1ltBfom7N6YYTE4+dx0WcDP4FDdD1ZGXJPpEx3Cw5iiXHRoMZQj9+FnxON+7WCBL5qdkQljFMPgdzXI3un29Ui+B3IjO2AG+o0GKz8EVH9QxIR2b9xOlQ+BbFYs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=rUIImefo; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="rUIImefo" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 93A811A3580; Tue, 12 May 2026 13:07:03 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 68B5F60646; Tue, 12 May 2026 13:07:03 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id C7A6111AF8CCE; Tue, 12 May 2026 15:07:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591222; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=4ppAl42xy7mrOsa3iPwQz5yaHnKDimvvfGCqDDRDhLI=; b=rUIImefoZrIM3BgzkdVbD9O2bnGF/Y4E3e+gdzfAi/lTpwq/dJiAAXhvfreFRV7BYObeX8 zojLX8PoVhcrtBUPRlf6Qe5Mji8lvmmY7nGfkpdS8rzV4tKb9QnvO1Dp1Zad47R7MMiIvw uZcwG+XY9LIwyt/w6w1fxPe+y3GCzhPFevgKe/oD4nU1cUdO2kVc440l2l+UBbjfNFlT6U pGKXDxLA4UEpzaD1uvOE0xpmiHbihuCiKtprv4bz6u2ZAke81VPaad7UVWls2oWZM0t6On QeEmSTYwM173hjd6IBNbpNVlPp1zBEmGa16pf0BCzEIt9gkyti4PkTpyRUFqyg== From: "Bastien Curutchet (Schneider Electric)" Date: Tue, 12 May 2026 15:06:35 +0200 Subject: [PATCH net-next 13/15] net: dsa: microchip: bypass dev_ops for port_setup() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-13-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 port_setup() is handled through a common function that redirects the treatment to ksz_dev_ops callbacks. This layer of indirection isn't needed since we now have a dsa_switch_ops for each switch family Remove one indirection layer for KSZ switches, by connecting the ksz_dev_ops :: port_setup() operations directly to dsa_switch_ops. Make ksz9477_set_default_prio_queue_mapping() non-static since it's used by ksz_common for tc operations and by ksz9477.c for this port_setup(). Remove the now unused port_setup() callback from ksz_dev_ops. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 20 ++++++++++++++------ drivers/net/dsa/microchip/ksz9477.c | 20 ++++++++++++++++++-- drivers/net/dsa/microchip/ksz9477.h | 1 + drivers/net/dsa/microchip/ksz_common.c | 27 +-------------------------- drivers/net/dsa/microchip/ksz_common.h | 3 +-- drivers/net/dsa/microchip/lan937x_main.c | 3 +-- 6 files changed, 36 insertions(+), 38 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index acc898c68f985..09968aec65063 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -1692,6 +1692,17 @@ static void ksz8_port_setup(struct ksz_device *dev, = int port, bool cpu_port) ksz8_pme_pwrite8(dev, port, regs[REG_PORT_PME_CTRL], 0); } =20 +static int ksz8_dsa_port_setup(struct dsa_switch *ds, int port) +{ + struct ksz_device *dev =3D ds->priv; + + if (!dsa_is_user_port(ds, port)) + return 0; + + ksz8_port_setup(dev, port, false); + return ksz_dcb_init_port(dev, port); +} + static void ksz88x3_config_rmii_clk(struct ksz_device *dev) { struct dsa_port *cpu_dp =3D dsa_to_port(dev->ds, dev->cpu_port); @@ -2319,7 +2330,6 @@ const struct phylink_mac_ops ksz8_phylink_mac_ops =3D= { const struct ksz_dev_ops ksz8463_dev_ops =3D { .get_port_addr =3D ksz8463_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, - .port_setup =3D ksz8_port_setup, .r_phy =3D ksz8463_r_phy, .w_phy =3D ksz8463_w_phy, .r_mib_cnt =3D ksz8_r_mib_cnt, @@ -2333,7 +2343,6 @@ const struct ksz_dev_ops ksz8463_dev_ops =3D { const struct ksz_dev_ops ksz87xx_dev_ops =3D { .get_port_addr =3D ksz8_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, - .port_setup =3D ksz8_port_setup, .r_phy =3D ksz8_r_phy, .w_phy =3D ksz8_w_phy, .r_mib_cnt =3D ksz8_r_mib_cnt, @@ -2350,7 +2359,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops =3D { const struct ksz_dev_ops ksz88xx_dev_ops =3D { .get_port_addr =3D ksz8_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, - .port_setup =3D ksz8_port_setup, .r_phy =3D ksz8_r_phy, .w_phy =3D ksz8_w_phy, .r_mib_cnt =3D ksz8_r_mib_cnt, @@ -2373,7 +2381,7 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, .phylink_get_caps =3D ksz8_phylink_get_caps, - .port_setup =3D ksz_port_setup, + .port_setup =3D ksz8_dsa_port_setup, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, .get_sset_count =3D ksz_sset_count, @@ -2433,7 +2441,7 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, .phylink_get_caps =3D ksz8_phylink_get_caps, - .port_setup =3D ksz_port_setup, + .port_setup =3D ksz8_dsa_port_setup, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, .get_sset_count =3D ksz_sset_count, @@ -2493,7 +2501,7 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, .phylink_get_caps =3D ksz8_phylink_get_caps, - .port_setup =3D ksz_port_setup, + .port_setup =3D ksz8_dsa_port_setup, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, .get_sset_count =3D ksz_sset_count, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index 7385aa4e788a1..2f63a3a7d6ceb 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -1309,6 +1309,23 @@ static void ksz9477_port_setup(struct ksz_device *de= v, int port, bool cpu_port) ksz_pwrite8(dev, port, regs[REG_PORT_PME_CTRL], 0); } =20 +int ksz9477_dsa_port_setup(struct dsa_switch *ds, int port) +{ + struct ksz_device *dev =3D ds->priv; + int ret; + + if (!dsa_is_user_port(ds, port)) + return 0; + + ksz9477_port_setup(dev, port, false); + + ret =3D ksz9477_set_default_prio_queue_mapping(dev, port); + if (ret) + return ret; + + return ksz_dcb_init_port(dev, port); +}; + static void ksz9477_config_cpu_port(struct dsa_switch *ds) { struct ksz_device *dev =3D ds->priv; @@ -1895,7 +1912,6 @@ const struct phylink_mac_ops ksz9477_phylink_mac_ops = =3D { const struct ksz_dev_ops ksz9477_dev_ops =3D { .get_port_addr =3D ksz9477_get_port_addr, .cfg_port_member =3D ksz9477_cfg_port_member, - .port_setup =3D ksz9477_port_setup, .r_phy =3D ksz9477_r_phy, .w_phy =3D ksz9477_w_phy, .r_mib_cnt =3D ksz9477_r_mib_cnt, @@ -1919,7 +1935,7 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, .phylink_get_caps =3D ksz9477_phylink_get_caps, - .port_setup =3D ksz_port_setup, + .port_setup =3D ksz9477_dsa_port_setup, .set_ageing_time =3D ksz9477_set_ageing_time, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, diff --git a/drivers/net/dsa/microchip/ksz9477.h b/drivers/net/dsa/microchi= p/ksz9477.h index 599db0a6ba2e3..6f59bba3c0860 100644 --- a/drivers/net/dsa/microchip/ksz9477.h +++ b/drivers/net/dsa/microchip/ksz9477.h @@ -18,6 +18,7 @@ void ksz9477_r_mib_cnt(struct ksz_device *dev, int port, = u16 addr, u64 *cnt); void ksz9477_r_mib_pkt(struct ksz_device *dev, int port, u16 addr, u64 *dropped, u64 *cnt); void ksz9477_freeze_mib(struct ksz_device *dev, int port, bool freeze); +int ksz9477_dsa_port_setup(struct dsa_switch *ds, int port); void ksz9477_port_init_cnt(struct ksz_device *dev, int port); int ksz9477_port_vlan_filtering(struct dsa_switch *ds, 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 60edb02846481..f44974cf4e595 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -2947,8 +2947,7 @@ void ksz_port_bridge_leave(struct dsa_switch *ds, int= port, */ } =20 -static int ksz9477_set_default_prio_queue_mapping(struct ksz_device *dev, - int port) +int ksz9477_set_default_prio_queue_mapping(struct ksz_device *dev, int por= t) { u32 queue_map =3D 0; int ipm; @@ -2970,30 +2969,6 @@ static int ksz9477_set_default_prio_queue_mapping(st= ruct ksz_device *dev, return ksz_pwrite32(dev, port, KSZ9477_PORT_MRI_TC_MAP__4, queue_map); } =20 -int ksz_port_setup(struct dsa_switch *ds, int port) -{ - struct ksz_device *dev =3D ds->priv; - int ret; - - if (!dsa_is_user_port(ds, port)) - return 0; - - /* setup user port */ - dev->dev_ops->port_setup(dev, port, false); - - if (!is_ksz8(dev)) { - ret =3D ksz9477_set_default_prio_queue_mapping(dev, port); - if (ret) - return ret; - } - - /* port_stp_state_set() will be called after to enable the port so - * there is no need to do anything. - */ - - return ksz_dcb_init_port(dev, port); -} - void ksz_port_stp_state_set(struct dsa_switch *ds, int port, u8 state) { struct ksz_device *dev =3D ds->priv; diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index f80034488cd1b..c66d75347c6cb 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -361,7 +361,6 @@ struct alu_struct { struct ksz_dev_ops { u32 (*get_port_addr)(int port, int offset); void (*cfg_port_member)(struct ksz_device *dev, int port, u8 member); - void (*port_setup)(struct ksz_device *dev, int port, bool cpu_port); =20 /** * @mdio_bus_preinit: Function pointer to pre-initialize the MDIO bus @@ -427,7 +426,6 @@ int ksz_switch_suspend(struct device *dev); int ksz_switch_resume(struct device *dev); =20 void ksz_teardown(struct dsa_switch *ds); -int ksz_port_setup(struct dsa_switch *ds, int port); void ksz_port_teardown(struct dsa_switch *ds, int port); =20 void ksz_init_mib_timer(struct ksz_device *dev); @@ -515,6 +513,7 @@ int ksz_pirq_setup(struct ksz_device *dev, u8 p); int ksz_girq_setup(struct ksz_device *dev); void ksz_irq_free(struct ksz_irq *kirq); int ksz_parse_drive_strength(struct ksz_device *dev); +int ksz9477_set_default_prio_queue_mapping(struct ksz_device *dev, int por= t); =20 /* Common register access functions */ static inline struct regmap *ksz_regmap_8(struct ksz_device *dev) diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index ecb072cd99819..aff0c2735c307 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -799,7 +799,6 @@ const struct phylink_mac_ops lan937x_phylink_mac_ops = =3D { const struct ksz_dev_ops lan937x_dev_ops =3D { .get_port_addr =3D ksz9477_get_port_addr, .cfg_port_member =3D ksz9477_cfg_port_member, - .port_setup =3D lan937x_port_setup, .mdio_bus_preinit =3D lan937x_mdio_bus_preinit, .create_phy_addr_map =3D lan937x_create_phy_addr_map, .r_phy =3D lan937x_r_phy, @@ -823,7 +822,7 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .phy_read =3D ksz_phy_read16, .phy_write =3D ksz_phy_write16, .phylink_get_caps =3D lan937x_phylink_get_caps, - .port_setup =3D ksz_port_setup, + .port_setup =3D ksz9477_dsa_port_setup, .set_ageing_time =3D lan937x_set_ageing_time, .get_strings =3D ksz_get_strings, .get_ethtool_stats =3D ksz_get_ethtool_stats, --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 000A83B812D for ; Tue, 12 May 2026 13:07:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591229; cv=none; b=YdwSUpuf1k+f69xjSRY2Z273u9QekDleB7Q4r46qSTbmzKc03pE60bJwaYlgisOMI94Quh9gO/24IHBVHNdCNxpbdBpGL/uUAuaCGkYB1DmXtvTn/hl84TBtBK3AVOGc0++fm15Ak8V5VZ9faTVWC3Fsy9txLQdA9c2BCE3zmWk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591229; c=relaxed/simple; bh=EOwMc4cnN6mjXx+lNAo0TmGO3icV95F/RHTdgA6irSE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FL15oDjbb6fygQBRb/8Xr/SWF9xmd8k2CuKJl1PobZJJrBhc9LvbiXGs2UeFoW8g9XBgl6gYJ/JuRI9EpOLHm9T65SM6hEvaouElROKcKcD+rv+mksOMv2/TES2iWO/ZwXDmEva8S0ol7awEdYpu7NHvHF1y3I4qT9loZk4BhY0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=F5OqKnTt; arc=none smtp.client-ip=185.246.85.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="F5OqKnTt" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 9E9E44E42C23; Tue, 12 May 2026 13:07:05 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 6C13D60646; Tue, 12 May 2026 13:07:05 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id C482C11AF8CD5; Tue, 12 May 2026 15:07:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591224; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=NmRmaxENCbzVfYEf7DmKsuBOHPJgb9fR4nlBynu9nU4=; b=F5OqKnTtkoL6qd1sTpjIuniJq31GS4mXHmoerqH/JJRsO8ZPPMVUCxO115TlFV1WADlBiY liq9oFOtw/DD2lVdwhVRkgRnMRoFzT+cw09YUD4i8LEVTdlXUv4BiX5V/Mi2JVTfWW987H a1NkVC39OVhwXSIOxOFQSmil6FpdLDYBqhXROscn1tUneI/RbmhbviFsNpx+tOAzHhxeil 7tffkYNU0jYikt7Ve9U9Fn6c8Y1pXgMKYpgLvf3i2ik5TyuQK2Kr3op5Du/xoYDb0BNqzg Kcb+AJYCcBZYTNahjA7VPJ35st9rj0H9cQVG6DRS6B1A22wkWoS3ssDNbLzSHw== From: "Bastien Curutchet (Schneider Electric)" Date: Tue, 12 May 2026 15:06:36 +0200 Subject: [PATCH net-next 14/15] net: dsa: microchip: call DSA's phy_{read/write} to do mdio {read/write} Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-14-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 ksz_sw_mdio_read() and ksz_sw_mdio_write() respectively call ksz_dev_ops::phy_r() and ksz_dev_ops::phy_w() just like dsa_switch_ops::phy_read() and dsa_switch_ops::phy_write() do. Call dsa_switch_ops::phy_read() from ksz_sw_mdio_read() and dsa_switch_ops::phy_write() from ksz_sw_mdio_write() so we'll be able to get rid of the useless indirections provided by ksz_dev_ops in upcoming patch. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz_common.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index f44974cf4e595..0d66592dff703 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -2260,22 +2260,18 @@ static void ksz_update_port_member(struct ksz_devic= e *dev, int port) static int ksz_sw_mdio_read(struct mii_bus *bus, int addr, int regnum) { struct ksz_device *dev =3D bus->priv; - u16 val; - int ret; - - ret =3D dev->dev_ops->r_phy(dev, addr, regnum, &val); - if (ret < 0) - return ret; + struct dsa_switch *ds =3D dev->ds; =20 - return val; + return ds->ops->phy_read(ds, addr, regnum); } =20 static int ksz_sw_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 val) { struct ksz_device *dev =3D bus->priv; + struct dsa_switch *ds =3D dev->ds; =20 - return dev->dev_ops->w_phy(dev, addr, regnum, val); + return ds->ops->phy_write(ds, addr, regnum, val); } =20 /** --=20 2.53.0 From nobody Fri Jun 12 21:40:34 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0B91D3B4436 for ; Tue, 12 May 2026 13:07:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591230; cv=none; b=hi6mFotnRf7H2NDGb7wKDGduGU+tn28gQsETOYEg9Xr47ssTofR1pw+IuP1uajbd5GYatLF+H7vDb7btd9qbx9REFDxJTfI+QPvrkKLjpPOAYzL0lpmhpxJwOBo6EtFbDqckjlWfqpN/WU/peLNtdky41dWA2jSixzJRav/GJIo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778591230; c=relaxed/simple; bh=Zp73zPEl6Z63oDdKOCgzNdNf9GZJrbXcpTLDXzaZ+OI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=W6e4wayIKFTydd+ocHq6NHuc5uesfS5dTtcFD/4Uib5BBJUlI4VMs+zTCXdXXTSkjFXv8d1JyCas4zJ5ZXQyBubUtz3OFZcMSylIcoQlvG0gYrVerMF9u2Y5358Pyq4bl4MyBBmYeye814ZDZXy3AppUvBi+aNMpi34sWMuQdbU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=f7Io3Qo+; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="f7Io3Qo+" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id E28D9C5E17C; Tue, 12 May 2026 13:07:57 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id E604560646; Tue, 12 May 2026 13:07:07 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id A936A11AF88B7; Tue, 12 May 2026 15:07:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778591226; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=Cuuoi4MmFU77/JsO+2+fHWyEr7klhAMu0yIZiSuj6V4=; b=f7Io3Qo+ZNyOJ/m6XYun7ANlsuCJ8lRXYpuFL0Q5vzZn9KntNNjUk1hu0TI6WcsCil5MHw 0X9nq+4Kg2O8Q2wXyLrGRsc8yHXVu7hHcnFJfv0p0kLHbtBi2RmKkkMN1x6qmwfbApn3mK sLaZiz/gIBV1m9VC4CEwF3VYFwdErAabtKZHfGiX2K5aH/1L22FHftMHzdn1/cI59V0/3z N83fIht80/fCKZhBRz7+XEX9N6EgBbc6FgEEb0Uuf6lyjFRKaBoWg/YvwKSkv8/n2yyHGN I0FGMJhjzmYx+ReBTSUHomIDrIiTiRjJgiR3u4MJM/yTr2eBSo2GLQAvIXgyZQ== From: "Bastien Curutchet (Schneider Electric)" Date: Tue, 12 May 2026 15:06:37 +0200 Subject: [PATCH net-next 15/15] net: dsa: microchip: bypass dev_ops for phy_read()/phy_write() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-clean-ksz-2nd-series-v1-15-c00f6ce037fa@bootlin.com> References: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> In-Reply-To: <20260512-clean-ksz-2nd-series-v1-0-c00f6ce037fa@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , Richard Cochran Cc: Pascal Eberhard , =?utf-8?q?Miqu=C3=A8l_Raynal?= , Thomas Petazzoni , Tristram Ha , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Bastien Curutchet (Schneider Electric)" X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 phy_read() and phy_write() are handled through common functions that redirect the treatment to ksz_dev_ops callbacks. This layer of indirection isn't needed since we now have a dsa_switch_ops for each kind of switch Remove one indirection layer for KSZ switches, by connecting the ksz_dev_ops::phy_r() and ksz_dev_ops::phy_w() operations directly to dsa_switch_ops. Remove the now unused phy_r()/phy_w() callbacks from ksz_dev_ops. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 68 ++++++++++++++++++++++++++--= ---- drivers/net/dsa/microchip/ksz9477.c | 31 +++++++++++++-- drivers/net/dsa/microchip/ksz_common.c | 25 ------------ drivers/net/dsa/microchip/ksz_common.h | 4 -- drivers/net/dsa/microchip/lan937x_main.c | 29 ++++++++++---- 5 files changed, 104 insertions(+), 53 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 09968aec65063..0f84b2e7d25d8 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -1057,6 +1057,19 @@ static int ksz8_r_phy(struct ksz_device *dev, u16 ph= y, u16 reg, u16 *val) return 0; } =20 +static int ksz8_phy_read16(struct dsa_switch *ds, int addr, int reg) +{ + struct ksz_device *dev =3D ds->priv; + u16 val =3D 0xffff; + int ret; + + ret =3D ksz8_r_phy(dev, addr, reg, &val); + if (ret) + return ret; + + return val; +} + /** * ksz8_w_phy_ctrl - Translates and writes to the SMI interface from a MII= M PHY * Control register (Reg. 31). @@ -1266,6 +1279,18 @@ static int ksz8_w_phy(struct ksz_device *dev, u16 ph= y, u16 reg, u16 val) return 0; } =20 +static int ksz8_phy_write16(struct dsa_switch *ds, int addr, int reg, u16 = val) +{ + struct ksz_device *dev =3D ds->priv; + int ret; + + ret =3D ksz8_w_phy(dev, addr, reg, val); + if (ret) + return ret; + + return 0; +} + static void ksz8_cfg_port_member(struct ksz_device *dev, int port, u8 memb= er) { int offset =3D P_MIRROR_CTRL; @@ -2194,6 +2219,19 @@ static int ksz8463_r_phy(struct ksz_device *dev, u16= phy, u16 reg, u16 *val) return 0; } =20 +static int ksz8463_phy_read16(struct dsa_switch *ds, int addr, int reg) +{ + struct ksz_device *dev =3D ds->priv; + u16 val =3D 0xffff; + int ret; + + ret =3D ksz8463_r_phy(dev, addr, reg, &val); + if (ret) + return ret; + + return val; +} + static int ksz8463_w_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 val) { u16 sw_reg =3D 0; @@ -2222,6 +2260,18 @@ static int ksz8463_w_phy(struct ksz_device *dev, u16= phy, u16 reg, u16 val) return 0; } =20 +static int ksz8463_phy_write16(struct dsa_switch *ds, int addr, int reg, u= 16 val) +{ + struct ksz_device *dev =3D ds->priv; + int ret; + + ret =3D ksz8463_w_phy(dev, addr, reg, val); + if (ret) + return ret; + + return 0; +} + static int ksz8_switch_init(struct ksz_device *dev) { dev->cpu_port =3D fls(dev->info->cpu_ports) - 1; @@ -2330,8 +2380,6 @@ const struct phylink_mac_ops ksz8_phylink_mac_ops =3D= { const struct ksz_dev_ops ksz8463_dev_ops =3D { .get_port_addr =3D ksz8463_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, - .r_phy =3D ksz8463_r_phy, - .w_phy =3D ksz8463_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, @@ -2343,8 +2391,6 @@ const struct ksz_dev_ops ksz8463_dev_ops =3D { const struct ksz_dev_ops ksz87xx_dev_ops =3D { .get_port_addr =3D ksz8_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, - .r_phy =3D ksz8_r_phy, - .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 ksz_r_mib_stats64, @@ -2359,8 +2405,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops =3D { const struct ksz_dev_ops ksz88xx_dev_ops =3D { .get_port_addr =3D ksz8_get_port_addr, .cfg_port_member =3D ksz8_cfg_port_member, - .r_phy =3D ksz8_r_phy, - .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, @@ -2378,8 +2422,8 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .get_phy_flags =3D ksz_get_phy_flags, .setup =3D ksz8_setup, .teardown =3D ksz_teardown, - .phy_read =3D ksz_phy_read16, - .phy_write =3D ksz_phy_write16, + .phy_read =3D ksz8463_phy_read16, + .phy_write =3D ksz8463_phy_write16, .phylink_get_caps =3D ksz8_phylink_get_caps, .port_setup =3D ksz8_dsa_port_setup, .get_strings =3D ksz_get_strings, @@ -2438,8 +2482,8 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .get_phy_flags =3D ksz_get_phy_flags, .setup =3D ksz8_setup, .teardown =3D ksz_teardown, - .phy_read =3D ksz_phy_read16, - .phy_write =3D ksz_phy_write16, + .phy_read =3D ksz8_phy_read16, + .phy_write =3D ksz8_phy_write16, .phylink_get_caps =3D ksz8_phylink_get_caps, .port_setup =3D ksz8_dsa_port_setup, .get_strings =3D ksz_get_strings, @@ -2498,8 +2542,8 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .get_phy_flags =3D ksz_get_phy_flags, .setup =3D ksz8_setup, .teardown =3D ksz_teardown, - .phy_read =3D ksz_phy_read16, - .phy_write =3D ksz_phy_write16, + .phy_read =3D ksz8_phy_read16, + .phy_write =3D ksz8_phy_write16, .phylink_get_caps =3D ksz8_phylink_get_caps, .port_setup =3D ksz8_dsa_port_setup, .get_strings =3D ksz_get_strings, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index 2f63a3a7d6ceb..00c2e23bc5669 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -575,6 +575,19 @@ static int ksz9477_r_phy(struct ksz_device *dev, u16 a= ddr, u16 reg, u16 *data) return 0; } =20 +static int ksz9477_phy_read16(struct dsa_switch *ds, int addr, int reg) +{ + struct ksz_device *dev =3D ds->priv; + u16 val =3D 0xffff; + int ret; + + ret =3D ksz9477_r_phy(dev, addr, reg, &val); + if (ret) + return ret; + + return val; +} + static int ksz9477_w_phy(struct ksz_device *dev, u16 addr, u16 reg, u16 va= l) { u32 mask, val32; @@ -600,6 +613,18 @@ static int ksz9477_w_phy(struct ksz_device *dev, u16 a= ddr, u16 reg, u16 val) return ksz_prmw32(dev, addr, 0x100 + (reg << 1), mask, val32); } =20 +static int ksz9477_phy_write16(struct dsa_switch *ds, int addr, int reg, u= 16 val) +{ + struct ksz_device *dev =3D ds->priv; + int ret; + + ret =3D ksz9477_w_phy(dev, addr, reg, val); + if (ret) + return ret; + + return 0; +} + void ksz9477_cfg_port_member(struct ksz_device *dev, int port, u8 member) { ksz_pwrite32(dev, port, REG_PORT_VLAN_MEMBERSHIP__4, member); @@ -1912,8 +1937,6 @@ const struct phylink_mac_ops ksz9477_phylink_mac_ops = =3D { const struct ksz_dev_ops ksz9477_dev_ops =3D { .get_port_addr =3D ksz9477_get_port_addr, .cfg_port_member =3D ksz9477_cfg_port_member, - .r_phy =3D ksz9477_r_phy, - .w_phy =3D ksz9477_w_phy, .r_mib_cnt =3D ksz9477_r_mib_cnt, .r_mib_pkt =3D ksz9477_r_mib_pkt, .r_mib_stat64 =3D ksz_r_mib_stats64, @@ -1932,8 +1955,8 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .get_phy_flags =3D ksz_get_phy_flags, .setup =3D ksz9477_setup, .teardown =3D ksz_teardown, - .phy_read =3D ksz_phy_read16, - .phy_write =3D ksz_phy_write16, + .phy_read =3D ksz9477_phy_read16, + .phy_write =3D ksz9477_phy_write16, .phylink_get_caps =3D ksz9477_phylink_get_caps, .port_setup =3D ksz9477_dsa_port_setup, .set_ageing_time =3D ksz9477_set_ageing_time, diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 0d66592dff703..95aa3ab5b5719 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -2838,31 +2838,6 @@ void ksz_init_mib_timer(struct ksz_device *dev) } } =20 -int ksz_phy_read16(struct dsa_switch *ds, int addr, int reg) -{ - struct ksz_device *dev =3D ds->priv; - u16 val =3D 0xffff; - int ret; - - ret =3D dev->dev_ops->r_phy(dev, addr, reg, &val); - if (ret) - return ret; - - return val; -} - -int ksz_phy_write16(struct dsa_switch *ds, int addr, int reg, u16 val) -{ - struct ksz_device *dev =3D ds->priv; - int ret; - - ret =3D dev->dev_ops->w_phy(dev, addr, reg, val); - if (ret) - return ret; - - return 0; -} - u32 ksz_get_phy_flags(struct dsa_switch *ds, int port) { struct ksz_device *dev =3D ds->priv; diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index c66d75347c6cb..b67038cf1bd09 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -398,8 +398,6 @@ struct ksz_dev_ops { * - Negative error code on failure (e.g., invalid configuration). */ int (*create_phy_addr_map)(struct ksz_device *dev, bool side_mdio); - int (*r_phy)(struct ksz_device *dev, u16 phy, u16 reg, u16 *val); - int (*w_phy)(struct ksz_device *dev, u16 phy, u16 reg, u16 val); void (*r_mib_cnt)(struct ksz_device *dev, int port, u16 addr, u64 *cnt); void (*r_mib_pkt)(struct ksz_device *dev, int port, u16 addr, @@ -442,8 +440,6 @@ void ksz_switch_macaddr_put(struct dsa_switch *ds); void ksz_switch_shutdown(struct ksz_device *dev); int ksz_handle_wake_reason(struct ksz_device *dev, int port); =20 -int ksz_phy_read16(struct dsa_switch *ds, int addr, int reg); -int ksz_phy_write16(struct dsa_switch *ds, int addr, int reg, u16 val); u32 ksz_get_phy_flags(struct dsa_switch *ds, int port); =20 int ksz_sset_count(struct dsa_switch *ds, int port, int sset); diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index aff0c2735c307..5b0e8d2002c7d 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -334,14 +334,29 @@ static int lan937x_internal_phy_read(struct ksz_devic= e *dev, int addr, int reg, return ksz_read16(dev, REG_VPHY_IND_DATA__2, val); } =20 -static int lan937x_r_phy(struct ksz_device *dev, u16 addr, u16 reg, u16 *d= ata) +static int lan937x_phy_read16(struct dsa_switch *ds, int addr, int reg) { - return lan937x_internal_phy_read(dev, addr, reg, data); + struct ksz_device *dev =3D ds->priv; + u16 val =3D 0xffff; + int ret; + + ret =3D lan937x_internal_phy_read(dev, addr, reg, &val); + if (ret) + return ret; + + return val; } =20 -static int lan937x_w_phy(struct ksz_device *dev, u16 addr, u16 reg, u16 va= l) +static int lan937x_phy_write16(struct dsa_switch *ds, int addr, int reg, u= 16 val) { - return lan937x_internal_phy_write(dev, addr, reg, val); + struct ksz_device *dev =3D ds->priv; + int ret; + + ret =3D lan937x_internal_phy_write(dev, addr, reg, val); + if (ret) + return ret; + + return 0; } =20 static int lan937x_reset_switch(struct ksz_device *dev) @@ -801,8 +816,6 @@ const struct ksz_dev_ops lan937x_dev_ops =3D { .cfg_port_member =3D ksz9477_cfg_port_member, .mdio_bus_preinit =3D lan937x_mdio_bus_preinit, .create_phy_addr_map =3D lan937x_create_phy_addr_map, - .r_phy =3D lan937x_r_phy, - .w_phy =3D lan937x_w_phy, .r_mib_cnt =3D ksz9477_r_mib_cnt, .r_mib_pkt =3D ksz9477_r_mib_pkt, .r_mib_stat64 =3D ksz_r_mib_stats64, @@ -819,8 +832,8 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .get_phy_flags =3D ksz_get_phy_flags, .setup =3D lan937x_setup, .teardown =3D ksz_teardown, - .phy_read =3D ksz_phy_read16, - .phy_write =3D ksz_phy_write16, + .phy_read =3D lan937x_phy_read16, + .phy_write =3D lan937x_phy_write16, .phylink_get_caps =3D lan937x_phylink_get_caps, .port_setup =3D ksz9477_dsa_port_setup, .set_ageing_time =3D lan937x_set_ageing_time, --=20 2.53.0