Commit e340bff2 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Jakub Kicinski
Browse files

r8169: copy vendor driver 2.5G/5G EEE advertisement constraints



Vendor driver r8125 doesn't advertise 2.5G EEE on RTL8125A, and r8126
doesn't advertise 5G EEE. Likely there are compatibility issues,
therefore do the same in r8169.
With this change we don't have to disable 2.5G EEE advertisement in
rtl8125a_config_eee_phy() any longer.
We use new phylib accessor phy_set_eee_broken() to mark the respective
EEE modes as broken.

Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Link: https://patch.msgid.link/ce185e10-8a2f-4cf8-a49b-fd8fb3c3c8a1@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent ed623fb8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -5228,6 +5228,12 @@ static int r8169_mdio_register(struct rtl8169_private *tp)
		phy_support_eee(tp->phydev);
	phy_support_asym_pause(tp->phydev);

	/* mimic behavior of r8125/r8126 vendor drivers */
	if (tp->mac_version == RTL_GIGA_MAC_VER_61)
		phy_set_eee_broken(tp->phydev,
				   ETHTOOL_LINK_MODE_2500baseT_Full_BIT);
	phy_set_eee_broken(tp->phydev, ETHTOOL_LINK_MODE_5000baseT_Full_BIT);

	/* PHY will be woken up in rtl_open() */
	phy_suspend(tp->phydev);

+4 −12
Original line number Diff line number Diff line
@@ -96,15 +96,7 @@ static void rtl8125_common_config_eee_phy(struct phy_device *phydev)
	phy_modify_paged(phydev, 0xa4a, 0x11, 0x0200, 0x0000);
}

static void rtl8125a_config_eee_phy(struct phy_device *phydev)
{
	rtl8168g_config_eee_phy(phydev);
	/* disable EEE at 2.5Gbps */
	phy_modify_paged(phydev, 0xa6d, 0x12, 0x0001, 0x0000);
	rtl8125_common_config_eee_phy(phydev);
}

static void rtl8125b_config_eee_phy(struct phy_device *phydev)
static void rtl8125_config_eee_phy(struct phy_device *phydev)
{
	rtl8168g_config_eee_phy(phydev);
	rtl8125_common_config_eee_phy(phydev);
@@ -1066,7 +1058,7 @@ static void rtl8125a_2_hw_phy_config(struct rtl8169_private *tp,
	rtl8168g_enable_gphy_10m(phydev);

	rtl8168g_disable_aldps(phydev);
	rtl8125a_config_eee_phy(phydev);
	rtl8125_config_eee_phy(phydev);
}

static void rtl8125b_hw_phy_config(struct rtl8169_private *tp,
@@ -1106,7 +1098,7 @@ static void rtl8125b_hw_phy_config(struct rtl8169_private *tp,

	rtl8125_legacy_force_mode(phydev);
	rtl8168g_disable_aldps(phydev);
	rtl8125b_config_eee_phy(phydev);
	rtl8125_config_eee_phy(phydev);
}

static void rtl8125d_hw_phy_config(struct rtl8169_private *tp,
@@ -1116,7 +1108,7 @@ static void rtl8125d_hw_phy_config(struct rtl8169_private *tp,
	rtl8168g_enable_gphy_10m(phydev);
	rtl8125_legacy_force_mode(phydev);
	rtl8168g_disable_aldps(phydev);
	rtl8125b_config_eee_phy(phydev);
	rtl8125_config_eee_phy(phydev);
}

static void rtl8126a_hw_phy_config(struct rtl8169_private *tp,