diff options
| author | Tom Rini <trini@konsulko.com> | 2016-01-08 10:02:25 -0500 |
|---|---|---|
| committer | Tom Rini <trini@konsulko.com> | 2016-01-08 10:02:25 -0500 |
| commit | 8c20dc40741a7eb03087ab47e988a899fd7175b1 (patch) | |
| tree | 325eba236bc636aa08588a3d5348cac5ef417aaa /net | |
| parent | 67ecb84ccbfd609170978833fd09b0b87fc4b630 (diff) | |
| parent | c5a75339cf1595ee89a3513cd4fd84c10c0cd910 (diff) | |
Merge git://git.denx.de/u-boot-dm
Diffstat (limited to 'net')
| -rw-r--r-- | net/eth.c | 35 | ||||
| -rw-r--r-- | net/net.c | 7 |
2 files changed, 34 insertions, 8 deletions
diff --git a/net/eth.c b/net/eth.c index 6cf3a353a34..18c53bf58ab 100644 --- a/net/eth.c +++ b/net/eth.c @@ -337,14 +337,30 @@ U_BOOT_ENV_CALLBACK(ethaddr, on_ethaddr); int eth_init(void) { - struct udevice *current; + char *ethact = getenv("ethact"); + char *ethrotate = getenv("ethrotate"); + struct udevice *current = NULL; struct udevice *old_current; int ret = -ENODEV; - current = eth_get_dev(); + /* + * When 'ethrotate' variable is set to 'no' and 'ethact' variable + * is already set to an ethernet device, we should stick to 'ethact'. + */ + if ((ethrotate != NULL) && (strcmp(ethrotate, "no") == 0)) { + if (ethact) { + current = eth_get_dev_by_name(ethact); + if (!current) + return -EINVAL; + } + } + if (!current) { - printf("No ethernet found.\n"); - return -ENODEV; + current = eth_get_dev(); + if (!current) { + printf("No ethernet found.\n"); + return -ENODEV; + } } old_current = current; @@ -1039,6 +1055,17 @@ int eth_receive(void *packet, int length) static void eth_current_changed(void) { char *act = getenv("ethact"); + char *ethrotate; + + /* + * The call to eth_get_dev() below has a side effect of rotating + * ethernet device if uc_priv->current == NULL. This is not what + * we want when 'ethrotate' variable is 'no'. + */ + ethrotate = getenv("ethrotate"); + if ((ethrotate != NULL) && (strcmp(ethrotate, "no") == 0)) + return; + /* update current ethernet name */ if (eth_get_dev()) { if (act == NULL || strcmp(act, eth_get_name()) != 0) diff --git a/net/net.c b/net/net.c index 4d5746a7b35..fba111edfba 100644 --- a/net/net.c +++ b/net/net.c @@ -542,6 +542,9 @@ restart: #ifdef CONFIG_SHOW_ACTIVITY show_activity(1); #endif + if (arp_timeout_check() > 0) + time_start = get_timer(0); + /* * Check the ethernet for a new packet. The ethernet * receive routine will process it. @@ -570,10 +573,6 @@ restart: goto done; } - if (arp_timeout_check() > 0) { - time_start = get_timer(0); - } - /* * Check for a timeout, and run the timeout handler * if we have one. |
