]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: pcs: rtl931x: fix SerDes link status reading 22014/head
authorJonas Jelonek <jelonek.jonas@gmail.com>
Tue, 10 Feb 2026 13:56:27 +0000 (13:56 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 14 Feb 2026 19:40:40 +0000 (20:40 +0100)
Fix the function for reading the SerDes link status to work correctly
based on the code the SDK uses. This is mostly for the sake of
documentation and quick access to the information. The function isn't
used currently but may be in the future, thus no functional change here.

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 d72477ab0b1d34d100103c20f74d3d58284a03c8..a13b591af899f047d3b60a60da9a8da263d63cff 100644 (file)
@@ -3386,12 +3386,22 @@ static int rtpcs_931x_sds_link_sts_get(struct rtpcs_serdes *sds)
 {
        u32 sts, sts1, latch_sts, latch_sts1;
 
-       if (0) {
+       switch (sds->hw_mode) {
+       case RTPCS_SDS_MODE_XSGMII:
                sts = rtpcs_sds_read_bits(sds, 0x41, 29, 8, 0);
                sts1 = rtpcs_sds_read_bits(sds, 0x81, 29, 8, 0);
                latch_sts = rtpcs_sds_read_bits(sds, 0x41, 30, 8, 0);
                latch_sts1 = rtpcs_sds_read_bits(sds, 0x81, 30, 8, 0);
-       } else {
+               break;
+
+       case RTPCS_SDS_MODE_SGMII:
+       case RTPCS_SDS_MODE_HISGMII:
+       case RTPCS_SDS_MODE_2500BASEX:
+               sts = rtpcs_sds_read_bits(sds, 0x41, 29, 8, 0);
+               latch_sts = rtpcs_sds_read_bits(sds, 0x41, 30, 8, 0);
+               break;
+
+       default:
                sts = rtpcs_sds_read_bits(sds, 0x5, 0, 12, 12);
                latch_sts = rtpcs_sds_read_bits(sds, 0x4, 1, 2, 2);
                latch_sts1 = rtpcs_sds_read_bits(sds, 0x42, 1, 2, 2);