lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 482/849] phy: micrel: ksz8041nl: do not use power down mode
    Date
    From: Stefan Agner <stefan@agner.ch>

    [ Upstream commit 2641b62d2fab52648e34cdc6994b2eacde2d27c1 ]

    Some Micrel KSZ8041NL PHY chips exhibit continuous RX errors after using
    the power down mode bit (0.11). If the PHY is taken out of power down
    mode in a certain temperature range, the PHY enters a weird state which
    leads to continuously reporting RX errors. In that state, the MAC is not
    able to receive or send any Ethernet frames and the activity LED is
    constantly blinking. Since Linux is using the suspend callback when the
    interface is taken down, ending up in that state can easily happen
    during a normal startup.

    Micrel confirmed the issue in errata DS80000700A [*], caused by abnormal
    clock recovery when using power down mode. Even the latest revision (A4,
    Revision ID 0x1513) seems to suffer that problem, and according to the
    errata is not going to be fixed.

    Remove the suspend/resume callback to avoid using the power down mode
    completely.

    [*] https://ww1.microchip.com/downloads/en/DeviceDoc/80000700A.pdf

    Fixes: 1a5465f5d6a2 ("phy/micrel: Add suspend/resume support to Micrel PHYs")
    Signed-off-by: Stefan Agner <stefan@agner.ch>
    Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/phy/micrel.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
    index 643b1c1827a92..aec0fcefdccd6 100644
    --- a/drivers/net/phy/micrel.c
    +++ b/drivers/net/phy/micrel.c
    @@ -1593,8 +1593,9 @@ static struct phy_driver ksphy_driver[] = {
    .get_sset_count = kszphy_get_sset_count,
    .get_strings = kszphy_get_strings,
    .get_stats = kszphy_get_stats,
    - .suspend = genphy_suspend,
    - .resume = genphy_resume,
    + /* No suspend/resume callbacks because of errata DS80000700A,
    + * receiver error following software power down.
    + */
    }, {
    .phy_id = PHY_ID_KSZ8041RNLI,
    .phy_id_mask = MICREL_PHY_ID_MASK,
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-16 00:07    [W:2.916 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site