[openwrt/openwrt] kernel: net: phy: realtek: fix C22-only mode on 2.5GE PHYs

LEDE Commits lede-commits at lists.infradead.org
Tue Jan 6 17:31:43 PST 2026


dangole pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/6aaffddf27066c87026a270e397cf078c38442b3

commit 6aaffddf27066c87026a270e397cf078c38442b3
Author: Daniel Golle <daniel at makrotopia.org>
AuthorDate: Mon Jan 5 18:12:40 2026 +0000

    kernel: net: phy: realtek: fix C22-only mode on 2.5GE PHYs
    
    Import 2 patches completing and fixing the RealTek's 2.5GE PHYs when being
    used in Clause-22 mode.
    
    Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 ...hy-realtek-mark-existing-MMDs-as-present.patch} |  2 +-
 ...7-net-phy-realtek-disable-MDIO-broadcast.patch} |  4 +--
 ...-net-phy-realtek-rate-adapter-in-C22-mode.patch | 22 ++++++++++++++
 ...ltek-support-interrupt-also-for-C22-varia.patch | 34 ++++++++++++++++++++++
 4 files changed, 59 insertions(+), 3 deletions(-)

diff --git a/target/linux/generic/pending-6.12/720-07-net-phy-realtek-mark-existing-MMDs-as-present.patch b/target/linux/generic/pending-6.12/720-06-net-phy-realtek-mark-existing-MMDs-as-present.patch
similarity index 93%
rename from target/linux/generic/pending-6.12/720-07-net-phy-realtek-mark-existing-MMDs-as-present.patch
rename to target/linux/generic/pending-6.12/720-06-net-phy-realtek-mark-existing-MMDs-as-present.patch
index 12663d334b..9f3ebe1b0a 100644
--- a/target/linux/generic/pending-6.12/720-07-net-phy-realtek-mark-existing-MMDs-as-present.patch
+++ b/target/linux/generic/pending-6.12/720-06-net-phy-realtek-mark-existing-MMDs-as-present.patch
@@ -15,7 +15,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
 
 --- a/drivers/net/phy/realtek/realtek_main.c
 +++ b/drivers/net/phy/realtek/realtek_main.c
-@@ -1626,6 +1626,9 @@ static int rtl822x_c45_get_features(stru
+@@ -1595,6 +1595,9 @@ static int rtl822x_c45_get_features(stru
  	linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT,
  			 phydev->supported);
  
diff --git a/target/linux/generic/pending-6.12/720-09-net-phy-realtek-disable-MDIO-broadcast.patch b/target/linux/generic/pending-6.12/720-07-net-phy-realtek-disable-MDIO-broadcast.patch
similarity index 93%
rename from target/linux/generic/pending-6.12/720-09-net-phy-realtek-disable-MDIO-broadcast.patch
rename to target/linux/generic/pending-6.12/720-07-net-phy-realtek-disable-MDIO-broadcast.patch
index e990bcc6fe..877adc8c71 100644
--- a/target/linux/generic/pending-6.12/720-09-net-phy-realtek-disable-MDIO-broadcast.patch
+++ b/target/linux/generic/pending-6.12/720-07-net-phy-realtek-disable-MDIO-broadcast.patch
@@ -13,7 +13,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
 ---
 --- a/drivers/net/phy/realtek/realtek_main.c
 +++ b/drivers/net/phy/realtek/realtek_main.c
-@@ -174,6 +174,7 @@
+@@ -173,6 +173,7 @@
  #define RTL8221B_PHYCR1				0xa430
  #define RTL8221B_PHYCR1_ALDPS_EN		BIT(2)
  #define RTL8221B_PHYCR1_ALDPS_XTAL_OFF_EN	BIT(12)
@@ -21,7 +21,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
  
  #define RTL8366RB_POWER_SAVE			0x15
  #define RTL8366RB_POWER_SAVE_ON			BIT(12)
-@@ -1381,7 +1382,8 @@ static int rtl822x_init_phycr1(struct ph
+@@ -1350,7 +1351,8 @@ static int rtl822x_init_phycr1(struct ph
  
  	return phy_modify_mmd_changed(phydev, MDIO_MMD_VEND2, RTL8221B_PHYCR1,
  				      RTL8221B_PHYCR1_ALDPS_EN |
diff --git a/target/linux/generic/pending-6.12/720-08-net-phy-realtek-rate-adapter-in-C22-mode.patch b/target/linux/generic/pending-6.12/720-08-net-phy-realtek-rate-adapter-in-C22-mode.patch
new file mode 100644
index 0000000000..c34d5e1e85
--- /dev/null
+++ b/target/linux/generic/pending-6.12/720-08-net-phy-realtek-rate-adapter-in-C22-mode.patch
@@ -0,0 +1,22 @@
+From: Daniel Golle <daniel at makrotopia.org>
+Date: Mon, 5 Jan 2026 17:55:02 +0000
+Subject: [PATCH] net: phy: realtek: rate-adapter in C22 mode
+
+Use rate-adapter mode in case the PHY is connected to the host using
+Clause-22 MDIO.
+
+This is necessary because phylink only handles dynamically switching the
+interface mode if the PHY is connected using Clause-45 MDIO.
+
+Signed-off-by: Daniel Golle <daniel at makrotopia.org>
+--- a/drivers/net/phy/realtek/realtek_main.c
++++ b/drivers/net/phy/realtek/realtek_main.c
+@@ -1379,7 +1379,7 @@ static int rtl822x_set_serdes_option_mod
+ 		return 0;
+ 
+ 	/* determine SerDes option mode */
+-	if (has_2500 && !has_sgmii) {
++	if (has_2500 && (!has_sgmii || !phydev->is_c45)) {
+ 		mode = RTL822X_VND1_SERDES_OPTION_MODE_2500BASEX;
+ 		phydev->rate_matching = RATE_MATCH_PAUSE;
+ 	} else {
diff --git a/target/linux/generic/pending-6.12/720-09-net-phy-realtek-support-interrupt-also-for-C22-varia.patch b/target/linux/generic/pending-6.12/720-09-net-phy-realtek-support-interrupt-also-for-C22-varia.patch
new file mode 100644
index 0000000000..af1ecbfb8e
--- /dev/null
+++ b/target/linux/generic/pending-6.12/720-09-net-phy-realtek-support-interrupt-also-for-C22-varia.patch
@@ -0,0 +1,34 @@
+From 98a5d7606b7bc9136205969418385e4c9bf8ce56 Mon Sep 17 00:00:00 2001
+From: Daniel Golle <daniel at makrotopia.org>
+Date: Mon, 5 Jan 2026 16:59:06 +0000
+Subject: [PATCH] net: phy: realtek: support interrupt also for C22 variants
+
+Now that access to MDIO_MMD_VEND2 works transparently also in Clause-22
+mode, add interrupt support also for the C22 variants of the
+RTL8221B-VB-CG and RTL8221B-VM-CG.
+
+Signed-off-by: Daniel Golle <daniel at makrotopia.org>
+---
+ drivers/net/phy/realtek/realtek_main.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/net/phy/realtek/realtek_main.c
++++ b/drivers/net/phy/realtek/realtek_main.c
+@@ -2347,6 +2347,8 @@ static struct phy_driver realtek_drvs[]
+ 	}, {
+ 		.match_phy_device = rtl8221b_vb_cg_c22_match_phy_device,
+ 		.name           = "RTL8221B-VB-CG 2.5Gbps PHY (C22)",
++		.config_intr	= rtl8221b_config_intr,
++		.handle_interrupt = rtl8221b_handle_interrupt,
+ 		.soft_reset     = genphy_soft_reset,
+ 		.probe		= rtl822x_probe,
+ 		.get_features   = rtl822x_get_features,
+@@ -2381,6 +2383,8 @@ static struct phy_driver realtek_drvs[]
+ 	}, {
+ 		.match_phy_device = rtl8221b_vm_cg_c22_match_phy_device,
+ 		.name           = "RTL8221B-VM-CG 2.5Gbps PHY (C22)",
++		.config_intr	= rtl8221b_config_intr,
++		.handle_interrupt = rtl8221b_handle_interrupt,
+ 		.soft_reset     = genphy_soft_reset,
+ 		.probe		= rtl822x_probe,
+ 		.get_features   = rtl822x_get_features,




More information about the lede-commits mailing list