> +static int lan743x_ethtool_set_eee(struct net_device *netdev, > + struct ethtool_eee *eee) > +{ > + struct lan743x_adapter *adapter = netdev_priv(netdev); > + struct phy_device *phydev = NULL; > + u32 buf = 0; > + int ret = 0; > + > + if (!netdev) > + return -EINVAL; > + adapter = netdev_priv(netdev); > + if (!adapter) > + return -EINVAL; > + phydev = netdev->phydev; > + if (!phydev) > + return -EIO; > + if (!phydev->drv) { > + netif_err(adapter, drv, adapter->netdev, > + "Missing PHY Driver\n"); > + return -EIO; > + } > + > + if (eee->eee_enabled) { > + ret = phy_init_eee(phydev, 0); > + if (ret) { > + netif_err(adapter, drv, adapter->netdev, > + "EEE initialization failed\n"); > + return ret; > + } > + > + buf = lan743x_csr_read(adapter, MAC_CR); > + buf |= MAC_CR_EEE_EN_; > + lan743x_csr_write(adapter, MAC_CR, buf); > + > + phy_ethtool_set_eee(phydev, eee); > + > + buf = (u32)eee->tx_lpi_timer; > + lan743x_csr_write(adapter, MAC_EEE_TX_LPI_REQ_DLY_CNT, buf); > + netif_info(adapter, drv, adapter->netdev, "Enabled EEE\n"); > + } else { > + buf = lan743x_csr_read(adapter, MAC_CR); > + buf &= ~MAC_CR_EEE_EN_; > + lan743x_csr_write(adapter, MAC_CR, buf); > + netif_info(adapter, drv, adapter->netdev, "Disabled EEE\n"); > + } > +
Hi Bryan You should call phy_ethtool_set_eee() in both cases, so that it gets disabled in the PHY as well. It needs to stop advertising it. Andrew