Re: [PATCH net-next 3/4] net: phy: realtek: use paged access for MDIO_MMD_VEND2 in C22 mode
From: ALOK TIWARI
Date: Sun Jan 04 2026 - 09:31:25 EST
On 1/4/2026 6:42 PM, Daniel Golle wrote:
+static int rtl822xb_read_mmd(struct phy_device *phydev, int devnum, u16 reg)
+{
+ int oldpage, ret, read_ret;
+ u16 page;
+
+ /* Use Clause-45 bus access in case it is available */
+ if (phydev->is_c45)
+ return __mdiobus_c45_read(phydev->mdio.bus, phydev->mdio.addr,
+ devnum, mmdreg);
+
mmdreg is not defined.
+ /* Use indirect access via MII_MMD_CTRL and MII_MMD_DATA for all
+ * MMDs except MDIO_MMD_VEND2
+ */
+ if (devnum != MDIO_MMD_VEND2) {
+ __mdiobus_write(phydev->mdio.bus, phydev->mdio.addr,
+ MII_MMD_CTRL, devnum);
+ __mdiobus_write(phydev->mdio.bus, phydev->mdio.addr,
+ MII_MMD_DATA, mmdreg);
+ __mdiobus_write(phydev->mdio.bus, phydev->mdio.addr,
+ MII_MMD_CTRL, devnum | MII_MMD_CTRL_NOINCR);
+
+ return __mdiobus_read(phydev->mdio.bus, phydev->mdio.addr,
+ MII_MMD_DATA);
+ }
+
+ /* Use paged access for MDIO_MMD_VEND2 over Clause-22 */
+ page = RTL822X_VND2_TO_PAGE(reg);
+ oldpage = __phy_read(phydev, RTL821x_PAGE_SELECT);
+ if (oldpage < 0)
+ return ret;
+
+ if (oldpage != page) {
+ ret = __phy_write(phydev, RTL821x_PAGE_SELECT, page);
+ if (ret < 0)
+ return ret;
+ }
+
+ read_ret = __phy_read(phydev, RTL822X_VND2_TO_PAGE_REG(reg));
+ if (oldpage != page) {
+ ret = __phy_write(phydev, RTL821x_PAGE_SELECT, oldpage);
+ if (ret < 0)
+ return ret;
+ }
+
+ return read_ret;
+}
Thanks,
Alok