On Wed, Oct 23, 2024 at 07:07:08PM +0200, Christian Marangi wrote: > 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... > From what I observed > 0x0 PHY page > 0x1 this strange EXT > 0x4 acess switch register (every PHY can access the switch) > Just to followup on this... I checked air_en8811h registers again and they match MII access to the switch so yes my speculation is correct. Also extra happy since I now know what those magic values means at least for MII. > > > > Is there anything in common with the en8811h? Does it also support > > downshift? Can its LED code be used here? > > > > For some reason part of the LED are controlled by the switch and some > are by the PHY. I still have to investigate that (not giving priority to > it... just on my todo) > > For downshift as you notice it's a single bit with no count... > From their comments in the original driver it's said "Enable HW > autodownshift" > > Trying to reach them but currently it's all very obscure. > > -- > Ansuel -- Ansuel