]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: mdio: add helper to derive ctrl from bus
authorMarkus Stockhausen <markus.stockhausen@gmx.de>
Wed, 25 Mar 2026 13:09:49 +0000 (14:09 +0100)
committerRobert Marko <robimarko@gmail.com>
Fri, 27 Mar 2026 19:51:43 +0000 (20:51 +0100)
Add a new helper macro rtmdio_ctrl_from_bus that encapuslates
the current ctrl=bus->priv lookup. This is a preparation for
the future multi-channel driver architecture. With an upcoming
commit the structures will be changed as follows:

- ctrl: contains the generic data structurs
- chan: contains the channel specific structure

This will involve changing the pointers between them

old lookup chain: ctrl = bus->ctrl
new lookup chain: ctrl = bus->chan->ctrl

The helper macro allows to easily switch the lookup in one
central location. While we are here fix a whitespace issue.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/22604
Signed-off-by: Robert Marko <robimarko@gmail.com>
target/linux/realtek/files-6.12/drivers/net/mdio/mdio-realtek-otto.c

index 75b8b13cd6c24cda0762a2762b11ee291ee82c13..c9cb494cad5718cbcc30d7a61e89d65b639c1925 100644 (file)
 #define for_each_phy(ctrl, addr) \
        for_each_set_bit(addr, ctrl->valid_ports, RTMDIO_MAX_PHY)
 
+#define rtmdio_ctrl_from_bus(bus) \
+       ((struct rtmdio_ctrl *)(bus)->priv)
+
+
 /*
  * On all Realtek switch platforms the hardware periodically reads the link status of all
  * PHYs. This is to some degree programmable, so that one can tell the hardware to read
@@ -217,7 +221,7 @@ struct rtmdio_phy_info {
 
 static int rtmdio_run_cmd(struct mii_bus *bus, int cmd, int mask, int regnum, int fail)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int ret, val;
 
        ret = regmap_update_bits(ctrl->map, regnum, mask, cmd | RTMDIO_RUN);
@@ -240,7 +244,7 @@ static int rtmdio_838x_run_cmd(struct mii_bus *bus, int cmd)
 
 static int rtmdio_838x_read_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg, u32 *val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        u32 park_page = 31;
        int err;
 
@@ -259,7 +263,7 @@ static int rtmdio_838x_read_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg
 
 static int rtmdio_838x_write_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg, u32 val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        u32 park_page = 31;
 
        regmap_write(ctrl->map, RTMDIO_838X_SMI_ACCESS_PHY_CTRL_0, BIT(addr));
@@ -272,7 +276,7 @@ static int rtmdio_838x_write_phy(struct mii_bus *bus, u32 addr, u32 page, u32 re
 
 static int rtmdio_838x_read_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum, u32 regnum, u32 *val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int err;
 
        regmap_write(ctrl->map, RTMDIO_838X_SMI_ACCESS_PHY_CTRL_0, BIT(addr));
@@ -289,7 +293,7 @@ static int rtmdio_838x_read_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum, u
 
 static int rtmdio_838x_write_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum, u32 regnum, u32 val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
 
        regmap_write(ctrl->map, RTMDIO_838X_SMI_ACCESS_PHY_CTRL_0, BIT(addr));
        regmap_write(ctrl->map, RTMDIO_838X_SMI_ACCESS_PHY_CTRL_2, val << 16);
@@ -306,7 +310,7 @@ static int rtmdio_839x_run_cmd(struct mii_bus *bus, int cmd)
 
 static int rtmdio_839x_read_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg, u32 *val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int err;
 
        regmap_write(ctrl->map, RTMDIO_839X_PHYREG_CTRL, 0x1ff);
@@ -324,7 +328,7 @@ static int rtmdio_839x_read_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg
 
 static int rtmdio_839x_write_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg, u32 val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
 
        regmap_write(ctrl->map, RTMDIO_839X_PHYREG_CTRL, 0x1ff);
        regmap_write(ctrl->map, RTMDIO_839X_PHYREG_DATA_CTRL, val << 16);
@@ -338,7 +342,7 @@ static int rtmdio_839x_write_phy(struct mii_bus *bus, u32 addr, u32 page, u32 re
 
 static int rtmdio_839x_read_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum, u32 regnum, u32 *val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int err;
 
        regmap_write(ctrl->map, RTMDIO_839X_PHYREG_DATA_CTRL,  addr << 16);
@@ -354,7 +358,7 @@ static int rtmdio_839x_read_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum, u
 
 static int rtmdio_839x_write_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum, u32 regnum, u32 val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
 
        regmap_write(ctrl->map, RTMDIO_839X_PHYREG_PORT_CTRL, BIT_ULL(addr));
        regmap_write(ctrl->map, RTMDIO_839X_PHYREG_PORT_CTRL + 4, BIT_ULL(addr) >> 32);
@@ -372,7 +376,7 @@ static int rtmdio_930x_run_cmd(struct mii_bus *bus, int cmd)
 
 static int rtmdio_930x_write_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg, u32 val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        u32 park_page = 31;
 
        regmap_write(ctrl->map, RTMDIO_930X_SMI_ACCESS_PHY_CTRL_0, BIT(addr));
@@ -385,7 +389,7 @@ static int rtmdio_930x_write_phy(struct mii_bus *bus, u32 addr, u32 page, u32 re
 
 static int rtmdio_930x_read_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg, u32 *val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        u32 park_page = 31;
        int err;
 
@@ -403,7 +407,7 @@ static int rtmdio_930x_read_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg
 
 static int rtmdio_930x_write_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum, u32 regnum, u32 val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
 
        regmap_write(ctrl->map, RTMDIO_930X_SMI_ACCESS_PHY_CTRL_0, BIT(addr));
        regmap_write(ctrl->map, RTMDIO_930X_SMI_ACCESS_PHY_CTRL_2, val << 16);
@@ -414,8 +418,8 @@ static int rtmdio_930x_write_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum,
 
 static int rtmdio_930x_read_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum, u32 regnum, u32 *val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
-       int err ;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
+       int err;
 
        regmap_write(ctrl->map, RTMDIO_930X_SMI_ACCESS_PHY_CTRL_2, addr << 16);
        regmap_write(ctrl->map, RTMDIO_930X_SMI_ACCESS_PHY_CTRL_3, (devnum << 16) | (regnum & 0xffff));
@@ -436,7 +440,7 @@ static int rtmdio_931x_run_cmd(struct mii_bus *bus, int cmd)
 
 static int rtmdio_931x_write_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg, u32 val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        u64 mask = BIT_ULL(addr);
 
        regmap_write(ctrl->map, RTMDIO_931X_SMI_INDRT_ACCESS_CTRL_2, (u32)mask);
@@ -450,7 +454,7 @@ static int rtmdio_931x_write_phy(struct mii_bus *bus, u32 addr, u32 page, u32 re
 
 static int rtmdio_931x_read_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg, u32 *val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int err;
 
        regmap_write(ctrl->map, RTMDIO_931X_SMI_INDRT_ACCESS_BC_CTRL, addr << 5);
@@ -466,7 +470,7 @@ static int rtmdio_931x_read_phy(struct mii_bus *bus, u32 addr, u32 page, u32 reg
 
 static int rtmdio_931x_read_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum, u32 regnum, u32 *val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int err;
 
        regmap_write(ctrl->map, RTMDIO_931X_SMI_INDRT_ACCESS_BC_CTRL, addr << 5);
@@ -482,7 +486,7 @@ static int rtmdio_931x_read_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum, u
 
 static int rtmdio_931x_write_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum, u32 regnum, u32 val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        u64 mask = BIT_ULL(addr);
 
        regmap_write(ctrl->map, RTMDIO_931X_SMI_INDRT_ACCESS_CTRL_2, (u32)mask);
@@ -495,7 +499,7 @@ static int rtmdio_931x_write_mmd_phy(struct mii_bus *bus, u32 addr, u32 devnum,
 
 static int rtmdio_read_c45(struct mii_bus *bus, int addr, int devnum, int regnum)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int err, val;
 
        if (addr >= ctrl->cfg->num_phys)
@@ -509,7 +513,7 @@ static int rtmdio_read_c45(struct mii_bus *bus, int addr, int devnum, int regnum
 
 static int rtmdio_read(struct mii_bus *bus, int addr, int regnum)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int err, val;
 
        if (addr >= ctrl->cfg->num_phys)
@@ -528,7 +532,7 @@ static int rtmdio_read(struct mii_bus *bus, int addr, int regnum)
 
 static int rtmdio_write_c45(struct mii_bus *bus, int addr, int devnum, int regnum, u16 val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int err;
 
        if (addr >= ctrl->cfg->num_phys)
@@ -542,7 +546,7 @@ static int rtmdio_write_c45(struct mii_bus *bus, int addr, int devnum, int regnu
 
 static int rtmdio_write(struct mii_bus *bus, int addr, int regnum, u16 val)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int err, page;
 
        if (addr >= ctrl->cfg->num_phys)
@@ -658,7 +662,7 @@ static int rtmdio_get_phy_info(struct mii_bus *bus, int addr, struct rtmdio_phy_
 
 static int rtmdio_838x_reset(struct mii_bus *bus)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
 
        /*
         * PHY_PATCH_DONE enables phy control via SoC. This is required for phy access,
@@ -672,7 +676,7 @@ static int rtmdio_838x_reset(struct mii_bus *bus)
 
 static void rtmdio_838x_setup_polling(struct mii_bus *bus)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        int combo_phy;
 
        /* Disable MAC polling for PHY config. It will be activated later in the DSA driver */
@@ -690,7 +694,7 @@ static void rtmdio_838x_setup_polling(struct mii_bus *bus)
 
 static int rtmdio_839x_reset(struct mii_bus *bus)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
 
        return 0;
 
@@ -708,7 +712,7 @@ static int rtmdio_839x_reset(struct mii_bus *bus)
 
 static int rtmdio_930x_reset(struct mii_bus *bus)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        unsigned int mask, val;
 
        /* Define C22/C45 bus feature set */
@@ -723,7 +727,7 @@ static int rtmdio_930x_reset(struct mii_bus *bus)
 
 static void rtmdio_930x_setup_polling(struct mii_bus *bus)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        struct rtmdio_phy_info phyinfo;
        unsigned int mask, val, addr;
 
@@ -761,7 +765,7 @@ static void rtmdio_930x_setup_polling(struct mii_bus *bus)
 
 static int rtmdio_931x_reset(struct mii_bus *bus)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        u32 c45_mask = 0;
 
        /* Disable polling for configuration purposes */
@@ -781,7 +785,7 @@ static int rtmdio_931x_reset(struct mii_bus *bus)
 
 static void rtmdio_931x_setup_polling(struct mii_bus *bus)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
        struct rtmdio_phy_info phyinfo;
        u32 addr;
 
@@ -833,7 +837,7 @@ static void rtmdio_931x_setup_polling(struct mii_bus *bus)
 
 static int rtmdio_reset(struct mii_bus *bus)
 {
-       struct rtmdio_ctrl *ctrl = bus->priv;
+       struct rtmdio_ctrl *ctrl = rtmdio_ctrl_from_bus(bus);
 
        return ctrl->cfg->reset(bus);
 }