Skip to contentSkip to conversation

Is Documentation/networking/phy.txt still up-to-date?

DISCUSSION Sebastian Frias 2 participants 3 messages Nov 9, 2016 – Nov 14, 2016

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

Hi,

Documentation/networking/phy.txt discusses phy_connect and states that:

"...

interface is a u32 which specifies the connection type used between the controller and the PHY. Examples are GMII, MII, RGMII, and SGMII. For a full list, see include/linux/phy.h

Now just make sure that phydev->supported and phydev->advertising have any values pruned from them which don't make sense for your controller (a 10/100 controller may be connected to a gigabit capable PHY, so you would need to mask off SUPPORTED_1000baseT*). See include/linux/ethtool.h for definitions for these bitfields. Note that you should not SET any bits, or the PHY may get put into an unsupported state.

..."

However, 'drivers/net/ethernet/aurora/nb8800.c' for example, does SETs some bits (in function 'nb8800_pause_adv').

I checked 'drivers/net/ethernet/broadcom/genet/bcmmii.c' and that one CLEARs bits (as per the documentation).

Does anybody knows what is the correct/recommended approach?

Best regards,

Sebastian

#1 lore raw
Quoted 17 lines · Sebastian Frias

Hi,

Documentation/networking/phy.txt discusses phy_connect and states that:

"...

interface is a u32 which specifies the connection type used between the controller and the PHY. Examples are GMII, MII, RGMII, and SGMII. For a full list, see include/linux/phy.h

Now just make sure that phydev->supported and phydev->advertising have any values pruned from them which don't make sense for your controller (a 10/100 controller may be connected to a gigabit capable PHY, so you would need to mask off SUPPORTED_1000baseT*). See include/linux/ethtool.h for definitions for these bitfields. Note that you should not SET any bits, or the PHY may get put into an unsupported state.

Quoted 4 lines

..."

However, 'drivers/net/ethernet/aurora/nb8800.c' for example, does SETs some bits (in function 'nb8800_pause_adv').

All pause/flow control related bits should be set by the Ethernet MAC driver because this is an Ethernet MAC, not PHY, thing. See this discussion for some details:

https://www.mail-archive.com/[email protected]/msg135347.html

So the nb8800 drivers does the correct thing here, but the documentation should be updated to reflect that this applies to all bits, except the Pause capabilities because these need to come from the Ethernet MAC.

Quoted 5 lines

I checked 'drivers/net/ethernet/broadcom/genet/bcmmii.c' and that one CLEARs bits (as per the documentation).

Does anybody knows what is the correct/recommended approach?

Both drivers do correct things, they just don't set the same things here.

Signature · 1 line
Florian
#2 lore raw
Quoted 27 lines · Florian Fainelli
Quoted 17 lines · Sebastian Frias

Hi,

Documentation/networking/phy.txt discusses phy_connect and states that:

"...

interface is a u32 which specifies the connection type used between the controller and the PHY. Examples are GMII, MII, RGMII, and SGMII. For a full list, see include/linux/phy.h

Now just make sure that phydev->supported and phydev->advertising have any values pruned from them which don't make sense for your controller (a 10/100 controller may be connected to a gigabit capable PHY, so you would need to mask off SUPPORTED_1000baseT*). See include/linux/ethtool.h for definitions for these bitfields. Note that you should not SET any bits, or the PHY may get put into an unsupported state.

Quoted 4 lines

..."

However, 'drivers/net/ethernet/aurora/nb8800.c' for example, does SETs some bits (in function 'nb8800_pause_adv').

All pause/flow control related bits should be set by the Ethernet MAC driver because this is an Ethernet MAC, not PHY, thing. See this discussion for some details:

Quoted 6 lines

https://www.mail-archive.com/[email protected]/msg135347.html

So the nb8800 drivers does the correct thing here, but the documentation should be updated to reflect that this applies to all bits, except the Pause capabilities because these need to come from the Ethernet MAC.

Ok, thanks.

Quoted 8 lines
Quoted 5 lines

I checked 'drivers/net/ethernet/broadcom/genet/bcmmii.c' and that one CLEARs bits (as per the documentation).

Does anybody knows what is the correct/recommended approach?

Both drivers do correct things, they just don't set the same things here.

Thanks!