[openwrt/openwrt] realtek: pcs: rtl931x: adjust SerDes page numbers

LEDE Commits lede-commits at lists.infradead.org
Sun Oct 19 14:50:29 PDT 2025


hauke pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/a89d8acb5b37a0e83468a2d03158d0ae86972563

commit a89d8acb5b37a0e83468a2d03158d0ae86972563
Author: Jonas Jelonek <jelonek.jonas at gmail.com>
AuthorDate: Fri Oct 10 09:40:26 2025 +0000

    realtek: pcs: rtl931x: adjust SerDes page numbers
    
    Adjust the SerDes page numbers to account for the different mapping used
    by 'mdio-realtek-otto' and 'mdio-realtek-otto-serdes' drivers.
    
    While importing the SerDes configuration code from PHY driver to PCS
    driver, all helper calls to access the SerDes registers had to be
    adjusted to use the proper helpers within the PCS driver. However, there
    is one important implication of this: 'mdio-realtek-otto' and
    'mdio-realtek-otto-serdes' use a slightly different page mapping.
    
    While the old helpers in 'mdio-realtek-otto' used a page mapping of
    0x00/0x100/0x200, 'mdio-realtek-otto-serdes' uses a mapping of
    0x00/0x40/0x80 to provide consumers with the ability to only operate on
    frontend SerDes. Thus, all page numbers > 63/0x3f have to be adjusted
    like the following:
    
    before: rtsds_931x_write_field(sds, 0x101, ...  // old helper calls
    after: rtpcs_sds_write(ctrl, sds, 0x41, ...
    
    Signed-off-by: Jonas Jelonek <jelonek.jonas at gmail.com>
    Link: https://github.com/openwrt/openwrt/pull/20369
    Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
---
 .../files-6.12/drivers/net/pcs/pcs-rtl-otto.c      | 68 +++++++++++-----------
 1 file changed, 34 insertions(+), 34 deletions(-)

diff --git a/target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c b/target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c
index a0340f9dc8..dea6e20eae 100644
--- a/target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c
+++ b/target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c
@@ -212,21 +212,21 @@ static void rtpcs_931x_sds_symerr_clear(struct rtpcs_ctrl *ctrl, u32 sds,
 		break;
 	case PHY_INTERFACE_MODE_XGMII:
 		for (int i = 0; i < 4; ++i) {
-			rtpcs_sds_write_bits(ctrl, sds, 0x101, 24,  2, 0, i);
-			rtpcs_sds_write_bits(ctrl, sds, 0x101,  3, 15, 8, 0x0);
-			rtpcs_sds_write_bits(ctrl, sds, 0x101,  2, 15, 0, 0x0);
+			rtpcs_sds_write_bits(ctrl, sds, 0x41, 24,  2, 0, i);
+			rtpcs_sds_write_bits(ctrl, sds, 0x41,  3, 15, 8, 0x0);
+			rtpcs_sds_write_bits(ctrl, sds, 0x41,  2, 15, 0, 0x0);
 		}
 
 		for (int i = 0; i < 4; ++i) {
-			rtpcs_sds_write_bits(ctrl, sds, 0x201, 24,  2, 0, i);
-			rtpcs_sds_write_bits(ctrl, sds, 0x201,  3, 15, 8, 0x0);
-			rtpcs_sds_write_bits(ctrl, sds, 0x201,  2, 15, 0, 0x0);
+			rtpcs_sds_write_bits(ctrl, sds, 0x81, 24,  2, 0, i);
+			rtpcs_sds_write_bits(ctrl, sds, 0x81,  3, 15, 8, 0x0);
+			rtpcs_sds_write_bits(ctrl, sds, 0x81,  2, 15, 0, 0x0);
 		}
 
-		rtpcs_sds_write_bits(ctrl, sds, 0x101, 0, 15, 0, 0x0);
-		rtpcs_sds_write_bits(ctrl, sds, 0x101, 1, 15, 8, 0x0);
-		rtpcs_sds_write_bits(ctrl, sds, 0x201, 0, 15, 0, 0x0);
-		rtpcs_sds_write_bits(ctrl, sds, 0x201, 1, 15, 8, 0x0);
+		rtpcs_sds_write_bits(ctrl, sds, 0x41, 0, 15, 0, 0x0);
+		rtpcs_sds_write_bits(ctrl, sds, 0x41, 1, 15, 8, 0x0);
+		rtpcs_sds_write_bits(ctrl, sds, 0x81, 0, 15, 0, 0x0);
+		rtpcs_sds_write_bits(ctrl, sds, 0x81, 1, 15, 8, 0x0);
 		break;
 	default:
 		break;
@@ -492,15 +492,15 @@ static int rtpcs_931x_sds_link_sts_get(struct rtpcs_ctrl *ctrl, u32 sds)
 {
 	u32 sts, sts1, latch_sts, latch_sts1;
 	if (0){
-		sts = rtpcs_sds_read_bits(ctrl, sds, 0x101, 29, 8, 0);
-		sts1 = rtpcs_sds_read_bits(ctrl, sds, 0x201, 29, 8, 0);
-		latch_sts = rtpcs_sds_read_bits(ctrl, sds, 0x101, 30, 8, 0);
-		latch_sts1 = rtpcs_sds_read_bits(ctrl, sds, 0x201, 30, 8, 0);
+		sts = rtpcs_sds_read_bits(ctrl, sds, 0x41, 29, 8, 0);
+		sts1 = rtpcs_sds_read_bits(ctrl, sds, 0x81, 29, 8, 0);
+		latch_sts = rtpcs_sds_read_bits(ctrl, sds, 0x41, 30, 8, 0);
+		latch_sts1 = rtpcs_sds_read_bits(ctrl, sds, 0x81, 30, 8, 0);
 	} else {
 		sts = rtpcs_sds_read_bits(ctrl, sds, 0x5, 0, 12, 12);
 		latch_sts = rtpcs_sds_read_bits(ctrl, sds, 0x4, 1, 2, 2);
-		latch_sts1 = rtpcs_sds_read_bits(ctrl, sds, 0x102, 1, 2, 2);
-		sts1 = rtpcs_sds_read_bits(ctrl, sds, 0x102, 1, 2, 2);
+		latch_sts1 = rtpcs_sds_read_bits(ctrl, sds, 0x42, 1, 2, 2);
+		sts1 = rtpcs_sds_read_bits(ctrl, sds, 0x42, 1, 2, 2);
 	}
 
 	pr_info("%s: serdes %d sts %d, sts1 %d, latch_sts %d, latch_sts1 %d\n", __func__,
@@ -568,8 +568,8 @@ static int rtpcs_931x_setup_serdes(struct rtpcs_ctrl *ctrl, int sds,
 	pr_info("%s CMU page 0x24 0x7 %08x\n", __func__, rtpcs_sds_read(ctrl, sds, 0x24, 0x7));
 	pr_info("%s CMU page 0x26 0x7 %08x\n", __func__, rtpcs_sds_read(ctrl, sds, 0x26, 0x7));
 	pr_info("%s CMU page 0x28 0x7 %08x\n", __func__, rtpcs_sds_read(ctrl, sds, 0x28, 0x7));
-	pr_info("%s XSG page 0x0 0xe %08x\n", __func__, rtpcs_sds_read(ctrl, sds, 0x100, 0xe));
-	pr_info("%s XSG2 page 0x0 0xe %08x\n", __func__, rtpcs_sds_read(ctrl, sds, 0x200, 0xe));
+	pr_info("%s XSG page 0x0 0xe %08x\n", __func__, rtpcs_sds_read(ctrl, sds, 0x40, 0xe));
+	pr_info("%s XSG2 page 0x0 0xe %08x\n", __func__, rtpcs_sds_read(ctrl, sds, 0x80, 0xe));
 
 	regmap_read(ctrl->map, RTL93XX_MODEL_NAME_INFO, &model_info);
 	if ((model_info >> 4) & 0x1) {
@@ -580,7 +580,7 @@ static int rtpcs_931x_setup_serdes(struct rtpcs_ctrl *ctrl, int sds,
 	}
 
 	pr_info("%s: 2.5gbit %08X", __func__,
-	        rtpcs_sds_read(ctrl, sds, 0x101, 0x14));
+	        rtpcs_sds_read(ctrl, sds, 0x41, 0x14));
 
 	regmap_read(ctrl->map, RTL931X_PS_SERDES_OFF_MODE_CTRL_ADDR, &ori);
 	pr_info("%s: RTL931X_PS_SERDES_OFF_MODE_CTRL_ADDR 0x%08X\n", __func__, ori);
@@ -598,16 +598,16 @@ static int rtpcs_931x_setup_serdes(struct rtpcs_ctrl *ctrl, int sds,
 
 		if (chiptype) {
 			/* fifo inv clk */
-			rtpcs_sds_write_bits(ctrl, sds, 0x101, 0x1, 7, 4, 0xf);
-			rtpcs_sds_write_bits(ctrl, sds, 0x101, 0x1, 3, 0, 0xf);
+			rtpcs_sds_write_bits(ctrl, sds, 0x41, 0x1, 7, 4, 0xf);
+			rtpcs_sds_write_bits(ctrl, sds, 0x41, 0x1, 3, 0, 0xf);
 
-			rtpcs_sds_write_bits(ctrl, sds, 0x201, 0x1, 7, 4, 0xf);
-			rtpcs_sds_write_bits(ctrl, sds, 0x201, 0x1, 3, 0, 0xf);
+			rtpcs_sds_write_bits(ctrl, sds, 0x81, 0x1, 7, 4, 0xf);
+			rtpcs_sds_write_bits(ctrl, sds, 0x81, 0x1, 3, 0, 0xf);
 
 		}
 
-		rtpcs_sds_write_bits(ctrl, sds, 0x100, 0xE, 12, 12, 1);
-		rtpcs_sds_write_bits(ctrl, sds, 0x200, 0xE, 12, 12, 1);
+		rtpcs_sds_write_bits(ctrl, sds, 0x40, 0xE, 12, 12, 1);
+		rtpcs_sds_write_bits(ctrl, sds, 0x80, 0xE, 12, 12, 1);
 		break;
 
 	case PHY_INTERFACE_MODE_USXGMII: /* MII_USXGMII_10GSXGMII/10GDXGMII/10GQXGMII: */
@@ -661,11 +661,11 @@ static int rtpcs_931x_setup_serdes(struct rtpcs_ctrl *ctrl, int sds,
 		rtpcs_sds_write_bits(ctrl, sds, 0x1f, 0xb, 1, 1, 1);
 
 		/* init fiber_1g */
-		rtpcs_sds_write_bits(ctrl, sds, 0x103, 0x13, 15, 14, 0);
+		rtpcs_sds_write_bits(ctrl, sds, 0x43, 0x13, 15, 14, 0);
 
-		rtpcs_sds_write_bits(ctrl, sds, 0x102, 0x0, 12, 12, 1);
-		rtpcs_sds_write_bits(ctrl, sds, 0x102, 0x0, 6, 6, 1);
-		rtpcs_sds_write_bits(ctrl, sds, 0x102, 0x0, 13, 13, 0);
+		rtpcs_sds_write_bits(ctrl, sds, 0x42, 0x0, 12, 12, 1);
+		rtpcs_sds_write_bits(ctrl, sds, 0x42, 0x0, 6, 6, 1);
+		rtpcs_sds_write_bits(ctrl, sds, 0x42, 0x0, 13, 13, 0);
 
 		/* init auto */
 		rtpcs_sds_write_bits(ctrl, sds, 0x1f, 13, 15, 0, 0x109e);
@@ -674,11 +674,11 @@ static int rtpcs_931x_setup_serdes(struct rtpcs_ctrl *ctrl, int sds,
 		break;
 
 	case PHY_INTERFACE_MODE_1000BASEX: /* MII_1000BX_FIBER */
-		rtpcs_sds_write_bits(ctrl, sds, 0x103, 0x13, 15, 14, 0);
+		rtpcs_sds_write_bits(ctrl, sds, 0x43, 0x13, 15, 14, 0);
 
-		rtpcs_sds_write_bits(ctrl, sds, 0x102, 0x0, 12, 12, 1);
-		rtpcs_sds_write_bits(ctrl, sds, 0x102, 0x0, 6, 6, 1);
-		rtpcs_sds_write_bits(ctrl, sds, 0x102, 0x0, 13, 13, 0);
+		rtpcs_sds_write_bits(ctrl, sds, 0x42, 0x0, 12, 12, 1);
+		rtpcs_sds_write_bits(ctrl, sds, 0x42, 0x0, 6, 6, 1);
+		rtpcs_sds_write_bits(ctrl, sds, 0x42, 0x0, 13, 13, 0);
 		break;
 
 	case PHY_INTERFACE_MODE_SGMII:
@@ -689,7 +689,7 @@ static int rtpcs_931x_setup_serdes(struct rtpcs_ctrl *ctrl, int sds,
 		break;
 
 	case PHY_INTERFACE_MODE_2500BASEX:
-		rtpcs_sds_write_bits(ctrl, sds, 0x101, 0x14, 8, 8, 1);
+		rtpcs_sds_write_bits(ctrl, sds, 0x41, 0x14, 8, 8, 1);
 		break;
 
 	case PHY_INTERFACE_MODE_QSGMII:




More information about the lede-commits mailing list