[PATCH] net: use a more deterministic approach to get the active ethernet device
Ramon Fried
rfried.dev at gmail.com
Mon Jun 14 22:55:01 CEST 2021
On Thu, Apr 29, 2021 at 11:03 PM Ramon Fried <rfried.dev at gmail.com> wrote:
>
> On Wed, Feb 24, 2021 at 6:30 PM Michael Walle <michael at walle.cc> wrote:
> >
> > If the environment variable "ethact" is not set, the first device in the
> > uclass is returned. This depends on the probing order of the ethernet
> > devices. Moreover it is not not configurable at all.
> >
> > Try to return the ethernet device with sequence id 0 first which then
> > can be configured by the aliases in a device tree. Fall back to the old
> > mechanism in case of an error.
> >
> > Signed-off-by: Michael Walle <michael at walle.cc>
> > ---
> > net/eth-uclass.c | 17 ++++++++++++-----
> > 1 file changed, 12 insertions(+), 5 deletions(-)
> >
> > diff --git a/net/eth-uclass.c b/net/eth-uclass.c
> > index 34ca731d1e..0b4260dc5b 100644
> > --- a/net/eth-uclass.c
> > +++ b/net/eth-uclass.c
> > @@ -69,8 +69,11 @@ void eth_set_current_to_next(void)
> > /*
> > * Typically this will simply return the active device.
> > * In the case where the most recent active device was unset, this will attempt
> > - * to return the first device. If that device doesn't exist or fails to probe,
> > - * this function will return NULL.
> > + * to return the device with sequence id 0 (which can be configured by the
> > + * device tree). If this fails, fall back to just getting the first device.
> > + * The latter is non-deterministic and depends on the order of the probing.
> > + * If that device doesn't exist or fails to probe, this function will return
> > + * NULL.
> > */
> > struct udevice *eth_get_dev(void)
> > {
> > @@ -80,9 +83,13 @@ struct udevice *eth_get_dev(void)
> > if (!uc_priv)
> > return NULL;
> >
> > - if (!uc_priv->current)
> > - eth_errno = uclass_first_device(UCLASS_ETH,
> > - &uc_priv->current);
> > + if (!uc_priv->current) {
> > + eth_errno = uclass_get_device_by_seq(UCLASS_ETH, 0,
> > + &uc_priv->current);
> > + if (eth_errno)
> > + eth_errno = uclass_first_device(UCLASS_ETH,
> > + &uc_priv->current);
> > + }
> > return uc_priv->current;
> > }
> >
> > --
> > 2.20.1
> >
> Reviewed-by: Ramon Fried <rfried.dev at gmail.com>
Applied to u-boot-net/master, thanks!
Best regards,
Ramon Fried
More information about the U-Boot
mailing list