mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2025-12-07 21:22:10 -05:00
The addition of the soft_reset() function to the RTL8221B PHYs
missed to take care of C22/C45 standalone PHY versions. Especially
on RTL930x switch devices with these PHY the reset fails for the
C45 operation mode. This comes from the fact that the mdio bus
disables C22 read/writes when being set to C45.
Upstream has gained a proper C45 reset function. Use it for the
C45 PHY models.
Fixes: 7e3284eef7 ("generic: use genphy_soft_reset for RealTek 2.5G PHYs")
Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/19843
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
74 lines
3.0 KiB
Diff
74 lines
3.0 KiB
Diff
From 85cd45580f5e3b26068cccb7d6173f200e754dc0 Mon Sep 17 00:00:00 2001
|
|
From: Daniel Golle <daniel@makrotopia.org>
|
|
Date: Sun, 2 Apr 2023 23:56:16 +0100
|
|
Subject: [PATCH 1/2] net: phy: realtek: use genphy_soft_reset for 2.5G PHYs
|
|
|
|
Some vendor bootloaders do weird things with those PHYs which result in
|
|
link modes being reported wrongly. Start from a clean sheet by resetting
|
|
the PHY.
|
|
|
|
Reported-by: Yevhen Kolomeiko <jarvis2709@gmail.com>
|
|
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|
---
|
|
drivers/net/phy/realtek/realtek_main.c | 6 ++++++
|
|
1 file changed, 6 insertions(+)
|
|
|
|
--- a/drivers/net/phy/realtek/realtek_main.c
|
|
+++ b/drivers/net/phy/realtek/realtek_main.c
|
|
@@ -1666,6 +1666,7 @@ static struct phy_driver realtek_drvs[]
|
|
}, {
|
|
.name = "RTL8226 2.5Gbps PHY",
|
|
.match_phy_device = rtl8226_match_phy_device,
|
|
+ .soft_reset = genphy_soft_reset,
|
|
.get_features = rtl822x_get_features,
|
|
.config_aneg = rtl822x_config_aneg,
|
|
.read_status = rtl822x_read_status,
|
|
@@ -1676,6 +1677,7 @@ static struct phy_driver realtek_drvs[]
|
|
}, {
|
|
.match_phy_device = rtl8221b_match_phy_device,
|
|
.name = "RTL8226B_RTL8221B 2.5Gbps PHY",
|
|
+ .soft_reset = genphy_soft_reset,
|
|
.get_features = rtl822x_get_features,
|
|
.config_aneg = rtl822x_config_aneg,
|
|
.config_init = rtl822xb_config_init,
|
|
@@ -1698,6 +1700,7 @@ static struct phy_driver realtek_drvs[]
|
|
}, {
|
|
PHY_ID_MATCH_EXACT(0x001cc848),
|
|
.name = "RTL8226B-CG_RTL8221B-CG 2.5Gbps PHY",
|
|
+ .soft_reset = genphy_soft_reset,
|
|
.get_features = rtl822x_get_features,
|
|
.config_aneg = rtl822x_config_aneg,
|
|
.config_init = rtl822xb_config_init,
|
|
@@ -1710,6 +1713,7 @@ static struct phy_driver realtek_drvs[]
|
|
}, {
|
|
.match_phy_device = rtl8221b_vb_cg_c22_match_phy_device,
|
|
.name = "RTL8221B-VB-CG 2.5Gbps PHY (C22)",
|
|
+ .soft_reset = genphy_soft_reset,
|
|
.probe = rtl822x_probe,
|
|
.get_features = rtl822x_get_features,
|
|
.config_aneg = rtl822x_config_aneg,
|
|
@@ -1723,6 +1727,7 @@ static struct phy_driver realtek_drvs[]
|
|
}, {
|
|
.match_phy_device = rtl8221b_vb_cg_c45_match_phy_device,
|
|
.name = "RTL8221B-VB-CG 2.5Gbps PHY (C45)",
|
|
+ .soft_reset = rtl822x_c45_soft_reset,
|
|
.probe = rtl822x_probe,
|
|
.config_init = rtl822xb_config_init,
|
|
.get_rate_matching = rtl822xb_get_rate_matching,
|
|
@@ -1734,6 +1739,7 @@ static struct phy_driver realtek_drvs[]
|
|
}, {
|
|
.match_phy_device = rtl8221b_vn_cg_c22_match_phy_device,
|
|
.name = "RTL8221B-VM-CG 2.5Gbps PHY (C22)",
|
|
+ .soft_reset = genphy_soft_reset,
|
|
.probe = rtl822x_probe,
|
|
.get_features = rtl822x_get_features,
|
|
.config_aneg = rtl822x_config_aneg,
|
|
@@ -1747,6 +1753,7 @@ static struct phy_driver realtek_drvs[]
|
|
}, {
|
|
.match_phy_device = rtl8221b_vn_cg_c45_match_phy_device,
|
|
.name = "RTL8221B-VN-CG 2.5Gbps PHY (C45)",
|
|
+ .soft_reset = rtl822x_c45_soft_reset,
|
|
.probe = rtl822x_probe,
|
|
.config_init = rtl822xb_config_init,
|
|
.get_rate_matching = rtl822xb_get_rate_matching,
|