On Wed, Oct 23, 2024 at 07:00:22PM +0200, Andrew Lunn wrote: > > +static int an8855_config_init(struct phy_device *phydev) > > +{ > > + struct air_an8855_priv *priv = phydev->priv; > > + int ret; > > + > > + /* Enable HW auto downshift */ > > + ret = phy_write(phydev, AN8855_PHY_PAGE_CTRL, AN8855_PHY_EXT_PAGE); > > + if (ret) > > + return ret; > > + ret = phy_set_bits(phydev, AN8855_PHY_EXT_REG_14, > > + AN8855_PHY_EN_DOWN_SHFIT); > > + if (ret) > > + return ret; > > + ret = phy_write(phydev, AN8855_PHY_PAGE_CTRL, AN8855_PHY_NORMAL_PAGE); > > + if (ret) > > + return ret; > > There are locking issues here, which is why we have the helpers > phy_select_page() and phy_restore_page(). The air_en8811h.c gets this > right. Ugh didn't think about it... The switch address is shared with the PHY so yes this is a problem. Consider that this page thing comes from my speculation... Not really use if 1f select page...