
On Tue, Sep 28, 2021 at 2:48 AM Vladimir Oltean vladimir.oltean@nxp.com wrote:
Certain serial SERDES protocols like 1000base-x, 2500base-x, SGMII, USXGMII can operate either in a mode where the PHY (be it on-board or inside an SFP module) passes the link parameters (speed, duplex, pause) to the MAC through in-band through control words standardized by IEEE 802.3 clause 37, or in a mode where the MAC must configure (force) its link parameters based on information obtained out-of-band (MDIO reads, guesswork etc).
In Linux, the OF node property named "managed" is parsed by the phylink framework, and the convention is that if a driver uses phylink, then the presence of this property means that in-band autoneg should be enabled, otherwise it shouldn't.
To be compatible with the OF node bindings of drivers that use phylink in Linux, introduce parsing support for this property in U-Boot too.
Signed-off-by: Vladimir Oltean vladimir.oltean@nxp.com
drivers/core/of_extra.c | 12 ++++++++++++ include/dm/of_extra.h | 14 ++++++++++++++ 2 files changed, 26 insertions(+)
diff --git a/drivers/core/of_extra.c b/drivers/core/of_extra.c index 632a1c2210e8..59ce9174ad07 100644 --- a/drivers/core/of_extra.c +++ b/drivers/core/of_extra.c @@ -155,3 +155,15 @@ bool ofnode_phy_is_fixed_link(ofnode eth_node, ofnode *phy_node)
return true;
}
+bool ofnode_eth_uses_inband_aneg(ofnode eth_node) +{
bool inband_aneg = false;
const char *managed;
managed = ofnode_read_string(eth_node, "managed");
if (managed && !strcmp(managed, "in-band-status"))
inband_aneg = true;
return inband_aneg;
+} diff --git a/include/dm/of_extra.h b/include/dm/of_extra.h index f0d205491c16..c2498aa5859c 100644 --- a/include/dm/of_extra.h +++ b/include/dm/of_extra.h @@ -114,4 +114,18 @@ int ofnode_decode_memory_region(ofnode config_node, const char *mem_type, */ bool ofnode_phy_is_fixed_link(ofnode eth_node, ofnode *phy_node);
+/**
- ofnode_eth_uses_inband_aneg() - Detect whether MAC should use in-band autoneg
- This function detects whether the Ethernet controller should use IEEE 802.3
- clause 37 in-band autonegotiation for serial protocols such as 1000base-x,
- SGMII, USXGMII, etc. The property is relevant when the Ethernet controller
- is connected to an on-board PHY or an SFP cage, and is not relevant when it
- has a fixed link (in that case, in-band autoneg should not be used).
- @param eth_node ofnode belonging to the Ethernet controller
- @return true if in-band autoneg should be used, false otherwise
- */
+bool ofnode_eth_uses_inband_aneg(ofnode eth_node);
#endif
2.25.1
Reviewed-by: Ramon Fried rfried.dev@gmail.com