• Heiner Kallweit's avatar
    net: phy: improve pause handling · 22c0ef6b
    Heiner Kallweit authored
    When probing the phy device we set sym and asym pause in the "supported"
    bitmap (unless the PHY tells us otherwise). However we don't know yet
    whether the MAC supports pause. Simply copying phy->supported to
    phy->advertising will trigger advertising pause, and that's not
    what we want. Therefore add phy_advertise_supported() that copies all
    modes but doesn't touch the pause bits.
    
    In phy_support_(a)sym_pause we shouldn't set any bits in the supported
    bitmap because we may set a bit the PHY intentionally disabled.
    Effective pause support should be the AND-combined PHY and MAC pause
    capabilities. If the MAC supports everything, then it's only relevant
    what the PHY supports. If MAC supports sym pause only, then we have to
    clear the asym bit in phydev->supported.
    Copy the pause flags only and don't touch the modes, because a driver
    may have intentionally removed a mode from phydev->advertising.
    Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
    Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    22c0ef6b
phy-core.c 22 KB