Skip to content
Snippets Groups Projects
Commit 6e424b4a authored by Michael Walle's avatar Michael Walle Committed by Ramon Fried
Browse files

net: use a more deterministic approach to get the active ethernet device


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: default avatarMichael Walle <michael@walle.cc>
Reviewed-by: default avatarRamon Fried <rfried.dev@gmail.com>
parent 02036d90
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment