[openwrt/openwrt] realtek: mdio: Simplify backing SerDes calculation

LEDE Commits lede-commits at lists.infradead.org
Thu Sep 18 01:44:40 PDT 2025


robimarko pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/bb783e8548c5e44edcb285393e54c7cd06fd455a

commit bb783e8548c5e44edcb285393e54c7cd06fd455a
Author: Markus Stockhausen <markus.stockhausen at gmx.de>
AuthorDate: Thu Sep 18 01:53:22 2025 -0400

    realtek: mdio: Simplify backing SerDes calculation
    
    No need two write a dedicated 1:1 mapping function and link that
    for all the targets except RTL931x. Combine everything into a generic
    helper and reduce the configuration structure.
    
    Signed-off-by: Markus Stockhausen <markus.stockhausen at gmx.de>
    Link: https://github.com/openwrt/openwrt/pull/20078
    Signed-off-by: Robert Marko <robimarko at gmail.com>
---
 .../drivers/net/mdio/mdio-realtek-otto-serdes.c    | 44 +++++++++-------------
 1 file changed, 18 insertions(+), 26 deletions(-)

diff --git a/target/linux/realtek/files-6.12/drivers/net/mdio/mdio-realtek-otto-serdes.c b/target/linux/realtek/files-6.12/drivers/net/mdio/mdio-realtek-otto-serdes.c
index 441a620b46..12d5166856 100644
--- a/target/linux/realtek/files-6.12/drivers/net/mdio/mdio-realtek-otto-serdes.c
+++ b/target/linux/realtek/files-6.12/drivers/net/mdio/mdio-realtek-otto-serdes.c
@@ -54,7 +54,6 @@ struct rtsds_config {
 	int base;
 	int (*read)(struct rtsds_ctrl *ctrl, int sds, int page, int regnum);
 	int (*write)(struct rtsds_ctrl *ctrl, int sds, int page, int regnum, u16 value);
-	int (*backing_sds)(int sds, int page);
 };
 
 static bool rtsds_mmd_to_sds(struct rtsds_ctrl *ctrl, int addr, int devad, int mmd_regnum,
@@ -69,10 +68,22 @@ static bool rtsds_mmd_to_sds(struct rtsds_ctrl *ctrl, int addr, int devad, int m
 		 devad != MDIO_MMD_VEND1);
 }
 
-static int rtsds_get_backing_sds(int sds, int page)
+static int rtsds_get_backing_sds(struct rtsds_ctrl *ctrl, int sds, int page)
 {
-	/* non RTL931x devices have 1:1 frontend/backend mapping */
-	return sds;
+	int map[] = { 0, 1, 2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23 };
+	int backsds;
+
+	/* non-RTL931x and first two RTL931x SerDes have 1:1 frontend/backend mapping */
+	if (ctrl->cfg->base != RTSDS_931X_BASE || sds < 2)
+		return sds;
+
+	backsds = map[sds];
+	if (sds & 1)
+		backsds += (page >> 6); /* distribute "odd" to 3 background SerDes */
+	else
+		backsds += (page >> 7); /* distribute "even" to 2 background SerDes */
+
+	return backsds;
 }
 
 #ifdef CONFIG_DEBUG_FS
@@ -126,7 +137,7 @@ static int rtsds_dbg_registers_show(struct seq_file *seqf, void *unused)
 	do {
 		subpage = RTSDS_SUBPAGE(page);
 		if (!subpage) {
-			seq_printf(seqf, "Back SDS %02d:", ctrl->cfg->backing_sds(sds, page));
+			seq_printf(seqf, "Back SDS %02d:", rtsds_get_backing_sds(ctrl, sds, page));
 			for (regnum = 0; regnum < RTSDS_REG_CNT; regnum++)
 				seq_printf(seqf, "   %02X", regnum);
 			seq_puts(seqf, "\n");
@@ -332,21 +343,6 @@ static int rtsds_839x_write(struct rtsds_ctrl *ctrl, int sds, int page, int regn
  * page 0x80-0xbf (digi 2):	page 0x00-0x3f back SDS+1	page 0x00-0x3f back SDS+2
  */
 
-static int rtsds_931x_get_backing_sds(int sds, int page)
-{
-	int map[] = { 0, 1, 2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23 };
-	int backsds = map[sds];
-
-	if (sds < 2)
-		return backsds;
-	else if (sds & 1)
-		backsds += (page >> 6); /* distribute "odd" to 3 background SerDes */
-	else
-		backsds += (page >> 7); /* distribute "even" to 2 background SerDes */
-
-	return backsds;
-}
-
 static int rtsds_rt93xx_io(struct rtsds_ctrl *ctrl, int sds, int page, int regnum, int cmd)
 {
 	int ret, op, value;
@@ -373,7 +369,7 @@ static int rtsds_93xx_read(struct rtsds_ctrl *ctrl, int sds, int page, int regnu
 	int subpage = RTSDS_SUBPAGE(page);
 	int ret, backsds, value;
 
-	backsds = ctrl->cfg->backing_sds(sds, page);
+	backsds = rtsds_get_backing_sds(ctrl, sds, page);
 	ret = rtsds_rt93xx_io(ctrl, backsds, subpage, regnum, RTSDS_93XX_CMD_READ);
 	if (ret)
 		return ret;
@@ -388,7 +384,7 @@ static int rtsds_93xx_write(struct rtsds_ctrl *ctrl, int sds, int page, int regn
 	int subpage = RTSDS_SUBPAGE(page);
 	int ret, backsds;
 
-	backsds = ctrl->cfg->backing_sds(sds, page);
+	backsds = rtsds_get_backing_sds(ctrl, sds, page);
 	ret = regmap_write(ctrl->map, ctrl->cfg->base + 4, value);
 	if (ret)
 		return ret;
@@ -467,7 +463,6 @@ static const struct rtsds_config rtsds_838x_cfg = {
 	.base		= RTSDS_838X_BASE,
 	.read		= rtsds_838x_read,
 	.write		= rtsds_838x_write,
-	.backing_sds	= rtsds_get_backing_sds,
 };
 
 static const struct rtsds_config rtsds_839x_cfg = {
@@ -476,7 +471,6 @@ static const struct rtsds_config rtsds_839x_cfg = {
 	.base		= RTSDS_839X_BASE,
 	.read		= rtsds_839x_read,
 	.write		= rtsds_839x_write,
-	.backing_sds	= rtsds_get_backing_sds,
 };
 
 static const struct rtsds_config rtsds_930x_cfg = {
@@ -485,7 +479,6 @@ static const struct rtsds_config rtsds_930x_cfg = {
 	.base		= RTSDS_930X_BASE,
 	.read		= rtsds_93xx_read,
 	.write		= rtsds_93xx_write,
-	.backing_sds	= rtsds_get_backing_sds,
 };
 
 static const struct rtsds_config rtsds_931x_cfg = {
@@ -494,7 +487,6 @@ static const struct rtsds_config rtsds_931x_cfg = {
 	.base		= RTSDS_931X_BASE,
 	.read		= rtsds_93xx_read,
 	.write		= rtsds_93xx_write,
-	.backing_sds	= rtsds_931x_get_backing_sds,
 };
 
 static const struct of_device_id rtsds_of_match[] = {




More information about the lede-commits mailing list