Merge branch 'net-add-and-use-phy_disable_eee'
Heiner Kallweit says: ==================== net: add and use phy_disable_eee If a MAC driver doesn't support EEE, then the PHY shouldn't advertise it. Add phy_disable_eee() for this purpose, and use it in cpsw driver. ==================== Link: https://patch.msgid.link/5139374e-7151-4d0d-8ba9-9ec3d9b52f67@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -635,6 +635,8 @@ static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv)
|
|||||||
|
|
||||||
slave->phy = phy;
|
slave->phy = phy;
|
||||||
|
|
||||||
|
phy_disable_eee(slave->phy);
|
||||||
|
|
||||||
phy_attached_info(slave->phy);
|
phy_attached_info(slave->phy);
|
||||||
|
|
||||||
phy_start(slave->phy);
|
phy_start(slave->phy);
|
||||||
@@ -1225,7 +1227,6 @@ static const struct ethtool_ops cpsw_ethtool_ops = {
|
|||||||
.get_link_ksettings = cpsw_get_link_ksettings,
|
.get_link_ksettings = cpsw_get_link_ksettings,
|
||||||
.set_link_ksettings = cpsw_set_link_ksettings,
|
.set_link_ksettings = cpsw_set_link_ksettings,
|
||||||
.get_eee = cpsw_get_eee,
|
.get_eee = cpsw_get_eee,
|
||||||
.set_eee = cpsw_set_eee,
|
|
||||||
.nway_reset = cpsw_nway_reset,
|
.nway_reset = cpsw_nway_reset,
|
||||||
.get_ringparam = cpsw_get_ringparam,
|
.get_ringparam = cpsw_get_ringparam,
|
||||||
.set_ringparam = cpsw_set_ringparam,
|
.set_ringparam = cpsw_set_ringparam,
|
||||||
|
|||||||
@@ -434,18 +434,6 @@ int cpsw_get_eee(struct net_device *ndev, struct ethtool_keee *edata)
|
|||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cpsw_set_eee(struct net_device *ndev, struct ethtool_keee *edata)
|
|
||||||
{
|
|
||||||
struct cpsw_priv *priv = netdev_priv(ndev);
|
|
||||||
struct cpsw_common *cpsw = priv->cpsw;
|
|
||||||
int slave_no = cpsw_slave_index(cpsw, priv);
|
|
||||||
|
|
||||||
if (cpsw->slaves[slave_no].phy)
|
|
||||||
return phy_ethtool_set_eee(cpsw->slaves[slave_no].phy, edata);
|
|
||||||
else
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
}
|
|
||||||
|
|
||||||
int cpsw_nway_reset(struct net_device *ndev)
|
int cpsw_nway_reset(struct net_device *ndev)
|
||||||
{
|
{
|
||||||
struct cpsw_priv *priv = netdev_priv(ndev);
|
struct cpsw_priv *priv = netdev_priv(ndev);
|
||||||
|
|||||||
@@ -778,6 +778,8 @@ static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv)
|
|||||||
|
|
||||||
slave->phy = phy;
|
slave->phy = phy;
|
||||||
|
|
||||||
|
phy_disable_eee(slave->phy);
|
||||||
|
|
||||||
phy_attached_info(slave->phy);
|
phy_attached_info(slave->phy);
|
||||||
|
|
||||||
phy_start(slave->phy);
|
phy_start(slave->phy);
|
||||||
@@ -1209,7 +1211,6 @@ static const struct ethtool_ops cpsw_ethtool_ops = {
|
|||||||
.get_link_ksettings = cpsw_get_link_ksettings,
|
.get_link_ksettings = cpsw_get_link_ksettings,
|
||||||
.set_link_ksettings = cpsw_set_link_ksettings,
|
.set_link_ksettings = cpsw_set_link_ksettings,
|
||||||
.get_eee = cpsw_get_eee,
|
.get_eee = cpsw_get_eee,
|
||||||
.set_eee = cpsw_set_eee,
|
|
||||||
.nway_reset = cpsw_nway_reset,
|
.nway_reset = cpsw_nway_reset,
|
||||||
.get_ringparam = cpsw_get_ringparam,
|
.get_ringparam = cpsw_get_ringparam,
|
||||||
.set_ringparam = cpsw_set_ringparam,
|
.set_ringparam = cpsw_set_ringparam,
|
||||||
|
|||||||
@@ -497,7 +497,6 @@ int cpsw_get_link_ksettings(struct net_device *ndev,
|
|||||||
int cpsw_set_link_ksettings(struct net_device *ndev,
|
int cpsw_set_link_ksettings(struct net_device *ndev,
|
||||||
const struct ethtool_link_ksettings *ecmd);
|
const struct ethtool_link_ksettings *ecmd);
|
||||||
int cpsw_get_eee(struct net_device *ndev, struct ethtool_keee *edata);
|
int cpsw_get_eee(struct net_device *ndev, struct ethtool_keee *edata);
|
||||||
int cpsw_set_eee(struct net_device *ndev, struct ethtool_keee *edata);
|
|
||||||
int cpsw_nway_reset(struct net_device *ndev);
|
int cpsw_nway_reset(struct net_device *ndev);
|
||||||
void cpsw_get_ringparam(struct net_device *ndev,
|
void cpsw_get_ringparam(struct net_device *ndev,
|
||||||
struct ethtool_ringparam *ering,
|
struct ethtool_ringparam *ering,
|
||||||
|
|||||||
@@ -3003,6 +3003,22 @@ void phy_support_eee(struct phy_device *phydev)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(phy_support_eee);
|
EXPORT_SYMBOL(phy_support_eee);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* phy_disable_eee - Disable EEE for the PHY
|
||||||
|
* @phydev: Target phy_device struct
|
||||||
|
*
|
||||||
|
* This function is used by MAC drivers for MAC's which don't support EEE.
|
||||||
|
* It disables EEE on the PHY layer.
|
||||||
|
*/
|
||||||
|
void phy_disable_eee(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
linkmode_zero(phydev->supported_eee);
|
||||||
|
linkmode_zero(phydev->advertising_eee);
|
||||||
|
phydev->eee_cfg.tx_lpi_enabled = false;
|
||||||
|
phydev->eee_cfg.eee_enabled = false;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(phy_disable_eee);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* phy_support_sym_pause - Enable support of symmetrical pause
|
* phy_support_sym_pause - Enable support of symmetrical pause
|
||||||
* @phydev: target phy_device struct
|
* @phydev: target phy_device struct
|
||||||
|
|||||||
@@ -2071,6 +2071,7 @@ void phy_advertise_eee_all(struct phy_device *phydev);
|
|||||||
void phy_support_sym_pause(struct phy_device *phydev);
|
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);
|
||||||
void phy_support_eee(struct phy_device *phydev);
|
void phy_support_eee(struct phy_device *phydev);
|
||||||
|
void phy_disable_eee(struct phy_device *phydev);
|
||||||
void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx,
|
void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx,
|
||||||
bool autoneg);
|
bool autoneg);
|
||||||
void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx);
|
void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx);
|
||||||
|
|||||||
Reference in New Issue
Block a user