On 11/08/2016 12:43 PM, Timur Tabi wrote: > On 11/07/2016 10:30 AM, Timur Tabi wrote: >> >> I'm still don't understand 100% how these flags really work, because I >> just can't shake the feeling that they should not be set for every phy. >> If these flags are supposed to be turned on universally, then why are >> they even an option? > > So I've been giving this more thought. Can you tell me if the following > is correct: > > 1) PHY drivers and/or phylib sets the SUPPORTED_Pause | > SUPPORTED_AsymPause bits in phydev->supported. This indicates that the > PHY supports pause frames.
Agreed. > > 2) The MAC driver checks phydev->supported before it calls phy_start(). > If (SUPPORTED_Pause | SUPPORTED_AsymPause) is set, then it sets those > bits in phydev->advertising if it wants to enable pause frame support. Also correct. > > 3) When the link state changes, the MAC driver checks > phydev->advertising, and if the bits are set, then it enables those > features in the MAC. Almost, we need to see what the link partner advertised, by looking at phydev->pause / phydev->asym_pause and checking the local knobs whether flow control can be enabled, but other than that, this looks correct to me. -- Florian