lkml.org 
[lkml]   [2021]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 492/530] net: phy: marvell: fix m88e1011_set_downshift
    Date
    From: Maxim Kochetkov <fido_max@inbox.ru>

    [ Upstream commit 990875b299b8612aeb85cb2e2751796f1add65ff ]

    Changing downshift params without software reset has no effect,
    so call genphy_soft_reset() after change downshift params.

    As the datasheet says:
    Changes to these bits are disruptive to the normal operation therefore,
    any changes to these registers must be followed by software reset
    to take effect.

    Fixes: 911af5e149bb ("net: phy: marvell: fix downshift function naming")
    Signed-off-by: Maxim Kochetkov <fido_max@inbox.ru>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/phy/marvell.c | 26 ++++++++++++++++----------
    1 file changed, 16 insertions(+), 10 deletions(-)

    diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
    index 823a89354466..8e2ef7d67bff 100644
    --- a/drivers/net/phy/marvell.c
    +++ b/drivers/net/phy/marvell.c
    @@ -919,22 +919,28 @@ static int m88e1011_get_downshift(struct phy_device *phydev, u8 *data)

    static int m88e1011_set_downshift(struct phy_device *phydev, u8 cnt)
    {
    - int val;
    + int val, err;

    if (cnt > MII_M1011_PHY_SCR_DOWNSHIFT_MAX)
    return -E2BIG;

    - if (!cnt)
    - return phy_clear_bits(phydev, MII_M1011_PHY_SCR,
    - MII_M1011_PHY_SCR_DOWNSHIFT_EN);
    + if (!cnt) {
    + err = phy_clear_bits(phydev, MII_M1011_PHY_SCR,
    + MII_M1011_PHY_SCR_DOWNSHIFT_EN);
    + } else {
    + val = MII_M1011_PHY_SCR_DOWNSHIFT_EN;
    + val |= FIELD_PREP(MII_M1011_PHY_SCR_DOWNSHIFT_MASK, cnt - 1);

    - val = MII_M1011_PHY_SCR_DOWNSHIFT_EN;
    - val |= FIELD_PREP(MII_M1011_PHY_SCR_DOWNSHIFT_MASK, cnt - 1);
    + err = phy_modify(phydev, MII_M1011_PHY_SCR,
    + MII_M1011_PHY_SCR_DOWNSHIFT_EN |
    + MII_M1011_PHY_SCR_DOWNSHIFT_MASK,
    + val);
    + }

    - return phy_modify(phydev, MII_M1011_PHY_SCR,
    - MII_M1011_PHY_SCR_DOWNSHIFT_EN |
    - MII_M1011_PHY_SCR_DOWNSHIFT_MASK,
    - val);
    + if (err < 0)
    + return err;
    +
    + return genphy_soft_reset(phydev);
    }

    static int m88e1011_get_tunable(struct phy_device *phydev,
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-05-12 19:01    [W:2.962 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site