mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 18:47:06 +00:00
68 lines
2.5 KiB
Diff
68 lines
2.5 KiB
Diff
|
From a6ad589c1d118f9d5b1bc4c6888d42919f830340 Mon Sep 17 00:00:00 2001
|
||
|
From: Heiner Kallweit <hkallweit1@gmail.com>
|
||
|
Date: Mon, 7 Oct 2024 11:57:41 +0200
|
||
|
Subject: [PATCH] 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: 5befa3728b85 ("net: phy: realtek: add support for RTL8126A-integrated 5Gbps PHY")
|
||
|
Cc: stable@vger.kernel.org
|
||
|
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
|
||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
|
---
|
||
|
drivers/net/phy/realtek.c | 24 +++++++++++++++++++++++-
|
||
|
1 file changed, 23 insertions(+), 1 deletion(-)
|
||
|
|
||
|
--- a/drivers/net/phy/realtek.c
|
||
|
+++ b/drivers/net/phy/realtek.c
|
||
|
@@ -1081,6 +1081,16 @@ static int rtl8221b_vn_cg_c45_match_phy_
|
||
|
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,
|
||
|
@@ -1428,6 +1438,18 @@ static struct phy_driver realtek_drvs[]
|
||
|
.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",
|
||
|
.get_features = rtl822x_c45_get_features,
|