kernel: net: pse-pd: patch netlink & PSE PRIO

patch netlink headers for netifd PSE support
& fix PSE backports for PSE Prio

The 626-* patches are backporting net PSE-PD from
linux 6.18 to 6.12. The 627-02 is a nearly verbatim
copy of the upstream commit. The 6.12-01 patches the
auto generated ethtool_netlink_generated header.

The 6.12 build tools do not have the build system
feature for generating the correct netlink
headers related to the backports.

Signed-off-by: Carlo Szelinsky <github@szelinsky.de>
Link: https://github.com/openwrt/openwrt/pull/21926
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Carlo Szelinsky 2026-02-07 14:47:15 +01:00 committed by Hauke Mehrtens
parent 1519b69f43
commit fca18e21fa
2 changed files with 95 additions and 28 deletions

View file

@ -2,22 +2,25 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: OpenWrt PSE-PD Backport <openwrt@openwrt.org>
Date: Fri, 31 Jan 2025 00:00:00 +0000
Subject: [PATCH] net: pse-pd: Add ethtool netlink definitions for PSE events
and priority
GENERATED PATCH - OpenWrt PSE-PD Backport
This patch:
1. Creates include/uapi/linux/ethtool_netlink_generated.h with PSE event
1. Adds ETHTOOL_A_PSE_PW_D_ID, ETHTOOL_A_PSE_PRIO_MAX, ETHTOOL_A_PSE_PRIO to
the ETHTOOL_A_PSE_* enum in ethtool_netlink.h (backported from kernel 6.17+)
2. Creates include/uapi/linux/ethtool_netlink_generated.h with PSE event
definitions (in mainline 6.17+, this file is auto-generated)
2. Adds ETHTOOL_MSG_PSE_NTF to the kernel message types enum
3. Adds ETHTOOL_MSG_PSE_NTF to the kernel message types enum
These definitions are required by PSE event reporting patches.
These definitions are required by PSE event reporting and priority patches.
Signed-off-by: OpenWrt PSE-PD Backport <openwrt@openwrt.org>
Signed-off-by: Carlo Szelinsky <github@szelinsky.de>
---
include/uapi/linux/ethtool_netlink.h | 1 +
include/uapi/linux/ethtool_netlink_generated.h | 45 ++++++++++++++++++
2 files changed, 46 insertions(+)
include/uapi/linux/ethtool_netlink.h | 4 ++
include/uapi/linux/ethtool_netlink_generated.h | 31 ++++++++++++++++++++++++++
2 files changed, 35 insertions(+)
create mode 100644 include/uapi/linux/ethtool_netlink_generated.h
--- a/include/uapi/linux/ethtool_netlink.h
@ -30,31 +33,25 @@ Signed-off-by: Carlo Szelinsky <github@szelinsky.de>
/* add new constants above here */
__ETHTOOL_MSG_KERNEL_CNT,
ETHTOOL_MSG_KERNEL_MAX = __ETHTOOL_MSG_KERNEL_CNT - 1
@@ -970,6 +971,9 @@ enum {
ETHTOOL_A_C33_PSE_EXT_SUBSTATE, /* u32 */
ETHTOOL_A_C33_PSE_AVAIL_PW_LIMIT, /* u32 */
ETHTOOL_A_C33_PSE_PW_LIMIT_RANGES, /* nest - _C33_PSE_PW_LIMIT_* */
+ ETHTOOL_A_PSE_PW_D_ID, /* u32 */
+ ETHTOOL_A_PSE_PRIO_MAX, /* u32 */
+ ETHTOOL_A_PSE_PRIO, /* u32 */
/* add new constants above here */
__ETHTOOL_A_PSE_CNT,
--- /dev/null
+++ b/include/uapi/linux/ethtool_netlink_generated.h
@@ -0,0 +1,45 @@
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
+/*
+ * Minimal PSE ethtool netlink definitions - OpenWrt backport for 6.12.67
+ * In mainline 6.17+, this file is auto-generated from:
+ * Documentation/netlink/specs/ethtool.yaml
+ *
+ * GENERATED PATCH - OpenWrt PSE-PD Backport
+ */
+/* PSE ethtool netlink definitions - OpenWrt backport for 6.12 */
+
+#ifndef _UAPI_LINUX_ETHTOOL_NETLINK_GENERATED_H
+#define _UAPI_LINUX_ETHTOOL_NETLINK_GENERATED_H
+
+/**
+ * enum ethtool_pse_event - PSE event list for the PSE controller
+ * @ETHTOOL_PSE_EVENT_OVER_CURRENT: PSE output current is too high
+ * @ETHTOOL_PSE_EVENT_OVER_TEMP: PSE in over temperature state
+ * @ETHTOOL_C33_PSE_EVENT_DETECTION: detection process occur on the PSE
+ * @ETHTOOL_C33_PSE_EVENT_CLASSIFICATION: classification process occur
+ * @ETHTOOL_C33_PSE_EVENT_DISCONNECTION: PD has been disconnected
+ * @ETHTOOL_PSE_EVENT_OVER_BUDGET: PSE turned off due to over budget
+ * @ETHTOOL_PSE_EVENT_SW_PW_CONTROL_ERROR: PSE power control error
+ */
+enum ethtool_pse_event {
+ ETHTOOL_PSE_EVENT_OVER_CURRENT = 1,
+ ETHTOOL_PSE_EVENT_OVER_TEMP = 2,
@ -65,16 +62,18 @@ Signed-off-by: Carlo Szelinsky <github@szelinsky.de>
+ ETHTOOL_PSE_EVENT_SW_PW_CONTROL_ERROR = 64,
+};
+
+/* PSE notification attributes */
+enum {
+ ETHTOOL_A_PSE_NTF_HEADER = 1,
+ ETHTOOL_A_PSE_NTF_EVENTS,
+
+ __ETHTOOL_A_PSE_NTF_CNT,
+ ETHTOOL_A_PSE_NTF_MAX = (__ETHTOOL_A_PSE_NTF_CNT - 1)
+};
+
+/* PSE power domain ID attribute - value 14 in the ETHTOOL_A_PSE_* enum */
+#define ETHTOOL_A_PSE_PW_D_ID 14
+enum {
+ ETHTOOL_A_PSE_NTF_EVT_UNSPEC,
+ ETHTOOL_A_PSE_NTF_EVT_INDEX,
+ __ETHTOOL_A_PSE_NTF_EVT_CNT,
+ ETHTOOL_A_PSE_NTF_EVT_MAX = (__ETHTOOL_A_PSE_NTF_EVT_CNT - 1)
+};
+
+#endif /* _UAPI_LINUX_ETHTOOL_NETLINK_GENERATED_H */

View file

@ -0,0 +1,68 @@
# ADAPTED FOR OPENWRT 6.12 - Documentation changes removed
# Original commit: eeb0c8f72f49
From eeb0c8f72f49a21984981188404cfd3700edbaff Mon Sep 17 00:00:00 2001
From: "Kory Maincent (Dent Project)" <kory.maincent@bootlin.com>
Date: Tue, 17 Jun 2025 14:12:07 +0200
Subject: [PATCH] net: ethtool: Add PSE port priority support feature
This patch expands the status information provided by ethtool for PSE c33
with current port priority and max port priority. It also adds a call to
pse_ethtool_set_prio() to configure the PSE port priority.
Signed-off-by: Kory Maincent (Dent Project) <kory.maincent@bootlin.com>
Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://patch.msgid.link/20250617-feature_poe_port_prio-v14-8-78a1a645e2ee@bootlin.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Carlo Szelinsky <github@szelinsky.de>
---
net/ethtool/pse-pd.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
--- a/net/ethtool/pse-pd.c
+++ b/net/ethtool/pse-pd.c
@@ -111,6 +111,9 @@ static int pse_reply_size(const struct e
len += st->c33_pw_limit_nb_ranges *
(nla_total_size(0) +
nla_total_size(sizeof(u32)) * 2);
+ if (st->prio_max)
+ /* _PSE_PRIO_MAX + _PSE_PRIO */
+ len += nla_total_size(sizeof(u32)) * 2;
return len;
}
@@ -205,6 +208,11 @@ static int pse_fill_reply(struct sk_buff
pse_put_pw_limit_ranges(skb, st))
return -EMSGSIZE;
+ if (st->prio_max &&
+ (nla_put_u32(skb, ETHTOOL_A_PSE_PRIO_MAX, st->prio_max) ||
+ nla_put_u32(skb, ETHTOOL_A_PSE_PRIO, st->prio)))
+ return -EMSGSIZE;
+
return 0;
}
@@ -226,6 +234,7 @@ const struct nla_policy ethnl_pse_set_po
NLA_POLICY_RANGE(NLA_U32, ETHTOOL_C33_PSE_ADMIN_STATE_DISABLED,
ETHTOOL_C33_PSE_ADMIN_STATE_ENABLED),
[ETHTOOL_A_C33_PSE_AVAIL_PW_LIMIT] = { .type = NLA_U32 },
+ [ETHTOOL_A_PSE_PRIO] = { .type = NLA_U32 },
};
static int
@@ -283,6 +292,15 @@ ethnl_set_pse(struct ethnl_req_info *req
if (ret)
return ret;
}
+
+ if (tb[ETHTOOL_A_PSE_PRIO]) {
+ unsigned int prio;
+
+ prio = nla_get_u32(tb[ETHTOOL_A_PSE_PRIO]);
+ ret = pse_ethtool_set_prio(phydev->psec, info->extack, prio);
+ if (ret)
+ return ret;
+ }
/* These values are already validated by the ethnl_pse_set_policy */
if (tb[ETHTOOL_A_PODL_PSE_ADMIN_CONTROL] ||