Skip to content

Commit 7c5e37d

Browse files
arinc9Paolo Abeni
authored andcommitted
net: dsa: mt7530: simplify core operations
The core_rmw() function calls core_read_mmd_indirect() to read the requested register, and then calls core_write_mmd_indirect() to write the requested value to the register. Because Clause 22 is used to access Clause 45 registers, some operations on core_write_mmd_indirect() are unnecessarily run. Get rid of core_read_mmd_indirect() and core_write_mmd_indirect(), and run only the necessary operations on core_write() and core_rmw(). Reviewed-by: Daniel Golle <[email protected]> Tested-by: Daniel Golle <[email protected]> Signed-off-by: Arınç ÜNAL <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
1 parent 868ff5f commit 7c5e37d

File tree

1 file changed

+43
-65
lines changed

1 file changed

+43
-65
lines changed

drivers/net/dsa/mt7530.c

Lines changed: 43 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -74,116 +74,94 @@ static const struct mt7530_mib_desc mt7530_mib[] = {
7474
MIB_DESC(1, 0xb8, "RxArlDrop"),
7575
};
7676

77-
/* Since phy_device has not yet been created and
78-
* phy_{read,write}_mmd_indirect is not available, we provide our own
79-
* core_{read,write}_mmd_indirect with core_{clear,write,set} wrappers
80-
* to complete this function.
81-
*/
82-
static int
83-
core_read_mmd_indirect(struct mt7530_priv *priv, int prtad, int devad)
77+
static void
78+
mt7530_mutex_lock(struct mt7530_priv *priv)
79+
{
80+
if (priv->bus)
81+
mutex_lock_nested(&priv->bus->mdio_lock, MDIO_MUTEX_NESTED);
82+
}
83+
84+
static void
85+
mt7530_mutex_unlock(struct mt7530_priv *priv)
86+
{
87+
if (priv->bus)
88+
mutex_unlock(&priv->bus->mdio_lock);
89+
}
90+
91+
static void
92+
core_write(struct mt7530_priv *priv, u32 reg, u32 val)
8493
{
8594
struct mii_bus *bus = priv->bus;
86-
int value, ret;
95+
int ret;
96+
97+
mt7530_mutex_lock(priv);
8798

8899
/* Write the desired MMD Devad */
89100
ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
90-
MII_MMD_CTRL, devad);
101+
MII_MMD_CTRL, MDIO_MMD_VEND2);
91102
if (ret < 0)
92103
goto err;
93104

94105
/* Write the desired MMD register address */
95106
ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
96-
MII_MMD_DATA, prtad);
107+
MII_MMD_DATA, reg);
97108
if (ret < 0)
98109
goto err;
99110

100111
/* Select the Function : DATA with no post increment */
101112
ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
102-
MII_MMD_CTRL, devad | MII_MMD_CTRL_NOINCR);
113+
MII_MMD_CTRL, MDIO_MMD_VEND2 | MII_MMD_CTRL_NOINCR);
103114
if (ret < 0)
104115
goto err;
105116

106-
/* Read the content of the MMD's selected register */
107-
value = bus->read(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
108-
MII_MMD_DATA);
109-
110-
return value;
117+
/* Write the data into MMD's selected register */
118+
ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
119+
MII_MMD_DATA, val);
111120
err:
112-
dev_err(&bus->dev, "failed to read mmd register\n");
121+
if (ret < 0)
122+
dev_err(&bus->dev, "failed to write mmd register\n");
113123

114-
return ret;
124+
mt7530_mutex_unlock(priv);
115125
}
116126

117-
static int
118-
core_write_mmd_indirect(struct mt7530_priv *priv, int prtad,
119-
int devad, u32 data)
127+
static void
128+
core_rmw(struct mt7530_priv *priv, u32 reg, u32 mask, u32 set)
120129
{
121130
struct mii_bus *bus = priv->bus;
131+
u32 val;
122132
int ret;
123133

134+
mt7530_mutex_lock(priv);
135+
124136
/* Write the desired MMD Devad */
125137
ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
126-
MII_MMD_CTRL, devad);
138+
MII_MMD_CTRL, MDIO_MMD_VEND2);
127139
if (ret < 0)
128140
goto err;
129141

130142
/* Write the desired MMD register address */
131143
ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
132-
MII_MMD_DATA, prtad);
144+
MII_MMD_DATA, reg);
133145
if (ret < 0)
134146
goto err;
135147

136148
/* Select the Function : DATA with no post increment */
137149
ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
138-
MII_MMD_CTRL, devad | MII_MMD_CTRL_NOINCR);
150+
MII_MMD_CTRL, MDIO_MMD_VEND2 | MII_MMD_CTRL_NOINCR);
139151
if (ret < 0)
140152
goto err;
141153

154+
/* Read the content of the MMD's selected register */
155+
val = bus->read(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
156+
MII_MMD_DATA);
157+
val &= ~mask;
158+
val |= set;
142159
/* Write the data into MMD's selected register */
143160
ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
144-
MII_MMD_DATA, data);
161+
MII_MMD_DATA, val);
145162
err:
146163
if (ret < 0)
147-
dev_err(&bus->dev,
148-
"failed to write mmd register\n");
149-
return ret;
150-
}
151-
152-
static void
153-
mt7530_mutex_lock(struct mt7530_priv *priv)
154-
{
155-
if (priv->bus)
156-
mutex_lock_nested(&priv->bus->mdio_lock, MDIO_MUTEX_NESTED);
157-
}
158-
159-
static void
160-
mt7530_mutex_unlock(struct mt7530_priv *priv)
161-
{
162-
if (priv->bus)
163-
mutex_unlock(&priv->bus->mdio_lock);
164-
}
165-
166-
static void
167-
core_write(struct mt7530_priv *priv, u32 reg, u32 val)
168-
{
169-
mt7530_mutex_lock(priv);
170-
171-
core_write_mmd_indirect(priv, reg, MDIO_MMD_VEND2, val);
172-
173-
mt7530_mutex_unlock(priv);
174-
}
175-
176-
static void
177-
core_rmw(struct mt7530_priv *priv, u32 reg, u32 mask, u32 set)
178-
{
179-
u32 val;
180-
181-
mt7530_mutex_lock(priv);
182-
183-
val = core_read_mmd_indirect(priv, reg, MDIO_MMD_VEND2);
184-
val &= ~mask;
185-
val |= set;
186-
core_write_mmd_indirect(priv, reg, MDIO_MMD_VEND2, val);
164+
dev_err(&bus->dev, "failed to write mmd register\n");
187165

188166
mt7530_mutex_unlock(priv);
189167
}

0 commit comments

Comments
 (0)