mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
dm: eth: Add support for ethprime env var
The ethprime env var is used to indicate the starting device if none is specified in ethact. Also support aliases specified in the ethprime var. Signed-off-by: Joe Hershberger <joe.hershberger@ni.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
e58780dcb7
commit
6536b9bb76
2 changed files with 48 additions and 1 deletions
29
net/eth.c
29
net/eth.c
|
@ -360,6 +360,18 @@ int eth_initialize(void)
|
|||
printf("No ethernet found.\n");
|
||||
bootstage_error(BOOTSTAGE_ID_NET_ETH_START);
|
||||
} else {
|
||||
char *ethprime = getenv("ethprime");
|
||||
struct udevice *prime_dev = NULL;
|
||||
|
||||
if (ethprime)
|
||||
prime_dev = eth_get_dev_by_name(ethprime);
|
||||
if (prime_dev) {
|
||||
eth_set_dev(prime_dev);
|
||||
eth_current_changed();
|
||||
} else {
|
||||
eth_set_dev(NULL);
|
||||
}
|
||||
|
||||
bootstage_mark(BOOTSTAGE_ID_NET_ETH_INIT);
|
||||
do {
|
||||
if (num_devices)
|
||||
|
@ -367,6 +379,9 @@ int eth_initialize(void)
|
|||
|
||||
printf("eth%d: %s", dev->seq, dev->name);
|
||||
|
||||
if (ethprime && dev == prime_dev)
|
||||
printf(" [PRIME]");
|
||||
|
||||
eth_write_hwaddr(dev);
|
||||
|
||||
uclass_next_device(&dev);
|
||||
|
@ -915,8 +930,20 @@ void eth_set_current(void)
|
|||
act = getenv("ethact");
|
||||
env_changed_id = env_id;
|
||||
}
|
||||
if (act != NULL)
|
||||
|
||||
if (act == NULL) {
|
||||
char *ethprime = getenv("ethprime");
|
||||
void *dev = NULL;
|
||||
|
||||
if (ethprime)
|
||||
dev = eth_get_dev_by_name(ethprime);
|
||||
if (dev)
|
||||
eth_set_dev(dev);
|
||||
else
|
||||
eth_set_dev(NULL);
|
||||
} else {
|
||||
eth_set_dev(eth_get_dev_by_name(act));
|
||||
}
|
||||
|
||||
eth_current_changed();
|
||||
}
|
||||
|
|
|
@ -60,3 +60,23 @@ static int dm_test_eth_alias(struct dm_test_state *dms)
|
|||
return 0;
|
||||
}
|
||||
DM_TEST(dm_test_eth_alias, DM_TESTF_SCAN_FDT);
|
||||
|
||||
static int dm_test_eth_prime(struct dm_test_state *dms)
|
||||
{
|
||||
NetPingIP = string_to_ip("1.1.2.2");
|
||||
|
||||
/* Expected to be "eth@10003000" because of ethprime variable */
|
||||
setenv("ethact", NULL);
|
||||
setenv("ethprime", "eth5");
|
||||
ut_assertok(NetLoop(PING));
|
||||
ut_asserteq_str("eth@10003000", getenv("ethact"));
|
||||
|
||||
/* Expected to be "eth@10002000" because it is first */
|
||||
setenv("ethact", NULL);
|
||||
setenv("ethprime", NULL);
|
||||
ut_assertok(NetLoop(PING));
|
||||
ut_asserteq_str("eth@10002000", getenv("ethact"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
DM_TEST(dm_test_eth_prime, DM_TESTF_SCAN_FDT);
|
||||
|
|
Loading…
Reference in a new issue