Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: phy: realtek: support NBase-T MMD EEE registers on RTL8125

Emulate the 802.3bz MMD EEE registers for 2.5Gbps EEE on RTL8125.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Heiner Kallweit and committed by
David S. Miller
edde25e5 99b60d56

+43 -2
+43 -2
drivers/net/phy/realtek.c
··· 305 305 return ret; 306 306 } 307 307 308 + static int rtl8125_read_mmd(struct phy_device *phydev, int devnum, u16 regnum) 309 + { 310 + int ret = rtlgen_read_mmd(phydev, devnum, regnum); 311 + 312 + if (ret != -EOPNOTSUPP) 313 + return ret; 314 + 315 + if (devnum == MDIO_MMD_PCS && regnum == MDIO_PCS_EEE_ABLE2) { 316 + rtl821x_write_page(phydev, 0xa6e); 317 + ret = __phy_read(phydev, 0x16); 318 + rtl821x_write_page(phydev, 0); 319 + } else if (devnum == MDIO_MMD_AN && regnum == MDIO_AN_EEE_ADV2) { 320 + rtl821x_write_page(phydev, 0xa6d); 321 + ret = __phy_read(phydev, 0x12); 322 + rtl821x_write_page(phydev, 0); 323 + } else if (devnum == MDIO_MMD_AN && regnum == MDIO_AN_EEE_LPABLE2) { 324 + rtl821x_write_page(phydev, 0xa6d); 325 + ret = __phy_read(phydev, 0x10); 326 + rtl821x_write_page(phydev, 0); 327 + } 328 + 329 + return ret; 330 + } 331 + 332 + static int rtl8125_write_mmd(struct phy_device *phydev, int devnum, u16 regnum, 333 + u16 val) 334 + { 335 + int ret = rtlgen_write_mmd(phydev, devnum, regnum, val); 336 + 337 + if (ret != -EOPNOTSUPP) 338 + return ret; 339 + 340 + if (devnum == MDIO_MMD_AN && regnum == MDIO_AN_EEE_ADV2) { 341 + rtl821x_write_page(phydev, 0xa6d); 342 + ret = __phy_write(phydev, 0x12, val); 343 + rtl821x_write_page(phydev, 0); 344 + } 345 + 346 + return ret; 347 + } 348 + 308 349 static int rtl8125_get_features(struct phy_device *phydev) 309 350 { 310 351 int val; ··· 514 473 .resume = genphy_resume, 515 474 .read_page = rtl821x_read_page, 516 475 .write_page = rtl821x_write_page, 517 - .read_mmd = rtlgen_read_mmd, 518 - .write_mmd = rtlgen_write_mmd, 476 + .read_mmd = rtl8125_read_mmd, 477 + .write_mmd = rtl8125_write_mmd, 519 478 }, { 520 479 PHY_ID_MATCH_EXACT(0x001cc961), 521 480 .name = "RTL8366RB Gigabit Ethernet",