realtek: pcs: rtl931x: quit setup_serdes early on USXGMII mode
authorJonas Jelonek <[email protected]>
Wed, 8 Oct 2025 19:44:31 +0000 (19:44 +0000)
committerHauke Mehrtens <[email protected]>
Sun, 19 Oct 2025 21:49:56 +0000 (23:49 +0200)
In rtpcs_931x_setup_serdes, quit early on USXGMII mode. This restores
the behaviour introduced in c18476d0c5 to prevent the current buggy
procedure to destroy a working configuration established by U-Boot
before.

Also include the valuable comment from the code to keep the information.

Signed-off-by: Jonas Jelonek <[email protected]>
Link: https://github.com/openwrt/openwrt/pull/20369
Signed-off-by: Hauke Mehrtens <[email protected]>
target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c

index dea6e20eae0add751ae34ee82adb1f21a6770675..8cb0c03e641a1bdde37ee7312abd0c265d98a86c 100644 (file)
@@ -555,6 +555,18 @@ static int rtpcs_931x_setup_serdes(struct rtpcs_ctrl *ctrl, int sds,
        if (sds < 0 || sds > 13)
                return -EINVAL;
 
+       /*
+        * TODO: USXGMII is currently the swiss army knife to declare 10G
+        * multi port PHYs. Real devices use other modes instead. Especially
+        *
+        * - RTL8224 is driven in 10G_QXGMII
+        * - RTL8218D/E are driven in (Realtek proprietary) XSGMII (10G SGMII)
+        *
+        * For now disable all USXGMII SerDes handling and rely on U-Boot setup.
+        */
+       if (mode == PHY_INTERFACE_MODE_USXGMII)
+               return -ENOTSUPP;
+
        pr_info("%s: set sds %d to mode %d\n", __func__, sds, mode);
        val = rtpcs_sds_read_bits(ctrl, sds, 0x1F, 0x9, 11, 6);