Skip to content

Commit 7ec3f87

Browse files
hkallweitdavem330
authored andcommitted
r8169: respect EEE user setting when restarting network
Currently, if network is re-started, we advertise all supported EEE modes, thus potentially overriding a manual adjustment the user made e.g. via ethtool. Be friendly to the user and preserve a manual setting on network re-start. Signed-off-by: Heiner Kallweit <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 0c06d16 commit 7ec3f87

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

drivers/net/ethernet/realtek/r8169_main.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,7 @@ struct rtl8169_private {
680680
struct rtl8169_counters *counters;
681681
struct rtl8169_tc_offsets tc_offset;
682682
u32 saved_wolopts;
683+
int eee_adv;
683684

684685
const char *fw_name;
685686
struct rtl_fw *rtl_fw;
@@ -2101,6 +2102,10 @@ static int rtl8169_set_eee(struct net_device *dev, struct ethtool_eee *data)
21012102
}
21022103

21032104
ret = phy_ethtool_set_eee(tp->phydev, data);
2105+
2106+
if (!ret)
2107+
tp->eee_adv = phy_read_mmd(dev->phydev, MDIO_MMD_AN,
2108+
MDIO_AN_EEE_ADV);
21042109
out:
21052110
pm_runtime_put_noidle(d);
21062111
return ret;
@@ -2131,10 +2136,16 @@ static const struct ethtool_ops rtl8169_ethtool_ops = {
21312136
static void rtl_enable_eee(struct rtl8169_private *tp)
21322137
{
21332138
struct phy_device *phydev = tp->phydev;
2134-
int supported = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE);
2139+
int adv;
2140+
2141+
/* respect EEE advertisement the user may have set */
2142+
if (tp->eee_adv >= 0)
2143+
adv = tp->eee_adv;
2144+
else
2145+
adv = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE);
21352146

2136-
if (supported > 0)
2137-
phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV, supported);
2147+
if (adv >= 0)
2148+
phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV, adv);
21382149
}
21392150

21402151
static void rtl8169_get_mac_version(struct rtl8169_private *tp)
@@ -6719,6 +6730,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
67196730
tp->pci_dev = pdev;
67206731
tp->msg_enable = netif_msg_init(debug.msg_enable, R8169_MSG_DEFAULT);
67216732
tp->supports_gmii = ent->driver_data == RTL_CFG_NO_GBIT ? 0 : 1;
6733+
tp->eee_adv = -1;
67226734

67236735
/* Get the *optional* external "ether_clk" used on some boards */
67246736
rc = rtl_get_ether_clk(tp);

0 commit comments

Comments
 (0)