All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2] Fix DM9000 MAC address handling
@ 2009-10-22  4:56 Ben Warren
  2009-10-22 15:04 ` Paulraj, Sandeep
  0 siblings, 1 reply; 3+ messages in thread
From: Ben Warren @ 2009-10-22  4:56 UTC (permalink / raw)
  To: u-boot

Proper behavior is to pull MAC address from NVRAM in the initialization() an
stuff it in dev->address, then program the device from dev->address in
the init() function.

Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
---

v2: Made dm9000_get_enetaddr static and removed unnecessary brace in for loop

 drivers/net/dm9000x.c |   26 ++++++++++++++------------
 1 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/drivers/net/dm9000x.c b/drivers/net/dm9000x.c
index efe9135..73dd335 100644
--- a/drivers/net/dm9000x.c
+++ b/drivers/net/dm9000x.c
@@ -284,7 +284,6 @@ static int dm9000_init(struct eth_device *dev, bd_t *bd)
 	int i, oft, lnk;
 	u8 io_mode;
 	struct board_info *db = &dm9000_info;
-	uchar enetaddr[6];
 
 	DM9000_DBG("%s\n", __func__);
 
@@ -342,20 +341,11 @@ static int dm9000_init(struct eth_device *dev, bd_t *bd)
 	/* Clear interrupt status */
 	DM9000_iow(DM9000_ISR, ISR_ROOS | ISR_ROS | ISR_PTS | ISR_PRS);
 
-	/* Set Node address */
-	if (!eth_getenv_enetaddr("ethaddr", enetaddr)) {
-#if !defined(CONFIG_DM9000_NO_SROM)
-		for (i = 0; i < 3; i++)
-			dm9000_read_srom_word(i, enetaddr + 2 * i);
-		eth_setenv_enetaddr("ethaddr", enetaddr);
-#endif
-	}
-
-	printf("MAC: %pM\n", enetaddr);
+	printf("MAC: %pM\n", dev->enetaddr);
 
 	/* fill device MAC address registers */
 	for (i = 0, oft = DM9000_PAR; i < 6; i++, oft++)
-		DM9000_iow(oft, enetaddr[i]);
+		DM9000_iow(oft, dev->enetaddr[i]);
 	for (i = 0, oft = 0x16; i < 8; i++, oft++)
 		DM9000_iow(oft, 0xff);
 
@@ -558,6 +548,15 @@ void dm9000_write_srom_word(int offset, u16 val)
 }
 #endif
 
+static void dm9000_get_enetaddr(struct eth_device *dev)
+{
+#if !defined(CONFIG_DM9000_NO_SROM)
+	int i;
+	for (i = 0; i < 3; i++)
+		dm9000_read_srom_word(i, dev->enetaddr + (2 * i));
+#endif
+}
+
 /*
    Read a byte from I/O port
 */
@@ -621,6 +620,9 @@ int dm9000_initialize(bd_t *bis)
 {
 	struct eth_device *dev = &(dm9000_info.netdev);
 
+	/* Load MAC address from EEPROM */
+	dm9000_get_enetaddr(dev);
+
 	dev->init = dm9000_init;
 	dev->halt = dm9000_halt;
 	dev->send = dm9000_send;
-- 
1.6.0.4

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

* [U-Boot] [PATCH v2] Fix DM9000 MAC address handling
  2009-10-22  4:56 [U-Boot] [PATCH v2] Fix DM9000 MAC address handling Ben Warren
@ 2009-10-22 15:04 ` Paulraj, Sandeep
  2009-10-22 17:10   ` Ben Warren
  0 siblings, 1 reply; 3+ messages in thread
From: Paulraj, Sandeep @ 2009-10-22 15:04 UTC (permalink / raw)
  To: u-boot



> 
> Proper behavior is to pull MAC address from NVRAM in the initialization()
> an
> stuff it in dev->address, then program the device from dev->address in
> the init() function.
> 
> Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
> ---
 Ben I tested and here is the result.

1) dhcp still does not work
2) I have to set a static ipaddr for the bootcmd to work

Your patch solved the issue where issuing the bootcmd "tftp; bootm"
would complain about ethaddr not being set.

But i do notice that ethaddr does not get saved in the environment.

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

* [U-Boot] [PATCH v2] Fix DM9000 MAC address handling
  2009-10-22 15:04 ` Paulraj, Sandeep
@ 2009-10-22 17:10   ` Ben Warren
  0 siblings, 0 replies; 3+ messages in thread
From: Ben Warren @ 2009-10-22 17:10 UTC (permalink / raw)
  To: u-boot

Hi Sandeep,

Paulraj, Sandeep wrote:
>   
>> Proper behavior is to pull MAC address from NVRAM in the initialization()
>> an
>> stuff it in dev->address, then program the device from dev->address in
>> the init() function.
>>
>> Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
>> ---
>>     
>  Ben I tested and here is the result.
>
> 1) dhcp still does not work
> 2) I have to set a static ipaddr for the bootcmd to work
>
> Your patch solved the issue where issuing the bootcmd "tftp; bootm"
> would complain about ethaddr not being set.
>
> But i do notice that ethaddr does not get saved in the environment.
>
>   
Saving the address to the environment is the user's job.  Nothing should 
write it automatically.  A few drivers do, but they should be changed.

Please look in net/eth.c::eth_initialize() to see how this works.  The 
order of precedence is this:

1. If environment variable is not set, it's up to the driver to find its 
own MAC address.
2. If the environment variable is set, and is non-zero, it is used.  If 
if conflicts with the value in NVRAM, a warning is issued, but the 
environment value is still used.

I don't know why DHCP doesn't work, but if I were you I'd check that the 
address printed from line 344 in dm9000x.c shows a valid unicast MAC 
address.

regards,
Ben

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

end of thread, other threads:[~2009-10-22 17:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-10-22  4:56 [U-Boot] [PATCH v2] Fix DM9000 MAC address handling Ben Warren
2009-10-22 15:04 ` Paulraj, Sandeep
2009-10-22 17:10   ` Ben Warren

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.