]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: pcs: rtl931x: add 2500Base-X mode
authorJonas Jelonek <jelonek.jonas@gmail.com>
Tue, 10 Feb 2026 13:52:20 +0000 (13:52 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 14 Feb 2026 19:40:40 +0000 (20:40 +0100)
Add 2500Base-X handling to mode setting which was rejected with
-ENOTSUPP before. SDK code available to us doesn't have the proper mode
value. Though by brute-forcing different mode values, 0x2d was found to
make a 2500Base-X link work.

This was tested with an otherwise correctly configured RTL8221B PHY
which is automatically switched between 2500Base-X and SGMII in the
upstream driver. Though, since there was a previous U-Boot setup for the
PHY in HISGMII mode, it may not be standalone yet.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22014
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c

index 713abf68b9ceb08744eaf1123a21831ce5e98d91..d72477ab0b1d34d100103c20f74d3d58284a03c8 100644 (file)
@@ -3148,6 +3148,13 @@ static int rtpcs_931x_sds_set_ip_mode(struct rtpcs_serdes *sds,
                mode_val = 0x9;
                break;
 
+       case RTPCS_SDS_MODE_2500BASEX:
+               /* available SDK code doesn't have this value. based on brute-forcing
+                * the SerDes mode register field until the link is working
+                */
+               mode_val = 0x2d;
+               break;
+
        case RTPCS_SDS_MODE_10GBASER:
                mode_val = 0x35;
                break;