[SRU][R][PATCH 2/7] UBUNTU: SAUCE: net: phy: realtek: add support for dummy phy
AceLan Kao
acelan.kao at canonical.com
Fri Jul 17 05:10:18 UTC 2026
From: Javen Xu <javen_xu at realsil.com.cn>
BugLink: https://bugs.launchpad.net/bugs/2160475
Add support for rtl8116af dummy phy driver, match phy id and read link
speed from MII_BMCR.
Signed-off-by: Javen Xu <javen_xu at realsil.com.cn>
(cherry picked from commit https://lore.kernel.org/netdev/20260603065916.334-2-javen_xu@realsil.com.cn/)
Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao at canonical.com>
---
drivers/net/phy/realtek/realtek_main.c | 54 ++++++++++++++++++++++++++
include/net/phy/realtek_phy.h | 1 +
2 files changed, 55 insertions(+)
diff --git a/drivers/net/phy/realtek/realtek_main.c b/drivers/net/phy/realtek/realtek_main.c
index 75565fbdbf6d..efa8c654745c 100644
--- a/drivers/net/phy/realtek/realtek_main.c
+++ b/drivers/net/phy/realtek/realtek_main.c
@@ -2114,6 +2114,47 @@ static int rtlgen_sfp_get_features(struct phy_device *phydev)
return 0;
}
+static int rtl8116af_sfp_get_features(struct phy_device *phydev)
+{
+ linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
+ phydev->supported);
+
+ phydev->speed = SPEED_1000;
+ phydev->duplex = DUPLEX_FULL;
+
+ phydev->port = PORT_FIBRE;
+
+ return 0;
+}
+
+static int rtl8116af_sfp_read_status(struct phy_device *phydev)
+{
+ int val, err;
+
+ err = genphy_update_link(phydev);
+ if (err)
+ return err;
+
+ if (!phydev->link)
+ return 0;
+
+ val = phy_read(phydev, MII_BMCR);
+ if (val < 0)
+ return val;
+
+ if (val & BMCR_SPEED1000)
+ phydev->speed = SPEED_1000;
+ else if (val & BMCR_SPEED100)
+ phydev->speed = SPEED_100;
+
+ if (val & BMCR_FULLDPLX)
+ phydev->duplex = DUPLEX_FULL;
+ else
+ phydev->duplex = DUPLEX_HALF;
+
+ return 0;
+}
+
static int rtlgen_sfp_read_status(struct phy_device *phydev)
{
int val, err;
@@ -2388,6 +2429,19 @@ static struct phy_driver realtek_drvs[] = {
.write_page = rtl821x_write_page,
.read_mmd = rtl822x_read_mmd,
.write_mmd = rtl822x_write_mmd,
+ }, {
+ PHY_ID_MATCH_EXACT(PHY_ID_RTL8116AF_DUMMY),
+ .name = "RTL8116af PHY Mode",
+ .flags = PHY_IS_INTERNAL,
+ .get_features = rtl8116af_sfp_get_features,
+ .config_aneg = rtlgen_sfp_config_aneg,
+ .read_status = rtl8116af_sfp_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",
diff --git a/include/net/phy/realtek_phy.h b/include/net/phy/realtek_phy.h
index d683bc1b0659..cbf91af0ead6 100644
--- a/include/net/phy/realtek_phy.h
+++ b/include/net/phy/realtek_phy.h
@@ -3,5 +3,6 @@
#define _REALTEK_PHY_H
#define PHY_ID_RTL_DUMMY_SFP 0x001ccbff
+#define PHY_ID_RTL8116AF_DUMMY 0x001ccbfe
#endif /* _REALTEK_PHY_H */
--
2.53.0
More information about the kernel-team
mailing list