return ret;
 }
 
+static int cpsw_get_eee(struct net_device *ndev, struct ethtool_eee *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_get_eee(cpsw->slaves[slave_no].phy, edata);
+       else
+               return -EOPNOTSUPP;
+}
+
+static int cpsw_set_eee(struct net_device *ndev, struct ethtool_eee *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;
+}
+
 static const struct ethtool_ops cpsw_ethtool_ops = {
        .get_drvinfo    = cpsw_get_drvinfo,
        .get_msglevel   = cpsw_get_msglevel,
        .set_channels   = cpsw_set_channels,
        .get_link_ksettings     = cpsw_get_link_ksettings,
        .set_link_ksettings     = cpsw_set_link_ksettings,
+       .get_eee        = cpsw_get_eee,
+       .set_eee        = cpsw_set_eee,
 };
 
 static void cpsw_slave_init(struct cpsw_slave *slave, struct cpsw_common *cpsw,