On Tue, Aug 9, 2022 at 2:53 PM Rasmus Villemoes <[email protected]> wrote: > > Currently, U-Boot doesn't parse a "max-speed" DT property in a phy's > DT node. That property is a standard binding which should be honoured, > and in linux that is done by the core phy code via a call to an > of_set_phy_supported() helper. (Some ethernet drivers support a > max-speed property in their DT node, but that's orthogonal to what the > phy supports.) > > Add a similar helper in U-Boot, and call it from phy_config(). > > Signed-off-by: Rasmus Villemoes <[email protected]> > --- > Resending, this time including the u-boot list in recipients. Sorry > for the duplicate. > > drivers/net/phy/phy.c | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c > index e6e1755518..ec690361e6 100644 > --- a/drivers/net/phy/phy.c > +++ b/drivers/net/phy/phy.c > @@ -599,6 +599,20 @@ int phy_register(struct phy_driver *drv) > return 0; > } > > +static int of_set_phy_supported(struct phy_device *phydev) > +{ > + ofnode node = phy_get_ofnode(phydev); > + u32 max_speed; > + > + if (!ofnode_valid(node)) > + return 0; > + > + if (!ofnode_read_u32(node, "max-speed", &max_speed)) > + return phy_set_supported(phydev, max_speed); > + > + return 0; > +} > + > int phy_set_supported(struct phy_device *phydev, u32 max_speed) > { > /* The default values for phydev->supported are provided by the PHY > @@ -1070,6 +1084,12 @@ __weak int board_phy_config(struct phy_device *phydev) > > int phy_config(struct phy_device *phydev) > { > + int ret; > + > + ret = of_set_phy_supported(phydev); > + if (ret) > + return ret; > + > /* Invoke an optional board-specific helper */ > return board_phy_config(phydev); > } > -- > 2.31.1 > Reviewed-by: Ramon Fried <[email protected]>

