From nobody Mon Jun 8 21:47:07 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 C4CAB3BBFCD for ; Mon, 8 Jun 2026 14:10:20 +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=1780927822; cv=none; b=ZTyfYDMQnkDnfxO2kE6rKACjO1/ZEUNNsXb1f0uxJrNN5prPCHFGS1jugzVtjJYxmOwuWv9JxFDcPf8fgMIzcRuMB7RK8pxjbmhjU5SAsy8DEY4v9vai5Wcb1TjSglpCBmdLhXJ55P2Rxg9xVrWfuw6K4Dudu9aZTv/2MHjcKTg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780927822; c=relaxed/simple; bh=vet+8LUw9CMHJCl4uCcWV2+acL0io+HppB8DCWwMYSI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FI0M2ZMwSdBRWaq/rwU3BxWpenHJqa0LonHpwDkp13gCk9oFzZeruliY1qcrEPyLiLvW3yt/eEsKOack74mE1/HTKVDzmEzH2y0ixahQeOTbwvy0vI2Hkm28aLrIbQhRHK9ajHvQX2fpc/a932Uhce14s01iROaZZf5ULmlP+wQ= 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=qp0Jhmts; 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="qp0Jhmts" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 8EC44C5147F; Mon, 8 Jun 2026 14:10:20 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 806655FFB7; Mon, 8 Jun 2026 14:10:19 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 4FB21106A2962; Mon, 8 Jun 2026 16:10:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1780927818; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=/K9/ZTUYEm7hgptnRygC7Z1Qmu1Q/ZK2rVMEioKNYGM=; b=qp0JhmtsIvbHNg8wE3LXDQfI/hPR3geiFnQ4PcoBWyi8SRmweYS8dBzzW5QuLGUUaU6Wcw npM5csoi80MytOJBGlaHUYO9QENvLdUr32RY9HRFfFlhqpYRSEcJavUsEy1tjCRW7e+GCr vojg3Vp8w3gs5mHyTSSkJ48iQkdaq6S6qMWEiu8oavD82mkNnNUgjUL0KzXhMX7AVZPD8A Fhgnu/v/oc+2iuyKLU1NJWtPtqHrRZT/fgFMVCb/f4OKz931KEO1Tyu4AyPbU4fV2TGKIN d+PsdvS8LprSWL0wpCNE7M9kD3i/VBdsp/U4yUDkwvbGkj99FhDoLyUGhanMYA== From: "Bastien Curutchet (Schneider Electric)" Date: Mon, 08 Jun 2026 16:10:04 +0200 Subject: [PATCH net-next v2 01/10] net: dsa: microchip: remove useless common cls_flower_{add/del} 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: <20260608-clean-ksz-3rd-v2-1-6e61b7be23c4@bootlin.com> References: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> In-Reply-To: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King 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 All the KSZ switches share a common implementation of the cls_flower_{add/del} operations. These common implementations return ksz9477-specific implementations for the KSZ9477 family and -EOPNOTSUPP for the others. -EOPNOTSUPP is already returned by the DSA core when the operation isn't implemented. Remove the common implementations. Directly link the ksz9477_cls_flower_{add/del}() to the KSZ9477 callback. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 6 ----- drivers/net/dsa/microchip/ksz9477.c | 4 +-- drivers/net/dsa/microchip/ksz_common.c | 42 ----------------------------= ---- drivers/net/dsa/microchip/ksz_common.h | 4 --- drivers/net/dsa/microchip/lan937x_main.c | 2 -- 5 files changed, 2 insertions(+), 56 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 0f84b2e7d25d..db08874eb025 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -2462,8 +2462,6 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .port_hwtstamp_set =3D ksz_hwtstamp_set, .port_txtstamp =3D ksz_port_txtstamp, .port_rxtstamp =3D ksz_port_rxtstamp, - .cls_flower_add =3D ksz_cls_flower_add, - .cls_flower_del =3D ksz_cls_flower_del, .port_setup_tc =3D ksz_setup_tc, .support_eee =3D ksz_support_eee, .set_mac_eee =3D ksz_set_mac_eee, @@ -2522,8 +2520,6 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .port_hwtstamp_set =3D ksz_hwtstamp_set, .port_txtstamp =3D ksz_port_txtstamp, .port_rxtstamp =3D ksz_port_rxtstamp, - .cls_flower_add =3D ksz_cls_flower_add, - .cls_flower_del =3D ksz_cls_flower_del, .port_setup_tc =3D ksz_setup_tc, .support_eee =3D ksz_support_eee, .set_mac_eee =3D ksz_set_mac_eee, @@ -2582,8 +2578,6 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .port_hwtstamp_set =3D ksz_hwtstamp_set, .port_txtstamp =3D ksz_port_txtstamp, .port_rxtstamp =3D ksz_port_rxtstamp, - .cls_flower_add =3D ksz_cls_flower_add, - .cls_flower_del =3D ksz_cls_flower_del, .port_setup_tc =3D ksz_setup_tc, .support_eee =3D ksz_support_eee, .set_mac_eee =3D ksz_set_mac_eee, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index c1395322e54b..c18bad08a508 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -1996,8 +1996,8 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .port_hwtstamp_set =3D ksz_hwtstamp_set, .port_txtstamp =3D ksz_port_txtstamp, .port_rxtstamp =3D ksz_port_rxtstamp, - .cls_flower_add =3D ksz_cls_flower_add, - .cls_flower_del =3D ksz_cls_flower_del, + .cls_flower_add =3D ksz9477_cls_flower_add, + .cls_flower_del =3D ksz9477_cls_flower_del, .port_setup_tc =3D ksz_setup_tc, .support_eee =3D ksz_support_eee, .set_mac_eee =3D ksz_set_mac_eee, diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 57c8abfe0147..81d3ec88e436 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3373,48 +3373,6 @@ static int ksz_switch_detect(struct ksz_device *dev) return 0; } =20 -int ksz_cls_flower_add(struct dsa_switch *ds, int port, - struct flow_cls_offload *cls, bool ingress) -{ - struct ksz_device *dev =3D ds->priv; - - switch (dev->chip_id) { - case KSZ8563_CHIP_ID: - case KSZ8567_CHIP_ID: - case KSZ9477_CHIP_ID: - case KSZ9563_CHIP_ID: - case KSZ9567_CHIP_ID: - case KSZ9893_CHIP_ID: - case KSZ9896_CHIP_ID: - case KSZ9897_CHIP_ID: - case LAN9646_CHIP_ID: - return ksz9477_cls_flower_add(ds, port, cls, ingress); - } - - return -EOPNOTSUPP; -} - -int ksz_cls_flower_del(struct dsa_switch *ds, int port, - struct flow_cls_offload *cls, bool ingress) -{ - struct ksz_device *dev =3D ds->priv; - - switch (dev->chip_id) { - case KSZ8563_CHIP_ID: - case KSZ8567_CHIP_ID: - case KSZ9477_CHIP_ID: - case KSZ9563_CHIP_ID: - case KSZ9567_CHIP_ID: - case KSZ9893_CHIP_ID: - case KSZ9896_CHIP_ID: - case KSZ9897_CHIP_ID: - case LAN9646_CHIP_ID: - return ksz9477_cls_flower_del(ds, port, cls, ingress); - } - - return -EOPNOTSUPP; -} - /* Bandwidth is calculated by idle slope/transmission speed. Then the Band= width * is converted to Hex-decimal using the successive multiplication method.= On * every step, integer part is taken and decimal part is carry forwarded. diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index b67038cf1bd0..da62c1658aa8 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -483,10 +483,6 @@ bool ksz_support_eee(struct dsa_switch *ds, int port); int ksz_set_mac_eee(struct dsa_switch *ds, int port, struct ethtool_keee *e); =20 -int ksz_cls_flower_add(struct dsa_switch *ds, int port, - struct flow_cls_offload *cls, bool ingress); -int ksz_cls_flower_del(struct dsa_switch *ds, int port, - struct flow_cls_offload *cls, bool ingress); int ksz_setup_tc(struct dsa_switch *ds, int port, enum tc_setup_type type, void *type_data); =20 diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index 536153886f7b..731737fd58d1 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -890,8 +890,6 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .port_hwtstamp_set =3D ksz_hwtstamp_set, .port_txtstamp =3D ksz_port_txtstamp, .port_rxtstamp =3D ksz_port_rxtstamp, - .cls_flower_add =3D ksz_cls_flower_add, - .cls_flower_del =3D ksz_cls_flower_del, .port_setup_tc =3D ksz_setup_tc, .support_eee =3D ksz_support_eee, .set_mac_eee =3D ksz_set_mac_eee, --=20 2.54.0 From nobody Mon Jun 8 21:47:07 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 AE1CF3C4557; Mon, 8 Jun 2026 14:10:22 +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=1780927824; cv=none; b=XknsJhbFKYgVHKDmJLFB4rI6YiwfM1d/+ewmE6ODbMRAUWqvS3cGdX3Xf3l8LT3Ek5ih4cstmuebdbrIP61ZlN9oeGrrB1Y1EefUOWU97C4o6P5Cf1gWUhrIlqLiasNgMmWqHMDbHjlGUTpeRtanwQ5DGWDsuNY+uNbLMbgBCBA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780927824; c=relaxed/simple; bh=fEHEwXEoUDYte5vxo2ruOxaYtP9IzusrpbVVL0dP9qo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XCev1EW3LxsA4qiOifur+JgXMev2d4Z2t5CDc/KsIeABoiR/5WaiwA86j7WN4rkXz+CBKn+QlcRAXsAqynKl33QydssU8Cn+MF734W6/DS6KxcCVdMdirY9FAd9nbFed++1VGuK3TD9bfZ9s+RdkAKy/wQl2+4HjU1wADPpRLeQ= 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=z5MPr3zH; 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="z5MPr3zH" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 66A9BC4FECA; Mon, 8 Jun 2026 14:10:22 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 5C1695FFB7; Mon, 8 Jun 2026 14:10:21 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id CC88A106A2958; Mon, 8 Jun 2026 16:10:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1780927820; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=BBtWvn1cViKIlEYxRrtV8pMaWvcQuKsWUQfn4agDogc=; b=z5MPr3zHV6YzsZeTu43a0dy5zqKLvkJkoNKB33qw3u4d2aOzNQ6zI3wCuSvLc6wmEFbUsS EIpFTGYtkzXHqErbalWSXsJdRt7COrxfuxWaYqeRIvErxaXB1IaPCnQweDNrKM/i+ayS9X lx+m9HevhI9j2c1lQOAe0AeHTzsyDrFRyZCJgxofTGHFicQn84neaJTjXa8m6FmUbIIt9o /VZkVbz4Ja641pq/AEDhfZN6vffA6zWTiVHFh/inAOmgE6EPjTzNPtPedN2fB0YjT5uQkY 5qaR9Y1epHTug5hJS7Z7AE+ZbR4MQAwmHlmoHNURzjXKNw/1QizxlYr32NLo/A== From: Bastien Curutchet Date: Mon, 08 Jun 2026 16:10:05 +0200 Subject: [PATCH net-next v2 02/10] net: dsa: microchip: remove VLAN operations for ksz8463 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: <20260608-clean-ksz-3rd-v2-2-6e61b7be23c4@bootlin.com> References: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> In-Reply-To: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King 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 KSZ8463 uses the common KSZ8 implementation for its VLAN operations. This implementation returns -ENOTSUPP for the KSZ8463 case, which is pointless. Remove the VLAN operations from the ksz8463_switch_ops so the core can directly return -ENOTSUPP. Signed-off-by: Vladimir Oltean Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index db08874eb025..93e0b3f60448 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -1477,7 +1477,7 @@ static int ksz8_port_vlan_filtering(struct dsa_switch= *ds, int port, bool flag, { struct ksz_device *dev =3D ds->priv; =20 - if (ksz_is_ksz88x3(dev) || ksz_is_ksz8463(dev)) + if (ksz_is_ksz88x3(dev)) return -ENOTSUPP; =20 /* Discard packets with VID not enabled on the switch */ @@ -1514,7 +1514,7 @@ static int ksz8_port_vlan_add(struct dsa_switch *ds, = int port, u16 data, new_pvid =3D 0; u8 fid, member, valid; =20 - if (ksz_is_ksz88x3(dev) || ksz_is_ksz8463(dev)) + if (ksz_is_ksz88x3(dev)) return -ENOTSUPP; =20 /* If a VLAN is added with untagged flag different from the @@ -1584,7 +1584,7 @@ static int ksz8_port_vlan_del(struct dsa_switch *ds, = int port, u8 fid, member, valid; u16 data, pvid; =20 - if (ksz_is_ksz88x3(dev) || ksz_is_ksz8463(dev)) + if (ksz_is_ksz88x3(dev)) return -ENOTSUPP; =20 ksz_pread16(dev, port, REG_PORT_CTRL_VID, &pvid); @@ -2439,9 +2439,6 @@ 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 ksz8_port_vlan_filtering, - .port_vlan_add =3D ksz8_port_vlan_add, - .port_vlan_del =3D ksz8_port_vlan_del, .port_fdb_dump =3D ksz8_fdb_dump, .port_fdb_add =3D ksz8_fdb_add, .port_fdb_del =3D ksz8_fdb_del, --=20 2.54.0 From nobody Mon Jun 8 21:47:07 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 6A5A33CAE74; Mon, 8 Jun 2026 14:10:24 +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=1780927826; cv=none; b=e0YwrZua20hlIENtl0ZaFguGtyse5Y99e8MYUsUT0vtqWnZRs81q8qxPtWliX78f4pfeSdckVh20aeNnTfN3Abh/7e0DuQLAmYsxCFEG9PInZUewiw0E7rMGJhgb4w8vTm+PdYklUCfCaiA79o90qJxFXHuncdln1U312jXIptQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780927826; c=relaxed/simple; bh=/chFbqe/d9fGsKte/GmNLYtFYgRf7dD52fg9DqrYvzU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fhngjHEeEFW9fZ/AbVBpXhNQIg8Y4rLnmwOYK1dY1cMbUoiOwsWT4kpBxmXU4hDlZMrbcs3Hw8P/tHUI7FPHq2p3u6Bxo9tq4bS0SMkD10BdU7RpGFfqZ1Se/w6bXPhOYLK9s2Oor/xupMmfKKYekgyXGfm2P5zNLAp9BiZYVZ4= 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=sI7z3PhR; 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="sI7z3PhR" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 1D1681A37CC; Mon, 8 Jun 2026 14:10:23 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id E3F7E5FFB7; Mon, 8 Jun 2026 14:10:22 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 949B2106A295D; Mon, 8 Jun 2026 16:10:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1780927821; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=vzYaQ5yu63Jc3ORXyaAHobEcTOkRNZZ3zA5L1lbh9OM=; b=sI7z3PhR14h+kTMtKT8Qfw6sJZS+Sm86xRV/wMDI22IO9ouvld12QHFCZbVW4HCxUDB+5Y agPeYqxPgKVH7Uyk4s1a1anIOqu12DAo8OPxW0whxsvJIm98/CiMmCnu7a9q8BF8+xwz6X 65TjTHF+OuqG53Xplj5niIbw5gpYB1Z8EK+nz2C3zkeYjTNDYA5QsMe1Q+xULEQP2UVp9f KyNyGDkBxqyA75jCOsjdI/W7gBoWq27XRq0ayHIPAN6CYcbryUZf37VLZQGA/7wLDFEl+F haQYQV9D4YNLHHidL2byGOlS+ZhwIf2zSVfK83A7XxTHADmohBjXHrNJkx1Ymw== From: "Bastien Curutchet (Schneider Electric)" Date: Mon, 08 Jun 2026 16:10:06 +0200 Subject: [PATCH net-next v2 03/10] net: dsa: microchip: implement get_phy_flags only if needed 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: <20260608-clean-ksz-3rd-v2-3-6e61b7be23c4@bootlin.com> References: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> In-Reply-To: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King 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 The common ksz_get_phy_flags() is used by all the switches to implement the optional .get_phy_flags DSA operation. It always returns 0 except for KSZ88X3 switches where an errata has to be handled. Make ksz_get_phy_flags() ksz88xx-specific. Remove the get_phy_flags implementation for the switches that don't need it. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 22 +++++++++++++++++++--- drivers/net/dsa/microchip/ksz9477.c | 1 - drivers/net/dsa/microchip/ksz_common.c | 18 ------------------ drivers/net/dsa/microchip/ksz_common.h | 2 -- drivers/net/dsa/microchip/lan937x_main.c | 1 - 5 files changed, 19 insertions(+), 25 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 93e0b3f60448..98cf7239057d 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -2272,6 +2272,24 @@ static int ksz8463_phy_write16(struct dsa_switch *ds= , int addr, int reg, u16 val return 0; } =20 +static u32 ksz88xx_get_phy_flags(struct dsa_switch *ds, int port) +{ + struct ksz_device *dev =3D ds->priv; + + switch (dev->chip_id) { + case KSZ88X3_CHIP_ID: + /* Silicon Errata Sheet (DS80000830A): + * Port 1 does not work with LinkMD Cable-Testing. + * Port 1 does not respond to received PAUSE control frames. + */ + if (!port) + return MICREL_KSZ8_P1_ERRATA; + break; + } + + return 0; +} + static int ksz8_switch_init(struct ksz_device *dev) { dev->cpu_port =3D fls(dev->info->cpu_ports) - 1; @@ -2419,7 +2437,6 @@ const struct ksz_dev_ops ksz88xx_dev_ops =3D { 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 ksz8_setup, .teardown =3D ksz_teardown, .phy_read =3D ksz8463_phy_read16, @@ -2474,7 +2491,6 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { 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 ksz8_setup, .teardown =3D ksz_teardown, .phy_read =3D ksz8_phy_read16, @@ -2532,7 +2548,7 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { 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, + .get_phy_flags =3D ksz88xx_get_phy_flags, .setup =3D ksz8_setup, .teardown =3D ksz_teardown, .phy_read =3D ksz8_phy_read16, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index c18bad08a508..a39541d29ad5 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -1952,7 +1952,6 @@ const struct ksz_dev_ops ksz9477_dev_ops =3D { 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 ksz9477_setup, .teardown =3D ksz_teardown, .phy_read =3D ksz9477_phy_read16, diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 81d3ec88e436..5fb151fbf4f3 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -2838,24 +2838,6 @@ void ksz_init_mib_timer(struct ksz_device *dev) } } =20 -u32 ksz_get_phy_flags(struct dsa_switch *ds, int port) -{ - struct ksz_device *dev =3D ds->priv; - - switch (dev->chip_id) { - case KSZ88X3_CHIP_ID: - /* Silicon Errata Sheet (DS80000830A): - * Port 1 does not work with LinkMD Cable-Testing. - * Port 1 does not respond to received PAUSE control frames. - */ - if (!port) - return MICREL_KSZ8_P1_ERRATA; - break; - } - - return 0; -} - void ksz_phylink_mac_link_down(struct phylink_config *config, unsigned int mode, phy_interface_t interface) diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index da62c1658aa8..804912fdd2db 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -440,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 -u32 ksz_get_phy_flags(struct dsa_switch *ds, int port); - int ksz_sset_count(struct dsa_switch *ds, int port, int sset); void ksz_get_ethtool_stats(struct dsa_switch *ds, int port, uint64_t *buf); diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index 731737fd58d1..57e289637193 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -846,7 +846,6 @@ const struct ksz_dev_ops lan937x_dev_ops =3D { 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 lan937x_setup, .teardown =3D ksz_teardown, .phy_read =3D lan937x_phy_read16, --=20 2.54.0 From nobody Mon Jun 8 21:47:07 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 31A563CE0AE; Mon, 8 Jun 2026 14:10:26 +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=1780927827; cv=none; b=A0nR9K+Yg1i143dP3skz4T1l2mtN3PfzH7zqV500tRzr1KtooC0dLxz0yuyDtBaI7Uxkx9cludJMvYrcsksvSVzQWvRi4dbgezbI+hftD1DGwCsjyxjlZRWrtuSBC0eFiJo0FtXcDtvVijfWCnYj9ADjVebeFqYh7ysUwhwL0xo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780927827; c=relaxed/simple; bh=EwijWD23hDssNIEkbyfh+Uz89hya5rVeY91Tem7LUME=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dteT7bCj8MLgDFGddVGmQUSahMXA5pFxZSbJlqX0fCZFufJ+ZAtuTFuTYalEVV+3nZ2bfiNzDvIMpvNbJABEzXlW/5dhRHYyEYTvri3+vnrgNlLZi001v6l90mQzHOtr9j/s3BdXYuLKvIPirc1sN715KUXGeqw3tvaPnUP4qFg= 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=rDVqYFsE; 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="rDVqYFsE" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id E914C4E4164C; Mon, 8 Jun 2026 14:10:24 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id B505B5FFB7; Mon, 8 Jun 2026 14:10:24 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 54E1E106A2971; Mon, 8 Jun 2026 16:10:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1780927823; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=tgNlGLqd4G7S3qN72u1yK4SQbSRdoynLTaxb/x8vdb4=; b=rDVqYFsEW4Pz7lmw/4jjU1d8YR+nxeNwGkHq2NMuRbJevF7uNbhZc4Mz5UyxYOyKzwPuhz QQ8u2uKh2NKidJ6SnMdCc5gO9BDZIWdLZfQ7jIHaYw08z9AAyEFw4MnyZrfV1Uz9dwf9vD xT1+DTZZcyz0p/ckL41gUgzo7A2lpbWcxOvPPlmbd5zdjV5lqXfGF56Cgui39g7Sx/gWsp VUBQMzY1m103a5/yF5uwSDPftUjVvVrk1YSl+fGSWeOBkuxvZhJpMzVXn5MKRzxx3FjIrC X0J/RVn8EQz91mk+nrnHl50E7HPu1rkea2oZahuYAKSwhWiDHZoc1lg9AqZHhg== From: "Bastien Curutchet (Schneider Electric)" Date: Mon, 08 Jun 2026 16:10:07 +0200 Subject: [PATCH net-next v2 04/10] net: dsa: microchip: wrap the MAC configuration checks in a function 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: <20260608-clean-ksz-3rd-v2-4-6e61b7be23c4@bootlin.com> References: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> In-Reply-To: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King 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 The common .mac_config() implementation checks some conditions before doing any register access. As this common implementation is about to be split in the upcoming patch, these checks would lead to code duplication. Wrap all the checks in a need_config() function that returns true when the driver really need to access the switch registers to configure the MAC. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz_common.c | 30 +++++++++++++++++++++--------- drivers/net/dsa/microchip/ksz_common.h | 1 + 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 5fb151fbf4f3..f29287922843 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3211,9 +3211,8 @@ phy_interface_t ksz_get_xmii(struct ksz_device *dev, = int port, bool gbit) return interface; } =20 -void ksz_phylink_mac_config(struct phylink_config *config, - unsigned int mode, - const struct phylink_link_state *state) +bool ksz_phylink_need_config(struct phylink_config *config, + unsigned int mode) { struct dsa_port *dp =3D dsa_phylink_to_port(config); struct ksz_device *dev =3D dp->ds->priv; @@ -3221,21 +3220,34 @@ void ksz_phylink_mac_config(struct phylink_config *= config, =20 /* Internal PHYs */ if (dev->info->internal_phy[port]) - return; + return false; =20 /* No need to configure XMII control register when using SGMII. */ if (ksz_is_sgmii_port(dev, port)) - return; + return false; =20 if (phylink_autoneg_inband(mode)) { dev_err(dev->dev, "In-band AN not supported!\n"); - return; + return false; } =20 - ksz_set_xmii(dev, port, state->interface); + return true; +} =20 - if (dev->dev_ops->setup_rgmii_delay) - dev->dev_ops->setup_rgmii_delay(dev, port); +void ksz_phylink_mac_config(struct phylink_config *config, + unsigned int mode, + const struct phylink_link_state *state) +{ + struct dsa_port *dp =3D dsa_phylink_to_port(config); + struct ksz_device *dev =3D dp->ds->priv; + int port =3D dp->index; + + if (ksz_phylink_need_config(config, mode)) { + ksz_set_xmii(dev, port, state->interface); + + if (dev->dev_ops->setup_rgmii_delay) + dev->dev_ops->setup_rgmii_delay(dev, port); + } } =20 bool ksz_get_gbit(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 804912fdd2db..c377bd3e5542 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -468,6 +468,7 @@ void ksz_phylink_get_caps(struct dsa_switch *ds, int po= rt, void ksz_phylink_mac_disable_tx_lpi(struct phylink_config *config); int ksz_phylink_mac_enable_tx_lpi(struct phylink_config *config, u32 timer, bool tx_clock_stop); +bool ksz_phylink_need_config(struct phylink_config *config, unsigned int m= ode); void ksz_phylink_mac_config(struct phylink_config *config, unsigned int mode, const struct phylink_link_state *state); --=20 2.54.0 From nobody Mon Jun 8 21:47:07 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 977003D0BFB; Mon, 8 Jun 2026 14:10:27 +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=1780927828; cv=none; b=oTdvY6Er7MXzQ0OwcNLAEaocM6hRzUyIOrTuDHvwZ0gv2yXYnxAH2SyGa0CYHP03tFpDT1I24vacQNXe8owGJ7ZvrE2gp0qkVCzk0Fj8XOCEB/yfGCmmjLEwB4wE88Cm7z6THC0wfpLc6uGfeCTxJ8ulo2XTbJhQX47ATmtoFHg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780927828; c=relaxed/simple; bh=MAgf7vq6Z0Wq6cX28QGN7dC/EHWKnTUsoIZrmr14QdU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KK74CQPhH4qf93SAUKH0I1FbDYZRx+tIUIO7s/85RKX+0z8XT0wbCxNv6LULGckiGJJV1f0WJEsqF8/EB+wUKbVdYoHpiskTC1aX1+J1ODTWA1KaopBmR9ZGH+7zpdURcQL5Gp5KXnHyZZJhW4b0InYfSRi7bxoGxJyZoeql1Pk= 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=OT7EPH7c; 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="OT7EPH7c" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 7E32B1A37D5; Mon, 8 Jun 2026 14:10:26 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 5154F5FFB7; Mon, 8 Jun 2026 14:10:26 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 03144106A2941; Mon, 8 Jun 2026 16:10:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1780927825; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=L8JKEMuqeLOLXD7sRAPR2ArzrkLzIQkNq/JilyTl52M=; b=OT7EPH7crpCGFRMK4PuLsuiwkEa6sXjfr/WGLis3Z6uaZ+Fk1jb9fv9Rwsx2bDvLUd+XCT xgjyDgAs/yxtxyJI3eey/+E36erYaseC9PrUCkikWGDFmVPmii1D+xtIlURNFgUBcnvw/E AuApgzdpye2wS2k4Y196meCcwIuOvDeWlDfkB0AyHPHWhQy6TYWqNGQwnXGzVNd2XQJkfF YOurRgWY2EIi+27pswW/MBmLN4KmbLQ0cX35Q7AZJDetnY3aLAmiPxGpyGi2+LXXd3Oi4i fWuCjDy9CDNgPDlrBBesdYd8nYjxcteI8T6CWiEMOqB3mF8QtixtKLpkUvq4XA== From: "Bastien Curutchet (Schneider Electric)" Date: Mon, 08 Jun 2026 16:10:08 +0200 Subject: [PATCH net-next v2 05/10] net: dsa: microchip: remove setup_rgmii_delay() KSZ 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: <20260608-clean-ksz-3rd-v2-5-6e61b7be23c4@bootlin.com> References: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> In-Reply-To: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King 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 setup_rgmii_delay() operation is only used once during the common phylink MAC configuration. Only the lan937x switch implements this setup_rgmii_delay(). Remove the setup_rgmii_delay operation from ksz_dev_ops. Implement a lan937x-specific phylink MAC configuration that does this RGMII delay setup. Export ksz_set_xmii since it's needed by the lan937x implementation. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz_common.c | 9 ++------- drivers/net/dsa/microchip/ksz_common.h | 2 +- drivers/net/dsa/microchip/lan937x_main.c | 17 +++++++++++++++-- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index f29287922843..33a20c2e0a8a 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3127,8 +3127,7 @@ int ksz_set_mac_eee(struct dsa_switch *ds, int port, return 0; } =20 -static void ksz_set_xmii(struct ksz_device *dev, int port, - phy_interface_t interface) +void ksz_set_xmii(struct ksz_device *dev, int port, phy_interface_t interf= ace) { const u8 *bitval =3D dev->info->xmii_ctrl1; struct ksz_port *p =3D &dev->ports[port]; @@ -3242,12 +3241,8 @@ void ksz_phylink_mac_config(struct phylink_config *c= onfig, struct ksz_device *dev =3D dp->ds->priv; int port =3D dp->index; =20 - if (ksz_phylink_need_config(config, mode)) { + if (ksz_phylink_need_config(config, mode)) ksz_set_xmii(dev, port, state->interface); - - if (dev->dev_ops->setup_rgmii_delay) - dev->dev_ops->setup_rgmii_delay(dev, port); - } } =20 bool ksz_get_gbit(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 c377bd3e5542..ef8eb10fde50 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -410,7 +410,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 (*setup_rgmii_delay)(struct ksz_device *dev, int port); int (*tc_cbs_set_cinc)(struct ksz_device *dev, int port, u32 val); int (*init)(struct ksz_device *dev); }; @@ -468,6 +467,7 @@ void ksz_phylink_get_caps(struct dsa_switch *ds, int po= rt, void ksz_phylink_mac_disable_tx_lpi(struct phylink_config *config); int ksz_phylink_mac_enable_tx_lpi(struct phylink_config *config, u32 timer, bool tx_clock_stop); +void ksz_set_xmii(struct ksz_device *dev, int port, phy_interface_t interf= ace); bool ksz_phylink_need_config(struct phylink_config *config, unsigned int m= ode); void ksz_phylink_mac_config(struct phylink_config *config, unsigned int mode, diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index 57e289637193..69df378a40bf 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -643,6 +643,20 @@ static void lan937x_setup_rgmii_delay(struct ksz_devic= e *dev, int port) } } =20 +static void lan937x_phylink_mac_config(struct phylink_config *config, + unsigned int mode, + const struct phylink_link_state *state) +{ + struct dsa_port *dp =3D dsa_phylink_to_port(config); + struct ksz_device *dev =3D dp->ds->priv; + int port =3D dp->index; + + if (ksz_phylink_need_config(config, mode)) { + ksz_set_xmii(dev, port, state->interface); + lan937x_setup_rgmii_delay(dev, port); + } +} + static int lan937x_tc_cbs_set_cinc(struct ksz_device *dev, int port, u32 v= al) { return ksz_pwrite32(dev, port, REG_PORT_MTI_CREDIT_INCREMENT, val); @@ -821,7 +835,7 @@ static int lan937x_connect_tag_protocol(struct dsa_swit= ch *ds, } =20 const struct phylink_mac_ops lan937x_phylink_mac_ops =3D { - .mac_config =3D ksz_phylink_mac_config, + .mac_config =3D lan937x_phylink_mac_config, .mac_link_down =3D ksz_phylink_mac_link_down, .mac_link_up =3D ksz9477_phylink_mac_link_up, .mac_disable_tx_lpi =3D ksz_phylink_mac_disable_tx_lpi, @@ -838,7 +852,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, - .setup_rgmii_delay =3D lan937x_setup_rgmii_delay, .tc_cbs_set_cinc =3D lan937x_tc_cbs_set_cinc, .init =3D lan937x_switch_init, }; --=20 2.54.0 From nobody Mon Jun 8 21:47:07 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 C9BDE3D3314 for ; Mon, 8 Jun 2026 14:10:29 +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=1780927831; cv=none; b=evZtDWmgfUBw1/aaOti8g2stjqEtbVCd/aGMI0pEeF6MFbMxDlvqDxKwWUPttzlFZO+X4CZBocr3bTTTHpcjBtCY3BL7ov7kAlotZdN2c+1Z37BJIezmXEQGihQ+IGfEWz3hU0ZiThNG/9/XAJCD+IWNUxG+lt+GP/KfMj1Ie5g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780927831; c=relaxed/simple; bh=0hUFGdUYmI9KO/PLb03TAtqcEyxvnl33H2o/iFpm7DA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=msOfSqIjbDstir5cQe4InLuwTFl0ak/5UTrmwLaOPr6bs5zyJ/eSCAKv5MznuWHpbK2zLSeKbDgvrgOqHPSUQovErLHKFZZhf2kq8urO60mcRKPviZAhftgYtHvhKzd9GyRKT7wVojE6maHC7l3Z7jdWtuYwPu+v3b3Oi0FQbLs= 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=AMaWqT0c; 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="AMaWqT0c" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 77D854E41672; Mon, 8 Jun 2026 14:10:28 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 4B7505FFB7; Mon, 8 Jun 2026 14:10:28 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id C3ECC106A2958; Mon, 8 Jun 2026 16:10:25 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1780927827; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=yyO6kiczAR32v5H26dk2bCuiftWpi3tl9gOA036Lk9o=; b=AMaWqT0cfSzH1b4jJYQsvt5Buad2u9jN7S1vvAMsrYJDSXl8kwOCTcnIw2n35DqFI3xxLz 5I4TWxyx6Oro4DRr7Yj0hBwHG6U9IIUJzRfkzXd5yDWcf8R7rxGKh/xudQrbKUSL+LrDd0 aJ4uIBhdkQij2PalWnArd7YwwJkHFoKKw0lBywZpl/McuP/R9TvAv+AZVU99Kts1yf8AZe luigJqIUJuiOF9mpYuP8tWQhgYXjXkMQBa1mydojy5FFMA1k+YCbOjXbojB2rUizp8X4FH cDuVEdqDFaIBd6/hkff7N7mqEVOaO8U5+dQtwqpuczl0SJRZTsJmZPYMxJEjtA== From: "Bastien Curutchet (Schneider Electric)" Date: Mon, 08 Jun 2026 16:10:09 +0200 Subject: [PATCH net-next v2 06/10] net: dsa: microchip: implement .support_eee() only if needed 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: <20260608-clean-ksz-3rd-v2-6-6e61b7be23c4@bootlin.com> References: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> In-Reply-To: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King 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 The .support_eee() operation is optional. Yet, it is implemented by the KSZ switches through a common functon that reports false for every chip except for KSZ8563, KSZ9563 and KSZ9893 from the KSZ9477 family. Remove the implementation from the switches that don't support EEE. Also remove .set_mac_eee() for them as .set_mac_eee() is gated by the `support_eee` presence in the core. Implement instead a ksz9477-specific support_eee for these three supported switches. Note that comment /* KSZ879x/KSZ877x/KSZ876x Errata DS80000687C Module 2 */ is completely removed because it concerns the KSZ87xx family that doesn't support at all EEE. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 6 ---- drivers/net/dsa/microchip/ksz9477.c | 50 +++++++++++++++++++++++++++- drivers/net/dsa/microchip/ksz_common.c | 57 ----------------------------= ---- drivers/net/dsa/microchip/ksz_common.h | 1 - drivers/net/dsa/microchip/lan937x_main.c | 2 -- 5 files changed, 49 insertions(+), 67 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 98cf7239057d..7b4b46db1ef6 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -2477,8 +2477,6 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .port_txtstamp =3D ksz_port_txtstamp, .port_rxtstamp =3D ksz_port_rxtstamp, .port_setup_tc =3D ksz_setup_tc, - .support_eee =3D ksz_support_eee, - .set_mac_eee =3D ksz_set_mac_eee, .port_get_default_prio =3D ksz_port_get_default_prio, .port_set_default_prio =3D ksz_port_set_default_prio, .port_get_dscp_prio =3D ksz_port_get_dscp_prio, @@ -2534,8 +2532,6 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .port_txtstamp =3D ksz_port_txtstamp, .port_rxtstamp =3D ksz_port_rxtstamp, .port_setup_tc =3D ksz_setup_tc, - .support_eee =3D ksz_support_eee, - .set_mac_eee =3D ksz_set_mac_eee, .port_get_default_prio =3D ksz_port_get_default_prio, .port_set_default_prio =3D ksz_port_set_default_prio, .port_get_dscp_prio =3D ksz_port_get_dscp_prio, @@ -2592,8 +2588,6 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .port_txtstamp =3D ksz_port_txtstamp, .port_rxtstamp =3D ksz_port_rxtstamp, .port_setup_tc =3D ksz_setup_tc, - .support_eee =3D ksz_support_eee, - .set_mac_eee =3D ksz_set_mac_eee, .port_get_default_prio =3D ksz_port_get_default_prio, .port_set_default_prio =3D ksz_port_set_default_prio, .port_get_dscp_prio =3D ksz_port_get_dscp_prio, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index a39541d29ad5..e0b3724a7558 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -1909,6 +1909,54 @@ void ksz9477_phylink_mac_link_up(struct phylink_conf= ig *config, ksz9477_duplex_flowctrl(dev, port, duplex, tx_pause, rx_pause); } =20 +/** + * ksz9477_support_eee - Determine Energy Efficient Ethernet (EEE) support= for a + * port + * @ds: Pointer to the DSA switch structure + * @port: Port number to check + * + * This function also documents devices where EEE was initially advertised= but + * later withdrawn due to reliability issues, as described in official err= ata + * documents. These devices are explicitly listed to record known limitati= ons, + * even if there is no technical necessity for runtime checks. + * + * Returns: true if the internal PHY on the given port supports fully + * operational EEE, false otherwise. + */ +static bool ksz9477_support_eee(struct dsa_switch *ds, int port) +{ + struct ksz_device *dev =3D ds->priv; + + if (!dev->info->internal_phy[port]) + return false; + + switch (dev->chip_id) { + case KSZ8563_CHIP_ID: + case KSZ9563_CHIP_ID: + case KSZ9893_CHIP_ID: + return true; + default: + /* KSZ8567R Errata DS80000752C Module 4 */ + /* KSZ9477S Errata DS80000754A Module 4 */ + /* KSZ9567S Errata DS80000756A Module 4 */ + /* KSZ9896C Errata DS80000757A Module 3 */ + /* KSZ9897R Errata DS80000758C Module 4 */ + /* Energy Efficient Ethernet (EEE) feature select must be + * manually disabled + * The EEE feature is enabled by default, but it is not fully + * operational. It must be manually disabled through register + * controls. If not disabled, the PHY ports can auto-negotiate + * to enable EEE, and this feature can cause link drops when + * linked to another device supporting EEE. + * + * The same item appears in the errata for all switches above. + */ + break; + } + + return false; +} + static struct phylink_pcs * ksz9477_phylink_mac_select_pcs(struct phylink_config *config, phy_interface_t interface) @@ -1998,7 +2046,7 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .cls_flower_add =3D ksz9477_cls_flower_add, .cls_flower_del =3D ksz9477_cls_flower_del, .port_setup_tc =3D ksz_setup_tc, - .support_eee =3D ksz_support_eee, + .support_eee =3D ksz9477_support_eee, .set_mac_eee =3D ksz_set_mac_eee, .port_get_default_prio =3D ksz_port_get_default_prio, .port_set_default_prio =3D ksz_port_set_default_prio, diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 33a20c2e0a8a..bebf697ec60a 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3052,63 +3052,6 @@ int ksz_max_mtu(struct dsa_switch *ds, int port) return -EOPNOTSUPP; } =20 -/** - * ksz_support_eee - Determine Energy Efficient Ethernet (EEE) support for= a - * port - * @ds: Pointer to the DSA switch structure - * @port: Port number to check - * - * This function also documents devices where EEE was initially advertised= but - * later withdrawn due to reliability issues, as described in official err= ata - * documents. These devices are explicitly listed to record known limitati= ons, - * even if there is no technical necessity for runtime checks. - * - * Returns: true if the internal PHY on the given port supports fully - * operational EEE, false otherwise. - */ -bool ksz_support_eee(struct dsa_switch *ds, int port) -{ - struct ksz_device *dev =3D ds->priv; - - if (!dev->info->internal_phy[port]) - return false; - - switch (dev->chip_id) { - case KSZ8563_CHIP_ID: - case KSZ9563_CHIP_ID: - case KSZ9893_CHIP_ID: - return true; - case KSZ8567_CHIP_ID: - /* KSZ8567R Errata DS80000752C Module 4 */ - case KSZ8765_CHIP_ID: - case KSZ8794_CHIP_ID: - case KSZ8795_CHIP_ID: - /* KSZ879x/KSZ877x/KSZ876x Errata DS80000687C Module 2 */ - case KSZ9477_CHIP_ID: - /* KSZ9477S Errata DS80000754A Module 4 */ - case KSZ9567_CHIP_ID: - /* KSZ9567S Errata DS80000756A Module 4 */ - case KSZ9896_CHIP_ID: - /* KSZ9896C Errata DS80000757A Module 3 */ - case KSZ9897_CHIP_ID: - case LAN9646_CHIP_ID: - /* KSZ9897R Errata DS80000758C Module 4 */ - /* Energy Efficient Ethernet (EEE) feature select must be - * manually disabled - * The EEE feature is enabled by default, but it is not fully - * operational. It must be manually disabled through register - * controls. If not disabled, the PHY ports can auto-negotiate - * to enable EEE, and this feature can cause link drops when - * linked to another device supporting EEE. - * - * The same item appears in the errata for all switches above. - */ - break; - } - - return false; -} - int ksz_set_mac_eee(struct dsa_switch *ds, int port, struct ethtool_keee *e) { diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index ef8eb10fde50..17b7ba77aaa9 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -478,7 +478,6 @@ void ksz_phylink_mac_link_down(struct phylink_config *c= onfig, =20 int ksz_max_mtu(struct dsa_switch *ds, int port); =20 -bool ksz_support_eee(struct dsa_switch *ds, int port); int ksz_set_mac_eee(struct dsa_switch *ds, int port, struct ethtool_keee *e); =20 diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index 69df378a40bf..e1aba93d1438 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -903,8 +903,6 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .port_txtstamp =3D ksz_port_txtstamp, .port_rxtstamp =3D ksz_port_rxtstamp, .port_setup_tc =3D ksz_setup_tc, - .support_eee =3D ksz_support_eee, - .set_mac_eee =3D ksz_set_mac_eee, .port_get_default_prio =3D ksz_port_get_default_prio, .port_set_default_prio =3D ksz_port_set_default_prio, .port_get_dscp_prio =3D ksz_port_get_dscp_prio, --=20 2.54.0 From nobody Mon Jun 8 21:47:07 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 6CFA23D34AC; Mon, 8 Jun 2026 14:10:31 +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=1780927832; cv=none; b=lr+SaIWKkPEAgzROV2jLIAO2kfjv0pmGQo55z7hsBwdfhAO342vmZHIoMgdE6t9XUxu48k0wl4hC1fwNdvSME1fdb9cgjuK93RUrtD8lw1AzC8E0FzGk3/q5E3D1OF5LS+l2jUAQRXo3KF3Ox4VYp/MbM62cJESThTrq6s+low4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780927832; c=relaxed/simple; bh=FpoDWnbu1u3/8UQ4JnzO52SSHsP/c0PaK/Z34Md/cH8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hJ3I54Yg33ulqU0VSN3sm39jvtGBvHA+WUUvBLHy2f43J7UqoHG3VMK9yqDB87bAYyN9H7UxePVgsjttxLpmCJ+frUqqJRMGf67TkaBWy92NTvxB9mW1vDP5qSmv/IfFZ5e8SXMrLz6GCGBhDWaNU6F8ExRh9qNGecu7MUBdXPc= 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=xUY0A3IJ; 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="xUY0A3IJ" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id EE09D1A37CC; Mon, 8 Jun 2026 14:10:29 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id B9E5C5FFB7; Mon, 8 Jun 2026 14:10:29 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 84C25106A295D; Mon, 8 Jun 2026 16:10:27 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1780927828; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=a9yPHpnzM5zpypG6P5ITVYfiVmedFm7ephXnJAxPee4=; b=xUY0A3IJklXW4OuJniETmyk0vQoiR4ZtcXkGMAO4cdEYrprY/Jm9VRNXC0VcpCTSycuJSw Yryl/VWfVtavRP3MD9NfK95UQBj9AUvHtgD5wbS3hjn0Mo/iHEng3qVf92kk0uuc87pDw+ zhPFxJvg0wdguiVtS3tzS8SGoKnoJMRMLMl6b4YgUe7YCPRQKG9jYbBPUKRhGGjNlsfntY pc3uL64/oi9BD2SG4aMfRneB1g+S0lEdacwSNxiBkZFtdsaiNXxa9o4bugTHj3tEEYi+Xj Ax/v15OzozVKhn1eIHwAgCMKUkDzCSbALjxJek7r8r6PCG6KniGRV5aj+Zgpdw== From: "Bastien Curutchet (Schneider Electric)" Date: Mon, 08 Jun 2026 16:10:10 +0200 Subject: [PATCH net-next v2 07/10] net: dsa: microchip: implement .{get/set}_wol only if needed 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: <20260608-clean-ksz-3rd-v2-7-6e61b7be23c4@bootlin.com> References: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> In-Reply-To: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King 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 All the KSZ switches use common {get/set}_wol operations while only the ksz9477 and the ksz87xx families really support it. These operations are optional so there is no point implementing them to return -EOPNOTSUPP. Remove the {get/set}_wol callbacks from the switch operations for the ksz88xx, the ksz8463 and the lan937x families. Remove the family check from the common {get/set}_wol implementation. Note that is_ksz9477() is only true for the KSZ9477 so this change will also add WoL support for the other switches using the ksz9477_switch_ops. I checked their datasheet, they implement the same PME_WOL registers, at the same addresses, so this should go fine. Modify the ksz_wol_pre_shutdown() initial check to ensure consistency in the WoL handling for these non-KSZ9477 switches using ksz9477_switch_ops. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 4 ---- drivers/net/dsa/microchip/ksz_common.c | 12 ++++-------- drivers/net/dsa/microchip/lan937x_main.c | 2 -- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 7b4b46db1ef6..690e1b275992 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -2467,8 +2467,6 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .get_pause_stats =3D ksz_get_pause_stats, .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, .suspend =3D ksz_suspend, .resume =3D ksz_resume, .get_ts_info =3D ksz_get_ts_info, @@ -2578,8 +2576,6 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .get_pause_stats =3D ksz_get_pause_stats, .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, .suspend =3D ksz_suspend, .resume =3D ksz_resume, .get_ts_info =3D ksz_get_ts_info, diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index bebf697ec60a..809a0bc3c01e 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3756,9 +3756,6 @@ void ksz_get_wol(struct dsa_switch *ds, int port, u8 pme_ctrl; int ret; =20 - if (!is_ksz9477(dev) && !ksz_is_ksz87xx(dev)) - return; - if (!dev->wakeup_source) return; =20 @@ -3809,9 +3806,6 @@ int ksz_set_wol(struct dsa_switch *ds, int port, if (wol->wolopts & ~(WAKE_PHY | WAKE_MAGIC)) return -EINVAL; =20 - if (!is_ksz9477(dev) && !ksz_is_ksz87xx(dev)) - return -EOPNOTSUPP; - if (!dev->wakeup_source) return -EOPNOTSUPP; =20 @@ -3871,12 +3865,13 @@ 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; + struct dsa_switch *ds =3D dev->ds; u8 pme_pin_en =3D PME_ENABLE; bool wol_enabled =3D false; struct dsa_port *dp; int ret; =20 - if (!is_ksz9477(dev) && !ksz_is_ksz87xx(dev)) + if (!ds->ops->set_wol) return; =20 if (!dev->wakeup_source) @@ -3924,7 +3919,8 @@ int ksz_port_set_mac_address(struct dsa_switch *ds, i= nt port, */ wol.wolopts =3D 0; =20 - ksz_get_wol(ds, dp->index, &wol); + if (ds->ops->get_wol) + ds->ops->get_wol(ds, dp->index, &wol); if (wol.wolopts & WAKE_MAGIC) { dev_err(ds->dev, "Cannot change MAC address on port %d with active Wake on Magic Packet\= n", diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index e1aba93d1438..6b1306e81558 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -893,8 +893,6 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .get_pause_stats =3D ksz_get_pause_stats, .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, .suspend =3D ksz_suspend, .resume =3D ksz_resume, .get_ts_info =3D ksz_get_ts_info, --=20 2.54.0 From nobody Mon Jun 8 21:47:07 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 41A573D4116 for ; Mon, 8 Jun 2026 14:10:33 +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=1780927834; cv=none; b=TWuuf966x7Zyz2i6SGU3z1Yq34kXdlGSV7rJun8jZMv+I4W0DjLw7Lc9p/aR17Jgu6760lhjzXvh9JskrRiZzcKOi+XD4FSdtqCkFkMt5UXEytrFCKRYUZapT6QZIjTwxvCk8VNHUUinUarFgg/il4f/10gg/b4Qkwacm01ZfJM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780927834; c=relaxed/simple; bh=8PLK6MH0PL+nlb1DPhHdLWujUIWkO1MLKgF4hGM6dgc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QsMRxsNb7zkfBTLuxXf4PJwCd19xQw2vz6HJ0XfnqV9nDH/oMbOt9hm4bPYgKIp8xxwYFb0yrBgYQ1BbPFE3+A/mhMUyyhX6gjrMFayOidwQijnPS0rSGNw0zevAETLac4WvtOzXvh89fJAFDPBDNjM5Ust+YLGs4Fcil0sRwwo= 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=keepMgWi; 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="keepMgWi" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id D6E994E414F7; Mon, 8 Jun 2026 14:10:31 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id A93A15FFB7; Mon, 8 Jun 2026 14:10:31 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 5476B106A2963; Mon, 8 Jun 2026 16:10:29 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1780927830; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=tnjgaeqlG41aOH/KRD2DPbdaTUdmphP7FD5A+bf7aq8=; b=keepMgWi48GNyoSyTg1+afgegylB7q+UKswGZiYwT+CoiuNiDtQSaN45xEj8IVA0CRGqbw iRYrsxXMZwOBdjl4h4WppPPGodIbjLdUf4Wxb3gFp3ITDZNlODOCGXlvp6p2IqAYCPXMZ+ NvqRdoYEAtLMKVNVSCrC3PJXHtdpXDOkttsMAdn7MYmYxV82CFTW5aDq9Ck9c89pF7v/CH kaNnuTVLdShKvSFetV5NB3aCQpZSlC2rgzfy3hBHJVkfZUT4ZwOS9SkbNBpOMVPqZEtAB3 znqgK7H1qKeSo/l1GUsSsbi8tiYYyh+TTMtE0vA8kEbXXQYW/55udjCz0ix3ow== From: "Bastien Curutchet (Schneider Electric)" Date: Mon, 08 Jun 2026 16:10:11 +0200 Subject: [PATCH net-next v2 08/10] net: dsa: microchip: implement port_hsr_join for KSZ9477 only 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: <20260608-clean-ksz-3rd-v2-8-6e61b7be23c4@bootlin.com> References: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> In-Reply-To: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King 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 All switches implement the optional .port_hsr_join operation while only the KSZ9477 truly supports it. Remove the common port_hsr_join implementation. Replace it with a specific implementation for the KSZ9477 case. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 6 --- drivers/net/dsa/microchip/ksz9477.c | 65 ++++++++++++++++++++++++++++= +-- drivers/net/dsa/microchip/ksz9477.h | 2 - drivers/net/dsa/microchip/ksz_common.c | 67 ----------------------------= ---- drivers/net/dsa/microchip/ksz_common.h | 4 -- drivers/net/dsa/microchip/lan937x_main.c | 2 - 6 files changed, 61 insertions(+), 85 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 690e1b275992..76b0f2ac8594 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -2448,8 +2448,6 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .get_sset_count =3D ksz_sset_count, .port_bridge_join =3D ksz_port_bridge_join, .port_bridge_leave =3D ksz_port_bridge_leave, - .port_hsr_join =3D ksz_hsr_join, - .port_hsr_leave =3D ksz_hsr_leave, .port_set_mac_address =3D ksz_port_set_mac_address, .port_stp_state_set =3D ksz_port_stp_state_set, .port_teardown =3D ksz_port_teardown, @@ -2498,8 +2496,6 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .get_sset_count =3D ksz_sset_count, .port_bridge_join =3D ksz_port_bridge_join, .port_bridge_leave =3D ksz_port_bridge_leave, - .port_hsr_join =3D ksz_hsr_join, - .port_hsr_leave =3D ksz_hsr_leave, .port_set_mac_address =3D ksz_port_set_mac_address, .port_stp_state_set =3D ksz_port_stp_state_set, .port_teardown =3D ksz_port_teardown, @@ -2554,8 +2550,6 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .get_sset_count =3D ksz_sset_count, .port_bridge_join =3D ksz_port_bridge_join, .port_bridge_leave =3D ksz_port_bridge_leave, - .port_hsr_join =3D ksz_hsr_join, - .port_hsr_leave =3D ksz_hsr_leave, .port_set_mac_address =3D ksz_port_set_mac_address, .port_stp_state_set =3D ksz_port_stp_state_set, .port_teardown =3D ksz_port_teardown, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index e0b3724a7558..48813b0f4280 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -1707,12 +1708,52 @@ static int ksz9477_tc_cbs_set_cinc(struct ksz_devic= e *dev, int port, u32 val) */ #define KSZ9477_SUPPORTED_HSR_FEATURES (NETIF_F_HW_HSR_DUP | NETIF_F_HW_HS= R_FWD) =20 -void ksz9477_hsr_join(struct dsa_switch *ds, int port, struct net_device *= hsr) +static int ksz9477_hsr_join(struct dsa_switch *ds, int port, + struct net_device *hsr, + struct netlink_ext_ack *extack) { struct ksz_device *dev =3D ds->priv; struct net_device *user; struct dsa_port *hsr_dp; u8 data, hsr_ports =3D 0; + enum hsr_version ver; + int ret; + + ret =3D hsr_get_version(hsr, &ver); + if (ret) + return ret; + + if (dev->chip_id !=3D KSZ9477_CHIP_ID) { + NL_SET_ERR_MSG_MOD(extack, "Chip does not support HSR offload"); + return -EOPNOTSUPP; + } + + /* KSZ9477 can support HW offloading of only 1 HSR device */ + if (dev->hsr_dev && hsr !=3D dev->hsr_dev) { + NL_SET_ERR_MSG_MOD(extack, + "Offload supported for a single HSR"); + return -EOPNOTSUPP; + } + + /* KSZ9477 only supports HSR v0 and v1 */ + if (!(ver =3D=3D HSR_V0 || ver =3D=3D HSR_V1)) { + NL_SET_ERR_MSG_MOD(extack, "Only HSR v0 and v1 supported"); + return -EOPNOTSUPP; + } + + /* KSZ9477 can only perform HSR offloading for up to two ports */ + if (hweight8(dev->hsr_ports) >=3D 2) { + NL_SET_ERR_MSG_MOD(extack, + "Cannot offload more than two ports - using software HSR"); + return -EOPNOTSUPP; + } + + /* Self MAC address filtering, to avoid frames traversing + * the HSR ring more than once. + */ + ret =3D ksz_switch_macaddr_get(ds, port, extack); + if (ret) + return ret; =20 /* Program which port(s) shall support HSR */ ksz_rmw32(dev, REG_HSR_PORT_MAP__4, BIT(port), BIT(port)); @@ -1744,12 +1785,20 @@ void ksz9477_hsr_join(struct dsa_switch *ds, int po= rt, struct net_device *hsr) /* Setup HW supported features for lan HSR ports */ user =3D dsa_to_port(ds, port)->user; user->features |=3D KSZ9477_SUPPORTED_HSR_FEATURES; + + dev->hsr_dev =3D hsr; + dev->hsr_ports |=3D BIT(port); + + return 0; } =20 -void ksz9477_hsr_leave(struct dsa_switch *ds, int port, struct net_device = *hsr) +static int ksz9477_hsr_leave(struct dsa_switch *ds, int port, + struct net_device *hsr) { struct ksz_device *dev =3D ds->priv; =20 + WARN_ON(dev->chip_id !=3D KSZ9477_CHIP_ID); + /* Clear port HSR support */ ksz_rmw32(dev, REG_HSR_PORT_MAP__4, BIT(port), 0); =20 @@ -1758,6 +1807,14 @@ void ksz9477_hsr_leave(struct dsa_switch *ds, int po= rt, struct net_device *hsr) =20 /* Disable per port self-address filtering */ ksz_port_cfg(dev, port, REG_PORT_LUE_CTRL, PORT_SRC_ADDR_FILTER, false); + + dev->hsr_ports &=3D ~BIT(port); + if (!dev->hsr_ports) + dev->hsr_dev =3D NULL; + + ksz_switch_macaddr_put(ds); + + return 0; } =20 static int ksz9477_switch_init(struct ksz_device *dev) @@ -2012,8 +2069,8 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .get_sset_count =3D ksz_sset_count, .port_bridge_join =3D ksz_port_bridge_join, .port_bridge_leave =3D ksz_port_bridge_leave, - .port_hsr_join =3D ksz_hsr_join, - .port_hsr_leave =3D ksz_hsr_leave, + .port_hsr_join =3D ksz9477_hsr_join, + .port_hsr_leave =3D ksz9477_hsr_leave, .port_set_mac_address =3D ksz_port_set_mac_address, .port_stp_state_set =3D ksz_port_stp_state_set, .port_teardown =3D ksz_port_teardown, diff --git a/drivers/net/dsa/microchip/ksz9477.h b/drivers/net/dsa/microchi= p/ksz9477.h index 599db0a6ba2e..92a1d889224d 100644 --- a/drivers/net/dsa/microchip/ksz9477.h +++ b/drivers/net/dsa/microchip/ksz9477.h @@ -45,8 +45,6 @@ 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); -void ksz9477_hsr_join(struct dsa_switch *ds, int port, struct net_device *= hsr); -void ksz9477_hsr_leave(struct dsa_switch *ds, int port, struct net_device = *hsr); =20 int ksz9477_port_acl_init(struct ksz_device *dev, int port); void ksz9477_port_acl_free(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 809a0bc3c01e..7dc8e4ffacdd 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include @@ -4055,72 +4054,6 @@ void ksz_switch_macaddr_put(struct dsa_switch *ds) kfree(switch_macaddr); } =20 -int ksz_hsr_join(struct dsa_switch *ds, int port, struct net_device *hsr, - struct netlink_ext_ack *extack) -{ - struct ksz_device *dev =3D ds->priv; - enum hsr_version ver; - int ret; - - ret =3D hsr_get_version(hsr, &ver); - if (ret) - return ret; - - if (dev->chip_id !=3D KSZ9477_CHIP_ID) { - NL_SET_ERR_MSG_MOD(extack, "Chip does not support HSR offload"); - return -EOPNOTSUPP; - } - - /* KSZ9477 can support HW offloading of only 1 HSR device */ - if (dev->hsr_dev && hsr !=3D dev->hsr_dev) { - NL_SET_ERR_MSG_MOD(extack, "Offload supported for a single HSR"); - return -EOPNOTSUPP; - } - - /* KSZ9477 only supports HSR v0 and v1 */ - if (!(ver =3D=3D HSR_V0 || ver =3D=3D HSR_V1)) { - NL_SET_ERR_MSG_MOD(extack, "Only HSR v0 and v1 supported"); - return -EOPNOTSUPP; - } - - /* KSZ9477 can only perform HSR offloading for up to two ports */ - if (hweight8(dev->hsr_ports) >=3D 2) { - NL_SET_ERR_MSG_MOD(extack, - "Cannot offload more than two ports - using software HSR"); - return -EOPNOTSUPP; - } - - /* Self MAC address filtering, to avoid frames traversing - * the HSR ring more than once. - */ - ret =3D ksz_switch_macaddr_get(ds, port, extack); - if (ret) - return ret; - - ksz9477_hsr_join(ds, port, hsr); - dev->hsr_dev =3D hsr; - dev->hsr_ports |=3D BIT(port); - - return 0; -} - -int ksz_hsr_leave(struct dsa_switch *ds, int port, - struct net_device *hsr) -{ - struct ksz_device *dev =3D ds->priv; - - WARN_ON(dev->chip_id !=3D KSZ9477_CHIP_ID); - - ksz9477_hsr_leave(ds, port, hsr); - dev->hsr_ports &=3D ~BIT(port); - if (!dev->hsr_ports) - dev->hsr_dev =3D NULL; - - ksz_switch_macaddr_put(ds); - - return 0; -} - int ksz_suspend(struct dsa_switch *ds) { 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 17b7ba77aaa9..2c118eaddd75 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -490,10 +490,6 @@ int ksz_set_wol(struct dsa_switch *ds, int port, struct ethtool_wolinfo *wol); int ksz_port_set_mac_address(struct dsa_switch *ds, int port, const unsigned char *addr); -int ksz_hsr_join(struct dsa_switch *ds, int port, struct net_device *hsr, - struct netlink_ext_ack *extack); -int ksz_hsr_leave(struct dsa_switch *ds, int port, - struct net_device *hsr); =20 int ksz_suspend(struct dsa_switch *ds); int ksz_resume(struct dsa_switch *ds); diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index 6b1306e81558..d45798de4ce9 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -871,8 +871,6 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .get_sset_count =3D ksz_sset_count, .port_bridge_join =3D ksz_port_bridge_join, .port_bridge_leave =3D ksz_port_bridge_leave, - .port_hsr_join =3D ksz_hsr_join, - .port_hsr_leave =3D ksz_hsr_leave, .port_set_mac_address =3D ksz_port_set_mac_address, .port_stp_state_set =3D ksz_port_stp_state_set, .port_teardown =3D ksz_port_teardown, --=20 2.54.0 From nobody Mon Jun 8 21:47:07 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 976B03D45EA for ; Mon, 8 Jun 2026 14:10:34 +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=1780927836; cv=none; b=cskJr5tb4+Var7rFz0kj4de7EVfcdi9Gcp1HvigoaAnou8uaZocBKgXqOJe9aA3RunDC04Ct7CSWgB90AKn2upEr6DqkO6+TPUZ89PkkjILFe2dl/GpVz7aWA+j7JJkKbq6gVkTPdSdQzhRlB51hkkgphKj78/KYnS1e8nZR/dk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780927836; c=relaxed/simple; bh=W6m8HZei4UV+niYNkVAEOJU75DypSdLg91CvhywA2DQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HOmhV6G7nRZ6dF/iSRO8buzmcPIrwRYWo8/9k8ESiTH77Zhq+Hnw12u4Qrrl8VVCnlnt6ycKsgiEFDBkKLkk+V53Gsafj8H0GyHQKHEst4fns/8+NKQkHCIoDX65D7Jhm0Qc5T+D7hWcijVD+FfuA5ITRSEuK6+ilx4ATDgWM20= 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=wycQx5zy; 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="wycQx5zy" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 4B012C5147F; Mon, 8 Jun 2026 14:10:34 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 41B295FFB7; Mon, 8 Jun 2026 14:10:33 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 20538106A2976; Mon, 8 Jun 2026 16:10:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1780927832; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=RzyrL2uKbcB+VzpygJToWwpY8lqohI8R5nq0G/jrPgE=; b=wycQx5zyfPmZlAAZjGbyccLA9TIJTwnmajHusCDVmsSUIqQOEkvR2bWbdSgYwTN8R//DKL k+U32hNuk66XzrAWidWZt0gceQctB0OYHH5wYODGayzLJGbAy0qciWGypuBdJgqbqPWE8/ Ph4F/QaCAHy/aTpQqa/qhXBMvQ2yt8+5nK4BPuAbYyDi7rC/oNKl+98hUxpBoMWbJIZBJD MQ9OR9FEUwFV5xuRRf17AX5UPSHzrMgeDhOPkFJVSb0JY0qtFE6/ki1RQWAyKkxZROeGTH PqSz6BNOOdAU2+Pw71bZzYdV8hntzhHjnt8f1kKORuERLaHtLezu2++6E2YGZQ== From: "Bastien Curutchet (Schneider Electric)" Date: Mon, 08 Jun 2026 16:10:12 +0200 Subject: [PATCH net-next v2 09/10] net: dsa: microchip: implement lan937x-specific MDIO registration 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: <20260608-clean-ksz-3rd-v2-9-6e61b7be23c4@bootlin.com> References: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> In-Reply-To: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King 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 All the switches use a common mdio_register() function that uses two ksz_dev_ops callbacks (.mdio_bus_preinit() and .create_phy_addr_map()) to handle the lan937x specific case. These two callbacks are used only at this place in the code. Implement a new lan937x-specific MDIO registration functions that uses these two lan937x-specific functions. The lan937x bindings don't have any 'interrupts' property so this lan937x_mdio_register() doesn't call ksz_irq_phy_setup(). Expose the common ksz_*_mdio_{read/write} functions so they can be used in lan937x.c Remove the callbacks from ksz_dev_ops. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz_common.c | 30 +++------- drivers/net/dsa/microchip/ksz_common.h | 42 ++----------- drivers/net/dsa/microchip/lan937x_main.c | 100 +++++++++++++++++++++++++++= +++- 3 files changed, 111 insertions(+), 61 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index 7dc8e4ffacdd..d08659ffa442 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -2256,7 +2256,7 @@ static void ksz_update_port_member(struct ksz_device = *dev, int port) dev->dev_ops->cfg_port_member(dev, port, port_member | cpu_port); } =20 -static int ksz_sw_mdio_read(struct mii_bus *bus, int addr, int regnum) +int ksz_sw_mdio_read(struct mii_bus *bus, int addr, int regnum) { struct ksz_device *dev =3D bus->priv; struct dsa_switch *ds =3D dev->ds; @@ -2264,8 +2264,7 @@ static int ksz_sw_mdio_read(struct mii_bus *bus, int = addr, int regnum) 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) +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; @@ -2286,7 +2285,7 @@ static int ksz_sw_mdio_write(struct mii_bus *bus, int= addr, int regnum, * * Return: Value of the PHY register, or a negative error code on failure. */ -static int ksz_parent_mdio_read(struct mii_bus *bus, int addr, int regnum) +int ksz_parent_mdio_read(struct mii_bus *bus, int addr, int regnum) { struct ksz_device *dev =3D bus->priv; =20 @@ -2306,8 +2305,7 @@ static int ksz_parent_mdio_read(struct mii_bus *bus, = int addr, int regnum) * * Return: 0 on success, or a negative error code on failure. */ -static int ksz_parent_mdio_write(struct mii_bus *bus, int addr, int regnum, - u16 val) +int ksz_parent_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 v= al) { struct ksz_device *dev =3D bus->priv; =20 @@ -2415,8 +2413,8 @@ static void ksz_irq_phy_free(struct ksz_device *dev) * * Return: 0 on success, or a negative error code on failure. */ -static int ksz_parse_dt_phy_config(struct ksz_device *dev, struct mii_bus = *bus, - struct device_node *mdio_np) +int ksz_parse_dt_phy_config(struct ksz_device *dev, struct mii_bus *bus, + struct device_node *mdio_np) { struct device_node *phy_node, *phy_parent_node; bool phys_are_valid =3D true; @@ -2519,20 +2517,8 @@ int ksz_mdio_register(struct ksz_device *dev) goto put_mdio_node; } =20 - if (dev->dev_ops->mdio_bus_preinit) { - ret =3D dev->dev_ops->mdio_bus_preinit(dev, !!parent_bus); - if (ret) - goto put_mdio_node; - } - - if (dev->dev_ops->create_phy_addr_map) { - ret =3D dev->dev_ops->create_phy_addr_map(dev, !!parent_bus); - if (ret) - goto put_mdio_node; - } else { - for (i =3D 0; i < dev->info->port_cnt; i++) - dev->phy_addr_map[i] =3D i; - } + for (i =3D 0; i < dev->info->port_cnt; i++) + dev->phy_addr_map[i] =3D i; =20 bus->priv =3D dev; if (parent_bus) { diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/micro= chip/ksz_common.h index 2c118eaddd75..7b9a12648e85 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -362,42 +362,6 @@ struct ksz_dev_ops { u32 (*get_port_addr)(int port, int offset); void (*cfg_port_member)(struct ksz_device *dev, int port, u8 member); =20 - /** - * @mdio_bus_preinit: Function pointer to pre-initialize the MDIO bus - * for accessing PHYs. - * @dev: Pointer to device structure. - * @side_mdio: Boolean indicating if the PHYs are accessed over a side - * MDIO bus. - * - * This function pointer is used to configure the MDIO bus for PHY - * access before initiating regular PHY operations. It enables either - * SPI/I2C or side MDIO access modes by unlocking necessary registers - * and setting up access permissions for the selected mode. - * - * Return: - * - 0 on success. - * - Negative error code on failure. - */ - int (*mdio_bus_preinit)(struct ksz_device *dev, bool side_mdio); - - /** - * @create_phy_addr_map: Function pointer to create a port-to-PHY - * address map. - * @dev: Pointer to device structure. - * @side_mdio: Boolean indicating if the PHYs are accessed over a side - * MDIO bus. - * - * This function pointer is responsible for mapping switch ports to PHY - * addresses according to the configured access mode (SPI or side MDIO) - * and the device=E2=80=99s strap configuration. The mapping setup may va= ry - * depending on the chip variant and configuration. Ensures the correct - * address mapping for PHY communication. - * - * Return: - * - 0 on success. - * - Negative error code on failure (e.g., invalid configuration). - */ - int (*create_phy_addr_map)(struct ksz_device *dev, bool side_mdio); 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, @@ -494,6 +458,12 @@ int ksz_port_set_mac_address(struct dsa_switch *ds, in= t port, int ksz_suspend(struct dsa_switch *ds); int ksz_resume(struct dsa_switch *ds); =20 +int ksz_parse_dt_phy_config(struct ksz_device *dev, struct mii_bus *bus, + struct device_node *mdio_np); +int ksz_sw_mdio_read(struct mii_bus *bus, int addr, int regnum); +int ksz_sw_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 val); +int ksz_parent_mdio_read(struct mii_bus *bus, int addr, int regnum); +int ksz_parent_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 v= al); 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); diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/mic= rochip/lan937x_main.c index d45798de4ce9..48cd367455c3 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -669,6 +670,101 @@ static int lan937x_switch_init(struct ksz_device *dev) return 0; } =20 +/** + * lan937x_mdio_register - Register and configure the MDIO bus for the LAN= 937x. + * @dev: Pointer to the KSZ device structure. + * + * This function sets up and registers an MDIO bus for a LAN937x switch, + * allowing access to its internal PHYs. If the device supports side MDIO, + * the function will configure the external MDIO controller specified by t= he + * "mdio-parent-bus" device tree property to directly manage internal PHYs. + * Otherwise, SPI or I2C access is set up for PHY access. + * + * Return: 0 on success, or a negative error code on failure. + */ +static int lan937x_mdio_register(struct ksz_device *dev) +{ + struct device_node *parent_bus_node; + struct mii_bus *parent_bus =3D NULL; + struct dsa_switch *ds =3D dev->ds; + struct device_node *mdio_np; + struct mii_bus *bus; + int ret; + + mdio_np =3D of_get_child_by_name(dev->dev->of_node, "mdio"); + if (!mdio_np) + return 0; + + parent_bus_node =3D of_parse_phandle(mdio_np, "mdio-parent-bus", 0); + if (parent_bus_node && !dev->info->phy_side_mdio_supported) { + dev_err(dev->dev, "Side MDIO bus is not supported for this HW, ignoring = 'mdio-parent-bus' property.\n"); + ret =3D -EINVAL; + + goto put_mdio_node; + } else if (parent_bus_node) { + parent_bus =3D of_mdio_find_bus(parent_bus_node); + if (!parent_bus) { + ret =3D -EPROBE_DEFER; + + goto put_mdio_node; + } + + dev->parent_mdio_bus =3D parent_bus; + } + + bus =3D devm_mdiobus_alloc(ds->dev); + if (!bus) { + ret =3D -ENOMEM; + goto put_mdio_node; + } + + ret =3D lan937x_mdio_bus_preinit(dev, !!parent_bus); + if (ret) + goto put_mdio_node; + + ret =3D lan937x_create_phy_addr_map(dev, !!parent_bus); + if (ret) + goto put_mdio_node; + + bus->priv =3D dev; + if (parent_bus) { + bus->read =3D ksz_parent_mdio_read; + bus->write =3D ksz_parent_mdio_write; + bus->name =3D "KSZ side MDIO"; + snprintf(bus->id, MII_BUS_ID_SIZE, "ksz-side-mdio-%d", + ds->index); + } else { + bus->read =3D ksz_sw_mdio_read; + bus->write =3D ksz_sw_mdio_write; + bus->name =3D "ksz user smi"; + if (ds->dst->index !=3D 0) + snprintf(bus->id, MII_BUS_ID_SIZE, "SMI-%d-%d", + ds->dst->index, ds->index); + else + snprintf(bus->id, MII_BUS_ID_SIZE, "SMI-%d", ds->index); + } + + ret =3D ksz_parse_dt_phy_config(dev, bus, mdio_np); + if (ret) + goto put_mdio_node; + + ds->phys_mii_mask =3D bus->phy_mask; + bus->parent =3D ds->dev; + + ds->user_mii_bus =3D bus; + + ret =3D devm_of_mdiobus_register(ds->dev, bus, mdio_np); + if (ret) + dev_err(ds->dev, "unable to register MDIO bus %s\n", + bus->id); + +put_mdio_node: + of_node_put(mdio_np); + of_node_put(parent_bus_node); + + return ret; +} + static int lan937x_setup(struct dsa_switch *ds) { struct ksz_device *dev =3D ds->priv; @@ -782,7 +878,7 @@ static int lan937x_setup(struct dsa_switch *ds) goto port_release; } =20 - ret =3D ksz_mdio_register(dev); + ret =3D lan937x_mdio_register(dev); if (ret < 0) { dev_err(dev->dev, "failed to register the mdio"); goto out_ptp_clock_unregister; @@ -845,8 +941,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, - .mdio_bus_preinit =3D lan937x_mdio_bus_preinit, - .create_phy_addr_map =3D lan937x_create_phy_addr_map, .r_mib_cnt =3D ksz9477_r_mib_cnt, .r_mib_pkt =3D ksz9477_r_mib_pkt, .r_mib_stat64 =3D ksz_r_mib_stats64, --=20 2.54.0 From nobody Mon Jun 8 21:47:07 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 93F5D3D524D for ; Mon, 8 Jun 2026 14:10:36 +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=1780927838; cv=none; b=Fy1bHh1fdZ+Bmb4o61jpEYxTdnX9hy3AWp2yvv0RKU28CrgkT66nFb51zpJ6cJrIznaF8r465p/LgNqWh4qox+FyhWr2AO2yvc65IzGxGYjJIbS4C+WHcaVV1CnrQH/DEXA8Z0ttO95wugZzxWxBaytYBDl0QID0pZyWkgHiGHs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780927838; c=relaxed/simple; bh=dLf2hPhdjeR81oWJOxklIWm/A8TarMQ98Xpq3Xa5cqk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZWb9ps9Jk/5NpNnuzMRywfyoeJ3dlt44aVdsRFbLQAQWaBR6w8icNcOoAULzqeYxKXGOOpqAjuej//0L8yiAAmB8T4OXtVEtoUM3wP6WjssCF2DsXbjNARhv/dvlloZWO2fzj7YqBzSIRCawNfKWC6bFmFyqUd7b0AyP6rThzXg= 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=NuDODtLY; 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="NuDODtLY" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 4F5D91A37CB; Mon, 8 Jun 2026 14:10:35 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 1CB165FFB7; Mon, 8 Jun 2026 14:10:35 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id BC7A9106A2977; Mon, 8 Jun 2026 16:10:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1780927834; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=IfKgmu5CABMy/972M65pvBeWLhBqurxd2aekhpz/kvQ=; b=NuDODtLYVLwB0yM9fCKDUYkIHyiLCpFzHDg/xQp0O180xgRubGfCZrhsNDFkRLtDeWbcz4 jLQ1lqrfEf7LPOHkZuSwaOcE08JmvmsrCNKnS3FP9l2IC4vayGxCeEcnS4dlSVg57yjPqv LvzQydDNQxCMXB5jq1rDH1RtIz6fCYe9+7rTPXJHbHH6dtAYaNKr7REGaU/hqiUW417WA6 5jWocbGrVd01oDVubZO1oP671NnOtLS+GQL/nUGijh8q8IyiemVYurfpbP/IftQpg/Fkfc D9Fr7rhWxyTksYRRdnlZCjUDqjWfreUlTwsJNomRQaKPZj8e4deFysvp6uLfLQ== From: "Bastien Curutchet (Schneider Electric)" Date: Mon, 08 Jun 2026 16:10:13 +0200 Subject: [PATCH net-next v2 10/10] net: dsa: microchip: implement port_teardown only if needed 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: <20260608-clean-ksz-3rd-v2-10-6e61b7be23c4@bootlin.com> References: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> In-Reply-To: <20260608-clean-ksz-3rd-v2-0-6e61b7be23c4@bootlin.com> To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King 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 The port_teardown() operation is optional. Yet, it is implemented by all the KSZ switches through a common function that doesn't do anything for the switches that aren't part of the ksz9477 family Remove the implementation from the switches that don't need it. Implement instead a ksz9477-specific port_teardown. Signed-off-by: Bastien Curutchet (Schneider Electric) --- drivers/net/dsa/microchip/ksz8.c | 3 --- drivers/net/dsa/microchip/ksz9477.c | 10 +++++++++- drivers/net/dsa/microchip/ksz_common.c | 19 ------------------- drivers/net/dsa/microchip/ksz_common.h | 1 - drivers/net/dsa/microchip/lan937x_main.c | 1 - 5 files changed, 9 insertions(+), 25 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8.c b/drivers/net/dsa/microchip/k= sz8.c index 76b0f2ac8594..9a895a811195 100644 --- a/drivers/net/dsa/microchip/ksz8.c +++ b/drivers/net/dsa/microchip/ksz8.c @@ -2450,7 +2450,6 @@ const struct dsa_switch_ops ksz8463_switch_ops =3D { .port_bridge_leave =3D ksz_port_bridge_leave, .port_set_mac_address =3D ksz_port_set_mac_address, .port_stp_state_set =3D ksz_port_stp_state_set, - .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 ksz8_flush_dyn_mac_table, @@ -2498,7 +2497,6 @@ const struct dsa_switch_ops ksz87xx_switch_ops =3D { .port_bridge_leave =3D ksz_port_bridge_leave, .port_set_mac_address =3D ksz_port_set_mac_address, .port_stp_state_set =3D ksz_port_stp_state_set, - .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 ksz8_flush_dyn_mac_table, @@ -2552,7 +2550,6 @@ const struct dsa_switch_ops ksz88xx_switch_ops =3D { .port_bridge_leave =3D ksz_port_bridge_leave, .port_set_mac_address =3D ksz_port_set_mac_address, .port_stp_state_set =3D ksz_port_stp_state_set, - .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 ksz8_flush_dyn_mac_table, diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchi= p/ksz9477.c index 48813b0f4280..f3f0c98dfb5a 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -1941,6 +1941,14 @@ static void ksz9477_duplex_flowctrl(struct ksz_devic= e *dev, int port, int duplex ksz_prmw8(dev, port, regs[P_XMII_CTRL_0], mask, val); } =20 +static void ksz9477_port_teardown(struct dsa_switch *ds, int port) +{ + struct ksz_device *dev =3D ds->priv; + + if (dsa_is_user_port(ds, port)) + ksz9477_port_acl_free(dev, port); +} + void ksz9477_phylink_mac_link_up(struct phylink_config *config, struct phy_device *phydev, unsigned int mode, @@ -2073,7 +2081,7 @@ const struct dsa_switch_ops ksz9477_switch_ops =3D { .port_hsr_leave =3D ksz9477_hsr_leave, .port_set_mac_address =3D ksz_port_set_mac_address, .port_stp_state_set =3D ksz_port_stp_state_set, - .port_teardown =3D ksz_port_teardown, + .port_teardown =3D ksz9477_port_teardown, .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, diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/micro= chip/ksz_common.c index d08659ffa442..d1726778bb48 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -2953,25 +2953,6 @@ void ksz_port_stp_state_set(struct dsa_switch *ds, i= nt port, u8 state) ksz_update_port_member(dev, port); } =20 -void ksz_port_teardown(struct dsa_switch *ds, int port) -{ - struct ksz_device *dev =3D ds->priv; - - switch (dev->chip_id) { - case KSZ8563_CHIP_ID: - case KSZ8567_CHIP_ID: - case KSZ9477_CHIP_ID: - case KSZ9563_CHIP_ID: - case KSZ9567_CHIP_ID: - case KSZ9893_CHIP_ID: - case KSZ9896_CHIP_ID: - case KSZ9897_CHIP_ID: - case LAN9646_CHIP_ID: - if (dsa_is_user_port(ds, port)) - ksz9477_port_acl_free(dev, port); - } -} - int ksz_port_pre_bridge_flags(struct dsa_switch *ds, int port, struct switchdev_brport_flags flags, 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 7b9a12648e85..d90179bd7762 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -387,7 +387,6 @@ int ksz_switch_suspend(struct device *dev); int ksz_switch_resume(struct device *dev); =20 void ksz_teardown(struct dsa_switch *ds); -void ksz_port_teardown(struct dsa_switch *ds, int port); =20 void ksz_init_mib_timer(struct ksz_device *dev); bool ksz_is_port_mac_global_usable(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 48cd367455c3..8eb5337b0c10 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -967,7 +967,6 @@ const struct dsa_switch_ops lan937x_switch_ops =3D { .port_bridge_leave =3D ksz_port_bridge_leave, .port_set_mac_address =3D ksz_port_set_mac_address, .port_stp_state_set =3D ksz_port_stp_state_set, - .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 ksz9477_flush_dyn_mac_table, --=20 2.54.0