]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: mdio: move command data into config structure
authorMarkus Stockhausen <markus.stockhausen@gmx.de>
Mon, 27 Apr 2026 16:58:59 +0000 (18:58 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Fri, 1 May 2026 10:14:50 +0000 (12:14 +0200)
Until now the device specific I/O helpers are instrumented by individual
call parameters. Move this information over to the configuration structure.
This simplifies the code at the calling locations.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/23092
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
target/linux/realtek/files-6.18/drivers/net/mdio/mdio-realtek-otto.c

index 72778b107aa3021175ccb1e4bfcac4d0b4720eec..23fa32ad7d98bd555faaa17936463d15bd781d6f 100644 (file)
@@ -205,6 +205,9 @@ struct rtmdio_chan {
 struct rtmdio_config {
        int num_phys;
        int raw_page;
+       u32 cmd_fail;
+       u32 cmd_mask;
+       u32 cmd_reg;
        int bus_map_base;
        int port_map_base;
        int (*read_mmd_phy)(struct mii_bus *bus, u32 pn, u32 devnum, u32 regnum, u32 *val);
@@ -272,16 +275,21 @@ static int rtmdio_phy_to_port(struct mii_bus *bus, int phy)
        return -ENOENT;
 }
 
-static int rtmdio_run_cmd(struct mii_bus *bus, int cmd, int mask, int regnum, int fail)
+static int rtmdio_run_cmd(struct mii_bus *bus, int cmd)
 {
        struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int ret, val;
 
-       ret = regmap_update_bits(ctrl->map, regnum, mask, cmd | RTMDIO_RUN);
-       ret = regmap_read_poll_timeout(ctrl->map, regnum, val, !(val & RTMDIO_RUN), 20, 500000);
+       ret = regmap_update_bits(ctrl->map, ctrl->cfg->cmd_reg,
+                                ctrl->cfg->cmd_mask, cmd | RTMDIO_RUN);
+       if (ret)
+               return ret;
+
+       ret = regmap_read_poll_timeout(ctrl->map, ctrl->cfg->cmd_reg,
+                                      val, !(val & RTMDIO_RUN), 20, 500000);
        if (ret)
                dev_warn_once(&bus->dev, "access timed out\n");
-       else if (val & fail) {
+       else if (val & ctrl->cfg->cmd_fail) {
                dev_warn_once(&bus->dev, "access failed\n");
                ret = -EIO;
        }
@@ -300,8 +308,7 @@ static int rtmdio_838x_run_cmd(struct mii_bus *bus, int cmd,
        if (ret)
                return ret;
 
-       ret = rtmdio_run_cmd(bus, cmd, RTMDIO_838X_CMD_MASK,
-                            RTMDIO_838X_SMI_ACCESS_PHY_CTRL_1, RTMDIO_838X_CMD_FAIL);
+       ret = rtmdio_run_cmd(bus, cmd);
        if (ret || !val)
                return ret;
 
@@ -367,8 +374,7 @@ static int rtmdio_839x_run_cmd(struct mii_bus *bus, int cmd,
        if (ret)
                return ret;
 
-       ret = rtmdio_run_cmd(bus, cmd, RTMDIO_839X_CMD_MASK,
-                            RTMDIO_839X_PHYREG_ACCESS_CTRL, RTMDIO_839X_CMD_FAIL);
+       ret = rtmdio_run_cmd(bus, cmd);
        if (ret || !val)
                return ret;
 
@@ -436,8 +442,7 @@ static int rtmdio_930x_run_cmd(struct mii_bus *bus, int cmd,
        if (ret)
                return ret;
 
-       ret = rtmdio_run_cmd(bus, cmd, RTMDIO_930X_CMD_MASK,
-                            RTMDIO_930X_SMI_ACCESS_PHY_CTRL_1, RTMDIO_930X_CMD_FAIL);
+       ret = rtmdio_run_cmd(bus, cmd);
        if (ret || !val)
                return ret;
 
@@ -501,8 +506,7 @@ static int rtmdio_931x_run_cmd(struct mii_bus *bus, int cmd,
        if (ret)
                return ret;
 
-       ret = rtmdio_run_cmd(bus, cmd, RTMDIO_931X_CMD_MASK,
-                            RTMDIO_931X_SMI_INDRT_ACCESS_CTRL_0, RTMDIO_931X_CMD_FAIL);
+       ret = rtmdio_run_cmd(bus, cmd);
        if (ret || !val)
                return ret;
 
@@ -1027,6 +1031,9 @@ static int rtmdio_probe(struct platform_device *pdev)
 static const struct rtmdio_config rtmdio_838x_cfg = {
        .num_phys       = 28,
        .raw_page       = 4095,
+       .cmd_fail       = RTMDIO_838X_CMD_FAIL,
+       .cmd_mask       = RTMDIO_838X_CMD_MASK,
+       .cmd_reg        = RTMDIO_838X_SMI_ACCESS_PHY_CTRL_1,
        .port_map_base  = RTMDIO_838X_SMI_PORT0_5_ADDR_CTRL,
        .read_mmd_phy   = rtmdio_838x_read_mmd_phy,
        .read_phy       = rtmdio_838x_read_phy,
@@ -1039,6 +1046,9 @@ static const struct rtmdio_config rtmdio_838x_cfg = {
 static const struct rtmdio_config rtmdio_839x_cfg = {
        .num_phys       = 52,
        .raw_page       = 8191,
+       .cmd_fail       = RTMDIO_839X_CMD_FAIL,
+       .cmd_mask       = RTMDIO_839X_CMD_MASK,
+       .cmd_reg        = RTMDIO_839X_PHYREG_ACCESS_CTRL,
        .read_mmd_phy   = rtmdio_839x_read_mmd_phy,
        .read_phy       = rtmdio_839x_read_phy,
        .setup_ctrl     = rtmdio_839x_setup_ctrl,
@@ -1049,6 +1059,9 @@ static const struct rtmdio_config rtmdio_839x_cfg = {
 static const struct rtmdio_config rtmdio_930x_cfg = {
        .num_phys       = 28,
        .raw_page       = 4095,
+       .cmd_fail       = RTMDIO_930X_CMD_FAIL,
+       .cmd_mask       = RTMDIO_930X_CMD_MASK,
+       .cmd_reg        = RTMDIO_930X_SMI_ACCESS_PHY_CTRL_1,
        .bus_map_base   = RTMDIO_930X_SMI_PORT0_15_POLLING_SEL,
        .port_map_base  = RTMDIO_930X_SMI_PORT0_5_ADDR_CTRL,
        .read_mmd_phy   = rtmdio_930x_read_mmd_phy,
@@ -1062,6 +1075,9 @@ static const struct rtmdio_config rtmdio_930x_cfg = {
 static const struct rtmdio_config rtmdio_931x_cfg = {
        .num_phys       = 56,
        .raw_page       = 8191,
+       .cmd_fail       = RTMDIO_931X_CMD_FAIL,
+       .cmd_mask       = RTMDIO_931X_CMD_MASK,
+       .cmd_reg        = RTMDIO_931X_SMI_INDRT_ACCESS_CTRL_0,
        .bus_map_base   = RTMDIO_931X_SMI_PORT_POLLING_SEL,
        .port_map_base  = RTMDIO_931X_SMI_PORT_ADDR_CTRL,
        .read_mmd_phy   = rtmdio_931x_read_mmd_phy,