lkml.org 
[lkml]   [2020]   [Apr]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH net-next 2/3] net: phy: bcm54140: use phy_package_shared
    Date
    Use the new phy_package_shared common storage to ease the package
    initialization and to access the global registers.

    Signed-off-by: Michael Walle <michael@walle.cc>
    ---
    drivers/net/phy/bcm54140.c | 57 ++++++++------------------------------
    1 file changed, 11 insertions(+), 46 deletions(-)

    diff --git a/drivers/net/phy/bcm54140.c b/drivers/net/phy/bcm54140.c
    index aa854477e06a..97b9e1c763da 100644
    --- a/drivers/net/phy/bcm54140.c
    +++ b/drivers/net/phy/bcm54140.c
    @@ -122,7 +122,6 @@ struct bcm54140_priv {
    int port;
    int base_addr;
    #if IS_ENABLED(CONFIG_HWMON)
    - bool pkg_init;
    /* protect the alarm bits */
    struct mutex alarm_lock;
    u16 alarm;
    @@ -395,36 +394,6 @@ static int bcm54140_enable_monitoring(struct phy_device *phydev)
    return bcm_phy_modify_rdb(phydev, BCM54140_RDB_MON_CTRL, mask, set);
    }

    -/* Check if one PHY has already done the init of the parts common to all PHYs
    - * in the Quad PHY package.
    - */
    -static bool bcm54140_is_pkg_init(struct phy_device *phydev)
    -{
    - struct bcm54140_priv *priv = phydev->priv;
    - struct mii_bus *bus = phydev->mdio.bus;
    - int base_addr = priv->base_addr;
    - struct phy_device *phy;
    - int i;
    -
    - /* Quad PHY */
    - for (i = 0; i < 4; i++) {
    - phy = mdiobus_get_phy(bus, base_addr + i);
    - if (!phy)
    - continue;
    -
    - if ((phy->phy_id & phydev->drv->phy_id_mask) !=
    - (phydev->drv->phy_id & phydev->drv->phy_id_mask))
    - continue;
    -
    - priv = phy->priv;
    -
    - if (priv && priv->pkg_init)
    - return true;
    - }
    -
    - return false;
    -}
    -
    static int bcm54140_probe_once(struct phy_device *phydev)
    {
    struct device *hwmon;
    @@ -445,38 +414,34 @@ static int bcm54140_probe_once(struct phy_device *phydev)

    static int bcm54140_base_read_rdb(struct phy_device *phydev, u16 rdb)
    {
    - struct bcm54140_priv *priv = phydev->priv;
    - struct mii_bus *bus = phydev->mdio.bus;
    int ret;

    - mutex_lock(&bus->mdio_lock);
    - ret = __mdiobus_write(bus, priv->base_addr, MII_BCM54XX_RDB_ADDR, rdb);
    + phy_lock_mdio_bus(phydev);
    + ret = __phy_package_write(phydev, MII_BCM54XX_RDB_ADDR, rdb);
    if (ret < 0)
    goto out;

    - ret = __mdiobus_read(bus, priv->base_addr, MII_BCM54XX_RDB_DATA);
    + ret = __phy_package_read(phydev, MII_BCM54XX_RDB_DATA);

    out:
    - mutex_unlock(&bus->mdio_lock);
    + phy_unlock_mdio_bus(phydev);
    return ret;
    }

    static int bcm54140_base_write_rdb(struct phy_device *phydev,
    u16 rdb, u16 val)
    {
    - struct bcm54140_priv *priv = phydev->priv;
    - struct mii_bus *bus = phydev->mdio.bus;
    int ret;

    - mutex_lock(&bus->mdio_lock);
    - ret = __mdiobus_write(bus, priv->base_addr, MII_BCM54XX_RDB_ADDR, rdb);
    + phy_lock_mdio_bus(phydev);
    + ret = __phy_package_write(phydev, MII_BCM54XX_RDB_ADDR, rdb);
    if (ret < 0)
    goto out;

    - ret = __mdiobus_write(bus, priv->base_addr, MII_BCM54XX_RDB_DATA, val);
    + ret = __phy_package_write(phydev, MII_BCM54XX_RDB_DATA, val);

    out:
    - mutex_unlock(&bus->mdio_lock);
    + phy_unlock_mdio_bus(phydev);
    return ret;
    }

    @@ -606,16 +571,16 @@ static int bcm54140_probe(struct phy_device *phydev)
    if (ret)
    return ret;

    + devm_phy_package_join(&phydev->mdio.dev, phydev, priv->base_addr);
    +
    #if IS_ENABLED(CONFIG_HWMON)
    mutex_init(&priv->alarm_lock);

    - if (!bcm54140_is_pkg_init(phydev)) {
    + if (phy_package_init_once(phydev)) {
    ret = bcm54140_probe_once(phydev);
    if (ret)
    return ret;
    }
    -
    - priv->pkg_init = true;
    #endif

    phydev_dbg(phydev, "probed (port %d, base PHY address %d)\n",
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-04-21 01:27    [W:5.780 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site