• Clemens Gruber's avatar
    net: phy: marvell: Fix pause frame negotiation · 3b72f84f
    Clemens Gruber authored
    The negotiation of flow control / pause frame modes was broken since
    commit fcf1f59a ("net: phy: marvell: rearrange to use
    genphy_read_lpa()") moved the setting of phydev->duplex below the
    phy_resolve_aneg_pause call. Due to a check of DUPLEX_FULL in that
    function, phydev->pause was no longer set.
    
    Fix it by moving the parsing of the status variable before the blocks
    dealing with the pause frames.
    
    As the Marvell 88E1510 datasheet does not specify the timing between the
    link status and the "Speed and Duplex Resolved" bit, we have to force
    the link down as long as the resolved bit is not set, to avoid reporting
    link up before we even have valid Speed/Duplex.
    
    Tested with a Marvell 88E1510 (RGMII to Copper/1000Base-T)
    
    Fixes: fcf1f59a ("net: phy: marvell: rearrange to use genphy_read_lpa()")
    Signed-off-by: default avatarClemens Gruber <clemens.gruber@pqgruber.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    3b72f84f
marvell.c 59.8 KB