On 05/24/2017 02:20 PM, Timur Tabi wrote: > On 05/24/2017 04:15 PM, Andrew Lunn wrote: >>> My NIC has a feature called autopolling where it takes over the MDIO >>> bus and regularly polls the link state. When it detects that the >>> link state has changed, it generates a MAC interrupt. This is when >>> I call phy_mac_interrupt() normally. > >> Unfortunately, you need to keep this feature turned off. It will not >> respect the phydev mutex. It has no idea what page has been currently >> selected. It probably has no way to flip the page and see if the SGMII >> link is up. etc. > > phydev mutex? And what do you mean by page?
Yes phydev->lock which is used to serialize the state machine state changes. Most PHYs have many more registers than the 15 standard exposed directly, and so you need indirect reads/writes to access these registers, which typically involve switching a particular page, doing the indirect register access, and then flipping the page back. If you interrupt that scheme one way or another, your reads and writes are all messed up. > > I forgot one detail. Every time you do an MDIO read/write, it > temporarily disables the feature. Although, I think that's not relevant > to your point. Is that done by the HW itself, or is this under SW control exclusively. > > Disabling this feature and switching from PHY_IGNORE_INTERRUPT to > PHY_POLL might fix everything. I will try it. > Humm yes, that seems like a worthwhile exercise at least. -- Florian