From patchwork Mon Mar 4 15:09:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209594 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1497769dyc; Mon, 4 Mar 2024 07:33:49 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCU4sL5N2rZShcrB5m8zngzsBtE7I2GvaC2nN4+bIFQCv8aSNIiMhsT83zxEyQse2/6UE8IajlhZ01d0I9xJ+SVLVvASxA== X-Google-Smtp-Source: AGHT+IGxS4++CexXbLdVQ0GK0Gpt3Bi+cUxqCDJIDnSaqxFUReNgUnVBbNGtbXpDapWlO401KcLE X-Received: by 2002:a05:6a20:8f1f:b0:1a1:4624:bf28 with SMTP id b31-20020a056a208f1f00b001a14624bf28mr10647252pzk.7.1709566428818; Mon, 04 Mar 2024 07:33:48 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709566428; cv=pass; d=google.com; s=arc-20160816; b=voG4FWAHsE6I69F2hvBaFRWUhXdKzdc27xpEMU4NUpiSB0rlgUcxJ9oVUnCBOEYBc7 NQ3xFQcdHXR1DFjjOl+yPkTluwqPpPs3sR1xD1T5fyDcACVT5r9PvufAe0HlGJhtA5Hm 0IGkl3bBxppx+7Ki1luBL4TPb7Jo3aQevgN9hRHJwKmPzAJdwX6zST9cm3U2ny3cMU9p nuTj7rjEo96x9hHWSXwukYze1rYAF6vPDPWJDhb5RFJRm42ttptYGFhHxpc6RjVVfqJR 303xDfBAxHqit9Jq4D173M618VxalzRNA6XEKpQqwdd8GRa7px61jBg74DaqFXpuSJCC +Mjg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=gdfh5NEamHgjVVlF0jk2SdMNibE6DuRB3NdVrtWpPk0=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=e09TcTarvjixbHaPgAo4SobkjrbfQPV8kA8JWGKTTBlzNPIVU9jV4/hyGbX/UknDft YRO4klxVpiaX4z+EBzgCgfoBte9kEzCgqjxXgu9kx8YtJMlfuvVReAGlER7MBfaTvOQy 1E0aer9DbT+ZMq/fY9KyVFMCh4WQASJ1s/RWZok/RXC+ZGeEeXbULEXJfckTLAIot5fP QJdGkOL53txERsQbdhlSy9qGAi/i6ns9cGjFboiCdBNXUPlhjBMpmXrdgZ1HsWoapVIb bHyOlnvyNP1uejMv1SF6qU3CFXQ4X1y/GnIToxCN0iihk0gJc0cZb2SV859xjvp6Sb5b TNVw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=IvM+6Mcu; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90780-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90780-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id i12-20020a636d0c000000b005e47ac43dd5si8534299pgc.101.2024.03.04.07.33.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:33:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90780-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=IvM+6Mcu; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90780-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90780-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 8E2AAB26CFD for ; Mon, 4 Mar 2024 15:13:05 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2996E537E5; Mon, 4 Mar 2024 15:10:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="IvM+6Mcu" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 DF5EC4778C; Mon, 4 Mar 2024 15:10:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565020; cv=none; b=I/L3ueQ8eynHmqzKnG3Yz/F8lFbPIycMznAhpVEx43hsViGLrXM/Q2M1zeTUPen09s/g/IeADVTY0Ej25VzR3HwIOCLI03FZoBs8l+veNdGKHylkMsww3fvatp5TmkOiCLyUhl5+FZwxJkmrnqTkOeeG8A9/FjfWCvdPczFK7Dg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565020; c=relaxed/simple; bh=4rY4/dSl64ujJZdeX7wmeNdUc++sjtwpNLYQWxNRDzY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Htj9Rgx5Ig6Um7US50/z0CJy9qENhFQaYDjJCAeoxPIgT3SMJQn2J2cdPOojbapwVIKRjK/9ZSdAXkX5iMrMoykz9JAIlK2ao74reqdaRtJkZOgXdKuHUDNnktumzP/atdk+Y3N7iFDzLAxuwvckn5VsJfVTMXGi4ixklolerUc= 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=IvM+6Mcu; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id C7AB91BF20C; Mon, 4 Mar 2024 15:10:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565016; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gdfh5NEamHgjVVlF0jk2SdMNibE6DuRB3NdVrtWpPk0=; b=IvM+6McuuQU/OMZ4MbcN1yxZq1zuinrNH/xbNrGKfZwZpXHKlGEup/LZZD/3urA5/dJ0ht Pb2yJeq3u770Bt+FWc/qsdZBKf9ANN3N4PKJZ4VUBptIhE+xz58yi8IgZs0HdHbGQp1cU0 ANlKME0qdFfyL1xQdJSlELTdHD56TZF3iwijwF/4b0LjPbWL42aUTPl0kMvmAM63KUmybP UeDRV/XodftntFsx6XtaAEu4lNxeob+9Jdj7pRjhTdaNItCXHxLVZXmJjm87mDeH0IggzB 81jDXJrDFFbyNaV80Y8z6XDKTTi1Rkqtge+kBM86EnHO8QlozxSCF35jvGnUvg== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 01/13] net: phy: Introduce ethernet link topology representation Date: Mon, 4 Mar 2024 16:09:57 +0100 Message-ID: <20240304151011.1610175-2-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792610327796650331 X-GMAIL-MSGID: 1792610327796650331 Link topologies containing multiple network PHYs attached to the same net_device can be found when using a PHY as a media converter for use with an SFP connector, on which an SFP transceiver containing a PHY can be used. With the current model, the transceiver's PHY can't be used for operations such as cable testing, timestamping, macsec offload, etc. The reason being that most of the logic for these configuration, coming from either ethtool netlink or ioctls tend to use netdev->phydev, which in multi-phy systems will reference the PHY closest to the MAC. Introduce a numbering scheme allowing to enumerate PHY devices that belong to any netdev, which can in turn allow userspace to take more precise decisions with regard to each PHY's configuration. The numbering is maintained per-netdev, in a phy_device_list. The numbering works similarly to a netdevice's ifindex, with identifiers that are only recycled once INT_MAX has been reached. This prevents races that could occur between PHY listing and SFP transceiver removal/insertion. The identifiers are assigned at phy_attach time, as the numbering depends on the netdevice the phy is attached to. The PHY index can be re-used for PHYs that are persistent. Signed-off-by: Maxime Chevallier --- V10: - No changes V9: - No changes V8: - Rebase on net-next and fixed conflicts V7: - Protected the phy_link_topo helpers/stubs with IS_REACHABLE V6: - Made link_topo a pointer - Reworked the init/cleanup sequence - Added phy_index recycling if possible V5: - Dropped the ASSERT_RTNL() - Made the phy_link_topo_get_phy inline V4: - Moved the phy_link_topo_init() code to an inline header function - Made the code build without phylib V3: - Renamed to phy_link_topology - Added assertions for RTNL - Various cleanups of leftover, unused test code - Made the PHY index u32 MAINTAINERS | 2 + drivers/net/phy/Makefile | 2 +- drivers/net/phy/phy_device.c | 7 ++ drivers/net/phy/phy_link_topology.c | 105 +++++++++++++++++++++++++ include/linux/netdevice.h | 4 +- include/linux/phy.h | 4 + include/linux/phy_link_topology.h | 72 +++++++++++++++++ include/linux/phy_link_topology_core.h | 25 ++++++ include/uapi/linux/ethtool.h | 16 ++++ net/core/dev.c | 9 +++ 10 files changed, 244 insertions(+), 2 deletions(-) create mode 100644 drivers/net/phy/phy_link_topology.c create mode 100644 include/linux/phy_link_topology.h create mode 100644 include/linux/phy_link_topology_core.h diff --git a/MAINTAINERS b/MAINTAINERS index 04e5f7c20e30..af6f8d47dc78 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7953,6 +7953,8 @@ F: include/linux/mii.h F: include/linux/of_net.h F: include/linux/phy.h F: include/linux/phy_fixed.h +F: include/linux/phy_link_topology.h +F: include/linux/phy_link_topology_core.h F: include/linux/phylib_stubs.h F: include/linux/platform_data/mdio-bcm-unimac.h F: include/linux/platform_data/mdio-gpio.h diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile index 197acfa0b412..9dff825145e4 100644 --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile @@ -2,7 +2,7 @@ # Makefile for Linux PHY drivers libphy-y := phy.o phy-c45.o phy-core.o phy_device.o \ - linkmode.o + linkmode.o phy_link_topology.o mdio-bus-y += mdio_bus.o mdio_device.o ifdef CONFIG_MDIO_DEVICE diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 2eefee970851..8478199f2d89 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -1511,6 +1512,11 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, if (phydev->sfp_bus_attached) dev->sfp_bus = phydev->sfp_bus; + + err = phy_link_topo_add_phy(dev->link_topo, phydev, + PHY_UPSTREAM_MAC, dev); + if (err) + goto error; } /* Some Ethernet drivers try to connect to a PHY device before @@ -1938,6 +1944,7 @@ void phy_detach(struct phy_device *phydev) if (dev) { phydev->attached_dev->phydev = NULL; phydev->attached_dev = NULL; + phy_link_topo_del_phy(dev->link_topo, phydev); } phydev->phylink = NULL; diff --git a/drivers/net/phy/phy_link_topology.c b/drivers/net/phy/phy_link_topology.c new file mode 100644 index 000000000000..985941c5c558 --- /dev/null +++ b/drivers/net/phy/phy_link_topology.c @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Infrastructure to handle all PHY devices connected to a given netdev, + * either directly or indirectly attached. + * + * Copyright (c) 2023 Maxime Chevallier + */ + +#include +#include +#include +#include +#include + +struct phy_link_topology *phy_link_topo_create(struct net_device *dev) +{ + struct phy_link_topology *topo; + + topo = kzalloc(sizeof(*topo), GFP_KERNEL); + if (!topo) + return ERR_PTR(-ENOMEM); + + xa_init_flags(&topo->phys, XA_FLAGS_ALLOC1); + topo->next_phy_index = 1; + + return topo; +} + +void phy_link_topo_destroy(struct phy_link_topology *topo) +{ + if (!topo) + return; + + xa_destroy(&topo->phys); + kfree(topo); +} + +int phy_link_topo_add_phy(struct phy_link_topology *topo, + struct phy_device *phy, + enum phy_upstream upt, void *upstream) +{ + struct phy_device_node *pdn; + int ret; + + pdn = kzalloc(sizeof(*pdn), GFP_KERNEL); + if (!pdn) + return -ENOMEM; + + pdn->phy = phy; + switch (upt) { + case PHY_UPSTREAM_MAC: + pdn->upstream.netdev = (struct net_device *)upstream; + if (phy_on_sfp(phy)) + pdn->parent_sfp_bus = pdn->upstream.netdev->sfp_bus; + break; + case PHY_UPSTREAM_PHY: + pdn->upstream.phydev = (struct phy_device *)upstream; + if (phy_on_sfp(phy)) + pdn->parent_sfp_bus = pdn->upstream.phydev->sfp_bus; + break; + default: + ret = -EINVAL; + goto err; + } + pdn->upstream_type = upt; + + /* Attempt to re-use a previously allocated phy_index */ + if (phy->phyindex) { + ret = xa_insert(&topo->phys, phy->phyindex, pdn, GFP_KERNEL); + + /* Errors could be either -ENOMEM or -EBUSY. If the phy has an + * index, and there's another entry at the same index, this is + * unexpected and we still error-out + */ + if (ret) + goto err; + return 0; + } + + ret = xa_alloc_cyclic(&topo->phys, &phy->phyindex, pdn, xa_limit_32b, + &topo->next_phy_index, GFP_KERNEL); + if (ret) + goto err; + + return 0; + +err: + kfree(pdn); + return ret; +} +EXPORT_SYMBOL_GPL(phy_link_topo_add_phy); + +void phy_link_topo_del_phy(struct phy_link_topology *topo, + struct phy_device *phy) +{ + struct phy_device_node *pdn = xa_erase(&topo->phys, phy->phyindex); + + /* We delete the PHY from the topology, however we don't re-set the + * phy->phyindex field. If the PHY isn't gone, we can re-assign it the + * same index next time it's added back to the topology + */ + + kfree(pdn); +} +EXPORT_SYMBOL_GPL(phy_link_topo_del_phy); diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index c41019f34179..1cafdf86cade 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -40,7 +40,6 @@ #include #endif #include - #include #include #include @@ -52,6 +51,7 @@ #include #include #include +#include struct netpoll_info; struct device; @@ -2056,6 +2056,7 @@ enum netdev_reg_state { * @fcoe_ddp_xid: Max exchange id for FCoE LRO by ddp * * @priomap: XXX: need comments on this one + * @link_topo: Physical link topology tracking attached PHYs * @phydev: Physical device may attach itself * for hardware timestamping * @sfp_bus: attached &struct sfp_bus structure. @@ -2444,6 +2445,7 @@ struct net_device { #if IS_ENABLED(CONFIG_CGROUP_NET_PRIO) struct netprio_map __rcu *priomap; #endif + struct phy_link_topology *link_topo; struct phy_device *phydev; struct sfp_bus *sfp_bus; struct lock_class_key *qdisc_tx_busylock; diff --git a/include/linux/phy.h b/include/linux/phy.h index e3ab2c347a59..236b95472865 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -549,6 +549,9 @@ struct macsec_ops; * @drv: Pointer to the driver for this PHY instance * @devlink: Create a link between phy dev and mac dev, if the external phy * used by current mac interface is managed by another mac interface. + * @phyindex: Unique id across the phy's parent tree of phys to address the PHY + * from userspace, similar to ifindex. A zero index means the PHY + * wasn't assigned an id yet. * @phy_id: UID for this device found during discovery * @c45_ids: 802.3-c45 Device Identifiers if is_c45. * @is_c45: Set to true if this PHY uses clause 45 addressing. @@ -647,6 +650,7 @@ struct phy_device { struct device_link *devlink; + u32 phyindex; u32 phy_id; struct phy_c45_device_ids c45_ids; diff --git a/include/linux/phy_link_topology.h b/include/linux/phy_link_topology.h new file mode 100644 index 000000000000..6b79feb607e7 --- /dev/null +++ b/include/linux/phy_link_topology.h @@ -0,0 +1,72 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * PHY device list allow maintaining a list of PHY devices that are + * part of a netdevice's link topology. PHYs can for example be chained, + * as is the case when using a PHY that exposes an SFP module, on which an + * SFP transceiver that embeds a PHY is connected. + * + * This list can then be used by userspace to leverage individual PHY + * capabilities. + */ +#ifndef __PHY_LINK_TOPOLOGY_H +#define __PHY_LINK_TOPOLOGY_H + +#include +#include + +struct xarray; +struct phy_device; +struct net_device; +struct sfp_bus; + +struct phy_device_node { + enum phy_upstream upstream_type; + + union { + struct net_device *netdev; + struct phy_device *phydev; + } upstream; + + struct sfp_bus *parent_sfp_bus; + + struct phy_device *phy; +}; + +struct phy_link_topology { + struct xarray phys; + u32 next_phy_index; +}; + +static inline struct phy_device * +phy_link_topo_get_phy(struct phy_link_topology *topo, u32 phyindex) +{ + struct phy_device_node *pdn = xa_load(&topo->phys, phyindex); + + if (pdn) + return pdn->phy; + + return NULL; +} + +#if IS_REACHABLE(CONFIG_PHYLIB) +int phy_link_topo_add_phy(struct phy_link_topology *topo, + struct phy_device *phy, + enum phy_upstream upt, void *upstream); + +void phy_link_topo_del_phy(struct phy_link_topology *lt, struct phy_device *phy); + +#else +static inline int phy_link_topo_add_phy(struct phy_link_topology *topo, + struct phy_device *phy, + enum phy_upstream upt, void *upstream) +{ + return 0; +} + +static inline void phy_link_topo_del_phy(struct phy_link_topology *topo, + struct phy_device *phy) +{ +} +#endif + +#endif /* __PHY_LINK_TOPOLOGY_H */ diff --git a/include/linux/phy_link_topology_core.h b/include/linux/phy_link_topology_core.h new file mode 100644 index 000000000000..0a6479055745 --- /dev/null +++ b/include/linux/phy_link_topology_core.h @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __PHY_LINK_TOPOLOGY_CORE_H +#define __PHY_LINK_TOPOLOGY_CORE_H + +struct phy_link_topology; + +#if IS_REACHABLE(CONFIG_PHYLIB) + +struct phy_link_topology *phy_link_topo_create(struct net_device *dev); +void phy_link_topo_destroy(struct phy_link_topology *topo); + +#else + +static inline struct phy_link_topology *phy_link_topo_create(struct net_device *dev) +{ + return NULL; +} + +static inline void phy_link_topo_destroy(struct phy_link_topology *topo) +{ +} + +#endif + +#endif /* __PHY_LINK_TOPOLOGY_CORE_H */ diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h index 06ef6b78b7de..01ba529dbb6d 100644 --- a/include/uapi/linux/ethtool.h +++ b/include/uapi/linux/ethtool.h @@ -2220,4 +2220,20 @@ struct ethtool_link_settings { * __u32 map_lp_advertising[link_mode_masks_nwords]; */ }; + +/** + * enum phy_upstream - Represents the upstream component a given PHY device + * is connected to, as in what is on the other end of the MII bus. Most PHYs + * will be attached to an Ethernet MAC controller, but in some cases, there's + * an intermediate PHY used as a media-converter, which will driver another + * MII interface as its output. + * @PHY_UPSTREAM_MAC: Upstream component is a MAC (a switch port, + * or ethernet controller) + * @PHY_UPSTREAM_PHY: Upstream component is a PHY (likely a media converter) + */ +enum phy_upstream { + PHY_UPSTREAM_MAC, + PHY_UPSTREAM_PHY, +}; + #endif /* _UAPI_LINUX_ETHTOOL_H */ diff --git a/net/core/dev.c b/net/core/dev.c index fe054cbd41e9..de7ad53b820b 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -155,6 +155,7 @@ #include #include #include +#include #include "dev.h" #include "net-sysfs.h" @@ -10924,6 +10925,12 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name, #ifdef CONFIG_NET_SCHED hash_init(dev->qdisc_hash); #endif + dev->link_topo = phy_link_topo_create(dev); + if (IS_ERR(dev->link_topo)) { + dev->link_topo = NULL; + goto free_all; + } + dev->priv_flags = IFF_XMIT_DST_RELEASE | IFF_XMIT_DST_RELEASE_PERM; setup(dev); @@ -11012,6 +11019,8 @@ void free_netdev(struct net_device *dev) free_percpu(dev->xdp_bulkq); dev->xdp_bulkq = NULL; + phy_link_topo_destroy(dev->link_topo); + /* Compatibility with error handling in drivers */ if (dev->reg_state == NETREG_UNINITIALIZED) { netdev_freemem(dev); From patchwork Mon Mar 4 15:09:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209572 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1484019dyc; Mon, 4 Mar 2024 07:12:38 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXHJevNsUsZ2C27h7vzy8aZn7vGHOt/mQWtEAr3l6O8QGG8FZTjFGHbRHZtgm/Wi6esbtE5RRCcFLtt1Xjdm1DdMOlXwg== X-Google-Smtp-Source: AGHT+IH0cp+kwWhIrAZ/b9ZY/F3KV8VlqzTH7gB3A2ux7X8+sWDjGy2pAgiFCePAdc8MsX6ntSnV X-Received: by 2002:a05:622a:88:b0:42e:8b8b:8cb6 with SMTP id o8-20020a05622a008800b0042e8b8b8cb6mr21301032qtw.13.1709565158236; Mon, 04 Mar 2024 07:12:38 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709565158; cv=pass; d=google.com; s=arc-20160816; b=iYFgsseQ0se9QjMg/A2fqdyEF3N4gJu5d1v45gBWw0+bF4pg4A7JwGwSxCUmo7NWll Fio37jVcpz8APjbXvjgH563gKZgzXO19sCOuvZ/B20OgTymUDRSQ7uhquEWZPTc82Uw2 357LnI3FwrMM0X9bWSrisDurEnHapTCzBGnYwC0mz7BUn3VliPheXZNgtMfR+nmLsbfw I6pYZy38+mqafBlrrnswGVXG5R3Uh3lgiEdjPYGZASQrHS/inAKhq+km0cFZ5k4WeFd5 g98+v64htgWWbtuqMzr5ubJ00wpl66r3116MSd7iAtB4QVQIpjvSC8iJ71SqRo8V1Vxu PtQQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=OmCZ8+vUM5DG7x+TAmA4cTrV/kcQNelYUOaYHrZMngk=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=v4dyD271KeFWeQ6YbElmkEG/0tPzaFOlVGVkgrAmEsdxZCEKcKhwUeJfW5bQTC5rJP d7Lp1UiDidsAri08th4T7tpptiNEVm+rk5jGieFL6wax+RNpDyVbD5ce5xgPIkT0l3GE hW75EYak7xm1On0+fZX7zyjWxjvH3GnCH2Fba07Ck1X6HKJiagIWDxbKk37+qaIi2VVq l7eIPaXoVI/pCh/wRVcxmftKDB5yVZ9IMNt3B+jDGhbcmOM5iZjFOdQTDVYPwJp3S/Dg h/mgOjxfItvZIB85WsUCiYIdbnArYDEffajXp9kNj7ZarVcoQTWF0TlO2bX3EETZJ7Ey 4wAQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=jOWFc6YT; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90781-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90781-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id e19-20020a05622a111300b0042ef058d401si2631169qty.436.2024.03.04.07.12.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:12:38 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90781-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=jOWFc6YT; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90781-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90781-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id E57001C21B30 for ; Mon, 4 Mar 2024 15:12:37 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 94BFB524DD; Mon, 4 Mar 2024 15:10:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="jOWFc6YT" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 7325F47772; Mon, 4 Mar 2024 15:10:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565021; cv=none; b=EvIZklK4N3PJZEKAbViwoCFSlh7nVFmsArkxkt4YF59R+gRYnOtc4ogvxyf+LuuaBqbbtbwnDFPSTyslaHuGyc7dotDLhQNDVbDPf1AhUklRX/QUkjgaKQJp+LJNO+PpDkxleqBU+J9JnuSjNXGD5Tsn2ynlbKpJ/fKFLeENwMI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565021; c=relaxed/simple; bh=pW+1V7YqOhkcLioMl2DX0tOkmXUQtbPF3XcSxdIf7OE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RZy4abN0/KZIu/LWvWwlE15EqXAMiA/BojWlBqLmFjPO8af/rqv2z+BVmCdhzctygoCt2CdKFSGwK1e1E2rnYOZebvoeg3GkScPZn42plsBwEkxRyM4wAluk3epCEfrzo5GluP2uByi/pv6WmgkiJDdvzgB6g6G0zyK3cUEj/Jo= 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=jOWFc6YT; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id 4405B1BF20B; Mon, 4 Mar 2024 15:10:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565017; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OmCZ8+vUM5DG7x+TAmA4cTrV/kcQNelYUOaYHrZMngk=; b=jOWFc6YTA+JqZ8uZMFTD1zxcWx2ZZf7jB1sEU+oTscYmKbqz2oFj3fFqQF4TtGOIrdja5Y Ih949WqcLOaLh4y6ZrMU3x2dGW4pfFyOa/tLtYEH7w9PItt++G4sei7qmVDsjunOL7tqFb yXrggYyFSHiMbLfGiDK7dPF87MJkqo4Nf16x09XaTC1aZhSpidzepVWkA00KblZMgRp6Ep ZUjCwYp9EurDlbd6ZYv9twBz++Jh+g9HIjWf/KKF3L+t0o1SyWPtsyNEgWhjm6ZhLz1poa n3AzhjQFrrlTtdbYfpkbl78+gjzsrAgv/LYMl6zKl9T0fVFPdPGG1Vkb6FK1Hg== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 02/13] net: sfp: pass the phy_device when disconnecting an sfp module's PHY Date: Mon, 4 Mar 2024 16:09:58 +0100 Message-ID: <20240304151011.1610175-3-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792608995292979345 X-GMAIL-MSGID: 1792608995292979345 Pass the phy_device as a parameter to the sfp upstream .disconnect_phy operation. This is preparatory work to help track phy devices across a net_device's link. Signed-off-by: Maxime Chevallier --- V10: No changes V9: No changes V8: No changes V7: No changes V6: Moved an incorrectly added hunk from the previous series to patch 0003 V5: No changes V4: No changes V3: No changes drivers/net/phy/phylink.c | 3 ++- drivers/net/phy/sfp-bus.c | 4 ++-- include/linux/sfp.h | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 503fd7c40523..8a34883eb99b 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -3385,7 +3385,8 @@ static int phylink_sfp_connect_phy(void *upstream, struct phy_device *phy) return ret; } -static void phylink_sfp_disconnect_phy(void *upstream) +static void phylink_sfp_disconnect_phy(void *upstream, + struct phy_device *phydev) { phylink_disconnect_phy(upstream); } diff --git a/drivers/net/phy/sfp-bus.c b/drivers/net/phy/sfp-bus.c index db39dec7f247..e05013aeecc3 100644 --- a/drivers/net/phy/sfp-bus.c +++ b/drivers/net/phy/sfp-bus.c @@ -486,7 +486,7 @@ static void sfp_unregister_bus(struct sfp_bus *bus) bus->socket_ops->stop(bus->sfp); bus->socket_ops->detach(bus->sfp); if (bus->phydev && ops && ops->disconnect_phy) - ops->disconnect_phy(bus->upstream); + ops->disconnect_phy(bus->upstream, bus->phydev); } bus->registered = false; } @@ -742,7 +742,7 @@ void sfp_remove_phy(struct sfp_bus *bus) const struct sfp_upstream_ops *ops = sfp_get_upstream_ops(bus); if (ops && ops->disconnect_phy) - ops->disconnect_phy(bus->upstream); + ops->disconnect_phy(bus->upstream, bus->phydev); bus->phydev = NULL; } EXPORT_SYMBOL_GPL(sfp_remove_phy); diff --git a/include/linux/sfp.h b/include/linux/sfp.h index 9346cd44814d..0573e53b0c11 100644 --- a/include/linux/sfp.h +++ b/include/linux/sfp.h @@ -544,7 +544,7 @@ struct sfp_upstream_ops { void (*link_down)(void *priv); void (*link_up)(void *priv); int (*connect_phy)(void *priv, struct phy_device *); - void (*disconnect_phy)(void *priv); + void (*disconnect_phy)(void *priv, struct phy_device *); }; #if IS_ENABLED(CONFIG_SFP) From patchwork Mon Mar 4 15:09:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209574 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1484396dyc; Mon, 4 Mar 2024 07:13:14 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCW/X/60pAYnw+Ni10eKOx/+sD9Jwt47kd5N6++3C/0fVPRThs/SibJk4jEqt9vlVtT0VpVX0BIWzmPFdnOt10RKTm3UHg== X-Google-Smtp-Source: AGHT+IGp/uJSMsZQ4njMj80qk3AJrCQHhdMYjQNrVp0gyLp/e5uBcuMkYJSNRoxL82x5PVAHWXCv X-Received: by 2002:a17:906:1188:b0:a44:1929:6b90 with SMTP id n8-20020a170906118800b00a4419296b90mr6702983eja.27.1709565194268; Mon, 04 Mar 2024 07:13:14 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709565194; cv=pass; d=google.com; s=arc-20160816; b=cpo/kdNJwiy5B4vCm1R37qozPzMntHWKs2pAHuJzoZsrFYEYVXoDT2NLaga7zT6Icj vhP9E9jWypbOom2AzDjgiMAuP9yU3GRhVOsTVCRib/xv4LjKCXIgZDfwVBXA76jVHuti SwC1kIyYfP+hCf5zTYeCjwvWQIj3lLDEmTKWt7+xjpcDSqTJIFtZhRDJTfCkNKPRmkHx frVtP7xtRQ2CgH49f3rsKZQrCOqgf8kWAQNN1ihaxCVRXpl8XYs6p/ShRahkwl7Ezhlo pYanJf8ekeRz47K+Uo3mf1PlwaIQBtt3YeE7VQfBGdvALD4r48HX0wDqD6tw5GSu8sg0 1S9A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=HihLo+Ctk76kwy5HK++OlTvdrtWSA7nfehOz98rr9a0=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=IBTJW8NwEcIPp4++DZ4CYBJgkTIh+knc+NbhG4B6gTo32Z4O94eIGmoFyIk/rYImux PFEyabaNSQyQH2vgSKmBWSqZlC4tHaohkztFF6wMTFFCJVZNEUuQV67X6B/2bs8tlhf+ 1X3tswpnsa2l7btfLi9P7wUaeItd4iPerZ6QiUpuC4VtuWNUYgrREanJqlEQLNRigHr8 SlH9G8vN10ttW0VCJ5q8/r/8776BIW2KuGhO16vYneOWwvctS+kFbHg+VGDXZg41ugQj lZ3dxYwE5ag1UghI5vgptNXpph3cwlkoJye1xEut+1JD4ALmz6BHCoU5HzD8F4bi3UIh A4bQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=lSTaiSwp; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90782-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90782-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id go42-20020a1709070daa00b00a43efa48475si4092880ejc.818.2024.03.04.07.13.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:13:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90782-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=lSTaiSwp; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90782-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90782-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id B63171F216FC for ; Mon, 4 Mar 2024 15:13:13 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CC6D554735; Mon, 4 Mar 2024 15:10:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="lSTaiSwp" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 85CAB487A9; Mon, 4 Mar 2024 15:10:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565023; cv=none; b=FSRGCAw2gHYXtkM7Yk2FM0r5PQyGEbRyiqidib/SDHjeNulRzEW5QVEtqJzIOSNOVGPpuzN2b/dXWb/hkZHWvHmQ5fA3LPl1ddFLhiC87pYzZ9ag8wrPDj6iHkIizPWVIJjrRjG0BeYnDrisAhOt+vx5c4l4QHjOkLdP2BI9gSk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565023; c=relaxed/simple; bh=W8KQG2KgntOcdGygGYSi0sRYHKAfJyW2qXqCs8iI4fE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YllWtRGHJRoQpg8F9Xi+8Z97ZcRyVHAfI0m2zKSgrTMLshHC9/ySLX3pYBjz+zXz0SJiBL1Vaqog54CgkjnuPG1PA3zWIl7+5Cen4OtVFE7mDDnuI+e6sNIq6IQefYofeqHBSAhJrvLQxEmkbJZ639f82ENQc0cs/UkO28jG5V8= 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=lSTaiSwp; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id 8D6C71BF20F; Mon, 4 Mar 2024 15:10:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565018; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HihLo+Ctk76kwy5HK++OlTvdrtWSA7nfehOz98rr9a0=; b=lSTaiSwpfUUcOWve4smv+bvdeWgvwW3Ap5IRvEB5iol9qhdl+9n+yfQM4OruiGWUdIktOi QmiBPeRsZFXPuC007VwdaT5RHEBSRSMXITEwqWO4jnCQ/JkqpKD8PP8VdNF+Nk7BM2JyPy BIi6Tlj1Lykzr+9tpSsRgWxD/v72bwgvpVw3tH2FnyYvUO4rjZnd1vAEDIFeX7io5uVrfE ZxKTQx/BXVSO/yo+iEoqOW5TespXb3A4IM8gm9tSg51se+RD7LxrBAWywwUf5TnHapee1P DvMgK1CINr1py7EUiqJrF57oCMHOtl/Gbo+sp0R8OiB42XLt/vtXZwQcCaDd6w== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 03/13] net: phy: add helpers to handle sfp phy connect/disconnect Date: Mon, 4 Mar 2024 16:09:59 +0100 Message-ID: <20240304151011.1610175-4-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792609033564869882 X-GMAIL-MSGID: 1792609033564869882 There are a few PHY drivers that can handle SFP modules through their sfp_upstream_ops. Introduce Phylib helpers to keep track of connected SFP PHYs in a netdevice's namespace, by adding the SFP PHY to the upstream PHY's netdev's namespace. By doing so, these SFP PHYs can be enumerated and exposed to users, which will be able to use their capabilities. Signed-off-by: Maxime Chevallier --- V10: No changes V9: No changes V8: Took the at803x into account V7: No changes V6: Moved phy_get_link_topology() definition to this patch V5: No Changes V4: Rebased the at803x part with the newer version on net-next V3: Renaming V2: Renaming drivers/net/phy/marvell-88x2222.c | 2 ++ drivers/net/phy/marvell.c | 2 ++ drivers/net/phy/marvell10g.c | 2 ++ drivers/net/phy/phy_device.c | 48 +++++++++++++++++++++++++++++++ drivers/net/phy/qcom/at803x.c | 2 ++ drivers/net/phy/qcom/qca807x.c | 2 ++ include/linux/phy.h | 2 ++ 7 files changed, 60 insertions(+) diff --git a/drivers/net/phy/marvell-88x2222.c b/drivers/net/phy/marvell-88x2222.c index e3aa30dad2e6..3f77bbc7e04f 100644 --- a/drivers/net/phy/marvell-88x2222.c +++ b/drivers/net/phy/marvell-88x2222.c @@ -555,6 +555,8 @@ static const struct sfp_upstream_ops sfp_phy_ops = { .link_down = mv2222_sfp_link_down, .attach = phy_sfp_attach, .detach = phy_sfp_detach, + .connect_phy = phy_sfp_connect_phy, + .disconnect_phy = phy_sfp_disconnect_phy, }; static int mv2222_probe(struct phy_device *phydev) diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c index 1faa22f58366..c26d20bdac51 100644 --- a/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c @@ -3254,6 +3254,8 @@ static const struct sfp_upstream_ops m88e1510_sfp_ops = { .module_remove = m88e1510_sfp_remove, .attach = phy_sfp_attach, .detach = phy_sfp_detach, + .connect_phy = phy_sfp_connect_phy, + .disconnect_phy = phy_sfp_disconnect_phy, }; static int m88e1510_probe(struct phy_device *phydev) diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c index ad43e280930c..6642eb642d4b 100644 --- a/drivers/net/phy/marvell10g.c +++ b/drivers/net/phy/marvell10g.c @@ -503,6 +503,8 @@ static int mv3310_sfp_insert(void *upstream, const struct sfp_eeprom_id *id) static const struct sfp_upstream_ops mv3310_sfp_ops = { .attach = phy_sfp_attach, .detach = phy_sfp_detach, + .connect_phy = phy_sfp_connect_phy, + .disconnect_phy = phy_sfp_disconnect_phy, .module_insert = mv3310_sfp_insert, }; diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 8478199f2d89..d47a2aa6ce87 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -277,6 +277,14 @@ static void phy_mdio_device_remove(struct mdio_device *mdiodev) static struct phy_driver genphy_driver; +static struct phy_link_topology *phy_get_link_topology(struct phy_device *phydev) +{ + if (phydev->attached_dev) + return phydev->attached_dev->link_topo; + + return NULL; +} + static LIST_HEAD(phy_fixup_list); static DEFINE_MUTEX(phy_fixup_lock); @@ -1370,6 +1378,46 @@ phy_standalone_show(struct device *dev, struct device_attribute *attr, } static DEVICE_ATTR_RO(phy_standalone); +/** + * phy_sfp_connect_phy - Connect the SFP module's PHY to the upstream PHY + * @upstream: pointer to the upstream phy device + * @phy: pointer to the SFP module's phy device + * + * This helper allows keeping track of PHY devices on the link. It adds the + * SFP module's phy to the phy namespace of the upstream phy + */ +int phy_sfp_connect_phy(void *upstream, struct phy_device *phy) +{ + struct phy_device *phydev = upstream; + struct phy_link_topology *topo = phy_get_link_topology(phydev); + + if (topo) + return phy_link_topo_add_phy(topo, phy, PHY_UPSTREAM_PHY, phydev); + + return 0; +} +EXPORT_SYMBOL(phy_sfp_connect_phy); + +/** + * phy_sfp_disconnect_phy - Disconnect the SFP module's PHY from the upstream PHY + * @upstream: pointer to the upstream phy device + * @phy: pointer to the SFP module's phy device + * + * This helper allows keeping track of PHY devices on the link. It removes the + * SFP module's phy to the phy namespace of the upstream phy. As the module phy + * will be destroyed, re-inserting the same module will add a new phy with a + * new index. + */ +void phy_sfp_disconnect_phy(void *upstream, struct phy_device *phy) +{ + struct phy_device *phydev = upstream; + struct phy_link_topology *topo = phy_get_link_topology(phydev); + + if (topo) + phy_link_topo_del_phy(topo, phy); +} +EXPORT_SYMBOL(phy_sfp_disconnect_phy); + /** * phy_sfp_attach - attach the SFP bus to the PHY upstream network device * @upstream: pointer to the phy device diff --git a/drivers/net/phy/qcom/at803x.c b/drivers/net/phy/qcom/at803x.c index 4717c59d51d0..235d242076cb 100644 --- a/drivers/net/phy/qcom/at803x.c +++ b/drivers/net/phy/qcom/at803x.c @@ -769,6 +769,8 @@ static const struct sfp_upstream_ops at8031_sfp_ops = { .attach = phy_sfp_attach, .detach = phy_sfp_detach, .module_insert = at8031_sfp_insert, + .connect_phy = phy_sfp_connect_phy, + .disconnect_phy = phy_sfp_disconnect_phy, }; static int at8031_parse_dt(struct phy_device *phydev) diff --git a/drivers/net/phy/qcom/qca807x.c b/drivers/net/phy/qcom/qca807x.c index 780c28e2e4aa..0ff16122c3d9 100644 --- a/drivers/net/phy/qcom/qca807x.c +++ b/drivers/net/phy/qcom/qca807x.c @@ -699,6 +699,8 @@ static const struct sfp_upstream_ops qca807x_sfp_ops = { .detach = phy_sfp_detach, .module_insert = qca807x_sfp_insert, .module_remove = qca807x_sfp_remove, + .connect_phy = phy_sfp_connect_phy, + .disconnect_phy = phy_sfp_disconnect_phy, }; static int qca807x_probe(struct phy_device *phydev) diff --git a/include/linux/phy.h b/include/linux/phy.h index 236b95472865..eb505097bc9f 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1752,6 +1752,8 @@ int phy_suspend(struct phy_device *phydev); int phy_resume(struct phy_device *phydev); int __phy_resume(struct phy_device *phydev); int phy_loopback(struct phy_device *phydev, bool enable); +int phy_sfp_connect_phy(void *upstream, struct phy_device *phy); +void phy_sfp_disconnect_phy(void *upstream, struct phy_device *phy); void phy_sfp_attach(void *upstream, struct sfp_bus *bus); void phy_sfp_detach(void *upstream, struct sfp_bus *bus); int phy_sfp_probe(struct phy_device *phydev, From patchwork Mon Mar 4 15:10:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209573 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1484359dyc; Mon, 4 Mar 2024 07:13:10 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCV6bcO7NRacEUgpUZ+DhgYC403ecfpsuZLTBYXV0eGw/zie3GrL6bfBZ6PgeDveF3uGJS2LPluQz3ijhD8wEqCjCtuGMQ== X-Google-Smtp-Source: AGHT+IGBK5F5vBiO1G5B8iTtj+yY05yviG9sYQ8fvLMtOcbEVPA8+DzRvRAoUrPRCNtQdKUsYCEl X-Received: by 2002:a17:906:b08:b0:a45:248e:b253 with SMTP id u8-20020a1709060b0800b00a45248eb253mr2700599ejg.76.1709565190487; Mon, 04 Mar 2024 07:13:10 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709565190; cv=pass; d=google.com; s=arc-20160816; b=TKMf+y7wXoqFQLzkjebPVh91BgNTqIClawhks2gWFWxV4jtET/ivz2CkC9BO+r3Yh1 t2YsAZVQLAE4IkJG3aLahvssXgWSZ4NEpdRpFTgin9MTh5V4sh0dvzd8E7VZqT8SxUfn rRA7kFjKtbm2EwgAmGlZShrhCN4I4VO4SaFXQfeY4/P0fUfTUkb04l2+ChaDhSoKfqR0 ScAMHzJwv+kB1HOBxkiLkXlSkvpAL2eH1RVBlYk4K0gCComg2LbVoYD5k10Myh53MYAB TCHenj2hnnIb7QJJQ9LLRwsyn8uet5vKaL1Sqg+GCPi9Pd6GTqa//GhXANXNzwhArWr7 b0YQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=MFQPtl2S0krjE67qH+tSTLUZ7cgX9mfnySWLJzrZtAE=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=EtB9Enr6MtD7we6cQofEtph1Ymc0Ipwc10RRCHugYD449xGXg4JR8ZFGYKVCca5Md2 o0b92tW2pD/Ltui42IGkHVk80G79kIRedBo4ttH0+GWvQohP/9u1CmlqZ4Smtk+0phw+ Y0oqwn7zMhcKdUpt8rW8V+snGzh2esGFLku736qfbHBD7bvgc9dury4Eq5ieOML4aZQU Ux+7OqQ8MMioF9MWEwrJHTANceBGuu3RKQNASFs+BIi4GSp56wpNEjBc6/+9iyw8EPVC exwqYCvnPQ/4dBSw+gBr/LbqUC1WABBV1m2I65QTMBEGDhrvyfPnl1qTs4+xgAFnCs0h L+CA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=VAI5zptD; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90783-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90783-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id v13-20020a17090606cd00b00a4410bcb974si4005177ejb.78.2024.03.04.07.13.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:13:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90783-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=VAI5zptD; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90783-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90783-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 1FAAD1F23014 for ; Mon, 4 Mar 2024 15:13:10 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8ED935380C; Mon, 4 Mar 2024 15:10:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="VAI5zptD" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 B93EE4AEF6; Mon, 4 Mar 2024 15:10:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565023; cv=none; b=KqcDYSCpWvXam3o0rCDTs90WgenbBTkmKYf4z0vFhWcvXcDFFKZ2Wcoyjdvzn8f0zpOOx+UginNzBgoxz9+hfeJfPT7mOgUp5EgNHTIktXKPWIUj8FYRsiW/CUAnkPgCbHRY6AIAGT3cVx7cdbYKhi9lQ/M+CRSuhnsTpBjbtpM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565023; c=relaxed/simple; bh=SmGGZwV9wmLzWbOiPnV9VQFg8jo0MlN1d/1KVpk3OoU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fc6jTvTEd9DYjuZHuoNCCUVVU6lhmfNAklRvTURy0POacrqtp6wsMFo66jznyFHuNlgtqnnrqc9Lin2twHsNWBS3v/nP9qBQ0Jefmwl6OfmoPPsQYbEgzYK9KxMdmBLqPXF206yS8o7bMKFk0vxL3P28NJOee2yEpt42meIt+zw= 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=VAI5zptD; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id DA5AE1BF211; Mon, 4 Mar 2024 15:10:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565020; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MFQPtl2S0krjE67qH+tSTLUZ7cgX9mfnySWLJzrZtAE=; b=VAI5zptDU5hq39a6KOnw5Uv9UIdpVxkowi54/k4oCUk+oYQU1iMul8DzYlnrfhr78o43UJ s91Yw9jBBa0xI/raCPZjbsrF2m9uCSNhncrk0ap0QaEl7AwDtSUIpFDjJR0xfaO6N++vIz PegQSgkmKJ/i+3HQdEpLDydg9ZuDzk4K5FK9uQTvc9lQgyaZ5cDlpVs3eHSXfbA2z33Hci H7X1e7ykM25UPav1lJFKjSFwIpXssQLSNIUxkCztWGXqpX/MaVh7xUE9pT6MVdP8kUO/bG Tmjd1omycZjMtq7s1uLLnH8vOAxZqaq8b0kMrOgJTck5oDHIZS0KuKLtAygE/Q== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 04/13] net: sfp: Add helper to return the SFP bus name Date: Mon, 4 Mar 2024 16:10:00 +0100 Message-ID: <20240304151011.1610175-5-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792609029143350656 X-GMAIL-MSGID: 1792609029143350656 Knowing the bus name is helpful when we want to expose the link topology to userspace, add a helper to return the SFP bus name. Signed-off-by: Maxime Chevallier Reviewed-by: Andrew Lunn --- V10: - No changes V9: - No changes V8: - No changes V7: - No changes V6: - No changes V5: - Added Andrew's R-b V4: - No changes V3: - Added RTNL assert drivers/net/phy/sfp-bus.c | 11 +++++++++++ include/linux/sfp.h | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/drivers/net/phy/sfp-bus.c b/drivers/net/phy/sfp-bus.c index e05013aeecc3..413021619afe 100644 --- a/drivers/net/phy/sfp-bus.c +++ b/drivers/net/phy/sfp-bus.c @@ -859,3 +859,14 @@ void sfp_unregister_socket(struct sfp_bus *bus) sfp_bus_put(bus); } EXPORT_SYMBOL_GPL(sfp_unregister_socket); + +const char *sfp_get_name(struct sfp_bus *bus) +{ + ASSERT_RTNL(); + + if (bus->sfp_dev) + return dev_name(bus->sfp_dev); + + return NULL; +} +EXPORT_SYMBOL_GPL(sfp_get_name); diff --git a/include/linux/sfp.h b/include/linux/sfp.h index 0573e53b0c11..55c0ab17c9e2 100644 --- a/include/linux/sfp.h +++ b/include/linux/sfp.h @@ -570,6 +570,7 @@ struct sfp_bus *sfp_bus_find_fwnode(const struct fwnode_handle *fwnode); int sfp_bus_add_upstream(struct sfp_bus *bus, void *upstream, const struct sfp_upstream_ops *ops); void sfp_bus_del_upstream(struct sfp_bus *bus); +const char *sfp_get_name(struct sfp_bus *bus); #else static inline int sfp_parse_port(struct sfp_bus *bus, const struct sfp_eeprom_id *id, @@ -648,6 +649,11 @@ static inline int sfp_bus_add_upstream(struct sfp_bus *bus, void *upstream, static inline void sfp_bus_del_upstream(struct sfp_bus *bus) { } + +static inline const char *sfp_get_name(struct sfp_bus *bus) +{ + return NULL; +} #endif #endif From patchwork Mon Mar 4 15:10:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209595 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1498022dyc; Mon, 4 Mar 2024 07:34:14 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXwf5OL0KR89BTMCmkeOlK0Bj2r0WZOcsH6U886vm/UMMyB5L+xiLYyHhDaWB7jEN0n0NoCMskJIHB3ua2zSa2Abk+LAA== X-Google-Smtp-Source: AGHT+IGuTJyaZqJYH5sQLMpKMFmGTCnBdj+PrrT8/2bkZJpivQ7s/oTKwIbdvLHW0HlEFhHcathn X-Received: by 2002:a9d:3e0d:0:b0:6e4:d93a:cea9 with SMTP id a13-20020a9d3e0d000000b006e4d93acea9mr6084740otd.34.1709566453779; Mon, 04 Mar 2024 07:34:13 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709566453; cv=pass; d=google.com; s=arc-20160816; b=GOy3KYrYYSecGIsXmPyrZKb3f7eypdGPuotJVeN7yEH2fmXvASA9iwfGcGRgxg/zJe xFwmFJXKBlpBW1rIWDol8fcSlowFSS3+13eH74mMiNR/m8D+WWc58Dade0U1yMv1jUyL ZlKz3iP5q2qnhVMa4zOl+joqv2JjdnArqECivzVayrTVuXYc/xRfwHlmJXXnNGmkSvoj MiYFExpfHNGimRnAHiPX8MlxP6FeACZpZ1D3jGVK95d4fDbYT3vNU1/CG5aO6+EVDWwx M/nw/UX3dalVCgMLfaTQk0SjiSYtJ6feriOxzAIE77ntAxPIGTS3SKe0+zj1e+IS9QBS NbVg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=b6MBi7b1Vb1ZjczZpkLAFBf4QKksHejH7J8PqqdfMHk=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=sNS6VngG0jsqDCfOEOHZfDupazkhMBSKrapz8wLbqIgXzi3mIvzHI36IfefynFYkjK mKtWu7xN8wvyHjbjTNZv8wQYJ43xbeh+l1OSnKMnG+yU3StcuuhCRhlkmoc8t2R/ACaU zjv7BU951EX+S+k4cjP6A38v7qjBsGIVTFgObTG9MsLPWiwApDvBJUatngYtbILj3i36 FdIiQ7AADQk/w3rMP4+3glCm8uPy10qwQZVGblVh9vue1mYykF/LOrwjjfZOx6z2AJ2e AMGn/YL8PMWl70voZ6IVuigHWaip9452Ey0O/JxSdAI8Pa/XzIXUr6GDNUF/7mW7zLsD 9JRg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=avLKt+97; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90784-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90784-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id x17-20020a631711000000b005dc88c4702dsi8418072pgl.225.2024.03.04.07.34.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:34:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90784-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=avLKt+97; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90784-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90784-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id C59E6B26F0A for ; Mon, 4 Mar 2024 15:13:37 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 02D9F54905; Mon, 4 Mar 2024 15:10:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="avLKt+97" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 E130F4F207; Mon, 4 Mar 2024 15:10:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565025; cv=none; b=Q2MiozuyBjeM2xkx42qrlB+1PWzg7oCkgcRPrqy4z/ML6LAtsrCBFLjL1DrWVNB2D0cnTUA0XaTkY+bcjK2Pw0N26XNLeyBZ9mHHSxAoQhFBpES1gjux85wAEUP0yx/m6QnjGZ6vCaMUTlrjSnE0B12QMXYyk7VLtidv5Q+s3R8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565025; c=relaxed/simple; bh=Jd2Mpywe/jw0SDws9qQjdLdkwdw2xmmXSW0VETqpBb8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pcISB9+xwh0j3S6U212tJz0fSBFjIPYzt4ERgUN7UU7kwOwNXpluyzrCWiTGCXjSy5u1PWYbDldQ4JwzkUWWwgb/4hGtSixn+yBZik/+oWfgP9lLmgPzdmJS+QztL/c8TUQSo/1mtiZ2h1hvG3vaa6ZNBqFjzniThhbcforucD8= 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=avLKt+97; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id 36A7C1BF20E; Mon, 4 Mar 2024 15:10:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565021; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=b6MBi7b1Vb1ZjczZpkLAFBf4QKksHejH7J8PqqdfMHk=; b=avLKt+979MPd0fAARoWFm907EyjOwrJyxBsPG6Qxxz/gk2b8j3oVblenLPycr2zp81/FKr oc9050m58e0TEO4nEk1B++CuqAVCtAcRCOU0OSv95NOOEFbxRK9SE4PHwWc20iNiOPHyLn KL+//HThzvLSOYIAqMdvJrCrLXVY6ioqGRdyrzBOUMxK/L2cuX3ZTcKGPxuZDLf42A+PVO 0isaiKcdupmeoPpP22mppZdLfxXBuKEJyw3LYgb+UC9eYtdKm9Byu1RetrxldFpXQG2gIS fNQuCGVHwFxqgt7ALdx5vYyvrVXQm+0LpotDmhD4D/OOee5iKe9oJrxk09Sd2Q== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 05/13] net: ethtool: Allow passing a phy index for some commands Date: Mon, 4 Mar 2024 16:10:01 +0100 Message-ID: <20240304151011.1610175-6-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792610353643976455 X-GMAIL-MSGID: 1792610353643976455 Some netlink commands are target towards ethernet PHYs, to control some of their features. As there's several such commands, add the ability to pass a PHY index in the ethnl request, which will populate the generic ethnl_req_info with the relevant phydev when the command targets a PHY. Signed-off-by: Maxime Chevallier Reviewed-by: Andrew Lunn --- V10: - No changes V9: - No changes V8: - No changes V7: - No changes V6: - Added dedicated policies when passing a PHY index - Dropped Andrew's R-b as there were changes V5: - Added Andrew's R-b - Fix a typo reported by Simon V4: - No Changes V3: - Fixed the documentation V2: - New patch Documentation/networking/ethtool-netlink.rst | 7 ++++ include/uapi/linux/ethtool_netlink.h | 1 + net/ethtool/netlink.c | 44 +++++++++++++++++++- net/ethtool/netlink.h | 5 +++ 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst index d583d9abf2f8..3ca6c21e74af 100644 --- a/Documentation/networking/ethtool-netlink.rst +++ b/Documentation/networking/ethtool-netlink.rst @@ -57,6 +57,7 @@ Structure of this header is ``ETHTOOL_A_HEADER_DEV_INDEX`` u32 device ifindex ``ETHTOOL_A_HEADER_DEV_NAME`` string device name ``ETHTOOL_A_HEADER_FLAGS`` u32 flags common for all requests + ``ETHTOOL_A_HEADER_PHY_INDEX`` u32 phy device index ============================== ====== ============================= ``ETHTOOL_A_HEADER_DEV_INDEX`` and ``ETHTOOL_A_HEADER_DEV_NAME`` identify the @@ -81,6 +82,12 @@ the behaviour is backward compatible, i.e. requests from old clients not aware of the flag should be interpreted the way the client expects. A client must not set flags it does not understand. +``ETHTOOL_A_HEADER_PHY_INDEX`` identify the ethernet PHY the message relates to. +As there are numerous commands that are related to PHY configuration, and because +we can have more than one PHY on the link, the PHY index can be passed in the +request for the commands that needs it. It is however not mandatory, and if it +is not passed for commands that target a PHY, the net_device.phydev pointer +is used, as a fallback that keeps the legacy behaviour. Bit sets ======== diff --git a/include/uapi/linux/ethtool_netlink.h b/include/uapi/linux/ethtool_netlink.h index 3f89074aa06c..422e8cfdd98c 100644 --- a/include/uapi/linux/ethtool_netlink.h +++ b/include/uapi/linux/ethtool_netlink.h @@ -133,6 +133,7 @@ enum { ETHTOOL_A_HEADER_DEV_INDEX, /* u32 */ ETHTOOL_A_HEADER_DEV_NAME, /* string */ ETHTOOL_A_HEADER_FLAGS, /* u32 - ETHTOOL_FLAG_* */ + ETHTOOL_A_HEADER_PHY_INDEX, /* u32 */ /* add new constants above here */ __ETHTOOL_A_HEADER_CNT, diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c index bd04f28d5cf4..b8f16398ea9d 100644 --- a/net/ethtool/netlink.c +++ b/net/ethtool/netlink.c @@ -4,6 +4,7 @@ #include #include #include "netlink.h" +#include static struct genl_family ethtool_genl_family; @@ -30,6 +31,24 @@ const struct nla_policy ethnl_header_policy_stats[] = { ETHTOOL_FLAGS_STATS), }; +const struct nla_policy ethnl_header_policy_phy[] = { + [ETHTOOL_A_HEADER_DEV_INDEX] = { .type = NLA_U32 }, + [ETHTOOL_A_HEADER_DEV_NAME] = { .type = NLA_NUL_STRING, + .len = ALTIFNAMSIZ - 1 }, + [ETHTOOL_A_HEADER_FLAGS] = NLA_POLICY_MASK(NLA_U32, + ETHTOOL_FLAGS_BASIC), + [ETHTOOL_A_HEADER_PHY_INDEX] = NLA_POLICY_MIN(NLA_U32, 1), +}; + +const struct nla_policy ethnl_header_policy_phy_stats[] = { + [ETHTOOL_A_HEADER_DEV_INDEX] = { .type = NLA_U32 }, + [ETHTOOL_A_HEADER_DEV_NAME] = { .type = NLA_NUL_STRING, + .len = ALTIFNAMSIZ - 1 }, + [ETHTOOL_A_HEADER_FLAGS] = NLA_POLICY_MASK(NLA_U32, + ETHTOOL_FLAGS_STATS), + [ETHTOOL_A_HEADER_PHY_INDEX] = NLA_POLICY_MIN(NLA_U32, 1), +}; + int ethnl_ops_begin(struct net_device *dev) { int ret; @@ -89,8 +108,9 @@ int ethnl_parse_header_dev_get(struct ethnl_req_info *req_info, const struct nlattr *header, struct net *net, struct netlink_ext_ack *extack, bool require_dev) { - struct nlattr *tb[ARRAY_SIZE(ethnl_header_policy)]; + struct nlattr *tb[ARRAY_SIZE(ethnl_header_policy_phy)]; const struct nlattr *devname_attr; + struct phy_device *phydev = NULL; struct net_device *dev = NULL; u32 flags = 0; int ret; @@ -104,7 +124,7 @@ int ethnl_parse_header_dev_get(struct ethnl_req_info *req_info, /* No validation here, command policy should have a nested policy set * for the header, therefore validation should have already been done. */ - ret = nla_parse_nested(tb, ARRAY_SIZE(ethnl_header_policy) - 1, header, + ret = nla_parse_nested(tb, ARRAY_SIZE(ethnl_header_policy_phy) - 1, header, NULL, extack); if (ret < 0) return ret; @@ -145,6 +165,26 @@ int ethnl_parse_header_dev_get(struct ethnl_req_info *req_info, return -EINVAL; } + if (dev) { + if (tb[ETHTOOL_A_HEADER_PHY_INDEX]) { + u32 phy_index = nla_get_u32(tb[ETHTOOL_A_HEADER_PHY_INDEX]); + + phydev = phy_link_topo_get_phy(dev->link_topo, + phy_index); + if (!phydev) { + NL_SET_ERR_MSG_ATTR(extack, header, + "no phy matches phy index"); + return -EINVAL; + } + } else { + /* If we need a PHY but no phy index is specified, fallback + * to dev->phydev + */ + phydev = dev->phydev; + } + } + + req_info->phydev = phydev; req_info->dev = dev; req_info->flags = flags; return 0; diff --git a/net/ethtool/netlink.h b/net/ethtool/netlink.h index 9a333a8d04c1..d57a890b5d9e 100644 --- a/net/ethtool/netlink.h +++ b/net/ethtool/netlink.h @@ -250,6 +250,7 @@ static inline unsigned int ethnl_reply_header_size(void) * @dev: network device the request is for (may be null) * @dev_tracker: refcount tracker for @dev reference * @flags: request flags common for all request types + * @phydev: phy_device connected to @dev this request is for (may be null) * * This is a common base for request specific structures holding data from * parsed userspace request. These always embed struct ethnl_req_info at @@ -259,6 +260,7 @@ struct ethnl_req_info { struct net_device *dev; netdevice_tracker dev_tracker; u32 flags; + struct phy_device *phydev; }; static inline void ethnl_parse_header_dev_put(struct ethnl_req_info *req_info) @@ -395,9 +397,12 @@ extern const struct ethnl_request_ops ethnl_rss_request_ops; extern const struct ethnl_request_ops ethnl_plca_cfg_request_ops; extern const struct ethnl_request_ops ethnl_plca_status_request_ops; extern const struct ethnl_request_ops ethnl_mm_request_ops; +extern const struct ethnl_request_ops ethnl_phy_request_ops; extern const struct nla_policy ethnl_header_policy[ETHTOOL_A_HEADER_FLAGS + 1]; extern const struct nla_policy ethnl_header_policy_stats[ETHTOOL_A_HEADER_FLAGS + 1]; +extern const struct nla_policy ethnl_header_policy_phy[ETHTOOL_A_HEADER_PHY_INDEX + 1]; +extern const struct nla_policy ethnl_header_policy_phy_stats[ETHTOOL_A_HEADER_PHY_INDEX + 1]; extern const struct nla_policy ethnl_strset_get_policy[ETHTOOL_A_STRSET_COUNTS_ONLY + 1]; extern const struct nla_policy ethnl_linkinfo_get_policy[ETHTOOL_A_LINKINFO_HEADER + 1]; extern const struct nla_policy ethnl_linkinfo_set_policy[ETHTOOL_A_LINKINFO_TP_MDIX_CTRL + 1]; From patchwork Mon Mar 4 15:10:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209575 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1484936dyc; Mon, 4 Mar 2024 07:13:58 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUwpWrz/1FfZOYaarBkxLxa9Y0n7iGinBOjiXnd4l6YPgoWuxsmAaUbRai+OUJed90KpL5Y7OzVgfc3LYRwckspNT63Yg== X-Google-Smtp-Source: AGHT+IH5FvTpN+akS10BCmdCkatLSbCJkKsXddcQDT0kaNGGWWFPsDbXWDFD+G952o3GQ8kEFcy+ X-Received: by 2002:a50:cdd0:0:b0:566:3f3e:3a23 with SMTP id h16-20020a50cdd0000000b005663f3e3a23mr6155506edj.1.1709565238418; Mon, 04 Mar 2024 07:13:58 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709565238; cv=pass; d=google.com; s=arc-20160816; b=odWnxr5TGwJOn6ZsM7qnoncBHZtH3v4SmkobxkysBwq6k6qfWwtq80P6QP2bnMn1Nq FhomzlEKBVskR9N+UA/dUUtPW0JbcisHR0q0qYI/lO7WtftO/E81GOYa5s4zu1RKfklo RNWYLiJ7+5VmboOuwwAXwcSCvpeFsI8EmKii2/XdWAR9m4aWwGAA72ZbVufCqgjvFLyY RTVMXAiBW8Z7drxH4mnIh1dGDj2tb7J6a2ZahZPR7N+tC2/Jrw8kN9g/Kg7W3cctkZ0I McO7YoPKok0bA/WIs2MisER6uCuYo808JdbtVjm8kXHFoK9w756jlLRtdN/O0UPuQbbR ma+g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=1pgzFb+b0po/iP/C9MLnMjDEAAPz/mzUfU3a45pXWto=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=qHO+Rvr2NOgGrmHzhMDf3hJ+pXLZcUchPy3D2HyqB/CeGw392V4x1y2vlLOkdur6Et 4OZhnG5nI+QKLg3pPnG5pLQGvtZ5xsV8MKCD3UKHdgoSw9jt7hPV5bNt21aMD8SI4YmA cQlAmH9QZBuQtnoGuDlcaz4G6m0S/WnLeX9OYO73aigkZYP+0+2Zpo19SXQJDv4uk7vz fxXK4rveiOfCXPsBeziFOQa9H2L1bHqcjyFywZvpkH+N7imTMebRIgS/hPI69RPxThAr mB9k2nSW4LUBVSe68xyDBB9PtJybziq4XKMnRjXtpfips+a8perOEQgvlfLtqIZRoXK6 swKQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=KS7bF7Mo; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90785-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90785-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id y22-20020a056402359600b00565b5e786cesi4182693edc.27.2024.03.04.07.13.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:13:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90785-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=KS7bF7Mo; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90785-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90785-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id F10FE1F23094 for ; Mon, 4 Mar 2024 15:13:57 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 216C254FA7; Mon, 4 Mar 2024 15:10:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="KS7bF7Mo" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 5F6BE47772; Mon, 4 Mar 2024 15:10:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565027; cv=none; b=NsvOo+NnP0JbZSjQC6+7rZ+s2oxq7LtRTK5u00E34yJZXXuxtBoi9uCTsWkjlI8DDSas/hTpW23PuGbLAnJVnsKjBT9cxUTaDx3vP+nMeGgOFcVx/LFhw6EkuSgoZ5eIGL9TuG1rd1PIMJLYBRm+wqUl4faPy9w7A/p98dIyRPw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565027; c=relaxed/simple; bh=FObpKjZwmA5qdngYK9icddLLLWJb/ZpGOA9fXbSUY2s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cDlCCrkxKB+xk5c7xFtqY0buvgPMKgpSgkMxC+VaYJ0PMfhy4fDIhQhGS8RL1+hGPoAJCGlXO9NREXgogG/V+s0pPDTbIxtt/LaF1toQf+6fZxgaTQux3z532z2HiedBfFAp1WJKD06KIm37SawnFetBs7Ao8h4j/EjVEwZqN8o= 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=KS7bF7Mo; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id 7D0141BF207; Mon, 4 Mar 2024 15:10:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565022; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1pgzFb+b0po/iP/C9MLnMjDEAAPz/mzUfU3a45pXWto=; b=KS7bF7MoGQSpfMPtTUNNE0XVL0mtZfB3dZUlx5A5ulCMoYBvbepxnj6GmYh7vr2EM2isB2 KqiGoNpNkIkN96b4yWT+ke2OIMB76f22P42C1PgVjGLWmEwjBYReDaZ4PrylxPhrJQ/CfG 1iCySfk/j1PsVIU4y8B7WoLmfge1qLCZETcY22xAgfWpZMdT2i37z69hCSm5CKPESNjHNb DPWN4vxbpP1X1uVDS1SCcuS3H9vTrIcsb5UTEno2eZjL8+RDOl1svbH03W4/c0+Ss5Zoq6 krrGgmg+3zg8oGXEhoFKkksAaBXA6b47QAnTvFj6GbqQ57QYN4uJbzAq6U8vCQ== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 06/13] netlink: specs: add phy-index as a header parameter Date: Mon, 4 Mar 2024 16:10:02 +0100 Message-ID: <20240304151011.1610175-7-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792609079536051554 X-GMAIL-MSGID: 1792609079536051554 Update the spec to take the newly introduced phy-index as a generic request parameter. Signed-off-by: Maxime Chevallier Reviewed-by: Andrew Lunn --- V10: No changes V9: No changes V8: No changes V7: No changes V6: No changes V5: Added Andrew's R-b V4: Ditch the ethtool-user generated code V3: New patch Documentation/netlink/specs/ethtool.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/netlink/specs/ethtool.yaml b/Documentation/netlink/specs/ethtool.yaml index 197208f419dc..bb6e1dc6d1c5 100644 --- a/Documentation/netlink/specs/ethtool.yaml +++ b/Documentation/netlink/specs/ethtool.yaml @@ -30,6 +30,9 @@ attribute-sets: - name: flags type: u32 + - + name: phy-index + type: u32 - name: bitset-bit From patchwork Mon Mar 4 15:10:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209578 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1485713dyc; Mon, 4 Mar 2024 07:15:07 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXKg86+mqGih8yZ/as3Mektyq1yoDJm9c/C+1HBPex1QbHZUYeuN+1CVz0XH/Kerh+Y9OzPC/s4mF1InmGe4KpS/h1vSA== X-Google-Smtp-Source: AGHT+IE2Ebqz149yIHjmPCbmfA2ZKJm4QgXzNHgnAT34j7dPd+zvtyogpl3S+4/2gMp83lJMtxBp X-Received: by 2002:a05:6e02:1a6d:b0:365:2d9a:5093 with SMTP id w13-20020a056e021a6d00b003652d9a5093mr12678998ilv.12.1709565307319; Mon, 04 Mar 2024 07:15:07 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709565307; cv=pass; d=google.com; s=arc-20160816; b=DnggK4Zx3eAglYYsFX7Vidyb5SLlQzTU2C19VoC00oBrH2QOY0MReX+M0TOTje+7sp dVL3/HrZqckcxqcogpdVvCS37pagR+vU0CKgm0BvzWQMnRtY3FWlGJLLbbgUhxag28I+ CTaE39LlWCLqrran0Lv1LqmKzB01Q3Yk6+GB8q29ZT0F8fFyfUwjjIefi2V6TRDtlxx/ 5gMGVKSn20WWfJatlDP0ro1yzaR9Ft3vxH2lJrObcDA6xAP7MUoIplgcm26x/21Qx4U7 afMgIh9BbwqczjpJRczugq5ozp0+ptPEWduOWkHg/5EvOL48BGqpbgvJrYpk/qcZ0JVE CllQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=sGe25jNPmY7FKgsHuAB7ajjO17qmc/7H0okRsVc3cHI=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=Nt0+DtAPwi44KdVLdBs613Uv/ZKay59VAlAMp608p8ZHzoTxstuzDfbHo7uZrt45nt k7mK3aygl7hp1yABkxLbOK0jBiwdQUiuG5kFRQMtLk4VDR7dnyWLxBW9VjAXo9jDwcyD YpVWtCJhaL5+J2vRF0NsJP5wTmnyE2+w+Tb+tF2LesWCnKxjXUKkJ6Gr+mdNCzAAgZVc 0/PAy1QqIlyx2om6imMsoB7sQv2jQi8gYZRUpdFckP+UWnIAAlZLXW2WP+27UD7wsE4o Nkj1IOr3CA7yCunx2aO2AeFsKV01ERDCZWZV0L1dD5xpoivRSzxNA/Y0X1fA0jqLPwio +FHg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=NPap1SuF; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90787-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90787-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id z6-20020a637e06000000b005d55aec96b2si8561852pgc.41.2024.03.04.07.15.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:15:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90787-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=NPap1SuF; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90787-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90787-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 12DC528B622 for ; Mon, 4 Mar 2024 15:15:07 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B210D5811E; Mon, 4 Mar 2024 15:10:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="NPap1SuF" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 A032F53816; Mon, 4 Mar 2024 15:10:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565029; cv=none; b=YCPKxSPvpAN017k3jrqFes9QYsZcceL7HkoC9h9m4HojLZ3hZpckN+FmBCESKmdoOuGLQRV1c1b7QSNZil1bTb0QAfV+UJBqL9u/1/Y8qDQGhA9C5VZAHOwftAbj1Kx03zfrcMiuHvH4wjjDWRXgRNqws4JEvOm9JQZz+W54SNU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565029; c=relaxed/simple; bh=/0I2WHfiqwh1BENmZKrkszwQA7WnN73rFuf2W3KWjAA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dzai1gYOHCj2p3Qo0m+GsrG32glUJZhgiEWWFwszsjfe2kRA8aqWgPeOqtCGczlL/55oF5JvGsPAZNAAACg2ouvB3VkmuQ4sfl+Fh9Jj6r6+HGp0SEoDxYzjQqI9hxXW9xwshxj0WvKow2a0wYA8O30wlVKzJ9PG9g76WCx3Svk= 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=NPap1SuF; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id C87B81BF205; Mon, 4 Mar 2024 15:10:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565024; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sGe25jNPmY7FKgsHuAB7ajjO17qmc/7H0okRsVc3cHI=; b=NPap1SuFJo+M4XsC7ot7FfcezJlyH/H9b5CSiWk/QBoUwYXs0OjyLc/vW/YbnLPIiw3t+6 V5ew7alEnRmeZ5zEHwuCBXbUuc7mECOQjNNrhB/ykRbCmE/SLJU5cmG5PvP/wDxRPLJaS0 eCPvE8o3uoFWaxZIFWULrrN9b4urAUbUbZvkG1tH5SGKAzjvRYICBAjaA+TybOCcp8YFKj XK+mDn0MnBlqNo02d8BhbR55aDa2psPRLOt2JUgefkG+tyRyzO8S6PfmH2ZH+3U1b7cvpL QxGRDGqzuYW0hriWnuD17MXU5i0djmscXCsX3gVxowoM0W9CTV0QaX243z7jrw== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 07/13] net: ethtool: Introduce a command to list PHYs on an interface Date: Mon, 4 Mar 2024 16:10:03 +0100 Message-ID: <20240304151011.1610175-8-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792609151261777707 X-GMAIL-MSGID: 1792609151261777707 As we have the ability to track the PHYs connected to a net_device through the link_topology, we can expose this list to userspace. This allows userspace to use these identifiers for phy-specific commands and take the decision of which PHY to target by knowing the link topology. Add PHY_GET and PHY_DUMP, which can be a filtered DUMP operation to list devices on only one interface. Signed-off-by: Maxime Chevallier --- V10: - No changes V9: - No Changes V8: - No Changes V7: - Moved the netdev release into the .done() call for filtered DUMP requests V6: - Removed un-needed nest - Fixed the DUMP code - Fixed the documentation formatting V5: - Fixed xmas tree - Fixed uninitialized return variable (Simon) V4: - Fixed errors when not having SFP enabled, resulting in null names being passed as parameters to strlen. V3: - Fixed the documentation - Fixed the DUMP implementation V2: New patch Documentation/networking/ethtool-netlink.rst | 39 +++ include/uapi/linux/ethtool_netlink.h | 20 ++ net/ethtool/Makefile | 2 +- net/ethtool/netlink.c | 9 + net/ethtool/netlink.h | 5 + net/ethtool/phy.c | 297 +++++++++++++++++++ 6 files changed, 371 insertions(+), 1 deletion(-) create mode 100644 net/ethtool/phy.c diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst index 3ca6c21e74af..e498c3b0b28f 100644 --- a/Documentation/networking/ethtool-netlink.rst +++ b/Documentation/networking/ethtool-netlink.rst @@ -2011,6 +2011,44 @@ The attributes are propagated to the driver through the following structure: .. kernel-doc:: include/linux/ethtool.h :identifiers: ethtool_mm_cfg +PHY_GET +======= + +Retrieve information about a given Ethernet PHY sitting on the link. As there +can be more than one PHY, the DUMP operation can be used to list the PHYs +present on a given interface, by passing an interface index or name in +the dump request + +Request contents: + + ==================================== ====== ========================== + ``ETHTOOL_A_PHY_HEADER`` nested request header + ==================================== ====== ========================== + +Kernel response contents: + + ===================================== ====== =============================== + ``ETHTOOL_A_PHY_HEADER`` nested request header + ``ETHTOOL_A_PHY_INDEX`` u32 the phy's unique index, that can + be used for phy-specific + requests + ``ETHTOOL_A_PHY_DRVNAME`` string the phy driver name + ``ETHTOOL_A_PHY_NAME`` string the phy device name + ``ETHTOOL_A_PHY_UPSTREAM_TYPE`` u32 the type of device this phy is + connected to + ``ETHTOOL_A_PHY_UPSTREAM_INDEX`` u32 the PHY index of the upstream + PHY + ``ETHTOOL_A_PHY_UPSTREAM_SFP_NAME`` string if this PHY is connected to + it's parent PHY through an SFP + bus, the name of this sfp bus + ``ETHTOOL_A_PHY_DOWNSTREAM_SFP_NAME`` string if the phy controls an sfp bus, + the name of the sfp bus + ``ETHTOOL_A_PHY_ID`` u32 the phy id if the phy is C22 + ===================================== ====== =============================== + +When ``ETHTOOL_A_PHY_UPSTREAM_TYPE`` is PHY_UPSTREAM_PHY, the PHY's parent is +another PHY. + Request translation =================== @@ -2117,4 +2155,5 @@ are netlink only. n/a ``ETHTOOL_MSG_PLCA_GET_STATUS`` n/a ``ETHTOOL_MSG_MM_GET`` n/a ``ETHTOOL_MSG_MM_SET`` + n/a ``ETHTOOL_MSG_PHY_GET`` =================================== ===================================== diff --git a/include/uapi/linux/ethtool_netlink.h b/include/uapi/linux/ethtool_netlink.h index 422e8cfdd98c..f7a13e93ecb7 100644 --- a/include/uapi/linux/ethtool_netlink.h +++ b/include/uapi/linux/ethtool_netlink.h @@ -57,6 +57,7 @@ enum { ETHTOOL_MSG_PLCA_GET_STATUS, ETHTOOL_MSG_MM_GET, ETHTOOL_MSG_MM_SET, + ETHTOOL_MSG_PHY_GET, /* add new constants above here */ __ETHTOOL_MSG_USER_CNT, @@ -109,6 +110,8 @@ enum { ETHTOOL_MSG_PLCA_NTF, ETHTOOL_MSG_MM_GET_REPLY, ETHTOOL_MSG_MM_NTF, + ETHTOOL_MSG_PHY_GET_REPLY, + ETHTOOL_MSG_PHY_NTF, /* add new constants above here */ __ETHTOOL_MSG_KERNEL_CNT, @@ -977,6 +980,23 @@ enum { ETHTOOL_A_MM_MAX = (__ETHTOOL_A_MM_CNT - 1) }; +enum { + ETHTOOL_A_PHY_UNSPEC, + ETHTOOL_A_PHY_HEADER, /* nest - _A_HEADER_* */ + ETHTOOL_A_PHY_INDEX, /* u32 */ + ETHTOOL_A_PHY_DRVNAME, /* string */ + ETHTOOL_A_PHY_NAME, /* string */ + ETHTOOL_A_PHY_UPSTREAM_TYPE, /* u32 */ + ETHTOOL_A_PHY_UPSTREAM_INDEX, /* u32 */ + ETHTOOL_A_PHY_UPSTREAM_SFP_NAME, /* string */ + ETHTOOL_A_PHY_DOWNSTREAM_SFP_NAME, /* string */ + ETHTOOL_A_PHY_ID, /* u32 */ + + /* add new constants above here */ + __ETHTOOL_A_PHY_CNT, + ETHTOOL_A_PHY_MAX = (__ETHTOOL_A_PHY_CNT - 1) +}; + /* generic netlink info */ #define ETHTOOL_GENL_NAME "ethtool" #define ETHTOOL_GENL_VERSION 1 diff --git a/net/ethtool/Makefile b/net/ethtool/Makefile index 504f954a1b28..0ccd0e9afd3f 100644 --- a/net/ethtool/Makefile +++ b/net/ethtool/Makefile @@ -8,4 +8,4 @@ ethtool_nl-y := netlink.o bitset.o strset.o linkinfo.o linkmodes.o rss.o \ linkstate.o debug.o wol.o features.o privflags.o rings.o \ channels.o coalesce.o pause.o eee.o tsinfo.o cabletest.o \ tunnels.o fec.o eeprom.o stats.o phc_vclocks.o mm.o \ - module.o pse-pd.o plca.o mm.o + module.o pse-pd.o plca.o mm.o phy.o diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c index b8f16398ea9d..1d684835821e 100644 --- a/net/ethtool/netlink.c +++ b/net/ethtool/netlink.c @@ -1165,6 +1165,15 @@ static const struct genl_ops ethtool_genl_ops[] = { .policy = ethnl_mm_set_policy, .maxattr = ARRAY_SIZE(ethnl_mm_set_policy) - 1, }, + { + .cmd = ETHTOOL_MSG_PHY_GET, + .doit = ethnl_phy_doit, + .start = ethnl_phy_start, + .dumpit = ethnl_phy_dumpit, + .done = ethnl_phy_done, + .policy = ethnl_phy_get_policy, + .maxattr = ARRAY_SIZE(ethnl_phy_get_policy) - 1, + }, }; static const struct genl_multicast_group ethtool_nl_mcgrps[] = { diff --git a/net/ethtool/netlink.h b/net/ethtool/netlink.h index d57a890b5d9e..0e71b53bdb1c 100644 --- a/net/ethtool/netlink.h +++ b/net/ethtool/netlink.h @@ -446,6 +446,7 @@ extern const struct nla_policy ethnl_plca_set_cfg_policy[ETHTOOL_A_PLCA_MAX + 1] extern const struct nla_policy ethnl_plca_get_status_policy[ETHTOOL_A_PLCA_HEADER + 1]; extern const struct nla_policy ethnl_mm_get_policy[ETHTOOL_A_MM_HEADER + 1]; extern const struct nla_policy ethnl_mm_set_policy[ETHTOOL_A_MM_MAX + 1]; +extern const struct nla_policy ethnl_phy_get_policy[ETHTOOL_A_PHY_HEADER + 1]; int ethnl_set_features(struct sk_buff *skb, struct genl_info *info); int ethnl_act_cable_test(struct sk_buff *skb, struct genl_info *info); @@ -453,6 +454,10 @@ int ethnl_act_cable_test_tdr(struct sk_buff *skb, struct genl_info *info); int ethnl_tunnel_info_doit(struct sk_buff *skb, struct genl_info *info); int ethnl_tunnel_info_start(struct netlink_callback *cb); int ethnl_tunnel_info_dumpit(struct sk_buff *skb, struct netlink_callback *cb); +int ethnl_phy_start(struct netlink_callback *cb); +int ethnl_phy_doit(struct sk_buff *skb, struct genl_info *info); +int ethnl_phy_dumpit(struct sk_buff *skb, struct netlink_callback *cb); +int ethnl_phy_done(struct netlink_callback *cb); extern const char stats_std_names[__ETHTOOL_STATS_CNT][ETH_GSTRING_LEN]; extern const char stats_eth_phy_names[__ETHTOOL_A_STATS_ETH_PHY_CNT][ETH_GSTRING_LEN]; diff --git a/net/ethtool/phy.c b/net/ethtool/phy.c new file mode 100644 index 000000000000..fb73bf51c683 --- /dev/null +++ b/net/ethtool/phy.c @@ -0,0 +1,297 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright 2023 Bootlin + * + */ +#include "common.h" +#include "netlink.h" + +#include +#include +#include + +struct phy_req_info { + struct ethnl_req_info base; + struct phy_device_node pdn; +}; + +#define PHY_REQINFO(__req_base) \ + container_of(__req_base, struct phy_req_info, base) + +const struct nla_policy ethnl_phy_get_policy[ETHTOOL_A_PHY_HEADER + 1] = { + [ETHTOOL_A_PHY_HEADER] = NLA_POLICY_NESTED(ethnl_header_policy), +}; + +/* Caller holds rtnl */ +static ssize_t +ethnl_phy_reply_size(const struct ethnl_req_info *req_base, + struct netlink_ext_ack *extack) +{ + struct phy_req_info *req_info = PHY_REQINFO(req_base); + struct phy_device_node *pdn = &req_info->pdn; + struct phy_device *phydev = pdn->phy; + size_t size = 0; + + ASSERT_RTNL(); + + /* ETHTOOL_A_PHY_INDEX */ + size += nla_total_size(sizeof(u32)); + + /* ETHTOOL_A_DRVNAME */ + if (phydev->drv) + size += nla_total_size(strlen(phydev->drv->name) + 1); + + /* ETHTOOL_A_NAME */ + size += nla_total_size(strlen(dev_name(&phydev->mdio.dev)) + 1); + + /* ETHTOOL_A_PHY_UPSTREAM_TYPE */ + size += nla_total_size(sizeof(u32)); + + /* ETHTOOL_A_PHY_ID */ + size += nla_total_size(sizeof(u32)); + + if (phy_on_sfp(phydev)) { + const char *upstream_sfp_name = sfp_get_name(pdn->parent_sfp_bus); + + /* ETHTOOL_A_PHY_UPSTREAM_SFP_NAME */ + if (upstream_sfp_name) + size += nla_total_size(strlen(upstream_sfp_name) + 1); + + /* ETHTOOL_A_PHY_UPSTREAM_INDEX */ + size += nla_total_size(sizeof(u32)); + } + + /* ETHTOOL_A_PHY_DOWNSTREAM_SFP_NAME */ + if (phydev->sfp_bus) { + const char *sfp_name = sfp_get_name(phydev->sfp_bus); + + if (sfp_name) + size += nla_total_size(strlen(sfp_name) + 1); + } + + return size; +} + +static int +ethnl_phy_fill_reply(const struct ethnl_req_info *req_base, struct sk_buff *skb) +{ + struct phy_req_info *req_info = PHY_REQINFO(req_base); + struct phy_device_node *pdn = &req_info->pdn; + struct phy_device *phydev = pdn->phy; + enum phy_upstream ptype; + + ptype = pdn->upstream_type; + + if (nla_put_u32(skb, ETHTOOL_A_PHY_INDEX, phydev->phyindex) || + nla_put_string(skb, ETHTOOL_A_PHY_NAME, dev_name(&phydev->mdio.dev)) || + nla_put_u32(skb, ETHTOOL_A_PHY_UPSTREAM_TYPE, ptype) || + nla_put_u32(skb, ETHTOOL_A_PHY_ID, phydev->phy_id)) + return -EMSGSIZE; + + if (phydev->drv && nla_put_string(skb, ETHTOOL_A_PHY_DRVNAME, phydev->drv->name)) + return -EMSGSIZE; + + if (ptype == PHY_UPSTREAM_PHY) { + struct phy_device *upstream = pdn->upstream.phydev; + const char *sfp_upstream_name; + + /* Parent index */ + if (nla_put_u32(skb, ETHTOOL_A_PHY_UPSTREAM_INDEX, upstream->phyindex)) + return -EMSGSIZE; + + if (pdn->parent_sfp_bus) { + sfp_upstream_name = sfp_get_name(pdn->parent_sfp_bus); + if (sfp_upstream_name && nla_put_string(skb, + ETHTOOL_A_PHY_UPSTREAM_SFP_NAME, + sfp_upstream_name)) + return -EMSGSIZE; + } + } + + if (phydev->sfp_bus) { + const char *sfp_name = sfp_get_name(phydev->sfp_bus); + + if (sfp_name && + nla_put_string(skb, ETHTOOL_A_PHY_DOWNSTREAM_SFP_NAME, + sfp_name)) + return -EMSGSIZE; + } + + return 0; +} + +static int ethnl_phy_parse_request(struct ethnl_req_info *req_base, + struct nlattr **tb) +{ + struct phy_link_topology *topo = req_base->dev->link_topo; + struct phy_req_info *req_info = PHY_REQINFO(req_base); + struct phy_device_node *pdn; + + if (!req_base->phydev) + return 0; + + pdn = xa_load(&topo->phys, req_base->phydev->phyindex); + memcpy(&req_info->pdn, pdn, sizeof(*pdn)); + + return 0; +} + +int ethnl_phy_doit(struct sk_buff *skb, struct genl_info *info) +{ + struct phy_req_info req_info = {}; + struct nlattr **tb = info->attrs; + struct sk_buff *rskb; + void *reply_payload; + int reply_len; + int ret; + + ret = ethnl_parse_header_dev_get(&req_info.base, + tb[ETHTOOL_A_PHY_HEADER], + genl_info_net(info), info->extack, + true); + if (ret < 0) + return ret; + + rtnl_lock(); + + ret = ethnl_phy_parse_request(&req_info.base, tb); + if (ret < 0) + goto err_unlock_rtnl; + + /* No PHY, return early */ + if (!req_info.pdn.phy) + goto err_unlock_rtnl; + + ret = ethnl_phy_reply_size(&req_info.base, info->extack); + if (ret < 0) + goto err_unlock_rtnl; + reply_len = ret + ethnl_reply_header_size(); + + rskb = ethnl_reply_init(reply_len, req_info.base.dev, + ETHTOOL_MSG_PHY_GET_REPLY, + ETHTOOL_A_PHY_HEADER, + info, &reply_payload); + if (!rskb) { + ret = -ENOMEM; + goto err_unlock_rtnl; + } + + ret = ethnl_phy_fill_reply(&req_info.base, rskb); + if (ret) + goto err_free_msg; + + rtnl_unlock(); + ethnl_parse_header_dev_put(&req_info.base); + genlmsg_end(rskb, reply_payload); + + return genlmsg_reply(rskb, info); + +err_free_msg: + nlmsg_free(rskb); +err_unlock_rtnl: + rtnl_unlock(); + ethnl_parse_header_dev_put(&req_info.base); + return ret; +} + +struct ethnl_phy_dump_ctx { + struct phy_req_info *phy_req_info; + unsigned long ifindex; + unsigned long phy_index; +}; + +int ethnl_phy_start(struct netlink_callback *cb) +{ + const struct genl_dumpit_info *info = genl_dumpit_info(cb); + struct ethnl_phy_dump_ctx *ctx = (void *)cb->ctx; + struct nlattr **tb = info->info.attrs; + int ret; + + BUILD_BUG_ON(sizeof(*ctx) > sizeof(cb->ctx)); + + ctx->phy_req_info = kzalloc(sizeof(*ctx->phy_req_info), GFP_KERNEL); + if (!ctx->phy_req_info) + return -ENOMEM; + + ret = ethnl_parse_header_dev_get(&ctx->phy_req_info->base, + tb[ETHTOOL_A_PHY_HEADER], + sock_net(cb->skb->sk), cb->extack, + false); + ctx->ifindex = 0; + ctx->phy_index = 0; + return ret; +} + +int ethnl_phy_done(struct netlink_callback *cb) +{ + struct ethnl_phy_dump_ctx *ctx = (void *)cb->ctx; + + ethnl_parse_header_dev_put(&ctx->phy_req_info->base); + kfree(ctx->phy_req_info); + + return 0; +} + +static int ethnl_phy_dump_one_dev(struct sk_buff *skb, struct net_device *dev, + struct netlink_callback *cb) +{ + struct ethnl_phy_dump_ctx *ctx = (void *)cb->ctx; + struct phy_req_info *pri = ctx->phy_req_info; + struct phy_device_node *pdn; + int ret = 0; + void *ehdr; + + pri->base.dev = dev; + + xa_for_each_start(&dev->link_topo->phys, ctx->phy_index, pdn, ctx->phy_index) { + ehdr = ethnl_dump_put(skb, cb, + ETHTOOL_MSG_PHY_GET_REPLY); + if (!ehdr) { + ret = -EMSGSIZE; + break; + } + + ret = ethnl_fill_reply_header(skb, dev, + ETHTOOL_A_PHY_HEADER); + if (ret < 0) { + genlmsg_cancel(skb, ehdr); + break; + } + + memcpy(&pri->pdn, pdn, sizeof(*pdn)); + ret = ethnl_phy_fill_reply(&pri->base, skb); + + genlmsg_end(skb, ehdr); + } + + return ret; +} + +int ethnl_phy_dumpit(struct sk_buff *skb, struct netlink_callback *cb) +{ + struct ethnl_phy_dump_ctx *ctx = (void *)cb->ctx; + struct net *net = sock_net(skb->sk); + struct net_device *dev; + int ret = 0; + + rtnl_lock(); + + if (ctx->phy_req_info->base.dev) { + ret = ethnl_phy_dump_one_dev(skb, ctx->phy_req_info->base.dev, cb); + } else { + for_each_netdev_dump(net, dev, ctx->ifindex) { + ret = ethnl_phy_dump_one_dev(skb, dev, cb); + if (ret) + break; + + ctx->phy_index = 0; + } + } + rtnl_unlock(); + + if (ret == -EMSGSIZE && skb->len) + return skb->len; + + return ret; +} + From patchwork Mon Mar 4 15:10:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209576 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1485170dyc; Mon, 4 Mar 2024 07:14:19 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWgX3y/VIJiFSY1gfb4Q7vCsQrNwfIXSMhGReXj2iPjI3NtQh9Z29nCDWiPqe9cLfrY1tWs/LLmgeZHxzuRxYo2zRrPpQ== X-Google-Smtp-Source: AGHT+IHcKZEhwvdil3rbg5iUCACeZEz/JWiFpG13pM2zt1EkAxkYaeHoKSYN94roko7dcmcfdF2t X-Received: by 2002:a05:6402:1ca6:b0:567:658:412 with SMTP id cz6-20020a0564021ca600b0056706580412mr4438181edb.13.1709565258877; Mon, 04 Mar 2024 07:14:18 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709565258; cv=pass; d=google.com; s=arc-20160816; b=tTdcOozs4vkHZ1USNHhSclsCGJtmBvaotB1x9yMJo2p3FppbfeqvgqyMrTZKNQ2yK2 h6qOs18MDuG/mgENiqkHTSK/DeXbA9GrVky7BEN17rJGpmlyu5GowTFtZNHzr11yNYD/ UtPzxRnC1TqOzXnnck0mGUz9lyHxu53J2xaKG0yJcp0aMOOX16HexC245D8j/B9QErey r35z/uVeBb3Amx47pjYIC2VQxHx1qS1Mp4k8Z4bJyuYPHCjgLrABgTanIpItSKEfCwjj YCMpjv4Q19/wLpzZNgwslcRAfbZDSznLKQ6x0QBfSLu0DQC9UC0ZGQInOGFXnBaNAvyK 49GA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=VJjE6LJRVPmqYJ+R0HF1dBW3fSRm9OX3+Qc/AE8R0EU=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=uaXflETThKJWhLBU91sLj3b8/SgLuwdnZs/cGqb9ikVlU8Uwb6fnZBrzyA/Gsx0n48 K9A2yaz1C3LVKsWYwzAFtDfC93jFIQL1yn2uKOKz+2GzKa7InVsHvpNepd9IB++5zTC7 LP2r5gOo6zASnALLwIYHeNz/4PkgXZCk7g0X6vJY4L5iga0eshQIcO7EMQsF4pt76t8V sQN348ZPbuq+5DXOFzQ/0Fmg0klESwOqMP29mXO9pD4RqTJZprPgoAdYLrBcSZLLacPC xfhQewxddtoq4Oh4MBiITmQ1qIPMsyjd9Aw74hMw9fSLftquDwLP1YKKdt2D/hikIG0W 4coA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=fLC8FCYX; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90786-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90786-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id z29-20020a50cd1d000000b005671b50293esi1649582edi.620.2024.03.04.07.14.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:14:18 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90786-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=fLC8FCYX; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90786-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90786-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 6E2591F2319B for ; Mon, 4 Mar 2024 15:14:18 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8342C47A79; Mon, 4 Mar 2024 15:10:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="fLC8FCYX" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 A02D347A74; Mon, 4 Mar 2024 15:10:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565028; cv=none; b=hPQUMfDx9vR0ufwyJiNLzZF0EI+neLMqQPN43klvY115rgbbNRnZ50+RVssXlYhUbpW4r5D+2wJB+ymzd81xOTJ8FD/dQRLl2+1f9ukFZs9ycJdtY+amSzVIt808Y/WhmyeY9EsW/ZOY0+aaVDPXBjF+uHx/52lhkEBc1YLBBS0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565028; c=relaxed/simple; bh=48uR+uTWUbOCP5/KOB5WdmOWyOrfHiyIP9wF4ebqgzY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oki8IDcpa6YO26b7yLcJiN0OXEcgFWpvlBziMyY5UVRvKEaYK/I+Oqz4W3vDE4/+yRpbrptl4vjvrAXvkUehieZw2Froid1C7gK+hT/iPVjTWX5oUX+slPI8GzlCHzCSXx2HYkCaLbQbnYEPznj3wSZPkhW/neB/n0gah2tZPIo= 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=fLC8FCYX; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id 2015A1BF20B; Mon, 4 Mar 2024 15:10:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565025; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VJjE6LJRVPmqYJ+R0HF1dBW3fSRm9OX3+Qc/AE8R0EU=; b=fLC8FCYXkqM084U+hiFedMQCk85UHEdLnEgwWedvaaHkCxO7FXJCckZAwQP8tUhKj/3tRI S4nOQK1GCGAcqkm4y0GbNcUX9/2/P8tHFjjEkb8RH8jHhy4MaHXQ5Eu2kNjykQh2nV7LqG /8YLWRt2ayFK6fwDPxuHqduzh5rAXTZ4/keOavHnoRYvxFPsab7Mj8Nzu8ePQmvwrDESaa +QghcxMu/dN3VDTEq4MF6mC/kopVGbtLe66pJnbsEodQql13ESLz0GO0/yV0k5C5JyoT5u NpozeULmXGB50KJQVuoGONVmvy47Jcus8R6SPP+Zehadcfip4FQfHpwWtqR0BA== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 08/13] netlink: specs: add ethnl PHY_GET command set Date: Mon, 4 Mar 2024 16:10:04 +0100 Message-ID: <20240304151011.1610175-9-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792609100838908285 X-GMAIL-MSGID: 1792609100838908285 The PHY_GET command, supporting both DUMP and GET operations, is used to retrieve the list of PHYs connected to a netdevice, and get topology information to know where exactly it sits on the physical link. Add the netlink specs corresponding to that command. Signed-off-by: Maxime Chevallier --- V10: rename upstream-phy-index in the phy-get-op definition V9: rename upstream-phy-index to upstream-index to align with the ethtool_netlink.h definition V8: No changes V7: No changes V6: Updated the spec according to the new attributes V5: No changes V4: Remove the ethtool-user generated code V3: New patch Documentation/netlink/specs/ethtool.yaml | 59 ++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/Documentation/netlink/specs/ethtool.yaml b/Documentation/netlink/specs/ethtool.yaml index bb6e1dc6d1c5..58a38a8cace6 100644 --- a/Documentation/netlink/specs/ethtool.yaml +++ b/Documentation/netlink/specs/ethtool.yaml @@ -16,6 +16,11 @@ definitions: name: stringset type: enum entries: [] + - + name: phy-upstream-type + enum-name: + type: enum + entries: [ mac, phy ] attribute-sets: - @@ -945,6 +950,38 @@ attribute-sets: - name: burst-tmr type: u32 + - + name: phy + attributes: + - + name: header + type: nest + nested-attributes: header + - + name: index + type: u32 + - + name: drvname + type: string + - + name: name + type: string + - + name: upstream-type + type: u32 + enum: phy-upstream-type + - + name: upstream-index + type: u32 + - + name: upstream-sfp-name + type: string + - + name: downstream-sfp-name + type: string + - + name: id + type: u32 operations: enum-model: directional @@ -1696,3 +1733,25 @@ operations: name: mm-ntf doc: Notification for change in MAC Merge configuration. notify: mm-get + - + name: phy-get + doc: Get PHY devices attached to an interface + + attribute-set: phy + + do: &phy-get-op + request: + attributes: + - header + reply: + attributes: + - header + - index + - drvname + - name + - upstream-type + - upstream-index + - upstream-sfp-name + - downstream-sfp-name + - id + dump: *phy-get-op From patchwork Mon Mar 4 15:10:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209577 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1485478dyc; Mon, 4 Mar 2024 07:14:44 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVXYF8T5SmqkF1Dy+8CHbnwCJcnxm2tB/OH9DDMqKng85EPUj+jcx/blWxf5+15gjCxk2snGG4avPouJFbrZSZmITSG5w== X-Google-Smtp-Source: AGHT+IFgYdT2mrXRwq8rwQUIdpjnNzw0HLsHxbGU8+0NwPzrzRHAhRd+vrzchi1xRFVw6FUBCztc X-Received: by 2002:a17:903:228f:b0:1dc:b308:db44 with SMTP id b15-20020a170903228f00b001dcb308db44mr13094528plh.45.1709565284516; Mon, 04 Mar 2024 07:14:44 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709565284; cv=pass; d=google.com; s=arc-20160816; b=ZxZ2ekLAEzqyILcmeCzKbmdpzyIb2zz27tcOg04bL0gRMBp/4qgRKedHbb4y2dBFgI s+JI3/a7pDaQL0tyj31zJulhBS+3u+NAI9utLOxY6Sa3tDvwB/l1Nv7y4dp+rFoNqYm8 bh6dvFWwo4nq6eTW+ZA+jUlSB1BtgIw7r5HUAXBeG4bJ4WAvbSF6tF65621vHpZVOJYS ZuR28B7rbVfeNV0QkLPPe+1h+lI15L6jO0ifE8j/RnWO3uq1pAYD3z73dXt8UGtWVGcH dRy/QbQkMyUBffi/OESzdOThaim7Qv/9YnUmbBWJrfX0cvMeLtaEaTf2gY3CrjIHd/p5 ITKw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=g1K1UorxSnRzVQ0zQyfhKJCPNGcdHhxMml8f4DmBUpI=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=pB40AMwVPPP7iUoVsrUp4Q0nq6AIy5Jh0d6mCu06hVAI92Endwz482tpgMf+mUkVhX tqosrfQQOjLAvwMrnX7HjDGc2rC6qBGyeMehsWAY5u6uN7ZClqVHHiEmHeCLCIHeakwh JrheE983eqrjpTCYhLZOd72xQ3CswMyvbGUQrCBiPWC0nRqXE7oDCdr8FqSvpUlXrI5P x5w3y0X1EB2uEOm/wvmbPwnK9U670Bb0Dd+4czRwt2hqE8ZPKt0VSMNqKK28NT0k24CS E8uzaJ8RNiCgo2LfBTy0OuKhASokCm1aLrWVKZnxfiVkidQM3SJzws4C8yoPLyzp8tZ1 jFvA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=NQ3AwlXE; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90788-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90788-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id n6-20020a170902e54600b001dbf95ab349si8426471plf.472.2024.03.04.07.14.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:14:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90788-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=NQ3AwlXE; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90788-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90788-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 5239F28B5A5 for ; Mon, 4 Mar 2024 15:14:44 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A26C157333; Mon, 4 Mar 2024 15:10:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="NQ3AwlXE" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 4DCF8535D4; Mon, 4 Mar 2024 15:10:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565030; cv=none; b=IYPjXC72moq+pKGKP2XcI7X76xn9VCYenDpXTbK/EZLGuGlRKrQIpe6a5qn8XKqDhz/QpiTW4X+QakSn7UKqqg+qZJS36pSnanOoBZobGzlO4WVWct8i6gFUEciZJB0HeyiJWYDnLmjBZpVR7vafHBrRE823mCySzMj+OGeenzU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565030; c=relaxed/simple; bh=qdiQac5f+KPy/02jGaX+253lB8GsN50JaYKYc0Bhn/s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=te3LYAtM+kI5kWtjxb6+9lkMCJWXw3jH82+hnp5a1gNRidz+bMNK2yp+VnUXuwW3SwkA4UyzRSvo7F1Ivshi2eTUkXSf3VG2oN1rivrkuasCeACLXbiaQVD8gmOjDhiiYOaxryFLjBtU9lS6CGRJOY3eSV0B2py1qJsbEKNJlx4= 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=NQ3AwlXE; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id 622E51BF208; Mon, 4 Mar 2024 15:10:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565026; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=g1K1UorxSnRzVQ0zQyfhKJCPNGcdHhxMml8f4DmBUpI=; b=NQ3AwlXECeeUsev93Xq5mgCPaREBMEVK7s9+ZyG54dn7r5QcNUijIlYRyF7L5j3/1tiumP PnVVQYB0ZsGaXiMzuLn9FIOWnkwNi1TbQtnAOz0cFuRjB2soa6LP3NBJWVrWvWj86ljJc2 W/tCN81rIaGKIuzzE/kjvEjQDn+8+XQziub9j62IpTnaQwvhQ/0X7TMWwox6GZTQjCqD6S Bqw3tubsExzI4MxCZVrdodEZnViLuvdw449DqSv0HVKQjPsIqittwcc0xET/YrZUvIp2qK /5Ygsj14gTQHoPRBqhy9LPfgzNOJ8iLauHdAJ3oGwJaPVIuJAlFb4mE5HfX9uA== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 09/13] net: ethtool: plca: Target the command to the requested PHY Date: Mon, 4 Mar 2024 16:10:05 +0100 Message-ID: <20240304151011.1610175-10-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792609128091393838 X-GMAIL-MSGID: 1792609128091393838 PLCA is a PHY-specific command. Instead of targeting the command towards dev->phydev, use the request to pick the targeted PHY. Signed-off-by: Maxime Chevallier --- V10: No changes V9: No changes V8: No changes V7: No changes V6: Use dedicated policy V5: Added Andrew's R-b V4: No changes V3: No changes V2: New patch net/ethtool/plca.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/net/ethtool/plca.c b/net/ethtool/plca.c index b1e2e3b5027f..43b31a4a164e 100644 --- a/net/ethtool/plca.c +++ b/net/ethtool/plca.c @@ -25,7 +25,7 @@ struct plca_reply_data { const struct nla_policy ethnl_plca_get_cfg_policy[] = { [ETHTOOL_A_PLCA_HEADER] = - NLA_POLICY_NESTED(ethnl_header_policy), + NLA_POLICY_NESTED(ethnl_header_policy_phy), }; static void plca_update_sint(int *dst, struct nlattr **tb, u32 attrid, @@ -61,7 +61,7 @@ static int plca_get_cfg_prepare_data(const struct ethnl_req_info *req_base, int ret; // check that the PHY device is available and connected - if (!dev->phydev) { + if (!req_base->phydev) { ret = -EOPNOTSUPP; goto out; } @@ -80,7 +80,7 @@ static int plca_get_cfg_prepare_data(const struct ethnl_req_info *req_base, memset(&data->plca_cfg, 0xff, sizeof_field(struct plca_reply_data, plca_cfg)); - ret = ops->get_plca_cfg(dev->phydev, &data->plca_cfg); + ret = ops->get_plca_cfg(req_base->phydev, &data->plca_cfg); ethnl_ops_complete(dev); out: @@ -129,7 +129,7 @@ static int plca_get_cfg_fill_reply(struct sk_buff *skb, const struct nla_policy ethnl_plca_set_cfg_policy[] = { [ETHTOOL_A_PLCA_HEADER] = - NLA_POLICY_NESTED(ethnl_header_policy), + NLA_POLICY_NESTED(ethnl_header_policy_phy), [ETHTOOL_A_PLCA_ENABLED] = NLA_POLICY_MAX(NLA_U8, 1), [ETHTOOL_A_PLCA_NODE_ID] = NLA_POLICY_MAX(NLA_U32, 255), [ETHTOOL_A_PLCA_NODE_CNT] = NLA_POLICY_RANGE(NLA_U32, 1, 255), @@ -141,7 +141,6 @@ const struct nla_policy ethnl_plca_set_cfg_policy[] = { static int ethnl_set_plca(struct ethnl_req_info *req_info, struct genl_info *info) { - struct net_device *dev = req_info->dev; const struct ethtool_phy_ops *ops; struct nlattr **tb = info->attrs; struct phy_plca_cfg plca_cfg; @@ -149,7 +148,7 @@ ethnl_set_plca(struct ethnl_req_info *req_info, struct genl_info *info) int ret; // check that the PHY device is available and connected - if (!dev->phydev) + if (!req_info->phydev) return -EOPNOTSUPP; ops = ethtool_phy_ops; @@ -168,7 +167,7 @@ ethnl_set_plca(struct ethnl_req_info *req_info, struct genl_info *info) if (!mod) return 0; - ret = ops->set_plca_cfg(dev->phydev, &plca_cfg, info->extack); + ret = ops->set_plca_cfg(req_info->phydev, &plca_cfg, info->extack); return ret < 0 ? ret : 1; } @@ -191,7 +190,7 @@ const struct ethnl_request_ops ethnl_plca_cfg_request_ops = { const struct nla_policy ethnl_plca_get_status_policy[] = { [ETHTOOL_A_PLCA_HEADER] = - NLA_POLICY_NESTED(ethnl_header_policy), + NLA_POLICY_NESTED(ethnl_header_policy_phy), }; static int plca_get_status_prepare_data(const struct ethnl_req_info *req_base, @@ -204,7 +203,7 @@ static int plca_get_status_prepare_data(const struct ethnl_req_info *req_base, int ret; // check that the PHY device is available and connected - if (!dev->phydev) { + if (!req_base->phydev) { ret = -EOPNOTSUPP; goto out; } @@ -223,7 +222,7 @@ static int plca_get_status_prepare_data(const struct ethnl_req_info *req_base, memset(&data->plca_st, 0xff, sizeof_field(struct plca_reply_data, plca_st)); - ret = ops->get_plca_status(dev->phydev, &data->plca_st); + ret = ops->get_plca_status(req_base->phydev, &data->plca_st); ethnl_ops_complete(dev); out: return ret; From patchwork Mon Mar 4 15:10:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209596 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1499377dyc; Mon, 4 Mar 2024 07:36:22 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVsj2K+IV4Vuz+eSiopS9wGzyJt+EAYSOIYTAxbtCHw+1BGiO7G7+0ihcvm438e2v9fp6p9WatDUye2zq6v+Jnx4PLRLg== X-Google-Smtp-Source: AGHT+IHGCkJnwQw0hnHIrBEByWHSri9v3zmnA/rHFcEiYQFXkanYppKu07TUHlJXyUUbMW7vCzVW X-Received: by 2002:a05:6a21:185:b0:1a0:e855:b551 with SMTP id le5-20020a056a21018500b001a0e855b551mr7150229pzb.21.1709566582631; Mon, 04 Mar 2024 07:36:22 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709566582; cv=pass; d=google.com; s=arc-20160816; b=g5IpZxdeDZq3bJhkJtko4N6ozW4vN/35Ze5RLy5vSmMkh0DyHAy7skxIRqGFS4fOLU bBKseoMq08XLlxXktUwZi4noWwO081FG+qKCRiQ86LKQTbKRi/6j9svuiKDMLjvuWH/3 ofOIYn03FNjw/uDNDS6FXzJudA5R3fc3tXuC/Nq2oHTm/mN83v5V6V2i7dw2S4ARW9Jg TFfAco2Gdmee1+TIiK3f7SStfjnYqRJmr93QQieRe3y76b36OaByCdzJ+kLCQX3anxjC qQxuR3BNH16PigtvRCpLRsNhHyJ/LvLahv6NOxK/g2yqRTj6xMKLHoFzrZPhJPjOGZit Zmbw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=L/C3xUqQ0tXQjt3ntr9VJkY5S54Kx0JHgdC83Vx8JfM=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=0fiPCLoxF9yJwQ2QE9+FTJFfireSm+2CJthWp1HsLJlJ/5thDMcOwIgjGSYB/WXMkK GSw/50Em8YTgqamN3T1ZKIGqdOBxf0+8XnWDXs0e/mvBpVDyL5U3Y5dCDehpppTRqh00 BJF5gGZr5t0lijFcDXePr2U1RkcD0Rfxlymy/cU3U6EmghMcPt9+Z7jhaamkSEk/Ewex AAqAJumks15lESqysqKeAfQJHQ2KiFJhguUTOQb1kCMlKZpDibhUiMIGQRdJl5UzL0id l5YHQZYXCk2RM+FBsovr0zUFiurlUB9AzsKvA74YE5tJ1iBzU6ipw4nZPo89/8SXbsG5 /9TQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=XF628UNf; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90789-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90789-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id lo21-20020a056a003d1500b006e62736fdd0si1395164pfb.173.2024.03.04.07.36.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:36:22 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90789-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=XF628UNf; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90789-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90789-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 22D95B232F1 for ; Mon, 4 Mar 2024 15:15:02 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8A62C5810C; Mon, 4 Mar 2024 15:10:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="XF628UNf" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 91EAD5491B; Mon, 4 Mar 2024 15:10:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565031; cv=none; b=mgE6eFzXVpGs40vhQSmdyRi8c7glrQmE03u8tIeDSDZpG92CQLWHRmalv1HeiHheIx+9gjtNGAx3wUWyRTKhXFi55GXGDkllcK0hs0ownN36LsaXothDSTDb6dZJfQLmJbbyk0ie9OmUa/js+MuKStYFng+cwqMXkoiYrAtpQXA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565031; c=relaxed/simple; bh=YOGyQUz8B9RI8LIdyBuQxqlffVGk5aIswPIGBWCAZ8g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bWMjz1uEqkbGJtRbohX19+0fVzj5twSwoFUzubwqTdtiujlgpaCPIG40JQcszEyCkT6IqGZ+2IqqQrum1HZ6j4RqFIwgjhVMpct9CvQaprlxiVvjf8pKyCCayGJZkQUGqAE1QXrUR4movmDS1MsxLjaLMp9vIjeu2lKQyHyuPlk= 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=XF628UNf; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id A82521BF20C; Mon, 4 Mar 2024 15:10:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565027; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L/C3xUqQ0tXQjt3ntr9VJkY5S54Kx0JHgdC83Vx8JfM=; b=XF628UNfWHEfdCXOgV9bW+M+j4CFu+YlGp6zlH3E7ApeeTwr6/JpE0pS/uCH9j9yEgXCfh L21d8/OD4NhEpY0wLiiOydL54WRbZ2ZXItyJ4XUZuL6oFzGbpmkoNSWv7BTnW2ywfSddr/ ctkqCPEgiLKWY5i9TG3mKu7bdyd40s02p/1sFzponRkc2815P/pejKkr32OH+yeeg65C9X JHlKYqPRh8/nlGG5l5YmJZY91R9eFn/F/fatp6gdl3KPWJUavncvcCglIQ/I4V0z7nZThF MxnNYC6F2veaN3AA9JrImGgSfXFE3xFe+9+TBYHbHMHMspWmvJikLIkvOccNiw== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 10/13] net: ethtool: pse-pd: Target the command to the requested PHY Date: Mon, 4 Mar 2024 16:10:06 +0100 Message-ID: <20240304151011.1610175-11-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792610488651262318 X-GMAIL-MSGID: 1792610488651262318 PSE and PD configuration is a PHY-specific command. Instead of targeting the command towards dev->phydev, use the request to pick the targeted PHY device. Signed-off-by: Maxime Chevallier --- V10: No changes V9: No changes V8: No changes V7: No changes V6: Use dedicated policy V5: Added-back an incorrectly removed check V4: No changes V3: No changes V2: New patch net/ethtool/pse-pd.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/net/ethtool/pse-pd.c b/net/ethtool/pse-pd.c index cc478af77111..be50d79122c4 100644 --- a/net/ethtool/pse-pd.c +++ b/net/ethtool/pse-pd.c @@ -28,15 +28,13 @@ struct pse_reply_data { /* PSE_GET */ const struct nla_policy ethnl_pse_get_policy[ETHTOOL_A_PSE_HEADER + 1] = { - [ETHTOOL_A_PSE_HEADER] = NLA_POLICY_NESTED(ethnl_header_policy), + [ETHTOOL_A_PSE_HEADER] = NLA_POLICY_NESTED(ethnl_header_policy_phy), }; -static int pse_get_pse_attributes(struct net_device *dev, +static int pse_get_pse_attributes(struct phy_device *phydev, struct netlink_ext_ack *extack, struct pse_reply_data *data) { - struct phy_device *phydev = dev->phydev; - if (!phydev) { NL_SET_ERR_MSG(extack, "No PHY is attached"); return -EOPNOTSUPP; @@ -64,7 +62,7 @@ static int pse_prepare_data(const struct ethnl_req_info *req_base, if (ret < 0) return ret; - ret = pse_get_pse_attributes(dev, info->extack, data); + ret = pse_get_pse_attributes(req_base->phydev, info->extack, data); ethnl_ops_complete(dev); @@ -109,7 +107,7 @@ static int pse_fill_reply(struct sk_buff *skb, /* PSE_SET */ const struct nla_policy ethnl_pse_set_policy[ETHTOOL_A_PSE_MAX + 1] = { - [ETHTOOL_A_PSE_HEADER] = NLA_POLICY_NESTED(ethnl_header_policy), + [ETHTOOL_A_PSE_HEADER] = NLA_POLICY_NESTED(ethnl_header_policy_phy), [ETHTOOL_A_PODL_PSE_ADMIN_CONTROL] = NLA_POLICY_RANGE(NLA_U32, ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED, ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED), @@ -124,7 +122,6 @@ ethnl_set_pse_validate(struct ethnl_req_info *req_info, struct genl_info *info) static int ethnl_set_pse(struct ethnl_req_info *req_info, struct genl_info *info) { - struct net_device *dev = req_info->dev; struct pse_control_config config = {}; struct nlattr **tb = info->attrs; struct phy_device *phydev; @@ -132,7 +129,7 @@ ethnl_set_pse(struct ethnl_req_info *req_info, struct genl_info *info) /* this values are already validated by the ethnl_pse_set_policy */ config.admin_cotrol = nla_get_u32(tb[ETHTOOL_A_PODL_PSE_ADMIN_CONTROL]); - phydev = dev->phydev; + phydev = req_info->phydev; if (!phydev) { NL_SET_ERR_MSG(info->extack, "No PHY is attached"); return -EOPNOTSUPP; From patchwork Mon Mar 4 15:10:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209579 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1486055dyc; Mon, 4 Mar 2024 07:15:34 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUFX2bCvB1UAuPBhyVO9v0qYnXcXx0l8lHE6mgUneKILfVFNllWrKV4bRD0/Y6lDSK/hWdMB/SEqhK4/85CwAdmCgj8iA== X-Google-Smtp-Source: AGHT+IGFRwL2+yxSevbA+YTDUqmyoWtkw6C9ZoyJgTgizij398yNwjYMKC4le/lriKtpGeAjMTfv X-Received: by 2002:a05:620a:2483:b0:788:528:6fc with SMTP id i3-20020a05620a248300b00788052806fcmr12006943qkn.47.1709565333982; Mon, 04 Mar 2024 07:15:33 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709565333; cv=pass; d=google.com; s=arc-20160816; b=rIK6aE9Bm/mmICMtOxtdQauj+Sqs4ZWMhdglqaXLOa4p1AnqUzIutBBdWUxKqsjK0I ECDRhlNCZf9ZWUL0mgL1O82FL/X24+PgRm/ce8CObeNZXnWE49EHdOt9XWuUI6p6f17t m1qgeRnSKP48CKiQc41mJHSZDvChkeA02xWr4DW/KEFPXOgLY9JHwH/jv0+5aRlr+vIa Dnaa0XytAfpUKjlcY4SE0kQqrPAOrDm/MitOK7j2EzGsNOr3VVsJc6Q9ByrI2VkKrMHR DRKynGQ855cTrFtmBM7ZUX1Jsb3cPh3NcDiNCV5AP+P8H55CuX4vggdRbM3XwsZ4T20s r6wA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=IxDCgpZdBlnxrye4NnTC+31Jemid+FYTQs/BDr2oHKg=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=fAnehx2Bm5CS/eBH2q3HMWqo26h5N0PCzcAsZInHS0/rUGdT3yvXgx/nXSRhzl/MUr xlgSp4L5ns7olCY2b/hYk5VGvgrRq9sjn4+h7W30EpZzzANgGiZlKMGzaC7SDTr5/8PT kw0wJo1QGQFBSSIV/hubkZ/3SNisG+iZ8X/hMViza8xKMOT+pZ+5GjQNJLoJfmTrkcxg 7OxKH4Ta8OF/nGB5iO9eVP0fBqTMoM74RvgQf2qPx/6nIwcnEcQ3Do1+n8kFUyl/GpcW mpBLanMn3Rjvv7e+O4gwBpmYQiaqs9UPJtSht1Cq5rxnKbzsuuXYG+6fH46B7F73iiWH 6F8g==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b="SNLEK/cO"; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90790-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90790-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id az18-20020a05620a171200b007882d2ca73bsi1509580qkb.111.2024.03.04.07.15.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:15:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90790-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b="SNLEK/cO"; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90790-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90790-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id C1DD81C234B1 for ; Mon, 4 Mar 2024 15:15:33 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 71B915915F; Mon, 4 Mar 2024 15:10:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="SNLEK/cO" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 8A9DB55E7F; Mon, 4 Mar 2024 15:10:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565033; cv=none; b=UZaWBAeC+KiC8xuLmVEIMxrwlAXHJ2mGn4uBRbHB/eviyUUX6wbtrcCa1HVkLeRiqLZfWWG/TFQ1aIYUwFyroSmJQb6ZO0XiuBY0dFnb0KkYjVYmzuGyCCGWN+405w3U/AOkej0iC7AEwkDtHpt7k7/81qhges2DmdOsgpGKmhU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565033; c=relaxed/simple; bh=f3owsytC0v/VYAevNtIiR3iSVCtA2/W082ze9xaZh5U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FIGf95N6i1sdNdDtx+H3FDegA5+ZCl3umoemUW6IqMFD9GCNeQyBntDClE9EyCrXlflvw0srwal5lL29qI3Ndm+jGFvt/FC81Xt/qX73XOv3JtW1tigeosntmuVX2kSKNyMdS+BEDL0pRTSDvjm/Oo9CZlgHgzSWaiYyi8Vb/Go= 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=SNLEK/cO; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id 126E91BF210; Mon, 4 Mar 2024 15:10:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565029; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IxDCgpZdBlnxrye4NnTC+31Jemid+FYTQs/BDr2oHKg=; b=SNLEK/cOmk8vdWQcrsfensmPgsFT6YUQgNbT3rCgFfy568tEX3c5V94/x/95UVgfRUv4jO WUSs8BVi0UoJyEpVlZ7Istuq/pxWbXgYU2vC4ohzqqExq4+aWxiE6SjPsOsJ81stJubhOg OiMKZbCCyQo+JwiRtMHbTIUyZl6eil+htL32lvM/adcY8MR1coubId16dQn6mhBDeJu7n4 Mmp2pNtxCIPGHytoRuBJXYlG1Z/4wpAdJpWSFhCkYX+/JDnbJTU8z52VSOynNnTCUogXDx 90CAnTxnM7oERZ5n5GmJLzDIzcVAgg9iHT0GB5iV+LxMuCZTtW7bU2dFnPRxGg== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 11/13] net: ethtool: cable-test: Target the command to the requested PHY Date: Mon, 4 Mar 2024 16:10:07 +0100 Message-ID: <20240304151011.1610175-12-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792609179268521022 X-GMAIL-MSGID: 1792609179268521022 Cable testing is a PHY-specific command. Instead of targeting the command towards dev->phydev, use the request to pick the targeted PHY. Signed-off-by: Maxime Chevallier --- V10: No changes V9: No changes V8: No changes V7: No changes V6: Use dedicated policy V5: Added Andrew's R-b V4: No changes V3: No changes V2: New patch net/ethtool/cabletest.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/net/ethtool/cabletest.c b/net/ethtool/cabletest.c index 06a151165c31..536800bbc379 100644 --- a/net/ethtool/cabletest.c +++ b/net/ethtool/cabletest.c @@ -13,7 +13,7 @@ const struct nla_policy ethnl_cable_test_act_policy[] = { [ETHTOOL_A_CABLE_TEST_HEADER] = - NLA_POLICY_NESTED(ethnl_header_policy), + NLA_POLICY_NESTED(ethnl_header_policy_phy), }; static int ethnl_cable_test_started(struct phy_device *phydev, u8 cmd) @@ -69,7 +69,7 @@ int ethnl_act_cable_test(struct sk_buff *skb, struct genl_info *info) return ret; dev = req_info.dev; - if (!dev->phydev) { + if (!req_info.phydev) { ret = -EOPNOTSUPP; goto out_dev_put; } @@ -85,12 +85,12 @@ int ethnl_act_cable_test(struct sk_buff *skb, struct genl_info *info) if (ret < 0) goto out_rtnl; - ret = ops->start_cable_test(dev->phydev, info->extack); + ret = ops->start_cable_test(req_info.phydev, info->extack); ethnl_ops_complete(dev); if (!ret) - ethnl_cable_test_started(dev->phydev, + ethnl_cable_test_started(req_info.phydev, ETHTOOL_MSG_CABLE_TEST_NTF); out_rtnl: @@ -220,7 +220,7 @@ static const struct nla_policy cable_test_tdr_act_cfg_policy[] = { const struct nla_policy ethnl_cable_test_tdr_act_policy[] = { [ETHTOOL_A_CABLE_TEST_TDR_HEADER] = - NLA_POLICY_NESTED(ethnl_header_policy), + NLA_POLICY_NESTED(ethnl_header_policy_phy), [ETHTOOL_A_CABLE_TEST_TDR_CFG] = { .type = NLA_NESTED }, }; @@ -321,7 +321,7 @@ int ethnl_act_cable_test_tdr(struct sk_buff *skb, struct genl_info *info) return ret; dev = req_info.dev; - if (!dev->phydev) { + if (!req_info.phydev) { ret = -EOPNOTSUPP; goto out_dev_put; } @@ -342,12 +342,12 @@ int ethnl_act_cable_test_tdr(struct sk_buff *skb, struct genl_info *info) if (ret < 0) goto out_rtnl; - ret = ops->start_cable_test_tdr(dev->phydev, info->extack, &cfg); + ret = ops->start_cable_test_tdr(req_info.phydev, info->extack, &cfg); ethnl_ops_complete(dev); if (!ret) - ethnl_cable_test_started(dev->phydev, + ethnl_cable_test_started(req_info.phydev, ETHTOOL_MSG_CABLE_TEST_TDR_NTF); out_rtnl: From patchwork Mon Mar 4 15:10:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209580 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1486500dyc; Mon, 4 Mar 2024 07:16:10 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWiO0O+jCNzkONCLRizWXueG8DahJ6QUA6e6iwtfksFLc5WzR1idrSPDXuUhhlqlpaK3oOwOwVxOmAK7/2mCwjE7DUWHQ== X-Google-Smtp-Source: AGHT+IEfVw3/nZ5RrRX4m/btGNsZuWWnz6t8JdEF7FI2wGm1hzlkfsynOSijj+bCwJGIDcgf9gvK X-Received: by 2002:a05:622a:11d5:b0:42e:d66b:d57a with SMTP id n21-20020a05622a11d500b0042ed66bd57amr11876070qtk.4.1709565370254; Mon, 04 Mar 2024 07:16:10 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709565370; cv=pass; d=google.com; s=arc-20160816; b=kKXwjZSAAAQKIikpNYMbT17zfVAIgkG36k3P+suvE+QtTqmxbX/ZAq6JEsgHYyo5uq 7aV0StZy/0/j8rZXwfeK3ib6OcWcKgclVpXIXUlxLnS4/Kb9mEkuNqmVQl6NNzjdqtZP rSA0w/NCr6aiXNg6dD3gviHxX8uMO5rAFDKnYGbM06J6XJTs5rsM1Y6zxkw1K1tM8kgI 0B/nWzUHGQrFh5gXCAd+DUzrUxBwJnDW6G4IRpMOZ+aNxmWpsuWbo2xWxf8DTP/PmCXD YLuspm3HiEw18m69ENGj23PEfb8vTExGtPgMaqO9AK21AWkup7Z1IPWsCPC3GnfmvGeL /hGw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=39f7IwNhw2jCdJtHS1cJz/zVjPZ7MqFQUxRY0gaMRO4=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=pHfUdWKmrGyPzdWdkDY4eFfiVFjmT4tGP0nxLuyFFkLUsH9TH5pItWow+Y5eP8d515 wuy7l2BWcdwtC6dCZfPaUfNeCrMwFRp0snxgGvc2RZ5f6330Jy6EUpessovysXrnhCsE KewZnnecQEKiX7FRbm90rXKg+QH3DNANqSsT90dXOEentNW/OKOUrWi/ehs9DWRt7fza pHEqeT88s12POwG3Z5bSJCyIROyovRAZ0c/Um8SPMn+T+N78lx3mSpbBZTAF94F2arkI OwtPdJ99cv3PG5RkJD7h2pbJy5I/0FFnAPaBAvEmpOMBjRUWPYqmv/KD0MugucLT4VUp hNHw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b="Gj4M/Dkv"; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90791-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90791-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id b5-20020ac85bc5000000b0042dcbe3ee25si10164245qtb.785.2024.03.04.07.16.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:16:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90791-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b="Gj4M/Dkv"; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90791-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90791-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id AC7921C21436 for ; Mon, 4 Mar 2024 15:15:41 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F2AE259B4F; Mon, 4 Mar 2024 15:10:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="Gj4M/Dkv" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 F22175674B; Mon, 4 Mar 2024 15:10:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565034; cv=none; b=q6b86K2xW7GFdi0uZWBrHLbUwEU79F6fPOaQVqcgORKDMOJ12oBqU7Lg7EnfLU6JocJGEyrt/iSPOMFXlzb9Ff9BKIl1tZG0xPtVF+4t/dBlluTl/CkZJIW/FJHjpHOC5UB+DK2sYNkOlaV/7xpJl87dC90/8e62GtnMU6/U5Ww= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565034; c=relaxed/simple; bh=pW/q/tI8Ukj2QjsYts45yiVyqopiGdHr0p3RANBiRf0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pdr9KFlvbEMPXnv5veF8QqU7/WKjgqlt+nyaBE51UIndbQu69bErVZnybhxF2904EJwVyy+EENMMBicGoV1AqGqj0wshVXF7tb5rxcNqR8/CSZAvqMJViYUCun5rmYJ4AHBoojn0376RotdWGjuZA/1qo1Ixe/cNQfN24Z2EFLo= 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=Gj4M/Dkv; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id 638151BF212; Mon, 4 Mar 2024 15:10:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565030; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=39f7IwNhw2jCdJtHS1cJz/zVjPZ7MqFQUxRY0gaMRO4=; b=Gj4M/DkvX82z7vNFsJ+4ypdEd0ZX8w969Rk1QRrDz6fu5dabW3auC5c5N0TGX83poXhXoc IxH1C0bErHdK6PuDXiMS7IEEkEZ2ox8BW6+g2Xhx/ifKF7zgxe0WJrzQ+h9uVFcGRjkoC4 re/Bjoulg8oaHfjR6/GUy9gJP+NyPVp8HG2yvaRGs0NStCc4YlzmuAiouhr6j4Tj1a1qus LsshcAyxrszTCOgjko6BtAymzHQnKeGaE66GHu9OBfX7/ihDTeLZRQHMk5FI+LiauekWc7 ElifHPICYshZUAKZQlmEtQSZln9lza6VZWXgWbgRP8PQ9MpP6w80WSdSpSuaLw== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 12/13] net: ethtool: strset: Allow querying phy stats by index Date: Mon, 4 Mar 2024 16:10:08 +0100 Message-ID: <20240304151011.1610175-13-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792609217419158852 X-GMAIL-MSGID: 1792609217419158852 The ETH_SS_PHY_STATS command gets PHY statistics. Use the phydev pointer from the ethnl request to allow query phy stats from each PHY on the link. Signed-off-by: Maxime Chevallier --- V10: No changes V9: No changes V8: No changes V7: No changes V6: Use dedicated policy V5: Added Andrew's R-b V4: No changes V3: No changes V2: New patch net/ethtool/strset.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/net/ethtool/strset.c b/net/ethtool/strset.c index c678b484a079..edc826407564 100644 --- a/net/ethtool/strset.c +++ b/net/ethtool/strset.c @@ -126,7 +126,7 @@ struct strset_reply_data { const struct nla_policy ethnl_strset_get_policy[] = { [ETHTOOL_A_STRSET_HEADER] = - NLA_POLICY_NESTED(ethnl_header_policy), + NLA_POLICY_NESTED(ethnl_header_policy_phy), [ETHTOOL_A_STRSET_STRINGSETS] = { .type = NLA_NESTED }, [ETHTOOL_A_STRSET_COUNTS_ONLY] = { .type = NLA_FLAG }, }; @@ -233,17 +233,18 @@ static void strset_cleanup_data(struct ethnl_reply_data *reply_base) } static int strset_prepare_set(struct strset_info *info, struct net_device *dev, - unsigned int id, bool counts_only) + struct phy_device *phydev, unsigned int id, + bool counts_only) { const struct ethtool_phy_ops *phy_ops = ethtool_phy_ops; const struct ethtool_ops *ops = dev->ethtool_ops; void *strings; int count, ret; - if (id == ETH_SS_PHY_STATS && dev->phydev && + if (id == ETH_SS_PHY_STATS && phydev && !ops->get_ethtool_phy_stats && phy_ops && phy_ops->get_sset_count) - ret = phy_ops->get_sset_count(dev->phydev); + ret = phy_ops->get_sset_count(phydev); else if (ops->get_sset_count && ops->get_strings) ret = ops->get_sset_count(dev, id); else @@ -258,10 +259,10 @@ static int strset_prepare_set(struct strset_info *info, struct net_device *dev, strings = kcalloc(count, ETH_GSTRING_LEN, GFP_KERNEL); if (!strings) return -ENOMEM; - if (id == ETH_SS_PHY_STATS && dev->phydev && + if (id == ETH_SS_PHY_STATS && phydev && !ops->get_ethtool_phy_stats && phy_ops && phy_ops->get_strings) - phy_ops->get_strings(dev->phydev, strings); + phy_ops->get_strings(phydev, strings); else ops->get_strings(dev, id, strings); info->strings = strings; @@ -305,8 +306,8 @@ static int strset_prepare_data(const struct ethnl_req_info *req_base, !data->sets[i].per_dev) continue; - ret = strset_prepare_set(&data->sets[i], dev, i, - req_info->counts_only); + ret = strset_prepare_set(&data->sets[i], dev, req_base->phydev, + i, req_info->counts_only); if (ret < 0) goto err_ops; } From patchwork Mon Mar 4 15:10:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Chevallier X-Patchwork-Id: 209597 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1499815dyc; Mon, 4 Mar 2024 07:37:13 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWhWr192Lsj6OyIGKwFe6CaD07qAnRn6It3jxM57KWXE6JeLgYDJgWBPf9iVSJJrYoZ9/7jHdzrnIVsvIKltjKHi1/1Ag== X-Google-Smtp-Source: AGHT+IESZTr1htgacQr3CyZTpjCubYEOzKvBlXmy2Kb8CTLUxluB6Tp70LLP2PUna+EEx86Afca4 X-Received: by 2002:a05:6a20:af01:b0:1a1:4f7b:916f with SMTP id dr1-20020a056a20af0100b001a14f7b916fmr3980978pzb.58.1709566633262; Mon, 04 Mar 2024 07:37:13 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709566633; cv=pass; d=google.com; s=arc-20160816; b=ef5fCm5IzfAEZrTBgpxPbboyY9Vmc3H+Oo0+Wvz6jeekhFsC+Ew9tiRmHdkbbbDTzs gf1tJZgzYjgkBHITcnq3honfp8oC2ZwI2GtrhrQ3OXHbu3wlAg/aDZKZEYiaVO73eXFA YRYk6pkwOXBV7r3e3BigzsN1LjgqqE9OzmDvLkr9JYoacYkrccTvo6SNSpY0BuvXEZqA RuSueKnf4i/Nl2L9wTQ/sKBOPaSOMa9oHZDSremfvsWCWHDITaoXxPrmKxM0c9usjv90 0GH2L9kqztokE7f8Y/lOFv7AfLUTLg+hSN55IIsMvkU/SocBnOosSOP0P5cxz9nw7nZu 7n2g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=H287iEa0JyLaS+08bqr5zUl3q6wXiUIl+oLrUm0UV5U=; fh=1vUu/d1GTjraph6G+ET+Z0z13QVrf6oL/IrrK9zaTF8=; b=PlrXU84Q+BEypBLfxy794a6nH85z7LcOa6gz9diYIDB9WP9C6NB1YoqeJudOpRszRu gKtqcxLqV4A7Jtw+eOKWDrjA/sW3ZsdC/Wckvibc8s1zYNsuvvK1KHCSDDv22GxEv8ZS lSLDZFTBO29Fz4YuBG7eenWYhBOkmWPwSKPG6MZ+9EHwROPLj2XtortDQ/aIKd3Ql86D ERmpFN3s1SbToGq7y491Z/oYJZkN0OjqAlthSzZDWWLloUYZtGoeYNgBX4l6WOnPMq+u QA5L7JJpmmyFyuxXHsZS+uML/F2U/pPLt6DjrjM72jfBvcmnBGwlU9/5ySUHQn7MaWf/ TOww==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=SuZZYwUL; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90792-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90792-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id h187-20020a636cc4000000b005e43cb6847bsi8444706pgc.877.2024.03.04.07.37.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 07:37:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90792-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=SuZZYwUL; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-90792-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90792-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 86A91B27D82 for ; Mon, 4 Mar 2024 15:15:53 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4116D5A0FA; Mon, 4 Mar 2024 15:10:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="SuZZYwUL" Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 6AF7957326; Mon, 4 Mar 2024 15:10:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565035; cv=none; b=fg8l4vc647rcNS8+JA7Fo3mWXtF7rTvLbDBO2FM2BIBYdWjZFCOWAZer25Xxq6Nh9bATkhpINcpL9BRu7iCSf0sbfzg9BX/pya151dL+6wfoIXIKeRiuuNjDpyYXT4vDkex0d+jgkkgN+i3qV57bNqDjxjbYw0pNwTjf0G1sRBk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709565035; c=relaxed/simple; bh=iMyGExvInzF9Y+z6AEanDUXiKn/kOCyMhnOy7c8Bsmk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NmE7Uau49dzt18ezkOA1e+9kC2UpJ82ZaHNHm0oT477apUHOiUtBWHEmNU97FJo+dkyHfjViFG3uz8nAnffxHl/jbvcuZpeaPVsef36ArhposmuBIsEXIEyY7dCyg6N79HULuvK18blUzZqQG4MXs5kPy+6nDYWQrZ1aWtqpqxg= 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=SuZZYwUL; arc=none smtp.client-ip=217.70.183.201 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 Received: by mail.gandi.net (Postfix) with ESMTPSA id C4A101BF20D; Mon, 4 Mar 2024 15:10:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709565032; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=H287iEa0JyLaS+08bqr5zUl3q6wXiUIl+oLrUm0UV5U=; b=SuZZYwULPgsKqRZsjYIJkjG+gbbX8Y/6/A4gm47u/g48+z/P/L43Xcrum7zcizNdprb05H xAaBtcXENJTrhlf4aj4T5H9O9mMwX1dXLAQnGqAUJfKQKE9/smI8QFIKi7py2mJ7NneNdb GRoJ/IeaayWP2i1lMFFaCLTmPjwuvMYooDITbZrOCoFyC8qPfJIaEGKmqHVDiHURyqT1/b pxTFCXdLrw/9WwmT1ap7HzYmnnzHMoYMlxxpWWVZpPf77xNN3z3haAhvtTYrRE6C+K6bjY qCt28W7jhGnx0hvUg3aem5245BzQcaZ7Oy3JEonWm1tjNRQvhrQdGIXypRY12g== From: Maxime Chevallier To: davem@davemloft.net Cc: Maxime Chevallier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?utf-8?q?K=C3=B6ry_Maincent?= , Jesse Brandeburg , Jonathan Corbet , =?utf-8?q?Marek_Beh=C3=BAn?= , Piergiorgio Beruto , Oleksij Rempel , =?utf-8?q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org Subject: [PATCH net-next v10 13/13] Documentation: networking: document phy_link_topology Date: Mon, 4 Mar 2024 16:10:09 +0100 Message-ID: <20240304151011.1610175-14-maxime.chevallier@bootlin.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> References: <20240304151011.1610175-1-maxime.chevallier@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: maxime.chevallier@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792610542184192669 X-GMAIL-MSGID: 1792610542184192669 The newly introduced phy_link_topology tracks all ethernet PHYs that are attached to a netdevice. Document the base principle, internal and external APIs. As the phy_link_topology is expected to be extended, this documentation will hold any further improvements and additions made relative to topology handling. Signed-off-by: Maxime Chevallier --- V10: No changes V9: No changes V8: No changes V7: No changes V6: No changes V5: Fixed a lot of typos V4: No changes V3: New patch Documentation/networking/index.rst | 1 + .../networking/phy-link-topology.rst | 121 ++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 Documentation/networking/phy-link-topology.rst diff --git a/Documentation/networking/index.rst b/Documentation/networking/index.rst index 69f3d6dcd9fd..a2c45a75a4a6 100644 --- a/Documentation/networking/index.rst +++ b/Documentation/networking/index.rst @@ -88,6 +88,7 @@ Contents: operstates packet_mmap phonet + phy-link-topology pktgen plip ppp_generic diff --git a/Documentation/networking/phy-link-topology.rst b/Documentation/networking/phy-link-topology.rst new file mode 100644 index 000000000000..1fd8e904ef4b --- /dev/null +++ b/Documentation/networking/phy-link-topology.rst @@ -0,0 +1,121 @@ +.. SPDX-License-Identifier: GPL-2.0 + +================= +PHY link topology +================= + +Overview +======== + +The PHY link topology representation in the networking stack aims at representing +the hardware layout for any given Ethernet link. + +An Ethernet Interface from userspace's point of view is nothing but a +:c:type:`struct net_device `, which exposes configuration options +through the legacy ioctls and the ethool netlink commands. The base assumption +when designing these configuration channels were that the link looked +something like this :: + + +-----------------------+ +----------+ +--------------+ + | Ethernet Controller / | | Ethernet | | Connector / | + | MAC | ------ | PHY | ---- | Port | ---... to LP + +-----------------------+ +----------+ +--------------+ + struct net_device struct phy_device + +Commands that needs to configure the PHY will go through the net_device.phydev +field to reach the PHY and perform the relevant configuration. + +This assumption falls apart in more complex topologies that can arise when, +for example, using SFP transceivers (although that's not the only specific case). + +Here, we have 2 basic scenarios. Either the MAC is able to output a serialized +interface, that can directly be fed to an SFP cage, such as SGMII, 1000BaseX, +10GBaseR, etc. + +The link topology then looks like this (when an SFP module is inserted) :: + + +-----+ SGMII +------------+ + | MAC | ------- | SFP Module | + +-----+ +------------+ + +Knowing that some modules embed a PHY, the actual link is more like :: + + +-----+ SGMII +--------------+ + | MAC | -------- | PHY (on SFP) | + +-----+ +--------------+ + +In this case, the SFP PHY is handled by phylib, and registered by phylink through +its SFP upstream ops. + +Now some Ethernet controllers aren't able to output a serialized interface, so +we can't directly connect them to an SFP cage. However, some PHYs can be used +as media-converters, to translate the non-serialized MAC MII interface to a +serialized MII interface fed to the SFP :: + + +-----+ RGMII +-----------------------+ SGMII +--------------+ + | MAC | ------- | PHY (media converter) | ------- | PHY (on SFP) | + +-----+ +-----------------------+ +--------------+ + +This is where the model of having a single net_device.phydev pointer shows its +limitations, as we now have 2 PHYs on the link. + +The phy_link topology framework aims at providing a way to keep track of every +PHY on the link, for use by both kernel drivers and subsystems, but also to +report the topology to userspace, allowing to target individual PHYs in configuration +commands. + +API +=== + +The :c:type:`struct phy_link_topology ` is a per-netdevice +resource, that gets initialized at netdevice creation. Once it's initialized, +it is then possible to register PHYs to the topology through : + +:c:func:`phy_link_topo_add_phy` + +Besides registering the PHY to the topology, this call will also assign a unique +index to the PHY, which can then be reported to userspace to refer to this PHY +(akin to the ifindex). This index is a u32, ranging from 1 to U32_MAX. The value +0 is reserved to indicate the PHY doesn't belong to any topology yet. + +The PHY can then be removed from the topology through + +:c:func:`phy_link_topo_del_phy` + +These function are already hooked into the phylib subsystem, so all PHYs that +are linked to a net_device through :c:func:`phy_attach_direct` will automatically +join the netdev's topology. + +PHYs that are on a SFP module will also be automatically registered IF the SFP +upstream is phylink (so, no media-converter). + +PHY drivers that can be used as SFP upstream need to call :c:func:`phy_sfp_attach_phy` +and :c:func:`phy_sfp_detach_phy`, which can be used as a +.attach_phy / .detach_phy implementation for the +:c:type:`struct sfp_upstream_ops `. + +UAPI +==== + +There exist a set of netlink commands to query the link topology from userspace, +see ``Documentation/networking/ethtool-netlink.rst``. + +The whole point of having a topology representation is to assign the phyindex +field in :c:type:`struct phy_device `. This index is reported to +userspace using the ``ETHTOOL_MSG_PHY_GET`` ethtnl command. Performing a DUMP operation +will result in all PHYs from all net_device being listed. The DUMP command +accepts either a ``ETHTOOL_A_HEADER_DEV_INDEX`` or ``ETHTOOL_A_HEADER_DEV_NAME`` +to be passed in the request to filter the DUMP to a single net_device. + +The retrieved index can then be passed as a request parameter using the +``ETHTOOL_A_HEADER_PHY_INDEX`` field in the following ethnl commands : + +* ``ETHTOOL_MSG_STRSET_GET`` to get the stats string set from a given PHY +* ``ETHTOOL_MSG_CABLE_TEST_ACT`` and ``ETHTOOL_MSG_CABLE_TEST_ACT``, to perform + cable testing on a given PHY on the link (most likely the outermost PHY) +* ``ETHTOOL_MSG_PSE_SET`` and ``ETHTOOL_MSG_PSE_GET`` for PHY-controlled PoE and PSE settings +* ``ETHTOOL_MSG_PLCA_GET_CFG``, ``ETHTOOL_MSG_PLCA_SET_CFG`` and ``ETHTOOL_MSG_PLCA_GET_STATUS`` + to set the PLCA (Physical Layer Collision Avoidance) parameters + +Note that the PHY index can be passed to other requests, which will silently +ignore it if present and irrelevant.