Received: by 2002:ab2:6309:0:b0:1fb:d597:ff75 with SMTP id s9csp870547lqt; Fri, 7 Jun 2024 00:37:05 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUqITnlPBb9pGgiyA2bo2SbcU4HXqbCM2eCADPrWarLlQd/uQeUK2dUId8vtqkBbykWUGTYn3xq9IdsEIHhw3+XJwHXpe7mP818VXd0Rg== X-Google-Smtp-Source: AGHT+IEn2X8DawB/lqnIENFABDCJeWiL2Xm+QO+VO+MvdFVSqOZ6TqHVA60Q5YH8+3BUjV8Dy3RL X-Received: by 2002:a17:90b:1e11:b0:2bd:6f31:2ae5 with SMTP id 98e67ed59e1d1-2c2bcc61a21mr1551651a91.44.1717745825502; Fri, 07 Jun 2024 00:37:05 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717745825; cv=pass; d=google.com; s=arc-20160816; b=QgfhCLYhQMYd4/6GjDm14TYEjuNNC5xENrFgbgEAWWowX6xoCxGjSVnpXHFUaOthW5 2xC56bJHYDRaYyjJ5SpFDjF8FBly1dY/6GXZ8n00Nz7T0mdKVBKuLgmRtCkPAcuTrMts wjGvtCP+Quf13iTj7ysg2H0yfUbLGucJ8bbD7sI7swIJG+QapSAtQuJ18R1pGsazqN48 SQmGoU0dNHWIb4U8XS3kTMXNQPFGAQOjBw8nthmqvRwrl4a9EmyZXcoSTV6GSryuzz29 Qxor1p90qjKUwUw3D0lJb3zONWJtFP0S7Jn9p4FlvGy0CFyAJA36Hnzbj7/pjKDtRYCt oSmQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=2VeJW7JHQpWdY0KjL1cAtvzlXlZZ8Tp/iJj/ay+emhQ=; fh=bkuuwL0IG6Vujou5YptfTbPV1KXOCWyLyxvloMSGjxQ=; b=M3UhIFX++fpfaS3SbhOVdg8ZM75Xeh/b75FFSw4+JXZNcKwsPnACpEzuFvPfJ4D3zU UpIMrYEHW8P4BBOAYRnjWwGPSeH7DR/TblepKrsxNkcjcvJphTE1SJdR8FEKM0Ga9gmq dsjfHGFDzKQP2vo4emdq+0/YYe8PBU9DJYDFxHGt28AQnk1eSdCMJuLKsV+3z0xirmmw dtcFQwXtuIOU5wVJdJDtGp1yFI0cxqV6AAVxyeiTxNWDa6zSYwR0sokmPRuTXMOBtm64 8seswV06d9N+lonRwjGQJdXaqMV15i+bi88v0P+cmjxEMEgZFZlhv+aBkQ5XZrXm5/Po J0HQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b="D47WZkx/"; 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-205531-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-205531-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id 98e67ed59e1d1-2c2806d19ffsi2793267a91.128.2024.06.07.00.37.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Jun 2024 00:37:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-205531-linux.lists.archive=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="D47WZkx/"; 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-205531-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-205531-linux.lists.archive=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 84044B2440A for ; Fri, 7 Jun 2024 07:31:30 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3776E15533D; Fri, 7 Jun 2024 07:30:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="D47WZkx/" Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) (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 1CE8019D89B; Fri, 7 Jun 2024 07:30:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.194 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717745442; cv=none; b=rlsDFpsl3UpcVNEtbpEQcnGSEFG0xHsKT2O74cLHvKc8KKCYL33x1hsd3pz2fPyQ9Z/b9Zvg7I1UpLn+l/83aMyg8q4DAjnH9hsJmezpd2S1Igi0UQhOU3mhLoBukSQBxxS1MOJz2vVfTIwLCJnFPCDH09CR+PA6Mne5FO+m1EI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717745442; c=relaxed/simple; bh=XA7yXs98tBR+Y72hp0dM3tOORuRzx+vjQf+FlpZQy2g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=awxMWIT/xHGdlxlk9MCRdsv+hIyjNYfUHqc4yvrODFWqsocZjXHjzczpIgh5XtGUswkv4ngF+CglHzF672sRXUqj9Ihy2ZReiIhoCv9K4gO24J6CvXUcFS8fwiuBXLtxSrQceClG5Q4F8uypMqT7N6Hvsz9SNYvhGU7GJa9giuE= 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=D47WZkx/; arc=none smtp.client-ip=217.70.183.194 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 BC32640011; Fri, 7 Jun 2024 07:30:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1717745438; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2VeJW7JHQpWdY0KjL1cAtvzlXlZZ8Tp/iJj/ay+emhQ=; b=D47WZkx/MwCxy0DNinourWkr4Nzke5EvAZ487X6zJtNuoHLvgKO+zbOywNzFwTc0bEgsII K4fAdeB9Q+mIRIjr/gwTg5Np8MCnU44W4+7N9jFFXh28v4P/cIATg91Bo1VeTgh7OBEG4D tQYfiaAVLyR/iZ5Co5vdw8qCy94UlURTfMwiH2z0a9QAYq1XKAeNTJLrXbVj4SpIePfUhB Rtr2gIOQHEI/vA6AHPz9+CXa4NC+iuP9/igbSlJ5Y38yGHcLQBMMQqfGJG4SSS3/vsZ7Mr 9gQWHh1OomVJEIrmKSygIC0ouLSTcBgkINDBaY+97dvMugw+/eYbulYkzuCabw== From: Kory Maincent Date: Fri, 07 Jun 2024 09:30:19 +0200 Subject: [PATCH net-next v2 2/8] net: ethtool: pse-pd: Expand C33 PSE status with class, power and extended state Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20240607-feature_poe_power_cap-v2-2-c03c2deb83ab@bootlin.com> References: <20240607-feature_poe_power_cap-v2-0-c03c2deb83ab@bootlin.com> In-Reply-To: <20240607-feature_poe_power_cap-v2-0-c03c2deb83ab@bootlin.com> To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Donald Hunter , Oleksij Rempel Cc: Thomas Petazzoni , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Dent Project , kernel@pengutronix.de, Kory Maincent X-Mailer: b4 0.14-dev X-GND-Sasl: kory.maincent@bootlin.com From: "Kory Maincent (Dent Project)" This update expands the status information provided by ethtool for PSE c33. It includes details such as the detected class, current power delivered, and extended state information. Signed-off-by: Kory Maincent --- Change in v2: - Move on PSE string error messages to ETHTOOL_LINK_EXT_STATE and ETHTOOL_LINK_EXT_SUBSTATE with fixed enumeration in aim to unify interface diagnostic. --- include/linux/ethtool.h | 11 ++++++++++ include/linux/pse-pd/pse.h | 8 +++++++ include/uapi/linux/ethtool.h | 41 ++++++++++++++++++++++++++++++++++++ include/uapi/linux/ethtool_netlink.h | 4 ++++ net/ethtool/pse-pd.c | 29 ++++++++++++++++++++++++- 5 files changed, 92 insertions(+), 1 deletion(-) diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 6fd9107d3cc0..1a0c8d6a22a0 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -1155,4 +1155,15 @@ struct ethtool_forced_speed_map { void ethtool_forced_speed_maps_init(struct ethtool_forced_speed_map *maps, u32 size); + +/* C33 PSE extended state and substate. */ +struct ethtool_c33_pse_ext_state_info { + enum ethtool_c33_pse_ext_state c33_pse_ext_state; + union { + enum ethtool_c33_pse_ext_substate_voltage_issue voltage_issue; + enum ethtool_c33_pse_ext_substate_current_issue current_issue; + enum ethtool_c33_pse_ext_substate_config config; + u32 __c33_pse_ext_substate; + }; +}; #endif /* _LINUX_ETHTOOL_H */ diff --git a/include/linux/pse-pd/pse.h b/include/linux/pse-pd/pse.h index 6eec24ffa866..38b9308e5e7a 100644 --- a/include/linux/pse-pd/pse.h +++ b/include/linux/pse-pd/pse.h @@ -36,12 +36,20 @@ struct pse_control_config { * functions. IEEE 802.3-2022 30.9.1.1.2 aPSEAdminState * @c33_pw_status: power detection status of the PSE. * IEEE 802.3-2022 30.9.1.1.5 aPSEPowerDetectionStatus: + * @c33_pw_class: detected class of a powered PD + * IEEE 802.3-2022 30.9.1.1.8 aPSEPowerClassification + * @c33_actual_pw: power currently delivered by the PSE in mW + * IEEE 802.3-2022 30.9.1.1.23 aPSEActualPower + * @c33_ext_state_info: extended state information of the PSE */ struct pse_control_status { enum ethtool_podl_pse_admin_state podl_admin_state; enum ethtool_podl_pse_pw_d_status podl_pw_status; enum ethtool_c33_pse_admin_state c33_admin_state; enum ethtool_c33_pse_pw_d_status c33_pw_status; + u32 c33_pw_class; + u32 c33_actual_pw; + struct ethtool_c33_pse_ext_state_info c33_ext_state_info; }; /** diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h index 8733a3117902..ef65ad4612d2 100644 --- a/include/uapi/linux/ethtool.h +++ b/include/uapi/linux/ethtool.h @@ -752,6 +752,47 @@ enum ethtool_module_power_mode { ETHTOOL_MODULE_POWER_MODE_HIGH, }; +/* C33 PSE extended state */ +enum ethtool_c33_pse_ext_state { + ETHTOOL_C33_PSE_EXT_STATE_UNKNOWN = 1, + ETHTOOL_C33_PSE_EXT_STATE_DETECTION, + ETHTOOL_C33_PSE_EXT_STATE_CLASSIFICATION_FAILURE, + ETHTOOL_C33_PSE_EXT_STATE_HARDWARE_ISSUE, + ETHTOOL_C33_PSE_EXT_STATE_VOLTAGE_ISSUE, + ETHTOOL_C33_PSE_EXT_STATE_CURRENT_ISSUE, + ETHTOOL_C33_PSE_EXT_STATE_POWER_BUDGET_EXCEEDED, + ETHTOOL_C33_PSE_EXT_STATE_CONFIG, + ETHTOOL_C33_PSE_EXT_STATE_TEMP_ISSUE, +}; + +/* More information in addition to ETHTOOL_C33_PSE_EXT_STATE_DETECTION. */ +enum ethtool_c33_pse_ext_substate_detection { + ETHTOOL_C33_PSE_EXT_SUBSTATE_DET_IN_PROGRESS = 1, + ETHTOOL_C33_PSE_EXT_SUBSTATE_DET_FAILURE, +}; + +/* More information in addition to ETHTOOL_C33_PSE_EXT_STATE_VOLTAGE_ISSUE. */ +enum ethtool_c33_pse_ext_substate_voltage_issue { + ETHTOOL_C33_PSE_EXT_SUBSTATE_V_INJECTION = 1, + ETHTOOL_C33_PSE_EXT_SUBSTATE_V_SHORT_DETECTED, + ETHTOOL_C33_PSE_EXT_SUBSTATE_V_OVERVOLTAGE, + ETHTOOL_C33_PSE_EXT_SUBSTATE_V_UNDERVOLTAGE, + ETHTOOL_C33_PSE_EXT_SUBSTATE_V_OPEN, +}; + +/* More information in addition to ETHTOOL_C33_PSE_EXT_STATE_CURRENT_ISSUE. */ +enum ethtool_c33_pse_ext_substate_current_issue { + ETHTOOL_C33_PSE_EXT_SUBSTATE_CRT_OVERLOAD = 1, + ETHTOOL_C33_PSE_EXT_SUBSTATE_CRT_UNDERLOAD, +}; + +/* More information in addition to ETHTOOL_C33_PSE_EXT_STATE_CONFIG. + */ +enum ethtool_c33_pse_ext_substate_config { + ETHTOOL_C33_PSE_EXT_SUBSTATE_CFG_CHANGED = 1, + ETHTOOL_C33_PSE_EXT_SUBSTATE_CFG_UNDEFINED, +}; + /** * enum ethtool_pse_types - Types of PSE controller. * @ETHTOOL_PSE_UNKNOWN: Type of PSE controller is unknown diff --git a/include/uapi/linux/ethtool_netlink.h b/include/uapi/linux/ethtool_netlink.h index b49b804b9495..ccbe8294dfd5 100644 --- a/include/uapi/linux/ethtool_netlink.h +++ b/include/uapi/linux/ethtool_netlink.h @@ -915,6 +915,10 @@ enum { ETHTOOL_A_C33_PSE_ADMIN_STATE, /* u32 */ ETHTOOL_A_C33_PSE_ADMIN_CONTROL, /* u32 */ ETHTOOL_A_C33_PSE_PW_D_STATUS, /* u32 */ + ETHTOOL_A_C33_PSE_PW_CLASS, /* u32 */ + ETHTOOL_A_C33_PSE_ACTUAL_PW, /* u32 */ + ETHTOOL_A_C33_PSE_EXT_STATE, /* u8 */ + ETHTOOL_A_C33_PSE_EXT_SUBSTATE, /* u8 */ /* add new constants above here */ __ETHTOOL_A_PSE_CNT, diff --git a/net/ethtool/pse-pd.c b/net/ethtool/pse-pd.c index 2c981d443f27..3d74cfe7765b 100644 --- a/net/ethtool/pse-pd.c +++ b/net/ethtool/pse-pd.c @@ -86,7 +86,14 @@ static int pse_reply_size(const struct ethnl_req_info *req_base, len += nla_total_size(sizeof(u32)); /* _C33_PSE_ADMIN_STATE */ if (st->c33_pw_status > 0) len += nla_total_size(sizeof(u32)); /* _C33_PSE_PW_D_STATUS */ - + if (st->c33_pw_class > 0) + len += nla_total_size(sizeof(u32)); /* _C33_PSE_PW_CLASS */ + if (st->c33_actual_pw > 0) + len += nla_total_size(sizeof(u32)); /* _C33_PSE_ACTUAL_PW */ + if (st->c33_ext_state_info.c33_pse_ext_state) + len += nla_total_size(sizeof(u8)); /* _C33_PSE_EXT_STATE */ + if (st->c33_ext_state_info.__c33_pse_ext_substate) + len += nla_total_size(sizeof(u8)); /* _C33_PSE_EXT_SUBSTATE */ return len; } @@ -117,6 +124,26 @@ static int pse_fill_reply(struct sk_buff *skb, st->c33_pw_status)) return -EMSGSIZE; + if (st->c33_pw_class > 0 && + nla_put_u32(skb, ETHTOOL_A_C33_PSE_PW_CLASS, + st->c33_pw_class)) + return -EMSGSIZE; + + if (st->c33_actual_pw > 0 && + nla_put_u32(skb, ETHTOOL_A_C33_PSE_ACTUAL_PW, + st->c33_actual_pw)) + return -EMSGSIZE; + + if (st->c33_ext_state_info.c33_pse_ext_state > 0 && + nla_put_u8(skb, ETHTOOL_A_C33_PSE_EXT_STATE, + st->c33_ext_state_info.c33_pse_ext_state)) + return -EMSGSIZE; + + if (st->c33_ext_state_info.__c33_pse_ext_substate > 0 && + nla_put_u8(skb, ETHTOOL_A_C33_PSE_EXT_SUBSTATE, + st->c33_ext_state_info.__c33_pse_ext_substate)) + return -EMSGSIZE; + return 0; } -- 2.34.1