public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] net: sync env ethaddr to device enetaddr in eth_init()
@ 2009-07-16  1:31 Mike Frysinger
  2009-07-17 14:25 ` Andrzej Wolski
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Mike Frysinger @ 2009-07-16  1:31 UTC (permalink / raw)
  To: u-boot

In the previous enetaddr refactoring, the assumption with commit 56b555a644
was that the eth layer would handle the env -> device enetaddr syncing.
This was not the case as eth_initialize() is called only once and the sync
occurs there.  So make sure the eth_init() function does the env -> device
sync with every network init.

Reported-by: Andrzej Wolski <awolski@poczta.fm>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
Andrzej: please try this patch instead for your macb troubles

 include/net.h |    2 +-
 net/eth.c     |   52 +++++++++++++++++++++++-----------------------------
 2 files changed, 24 insertions(+), 30 deletions(-)

diff --git a/include/net.h b/include/net.h
index 5a1d36e..c0bde71 100644
--- a/include/net.h
+++ b/include/net.h
@@ -119,10 +119,10 @@ extern struct eth_device *eth_get_dev(void);	/* get the current device MAC */
 extern struct eth_device *eth_get_dev_by_name(char *devname); /* get device */
 extern struct eth_device *eth_get_dev_by_index(int index); /* get dev @ index */
 extern int eth_get_dev_index (void);		/* get the device index */
-extern void eth_set_enetaddr(int num, char* a);	/* Set new MAC address */
 extern void eth_parse_enetaddr(const char *addr, uchar *enetaddr);
 extern int eth_getenv_enetaddr(char *name, uchar *enetaddr);
 extern int eth_setenv_enetaddr(char *name, const uchar *enetaddr);
+extern int eth_getenv_enetaddr_by_index(int index, uchar *enetaddr);
 
 extern int eth_init(bd_t *bis);			/* Initialize the device */
 extern int eth_send(volatile void *packet, int length);	   /* Send a packet */
diff --git a/net/eth.c b/net/eth.c
index 8940ebf..211a67b 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -53,6 +53,13 @@ int eth_setenv_enetaddr(char *name, const uchar *enetaddr)
 
 	return setenv(name, buf);
 }
+
+int eth_getenv_enetaddr_by_index(int index, uchar *enetaddr)
+{
+	char enetvar[32];
+	sprintf(enetvar, index ? "eth%daddr" : "ethaddr", index);
+	return eth_getenv_enetaddr(enetvar, enetaddr);
+}
 #endif
 
 #if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI)
@@ -180,7 +187,6 @@ int eth_register(struct eth_device* dev)
 
 int eth_initialize(bd_t *bis)
 {
-	char enetvar[32];
 	unsigned char env_enetaddr[6];
 	int eth_number = 0;
 
@@ -221,8 +227,7 @@ int eth_initialize(bd_t *bis)
 				puts (" [PRIME]");
 			}
 
-			sprintf(enetvar, eth_number ? "eth%daddr" : "ethaddr", eth_number);
-			eth_getenv_enetaddr(enetvar, env_enetaddr);
+			eth_getenv_enetaddr_by_index(eth_number, env_enetaddr);
 
 			if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) {
 				if (memcmp(dev->enetaddr, "\0\0\0\0\0\0", 6) &&
@@ -259,31 +264,6 @@ int eth_initialize(bd_t *bis)
 	return eth_number;
 }
 
-void eth_set_enetaddr(int num, char *addr) {
-	struct eth_device *dev;
-	unsigned char enetaddr[6];
-
-	debug ("eth_set_enetaddr(num=%d, addr=%s)\n", num, addr);
-
-	if (!eth_devices)
-		return;
-
-	eth_parse_enetaddr(addr, enetaddr);
-
-	dev = eth_devices;
-	while(num-- > 0) {
-		dev = dev->next;
-
-		if (dev == eth_devices)
-			return;
-	}
-
-	debug ( "Setting new HW address on %s\n"
-		"New Address is             %pM\n",
-		dev->name, enetaddr);
-
-	memcpy(dev->enetaddr, enetaddr, 6);
-}
 #ifdef CONFIG_MCAST_TFTP
 /* Multicast.
  * mcast_addr: multicast ipaddr from which multicast Mac is made
@@ -332,13 +312,27 @@ u32 ether_crc (size_t len, unsigned char const *p)
 
 int eth_init(bd_t *bis)
 {
-	struct eth_device* old_current;
+	int eth_number;
+	struct eth_device *old_current, *dev;
 
 	if (!eth_current) {
 		puts ("No ethernet found.\n");
 		return -1;
 	}
 
+	/* Sync environment with network devices */
+	eth_number = 0;
+	dev = eth_devices;
+	do {
+		uchar env_enetaddr[6];
+
+		if (eth_getenv_enetaddr_by_index(eth_number, env_enetaddr))
+			memcpy(dev->enetaddr, env_enetaddr, 6);
+
+		++eth_number;
+		dev = dev->next;
+	} while (dev != eth_devices);
+
 	old_current = eth_current;
 	do {
 		debug ("Trying %s\n", eth_current->name);
-- 
1.6.3.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH] net: sync env ethaddr to device enetaddr in eth_init()
  2009-07-16  1:31 [U-Boot] [PATCH] net: sync env ethaddr to device enetaddr in eth_init() Mike Frysinger
@ 2009-07-17 14:25 ` Andrzej Wolski
  2009-08-05 21:24 ` Wolfgang Denk
  2009-08-08  0:43 ` Ben Warren
  2 siblings, 0 replies; 6+ messages in thread
From: Andrzej Wolski @ 2009-07-17 14:25 UTC (permalink / raw)
  To: u-boot

> In the previous enetaddr refactoring, the assumption with commit 56b555a644
> was that the eth layer would handle the env -> device enetaddr syncing.
> This was not the case as eth_initialize() is called only once and the sync
> occurs there.  So make sure the eth_init() function does the env -> device
> sync with every network init.
> 
> Reported-by: Andrzej Wolski <awolski@poczta.fm>
> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> ---
> Andrzej: please try this patch instead for your macb troubles

Now it works fine. Thanks!

Andrzej Wolski




----------------------------------------------------------------------
Rowerem do pracy? Czemu nie!
Kliknij >>> http://link.interia.pl/f2256

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH] net: sync env ethaddr to device enetaddr in eth_init()
  2009-07-16  1:31 [U-Boot] [PATCH] net: sync env ethaddr to device enetaddr in eth_init() Mike Frysinger
  2009-07-17 14:25 ` Andrzej Wolski
@ 2009-08-05 21:24 ` Wolfgang Denk
  2009-08-05 21:26   ` Ben Warren
  2009-08-08  0:43 ` Ben Warren
  2 siblings, 1 reply; 6+ messages in thread
From: Wolfgang Denk @ 2009-08-05 21:24 UTC (permalink / raw)
  To: u-boot

Dear Ben,

In message <1247707888-5415-1-git-send-email-vapier@gentoo.org> Mike Frysinger wrote:
> In the previous enetaddr refactoring, the assumption with commit 56b555a644
> was that the eth layer would handle the env -> device enetaddr syncing.
> This was not the case as eth_initialize() is called only once and the sync
> occurs there.  So make sure the eth_init() function does the env -> device
> sync with every network init.
> 
> Reported-by: Andrzej Wolski <awolski@poczta.fm>
> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> ---
> Andrzej: please try this patch instead for your macb troubles
> 
>  include/net.h |    2 +-
>  net/eth.c     |   52 +++++++++++++++++++++++-----------------------------
>  2 files changed, 24 insertions(+), 30 deletions(-)

Ping...

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
The greatest threat towards future is indifference.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH] net: sync env ethaddr to device enetaddr in eth_init()
  2009-08-05 21:24 ` Wolfgang Denk
@ 2009-08-05 21:26   ` Ben Warren
  2009-08-13  5:21     ` Mike Frysinger
  0 siblings, 1 reply; 6+ messages in thread
From: Ben Warren @ 2009-08-05 21:26 UTC (permalink / raw)
  To: u-boot

Wolfgang Denk wrote:
> Dear Ben,
>
> In message <1247707888-5415-1-git-send-email-vapier@gentoo.org> Mike Frysinger wrote:
>   
>> In the previous enetaddr refactoring, the assumption with commit 56b555a644
>> was that the eth layer would handle the env -> device enetaddr syncing.
>> This was not the case as eth_initialize() is called only once and the sync
>> occurs there.  So make sure the eth_init() function does the env -> device
>> sync with every network init.
>>
>> Reported-by: Andrzej Wolski <awolski@poczta.fm>
>> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
>> ---
>> Andrzej: please try this patch instead for your macb troubles
>>
>>  include/net.h |    2 +-
>>  net/eth.c     |   52 +++++++++++++++++++++++-----------------------------
>>  2 files changed, 24 insertions(+), 30 deletions(-)
>>     
>
> Ping...
>
> Best regards,
>
> Wolfgang Denk
>
>   
This came after the merge window closed, but appears to be a bug fix so 
I'll process tonight.

regards,
Ben

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH] net: sync env ethaddr to device enetaddr in eth_init()
  2009-07-16  1:31 [U-Boot] [PATCH] net: sync env ethaddr to device enetaddr in eth_init() Mike Frysinger
  2009-07-17 14:25 ` Andrzej Wolski
  2009-08-05 21:24 ` Wolfgang Denk
@ 2009-08-08  0:43 ` Ben Warren
  2 siblings, 0 replies; 6+ messages in thread
From: Ben Warren @ 2009-08-08  0:43 UTC (permalink / raw)
  To: u-boot

Mike,

Mike Frysinger wrote:
> In the previous enetaddr refactoring, the assumption with commit 56b555a644
> was that the eth layer would handle the env -> device enetaddr syncing.
> This was not the case as eth_initialize() is called only once and the sync
> occurs there.  So make sure the eth_init() function does the env -> device
> sync with every network init.
>
> Reported-by: Andrzej Wolski <awolski@poczta.fm>
> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> ---
Applied to net repo.

thanks,
Ben

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH] net: sync env ethaddr to device enetaddr in eth_init()
  2009-08-05 21:26   ` Ben Warren
@ 2009-08-13  5:21     ` Mike Frysinger
  0 siblings, 0 replies; 6+ messages in thread
From: Mike Frysinger @ 2009-08-13  5:21 UTC (permalink / raw)
  To: u-boot

On Wednesday 05 August 2009 17:26:50 Ben Warren wrote:
> Wolfgang Denk wrote:
> > Mike Frysinger wrote:
> >> In the previous enetaddr refactoring, the assumption with commit
> >> 56b555a644 was that the eth layer would handle the env -> device
> >> enetaddr syncing. This was not the case as eth_initialize() is called
> >> only once and the sync occurs there.  So make sure the eth_init()
> >> function does the env -> device sync with every network init.
> >>
> >> Reported-by: Andrzej Wolski <awolski@poczta.fm>
> >> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> >> ---
> >> Andrzej: please try this patch instead for your macb troubles
> >>
> >>  include/net.h |    2 +-
> >>  net/eth.c     |   52
> >> +++++++++++++++++++++++----------------------------- 2 files changed, 24
> >> insertions(+), 30 deletions(-)
> >
> > Ping...
>
> This came after the merge window closed, but appears to be a bug fix so
> I'll process tonight.

point of information: i'm pretty sure this was posted before the window 
closed.  dates:
 15 Jul 2009 - patch posted
 17 Jul 2009 - net summary posted
 19 Jul 2009 - merge window closed
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20090813/6fb026dd/attachment.pgp 

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-08-13  5:21 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-16  1:31 [U-Boot] [PATCH] net: sync env ethaddr to device enetaddr in eth_init() Mike Frysinger
2009-07-17 14:25 ` Andrzej Wolski
2009-08-05 21:24 ` Wolfgang Denk
2009-08-05 21:26   ` Ben Warren
2009-08-13  5:21     ` Mike Frysinger
2009-08-08  0:43 ` Ben Warren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox