enetc: disable EEE autoneg by default
authorYangbo Lu <yangbo.lu@nxp.com>
Fri, 6 Dec 2019 09:53:35 +0000 (17:53 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 6 Dec 2019 19:47:26 +0000 (11:47 -0800)
The EEE support has not been enabled on ENETC, but it may connect
to a PHY which supports EEE and advertises EEE by default, while
its link partner also advertises EEE. If this happens, the PHY enters
low power mode when the traffic rate is low and causes packet loss.
This patch disables EEE advertisement by default for any PHY that
ENETC connects to, to prevent the above unwanted outcome.

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
Reviewed-by: Claudiu Manoil <claudiu.manoil@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/enetc/enetc.c

index 9db1b96ed9b97ab34ce0830705d9d072ad5277d9..17739906c966c455cf387d9aa6866f2c00a95fdf 100644 (file)
@@ -1332,6 +1332,7 @@ static int enetc_phy_connect(struct net_device *ndev)
 {
        struct enetc_ndev_priv *priv = netdev_priv(ndev);
        struct phy_device *phydev;
+       struct ethtool_eee edata;
 
        if (!priv->phy_node)
                return 0; /* phy-less mode */
@@ -1345,6 +1346,10 @@ static int enetc_phy_connect(struct net_device *ndev)
 
        phy_attached_info(phydev);
 
+       /* disable EEE autoneg, until ENETC driver supports it */
+       memset(&edata, 0, sizeof(struct ethtool_eee));
+       phy_ethtool_set_eee(phydev, &edata);
+
        return 0;
 }