| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- From 9764a08b3d260f4e7799d34bbfe64463db940d74 Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?= <[email protected]>
- Date: Thu, 18 Apr 2024 08:35:31 +0300
- Subject: [PATCH 5/5] net: dsa: mt7530: simplify core operations
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- 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]>
- ---
- drivers/net/dsa/mt7530.c | 108 ++++++++++++++++-----------------------
- 1 file changed, 43 insertions(+), 65 deletions(-)
- --- a/drivers/net/dsa/mt7530.c
- +++ b/drivers/net/dsa/mt7530.c
- @@ -74,116 +74,94 @@ static const struct mt7530_mib_desc mt75
- MIB_DESC(1, 0xb8, "RxArlDrop"),
- };
-
- -/* Since phy_device has not yet been created and
- - * phy_{read,write}_mmd_indirect is not available, we provide our own
- - * core_{read,write}_mmd_indirect with core_{clear,write,set} wrappers
- - * to complete this function.
- - */
- -static int
- -core_read_mmd_indirect(struct mt7530_priv *priv, int prtad, int devad)
- +static void
- +mt7530_mutex_lock(struct mt7530_priv *priv)
- +{
- + if (priv->bus)
- + mutex_lock_nested(&priv->bus->mdio_lock, MDIO_MUTEX_NESTED);
- +}
- +
- +static void
- +mt7530_mutex_unlock(struct mt7530_priv *priv)
- +{
- + if (priv->bus)
- + mutex_unlock(&priv->bus->mdio_lock);
- +}
- +
- +static void
- +core_write(struct mt7530_priv *priv, u32 reg, u32 val)
- {
- struct mii_bus *bus = priv->bus;
- - int value, ret;
- + int ret;
- +
- + mt7530_mutex_lock(priv);
-
- /* Write the desired MMD Devad */
- ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
- - MII_MMD_CTRL, devad);
- + MII_MMD_CTRL, MDIO_MMD_VEND2);
- if (ret < 0)
- goto err;
-
- /* Write the desired MMD register address */
- ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
- - MII_MMD_DATA, prtad);
- + MII_MMD_DATA, reg);
- if (ret < 0)
- goto err;
-
- /* Select the Function : DATA with no post increment */
- ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
- - MII_MMD_CTRL, devad | MII_MMD_CTRL_NOINCR);
- + MII_MMD_CTRL, MDIO_MMD_VEND2 | MII_MMD_CTRL_NOINCR);
- if (ret < 0)
- goto err;
-
- - /* Read the content of the MMD's selected register */
- - value = bus->read(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
- - MII_MMD_DATA);
- -
- - return value;
- + /* Write the data into MMD's selected register */
- + ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
- + MII_MMD_DATA, val);
- err:
- - dev_err(&bus->dev, "failed to read mmd register\n");
- + if (ret < 0)
- + dev_err(&bus->dev, "failed to write mmd register\n");
-
- - return ret;
- + mt7530_mutex_unlock(priv);
- }
-
- -static int
- -core_write_mmd_indirect(struct mt7530_priv *priv, int prtad,
- - int devad, u32 data)
- +static void
- +core_rmw(struct mt7530_priv *priv, u32 reg, u32 mask, u32 set)
- {
- struct mii_bus *bus = priv->bus;
- + u32 val;
- int ret;
-
- + mt7530_mutex_lock(priv);
- +
- /* Write the desired MMD Devad */
- ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
- - MII_MMD_CTRL, devad);
- + MII_MMD_CTRL, MDIO_MMD_VEND2);
- if (ret < 0)
- goto err;
-
- /* Write the desired MMD register address */
- ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
- - MII_MMD_DATA, prtad);
- + MII_MMD_DATA, reg);
- if (ret < 0)
- goto err;
-
- /* Select the Function : DATA with no post increment */
- ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
- - MII_MMD_CTRL, devad | MII_MMD_CTRL_NOINCR);
- + MII_MMD_CTRL, MDIO_MMD_VEND2 | MII_MMD_CTRL_NOINCR);
- if (ret < 0)
- goto err;
-
- + /* Read the content of the MMD's selected register */
- + val = bus->read(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
- + MII_MMD_DATA);
- + val &= ~mask;
- + val |= set;
- /* Write the data into MMD's selected register */
- ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
- - MII_MMD_DATA, data);
- + MII_MMD_DATA, val);
- err:
- if (ret < 0)
- - dev_err(&bus->dev,
- - "failed to write mmd register\n");
- - return ret;
- -}
- -
- -static void
- -mt7530_mutex_lock(struct mt7530_priv *priv)
- -{
- - if (priv->bus)
- - mutex_lock_nested(&priv->bus->mdio_lock, MDIO_MUTEX_NESTED);
- -}
- -
- -static void
- -mt7530_mutex_unlock(struct mt7530_priv *priv)
- -{
- - if (priv->bus)
- - mutex_unlock(&priv->bus->mdio_lock);
- -}
- -
- -static void
- -core_write(struct mt7530_priv *priv, u32 reg, u32 val)
- -{
- - mt7530_mutex_lock(priv);
- -
- - core_write_mmd_indirect(priv, reg, MDIO_MMD_VEND2, val);
- -
- - mt7530_mutex_unlock(priv);
- -}
- -
- -static void
- -core_rmw(struct mt7530_priv *priv, u32 reg, u32 mask, u32 set)
- -{
- - u32 val;
- -
- - mt7530_mutex_lock(priv);
- -
- - val = core_read_mmd_indirect(priv, reg, MDIO_MMD_VEND2);
- - val &= ~mask;
- - val |= set;
- - core_write_mmd_indirect(priv, reg, MDIO_MMD_VEND2, val);
- + dev_err(&bus->dev, "failed to write mmd register\n");
-
- mt7530_mutex_unlock(priv);
- }
|