Re: [PATCH ethtool v2 2/3] ethtool: pse-pd: Add PSE priority support
From: Oleksij Rempel <o.rempel@pengutronix.de>
Date: 2025-08-13 12:25:44
Also in:
lkml
Hi Kory, Thank you for your work! Here are some review comments... On Wed, Aug 13, 2025 at 10:57:51AM +0200, Kory Maincent wrote:
quoted hunk ↗ jump to hunk
From: Kory Maincent (Dent Project) <kory.maincent@bootlin.com> Add support for PSE (Power Sourcing Equipment) priority management: - Add priority configuration parameter (prio) for port priority management - Display power domain index, maximum priority, and current priority Signed-off-by: Kory Maincent <kory.maincent@bootlin.com> --- ethtool.8.in | 13 +++++++++++++ ethtool.c | 1 + netlink/pse-pd.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+)diff --git a/ethtool.8.in b/ethtool.8.in index 29b8a8c..163b2b0 100644 --- a/ethtool.8.in +++ b/ethtool.8.in@@ -561,6 +561,7 @@ ethtool \- query or control network driver and hardware settings .RB [ c33\-pse\-admin\-control .BR enable | disable ] .BN c33\-pse\-avail\-pw\-limit N +.BN prio N .HP .B ethtool \-\-flash\-module\-firmware .I devname@@ -1911,6 +1912,15 @@ This attribute specifies the allowed power limit ranges in mW for configuring the c33-pse-avail-pw-limit parameter. It defines the valid power levels that can be assigned to the c33 PSE in compliance with the c33 standard. +.TP +.B power-domain-index +This attribute defines the index of the PSE Power Domain.
May be: Reports the index of the PSE power domain the port belongs to. Every port belongs to exactly one power domain. Port priorities are defined within that power domain. Each power domain may have its own maximum budget (e.g., 100 W per domain) in addition to a system-wide budget (e.g., 200 W overall). Domain limits are enforced first: if a single domain reaches its budget, only ports in that domain are affected. The system-wide budget is enforced across all domains; only when it is exceeded do cross-domain priorities apply.
+.TP +.B priority-max +This attribute defines the maximum priority available for the PSE.
Reports the maximum configurable port priority value within the reported power domain. The valid range for prio is 0 to priority-max (inclusive).
+.TP +.B priority +This attribute defines the currently configured priority for the PSE.
Reports the currently configured port priority within the reported power domain. Lower numeric values indicate higher priority: 0 is the highest priority.
quoted hunk ↗ jump to hunk
.RE .TP@@ -1930,6 +1940,9 @@ This parameter manages c33 PSE Admin operations in accordance with the IEEE This parameter manages c33 PSE Available Power Limit in mW, in accordance with the IEEE 802.3-2022 33.2.4.4 Variables (pse_available_power) specification. +.TP +.B prio \ N +This parameter manages port priority.
Set the port priority, scoped to the port's power domain as reported by power-domain-index. Lower values indicate higher priority; 0 is the highest. The valid range is 0 to the priority-max reported by --show-pse. When a single domain exceeds its budget, ports in that domain are powered up/down by priority (highest first for power-up; lowest shed first). When the system-wide budget is exceeded, priority ordering is applied across domains.
quoted hunk ↗ jump to hunk
.RE .TPdiff --git a/ethtool.c b/ethtool.c index 215f566..948d551 100644 --- a/ethtool.c +++ b/ethtool.c@@ -6339,6 +6339,7 @@ static const struct option args[] = { .xhelp = " [ podl-pse-admin-control enable|disable ]\n" " [ c33-pse-admin-control enable|disable ]\n" " [ c33-pse-avail-pw-limit N ]\n" + " [ prio N ]\n" }, { .opts = "--flash-module-firmware",diff --git a/netlink/pse-pd.c b/netlink/pse-pd.c index fd1fc4d..5bde176 100644 --- a/netlink/pse-pd.c +++ b/netlink/pse-pd.c@@ -420,6 +420,29 @@ int pse_reply_cb(const struct nlmsghdr *nlhdr, void *data) } } + if (tb[ETHTOOL_A_PSE_PW_D_ID]) { + u32 val; + + val = mnl_attr_get_u32(tb[ETHTOOL_A_PSE_PW_D_ID]); + print_uint(PRINT_ANY, "power-domain-index", + "Power domain index: %u\n", val); + } + + if (tb[ETHTOOL_A_PSE_PRIO_MAX]) { + u32 val; + + val = mnl_attr_get_u32(tb[ETHTOOL_A_PSE_PRIO_MAX]); + print_uint(PRINT_ANY, "priority-max", + "Max allowed priority: %u\n", val); + } + + if (tb[ETHTOOL_A_PSE_PRIO]) { + u32 val; + + val = mnl_attr_get_u32(tb[ETHTOOL_A_PSE_PRIO]); + print_uint(PRINT_ANY, "priority", "Priority %u\n", val);
missing colon print_uint(PRINT_ANY, "priority", "Priority: %u\n", val); -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |