Merge branch 'master' of git://git.denx.de/u-boot-net
diff --git a/README b/README
index 362ff19..b2eee19 100644
--- a/README
+++ b/README
@@ -5409,6 +5409,12 @@
 		  Ethernet is encapsulated/received over 802.1q
 		  VLAN tagged frames.
 
+  bootpretryperiod	- Period during which BOOTP/DHCP sends retries.
+		  Unsigned value, in milliseconds. If not set, the period will
+		  be either the default (28000), or a value based on
+		  CONFIG_NET_RETRY_COUNT, if defined. This value has
+		  precedence over the valu based on CONFIG_NET_RETRY_COUNT.
+
 The following image location variables contain the location of images
 used in booting. The "Image" column gives the role of the image and is
 not an environment variable name. The other columns are environment
diff --git a/drivers/net/phy/atheros.c b/drivers/net/phy/atheros.c
index ba57b1a..e57c412 100644
--- a/drivers/net/phy/atheros.c
+++ b/drivers/net/phy/atheros.c
@@ -33,6 +33,9 @@
 
 	phydev->supported = phydev->drv->features;
 
+	genphy_config_aneg(phydev);
+	genphy_restart_aneg(phydev);
+
 	return 0;
 }
 
diff --git a/net/bootp.c b/net/bootp.c
index f2978a2..aefc808 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -60,6 +60,8 @@
 char net_hostname[32] = {0,}; /* Our hostname */
 char net_root_path[64] = {0,}; /* Our bootpath */
 
+static ulong time_taken_max;
+
 #if defined(CONFIG_CMD_DHCP)
 static dhcp_state_t dhcp_state = INIT;
 static u32 dhcp_leasetime;
@@ -380,7 +382,7 @@
 {
 	ulong time_taken = get_timer(bootp_start);
 
-	if (time_taken >= TIMEOUT_MS) {
+	if (time_taken >= time_taken_max) {
 #ifdef CONFIG_BOOTP_MAY_FAIL
 		puts("\nRetry time exceeded\n");
 		net_set_state(NETLOOP_FAIL);
@@ -675,12 +677,19 @@
 	u32 bootp_id;
 	struct in_addr zero_ip;
 	struct in_addr bcast_ip;
+	char *ep;  /* Environment pointer */
 
 	bootstage_mark_name(BOOTSTAGE_ID_BOOTP_START, "bootp_start");
 #if defined(CONFIG_CMD_DHCP)
 	dhcp_state = INIT;
 #endif
 
+	ep = getenv("bootpretryperiod");
+	if (ep != NULL)
+		time_taken_max = simple_strtoul(ep, NULL, 10);
+	else
+		time_taken_max = TIMEOUT_MS;
+
 #ifdef CONFIG_BOOTP_RANDOM_DELAY		/* Random BOOTP delay */
 	if (bootp_try == 0)
 		srand_mac();