net: ethernet: Add helper for MACs which support pause
Rather than have the MAC drivers manipulate phydev members, add a helper function for MACs supporting Pause, but not Asym Pause. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
af8d9bb2f2
commit
c306ad3618
4 changed files with 17 additions and 4 deletions
|
@ -890,7 +890,7 @@ static int bcm_enet_open(struct net_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* mask with MAC supported features */
|
/* mask with MAC supported features */
|
||||||
phydev->supported |= SUPPORTED_Pause;
|
phy_support_sym_pause(phydev);
|
||||||
phy_set_max_speed(phydev, SPEED_100);
|
phy_set_max_speed(phydev, SPEED_100);
|
||||||
|
|
||||||
if (priv->pause_auto && priv->pause_rx && priv->pause_tx)
|
if (priv->pause_auto && priv->pause_rx && priv->pause_tx)
|
||||||
|
|
|
@ -1950,14 +1950,12 @@ static int fec_enet_mii_probe(struct net_device *ndev)
|
||||||
phy_remove_link_mode(phy_dev,
|
phy_remove_link_mode(phy_dev,
|
||||||
ETHTOOL_LINK_MODE_1000baseT_Half_BIT);
|
ETHTOOL_LINK_MODE_1000baseT_Half_BIT);
|
||||||
#if !defined(CONFIG_M5272)
|
#if !defined(CONFIG_M5272)
|
||||||
phy_dev->supported |= SUPPORTED_Pause;
|
phy_support_sym_pause(phy_dev);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
phy_set_max_speed(phy_dev, 100);
|
phy_set_max_speed(phy_dev, 100);
|
||||||
|
|
||||||
phy_dev->advertising = phy_dev->supported;
|
|
||||||
|
|
||||||
fep->link = 0;
|
fep->link = 0;
|
||||||
fep->full_duplex = 0;
|
fep->full_duplex = 0;
|
||||||
|
|
||||||
|
|
|
@ -1783,6 +1783,20 @@ void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(phy_remove_link_mode);
|
EXPORT_SYMBOL(phy_remove_link_mode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* phy_support_sym_pause - Enable support of symmetrical pause
|
||||||
|
* @phydev: target phy_device struct
|
||||||
|
*
|
||||||
|
* Description: Called by the MAC to indicate is supports symmetrical
|
||||||
|
* Pause, but not asym pause.
|
||||||
|
*/
|
||||||
|
void phy_support_sym_pause(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
phydev->supported |= SUPPORTED_Pause;
|
||||||
|
phydev->advertising = phydev->supported;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(phy_support_sym_pause);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* phy_support_asym_pause - Enable support of asym pause
|
* phy_support_asym_pause - Enable support of asym pause
|
||||||
* @phydev: target phy_device struct
|
* @phydev: target phy_device struct
|
||||||
|
|
|
@ -1050,6 +1050,7 @@ int phy_start_interrupts(struct phy_device *phydev);
|
||||||
void phy_print_status(struct phy_device *phydev);
|
void phy_print_status(struct phy_device *phydev);
|
||||||
int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
|
int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
|
||||||
void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode);
|
void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode);
|
||||||
|
void phy_support_sym_pause(struct phy_device *phydev);
|
||||||
void phy_support_asym_pause(struct phy_device *phydev);
|
void phy_support_asym_pause(struct phy_device *phydev);
|
||||||
|
|
||||||
int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
|
int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
|
||||||
|
|
Loading…
Add table
Reference in a new issue