The MDIO data that needs to be written or read is handled by an I/O register. Add that to the register structure and make use of it where needed. Signed-off-by: Markus Stockhausen --- drivers/net/mdio/mdio-realtek-rtl9300.c | 28 +++++++++++++++---------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/drivers/net/mdio/mdio-realtek-rtl9300.c b/drivers/net/mdio/mdio-realtek-rtl9300.c index 855c7935617f..be6a0cfe4bb8 100644 --- a/drivers/net/mdio/mdio-realtek-rtl9300.c +++ b/drivers/net/mdio/mdio-realtek-rtl9300.c @@ -36,7 +36,7 @@ #define PHY_CTRL_TYPE_C22 0 #define PHY_CTRL_CMD BIT(0) #define PHY_CTRL_FAIL BIT(25) -#define SMI_ACCESS_PHY_CTRL_2 0xcb78 +#define RTL9300_SMI_ACCESS_PHY_CTRL_2 0xcb78 #define PHY_CTRL_INDATA GENMASK(31, 16) #define PHY_CTRL_DATA GENMASK(15, 0) #define RTL9300_SMI_ACCESS_PHY_CTRL_3 0xcb7c @@ -56,6 +56,7 @@ struct rtl_mdio_cmd_regs { u32 c22_data; u32 c45_data; + u32 io_data; }; struct rtl_mdio_info { @@ -112,13 +113,14 @@ static int rtl9300_mdio_read_c22(struct mii_bus *bus, int phy_id, int regnum) { struct rtl_mdio_chan *chan = bus->priv; struct rtl_mdio_priv *priv; + u32 io_reg, cmd_reg, val; struct regmap *regmap; - u32 cmd_reg, val; int port; int err; priv = chan->priv; regmap = priv->regmap; + io_reg = priv->info->cmd_regs.io_data; cmd_reg = priv->info->cmd_regs.c22_data; /* shared command/C22 register */ port = rtl_mdio_phy_to_port(bus, phy_id); @@ -130,7 +132,7 @@ static int rtl9300_mdio_read_c22(struct mii_bus *bus, int phy_id, int regnum) if (err) goto out_err; - err = regmap_write(regmap, SMI_ACCESS_PHY_CTRL_2, FIELD_PREP(PHY_CTRL_INDATA, port)); + err = regmap_write(regmap, io_reg, FIELD_PREP(PHY_CTRL_INDATA, port)); if (err) goto out_err; @@ -146,7 +148,7 @@ static int rtl9300_mdio_read_c22(struct mii_bus *bus, int phy_id, int regnum) if (err) goto out_err; - err = regmap_read(regmap, SMI_ACCESS_PHY_CTRL_2, &val); + err = regmap_read(regmap, io_reg, &val); if (err) goto out_err; @@ -162,13 +164,14 @@ static int rtl9300_mdio_write_c22(struct mii_bus *bus, int phy_id, int regnum, u { struct rtl_mdio_chan *chan = bus->priv; struct rtl_mdio_priv *priv; + u32 io_reg, cmd_reg, val; struct regmap *regmap; - u32 cmd_reg, val; int port; int err; priv = chan->priv; regmap = priv->regmap; + io_reg = priv->info->cmd_regs.io_data; cmd_reg = priv->info->cmd_regs.c22_data; /* shared command/C22 register */ port = rtl_mdio_phy_to_port(bus, phy_id); @@ -184,7 +187,7 @@ static int rtl9300_mdio_write_c22(struct mii_bus *bus, int phy_id, int regnum, u if (err) goto out_err; - err = regmap_write(regmap, SMI_ACCESS_PHY_CTRL_2, FIELD_PREP(PHY_CTRL_INDATA, value)); + err = regmap_write(regmap, io_reg, FIELD_PREP(PHY_CTRL_INDATA, value)); if (err) goto out_err; @@ -217,13 +220,14 @@ static int rtl9300_mdio_read_c45(struct mii_bus *bus, int phy_id, int dev_addr, { struct rtl_mdio_chan *chan = bus->priv; struct rtl_mdio_priv *priv; + u32 io_reg, cmd_reg, val; struct regmap *regmap; - u32 cmd_reg, val; int port; int err; priv = chan->priv; regmap = priv->regmap; + io_reg = priv->info->cmd_regs.io_data; cmd_reg = priv->info->cmd_regs.c22_data; /* shared command/C22 register */ port = rtl_mdio_phy_to_port(bus, phy_id); @@ -236,7 +240,7 @@ static int rtl9300_mdio_read_c45(struct mii_bus *bus, int phy_id, int dev_addr, goto out_err; val = FIELD_PREP(PHY_CTRL_INDATA, port); - err = regmap_write(regmap, SMI_ACCESS_PHY_CTRL_2, val); + err = regmap_write(regmap, io_reg, val); if (err) goto out_err; @@ -254,7 +258,7 @@ static int rtl9300_mdio_read_c45(struct mii_bus *bus, int phy_id, int dev_addr, if (err) goto out_err; - err = regmap_read(regmap, SMI_ACCESS_PHY_CTRL_2, &val); + err = regmap_read(regmap, io_reg, &val); if (err) goto out_err; @@ -271,13 +275,14 @@ static int rtl9300_mdio_write_c45(struct mii_bus *bus, int phy_id, int dev_addr, { struct rtl_mdio_chan *chan = bus->priv; struct rtl_mdio_priv *priv; + u32 io_reg, cmd_reg, val; struct regmap *regmap; - u32 cmd_reg, val; int port; int err; priv = chan->priv; regmap = priv->regmap; + io_reg = priv->info->cmd_regs.io_data; cmd_reg = priv->info->cmd_regs.c22_data; /* shared command/C22 register */ port = rtl_mdio_phy_to_port(bus, phy_id); @@ -294,7 +299,7 @@ static int rtl9300_mdio_write_c45(struct mii_bus *bus, int phy_id, int dev_addr, goto out_err; val = FIELD_PREP(PHY_CTRL_INDATA, value); - err = regmap_write(regmap, SMI_ACCESS_PHY_CTRL_2, val); + err = regmap_write(regmap, io_reg, val); if (err) goto out_err; @@ -522,6 +527,7 @@ static const struct rtl_mdio_info rtl9300_mdio_info = { .cmd_regs = { .c22_data = RTL9300_SMI_ACCESS_PHY_CTRL_1, .c45_data = RTL9300_SMI_ACCESS_PHY_CTRL_3, + .io_data = RTL9300_SMI_ACCESS_PHY_CTRL_2, }, .num_buses = RTL9300_NUM_BUSES, .num_ports = RTL9300_NUM_PORTS, -- 2.54.0