Commit a6ad589c authored by Heiner Kallweit's avatar Heiner Kallweit Committed by David S. Miller
Browse files

net: phy: realtek: Fix MMD access on RTL8126A-integrated PHY



All MMD reads return 0 for the RTL8126A-integrated PHY. Therefore phylib
assumes it doesn't support EEE, what results in higher power consumption,
and a significantly higher chip temperature in my case.
To fix this split out the PHY driver for the RTL8126A-integrated PHY
and set the read_mmd/write_mmd callbacks to read from vendor-specific
registers.

Fixes: 5befa372 ("net: phy: realtek: add support for RTL8126A-integrated 5Gbps PHY")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ff8ee11e
Loading
Loading
Loading
Loading
+23 −1
Original line number Diff line number Diff line
@@ -1081,6 +1081,16 @@ static int rtl8221b_vn_cg_c45_match_phy_device(struct phy_device *phydev)
	return rtlgen_is_c45_match(phydev, RTL_8221B_VN_CG, true);
}

static int rtl8251b_c22_match_phy_device(struct phy_device *phydev)
{
	return rtlgen_is_c45_match(phydev, RTL_8251B, false);
}

static int rtl8251b_c45_match_phy_device(struct phy_device *phydev)
{
	return rtlgen_is_c45_match(phydev, RTL_8251B, true);
}

static int rtlgen_resume(struct phy_device *phydev)
{
	int ret = genphy_resume(phydev);
@@ -1418,7 +1428,7 @@ static struct phy_driver realtek_drvs[] = {
		.suspend        = genphy_c45_pma_suspend,
		.resume         = rtlgen_c45_resume,
	}, {
		PHY_ID_MATCH_EXACT(0x001cc862),
		.match_phy_device = rtl8251b_c45_match_phy_device,
		.name           = "RTL8251B 5Gbps PHY",
		.get_features   = rtl822x_get_features,
		.config_aneg    = rtl822x_config_aneg,
@@ -1427,6 +1437,18 @@ static struct phy_driver realtek_drvs[] = {
		.resume         = rtlgen_resume,
		.read_page      = rtl821x_read_page,
		.write_page     = rtl821x_write_page,
	}, {
		.match_phy_device = rtl8251b_c22_match_phy_device,
		.name           = "RTL8126A-internal 5Gbps PHY",
		.get_features   = rtl822x_get_features,
		.config_aneg    = rtl822x_config_aneg,
		.read_status    = rtl822x_read_status,
		.suspend        = genphy_suspend,
		.resume         = rtlgen_resume,
		.read_page      = rtl821x_read_page,
		.write_page     = rtl821x_write_page,
		.read_mmd	= rtl822x_read_mmd,
		.write_mmd	= rtl822x_write_mmd,
	}, {
		PHY_ID_MATCH_EXACT(0x001ccad0),
		.name		= "RTL8224 2.5Gbps PHY",