From 6aaffddf27066c87026a270e397cf078c38442b3 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Mon, 5 Jan 2026 18:12:40 +0000 Subject: [PATCH] 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 --- ...altek-mark-existing-MMDs-as-present.patch} | 2 +- ...-phy-realtek-disable-MDIO-broadcast.patch} | 4 +-- ...phy-realtek-rate-adapter-in-C22-mode.patch | 22 ++++++++++++ ...support-interrupt-also-for-C22-varia.patch | 34 +++++++++++++++++++ 4 files changed, 59 insertions(+), 3 deletions(-) rename target/linux/generic/pending-6.12/{720-07-net-phy-realtek-mark-existing-MMDs-as-present.patch => 720-06-net-phy-realtek-mark-existing-MMDs-as-present.patch} (93%) rename target/linux/generic/pending-6.12/{720-09-net-phy-realtek-disable-MDIO-broadcast.patch => 720-07-net-phy-realtek-disable-MDIO-broadcast.patch} (93%) create mode 100644 target/linux/generic/pending-6.12/720-08-net-phy-realtek-rate-adapter-in-C22-mode.patch create mode 100644 target/linux/generic/pending-6.12/720-09-net-phy-realtek-support-interrupt-also-for-C22-varia.patch 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 12663d334b7..9f3ebe1b0a3 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 --- 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 e990bcc6feb..877adc8c718 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 --- --- 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 #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 00000000000..c34d5e1e859 --- /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 +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 +--- 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 00000000000..af1ecbfb8e9 --- /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 +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 +--- + 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, -- 2.47.3