diff options
| author | Mike Frysinger <vapier@gentoo.org> | 2009-02-11 18:36:45 -0500 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2009-03-20 22:39:10 +0100 | 
| commit | 06a0c4381a65ed500c816a05b9ae7b207c3b1d4b (patch) | |
| tree | ca60353c3adf97ef8de953f1ec7e940623213498 | |
| parent | 56b555a644f3cbb1b3929cb52b61d3ce483885f5 (diff) | |
| download | olio-uboot-2014.01-06a0c4381a65ed500c816a05b9ae7b207c3b1d4b.tar.xz olio-uboot-2014.01-06a0c4381a65ed500c816a05b9ae7b207c3b1d4b.zip | |
AmigaOneG3SE/enet: get mac address from environment
Always use the MAC address that is stored in the environment first before
falling back to the ROM.  This also cuts out any comparison steps: if the
mac in the env is sane, the ROM is never consulted.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
CC: Thomas Frieden <ThomasF@hyperion-entertainment.com>
CC: Ben Warren <biggerbadderben@gmail.com>
| -rw-r--r-- | board/MAI/AmigaOneG3SE/enet.c | 42 | 
1 files changed, 8 insertions, 34 deletions
| diff --git a/board/MAI/AmigaOneG3SE/enet.c b/board/MAI/AmigaOneG3SE/enet.c index 0b4dfe6aa..ac969a9e2 100644 --- a/board/MAI/AmigaOneG3SE/enet.c +++ b/board/MAI/AmigaOneG3SE/enet.c @@ -600,7 +600,7 @@ static int eth_3com_init (struct eth_device *dev, bd_t * bis)  	ias_cmd = (struct descriptor *) &tx_ring[tx_cur];  	ias_cmd->status = cpu_to_le32 (1 << 31);	/* set DnIndicate bit.                  */  	ias_cmd->next = 0; -	ias_cmd->addr = cpu_to_le32 ((u32) & bis->bi_enetaddr[0]); +	ias_cmd->addr = cpu_to_le32 ((u32) dev->enetaddr);  	ias_cmd->length = cpu_to_le32 (6 | LAST_FRAG);  	/* Tell the adapter where the TX ring is located */ @@ -787,6 +787,10 @@ static void read_hw_addr (struct eth_device *dev, bd_t * bis)  	unsigned int checksum = 0;  	int i, j, timer; +	/* First, try the env ... if that works, we're all done! */ +	if (eth_getenv_enetaddr("ethaddr", hw_addr)) +		goto Done; +  	/* Read the station address from the EEPROM. */  	EL3WINDOW (dev, 0); @@ -827,40 +831,10 @@ static void read_hw_addr (struct eth_device *dev, bd_t * bis)  		hw_addr[j + 1] = (u8) ((ETH_INW (dev, j) >> 8) & 0xff);  	} -	for (i = 0; i < ETH_ALEN; i++) { -		if (hw_addr[i] != bis->bi_enetaddr[i]) { -/*			printf("Warning: HW address don't match:\n"); */ -/*			printf("Address in 3Com Window 2 is	    " */ -/*			       "%02X:%02X:%02X:%02X:%02X:%02X\n", */ -/*			       hw_addr[0], hw_addr[1], hw_addr[2], */ -/*			       hw_addr[3], hw_addr[4], hw_addr[5]); */ -/*			printf("Address used by U-Boot is " */ -/*			       "%02X:%02X:%02X:%02X:%02X:%02X\n", */ -/*			       bis->bi_enetaddr[0], bis->bi_enetaddr[1],  */ -/*			       bis->bi_enetaddr[2], bis->bi_enetaddr[3],  */ -/*			       bis->bi_enetaddr[4], bis->bi_enetaddr[5]); */ -/*			goto Done; */ -			char buffer[256]; - -			if (bis->bi_enetaddr[0] == 0 -			    && bis->bi_enetaddr[1] == 0 -			    && bis->bi_enetaddr[2] == 0 -			    && bis->bi_enetaddr[3] == 0 -			    && bis->bi_enetaddr[4] == 0 -			    && bis->bi_enetaddr[5] == 0) { - -				sprintf (buffer, -					 "%02X:%02X:%02X:%02X:%02X:%02X", -					 hw_addr[0], hw_addr[1], hw_addr[2], -					 hw_addr[3], hw_addr[4], hw_addr[5]); -				setenv ("ethaddr", buffer); -			} -		} -	} - -	for (i = 0; i < ETH_ALEN; i++) -		dev->enetaddr[i] = hw_addr[i]; +	/* Save the result in the environment */ +	eth_setenv_enetaddr("ethaddr", hw_addr);  Done: +	memcpy(dev->enetaddr, hw_addr, 6);  	return;  } |