[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