• Russell King's avatar
    net: marvell: mvpp2: phylink compliance updates · 388ca27f
    Russell King authored
    Sven Auhagen reported issues with negotiation on a couple of his
    platforms using a mixture of SFP and PHYs in various different
    modes.  Debugging to root cause proved difficult, but essentially
    the problem comes down to the mvpp2 phylink implementation being
    slightly at odds with what is expected.
    
    phylink operates in three modes: phy, fixed-link, and in-band mode.
    
    In the first two modes, the expected behaviour from a MAC driver is
    that phylink resolves the operating mode and passes the mode to the
    MAC driver for it to program, including when the link should be
    brought up or taken down.  This is basically the same as the libphy
    approach.  This does not negate the requirement to advertise a correct
    control word for interface modes that have control words where that
    can be reasonably controlled.
    
    The second mode is in-band mode, where the MAC is expected to use the
    in-band control word to determine the operating mode.
    
    The mvneta driver implements the correct pattern required to support
    this: configure the port interface type separately from the in-band
    mode(s).  This is now specified in the phylink documentation patches.
    
    mvpp2 was programming in-band mode for SGMII and the 802.3z modes no
    what, and avoided forcing the link up in fixed/phy modes.  This caused
    a problem with some boards where the PHY is by default programmed to
    enter AN bypass mode, the PHY would report that the link was up, but
    the mvpp2 never completed the exchange of control word.
    
    Another issue that mvpp2 has is it sets SGMII AN format control word
    for both SGMII and 802.3z modes. The format of the control word is
    defined by MVPP2_GMAC_INBAND_AN_MASK, which should be set for SGMII
    and clear for 802.3z. Available Marvell documentation for earlier
    GMAC implementations does not make this clear, but this has been
    ascertained via extensive testing on earlier GMAC implementations,
    and then confirmed with a Macchiatobin Single Shot connected to a
    Clearfog: when MVPP2_GMAC_INBAND_AN_MASK is set, the clearfog does
    not receive the advertised pause mode settings.
    
    Lastly, there is no flow control in the in-band control word in Cisco
    SGMII, setting the flow control autonegotiation bit even with a PHY
    that has the Marvell extension to send this information does not result
    in the flow control being enabled at the MAC.  We need to do this
    manually using the information provided via phylink.
    
    Re-code mvpp2's mac_config() and mac_link_up() to follow this pattern.
    This allows Sven Auhagen's board and Macchiatobin to reliably bring
    the link up with the 88e1512 PHY with phylink operating in PHY mode
    with COMPHY built as a module but the rest of the networking built-in,
    and u-boot having brought up the interface.  in-band mode requires an
    additional patch to resolve another problem.
    Tested-by: default avatarSven Auhagen <sven.auhagen@voleatech.de>
    Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    388ca27f
mvpp2_main.c 149 KB