Message ID | AM9PR06MB8100BDB8E2C1CB5F650FB7C4D23B9@AM9PR06MB8100.eurprd06.prod.outlook.com |
---|---|
State | Accepted |
Commit | 50dae8eb3a442cf9f98e78e24e52aa2f0acc3f56 |
Delegated to: | Ramon Fried |
Headers | show |
Series | [v3] net: tsec: add option to set device max-speed via dts | expand |
On Fri Jun 4, 2021 at 4:40 PM IDT, Aleksandar Gerasimovski wrote: > Current tsec adapter sets adapter gigabit capabilities by default, and > in > reality this must not always be the case. > It is possible that tsec adapter is used for 100Mbps connection, and in > this case setting 1000Mbps capabilities can lead to some side effects > such > longer autoneg process. > > In our ls102x designs this problem leads to long autoneg times (> 4 sec) > in case board rgmii link is 100Mbps capable only. > Limiting the rgmii link capabilities provides faster and smoother > link establishment. > > Signed-off-by: Aleksandar Gerasimovski > <aleksandar.gerasimovski@hitachi-powergrids.com> > Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> > Reviewed-by: Bin Meng <bmeng.cn@gmail.com> > --- > Changes for v2: > - keep the variable sort order in a decreasing order of line length > - fix comment typo > Changes for v3: > - fix commit message typos > --- > drivers/net/tsec.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/tsec.c b/drivers/net/tsec.c > index c68e4b7..ee820aa 100644 > --- a/drivers/net/tsec.c > +++ b/drivers/net/tsec.c > @@ -828,6 +828,7 @@ int tsec_probe(struct udevice *dev) > const char *phy_mode; > ofnode parent, child; > fdt_addr_t reg; > + u32 max_speed; > int ret; > > data = (struct tsec_data *)dev_get_driver_data(dev); > @@ -893,8 +894,12 @@ int tsec_probe(struct udevice *dev) > } > priv->interface = pdata->phy_interface; > > + /* Check for speed limit, default is 1000Mbps */ > + max_speed = dev_read_u32_default(dev, "max-speed", 1000); > + > /* Initialize flags */ > - priv->flags = TSEC_GIGABIT; > + if (max_speed == 1000) > + priv->flags = TSEC_GIGABIT; > if (priv->interface == PHY_INTERFACE_MODE_SGMII) > priv->flags |= TSEC_SGMII; > > -- > 1.8.3.1 Applied to u-boot-net/master, thanks! Best regards, Ramon Fried
diff --git a/drivers/net/tsec.c b/drivers/net/tsec.c index c68e4b7..ee820aa 100644 --- a/drivers/net/tsec.c +++ b/drivers/net/tsec.c @@ -828,6 +828,7 @@ int tsec_probe(struct udevice *dev) const char *phy_mode; ofnode parent, child; fdt_addr_t reg; + u32 max_speed; int ret; data = (struct tsec_data *)dev_get_driver_data(dev); @@ -893,8 +894,12 @@ int tsec_probe(struct udevice *dev) } priv->interface = pdata->phy_interface; + /* Check for speed limit, default is 1000Mbps */ + max_speed = dev_read_u32_default(dev, "max-speed", 1000); + /* Initialize flags */ - priv->flags = TSEC_GIGABIT; + if (max_speed == 1000) + priv->flags = TSEC_GIGABIT; if (priv->interface == PHY_INTERFACE_MODE_SGMII) priv->flags |= TSEC_SGMII;