lkml.org 
[lkml]   [2022]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0431/1017] net: phy: at803x: move page selection fix to config_init
    Date
    From: Robert Hancock <robert.hancock@calian.com>

    [ Upstream commit 4f3a00c7f5b2cfe4e127fd3fe49b55e1b318c01f ]

    The fix to select the copper page on AR8031 was being done in the probe
    function rather than config_init, so it would not be redone after resume
    from suspend. Move this to config_init so it is always redone when
    needed.

    Fixes: c329e5afb42f ("net: phy: at803x: select correct page on config init")
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/phy/at803x.c | 40 ++++++++++++++++------------------------
    1 file changed, 16 insertions(+), 24 deletions(-)

    diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c
    index 32eeed672861..7e0f817d817f 100644
    --- a/drivers/net/phy/at803x.c
    +++ b/drivers/net/phy/at803x.c
    @@ -784,25 +784,7 @@ static int at803x_probe(struct phy_device *phydev)
    return ret;
    }

    - /* Some bootloaders leave the fiber page selected.
    - * Switch to the copper page, as otherwise we read
    - * the PHY capabilities from the fiber side.
    - */
    - if (phydev->drv->phy_id == ATH8031_PHY_ID) {
    - phy_lock_mdio_bus(phydev);
    - ret = at803x_write_page(phydev, AT803X_PAGE_COPPER);
    - phy_unlock_mdio_bus(phydev);
    - if (ret)
    - goto err;
    - }
    -
    return 0;
    -
    -err:
    - if (priv->vddio)
    - regulator_disable(priv->vddio);
    -
    - return ret;
    }

    static void at803x_remove(struct phy_device *phydev)
    @@ -912,6 +894,22 @@ static int at803x_config_init(struct phy_device *phydev)
    {
    int ret;

    + if (phydev->drv->phy_id == ATH8031_PHY_ID) {
    + /* Some bootloaders leave the fiber page selected.
    + * Switch to the copper page, as otherwise we read
    + * the PHY capabilities from the fiber side.
    + */
    + phy_lock_mdio_bus(phydev);
    + ret = at803x_write_page(phydev, AT803X_PAGE_COPPER);
    + phy_unlock_mdio_bus(phydev);
    + if (ret)
    + return ret;
    +
    + ret = at8031_pll_config(phydev);
    + if (ret < 0)
    + return ret;
    + }
    +
    /* The RX and TX delay default is:
    * after HW reset: RX delay enabled and TX delay disabled
    * after SW reset: RX delay enabled, while TX delay retains the
    @@ -941,12 +939,6 @@ static int at803x_config_init(struct phy_device *phydev)
    if (ret < 0)
    return ret;

    - if (phydev->drv->phy_id == ATH8031_PHY_ID) {
    - ret = at8031_pll_config(phydev);
    - if (ret < 0)
    - return ret;
    - }
    -
    /* Ar803x extended next page bit is enabled by default. Cisco
    * multigig switches read this bit and attempt to negotiate 10Gbps
    * rates even if the next page bit is disabled. This is incorrect
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-09-17 16:20    [W:2.551 / U:0.728 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site