• Paritosh Dixit's avatar
    net: stmmac: dwmac-tegra: Fix link bring-up sequence · 1cff6ff3
    Paritosh Dixit authored
    The Tegra MGBE driver sometimes fails to initialize, reporting the
    following error, and as a result, it is unable to acquire an IP
    address with DHCP:
    
     tegra-mgbe 6800000.ethernet: timeout waiting for link to become ready
    
    As per the recommendation from the Tegra hardware design team, fix this
    issue by:
    - clearing the PHY_RDY bit before setting the CDR_RESET bit and then
    setting PHY_RDY bit before clearing CDR_RESET bit. This ensures valid
    data is present at UPHY RX inputs before starting the CDR lock.
    - adding the required delays when bringing up the UPHY lane. Note we
    need to use delays here because there is no alternative, such as
    polling, for these cases. Using the usleep_range() instead of ndelay()
    as sleeping is preferred over busy wait loop.
    
    Without this change we would see link failures on boot sometimes as
    often as 1 in 5 boots. With this fix we have not observed any failures
    in over 1000 boots.
    
    Fixes: d8ca1137 ("net: stmmac: tegra: Add MGBE support")
    Signed-off-by: default avatarParitosh Dixit <paritoshd@nvidia.com>
    Link: https://patch.msgid.link/20241010142908.602712-1-paritoshd@nvidia.comSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    1cff6ff3
dwmac-tegra.c 11.1 KB