diff options
Diffstat (limited to 'board/pcs440ep')
| -rw-r--r-- | board/pcs440ep/pcs440ep.c | 31 | 
1 files changed, 14 insertions, 17 deletions
| diff --git a/board/pcs440ep/pcs440ep.c b/board/pcs440ep/pcs440ep.c index 5fd3291e4..27272142c 100644 --- a/board/pcs440ep/pcs440ep.c +++ b/board/pcs440ep/pcs440ep.c @@ -182,14 +182,21 @@ int board_early_init_f(void)  }  #define EEPROM_LEN	256 -void load_sernum_ethaddr (void) +static void load_ethaddr(void)  { +	int	ok_ethaddr, ok_eth1addr;  	int	ret;  	char	buf[EEPROM_LEN];  	char	mac[32];  	char	*use_eeprom;  	u16	checksumcrc16 = 0; +	/* If the env is sane, then nothing for us to do */ +	ok_ethaddr = eth_getenv_enetaddr("ethaddr", buf); +	ok_eth1addr = eth_getenv_enetaddr("eth1addr", buf); +	if (ok_ethaddr && ok_eth1addr) +		return; +  	/* read the MACs from EEprom */  	status_led_set (0, STATUS_LED_ON);  	status_led_set (1, STATUS_LED_ON); @@ -207,22 +214,10 @@ void load_sernum_ethaddr (void)  			printf("%s: EEPROM Checksum not OK\n", __FUNCTION__);  		} else {  			/* get the MACs */ -			sprintf (mac, "%02x:%02x:%02x:%02x:%02x:%02x", -				buf[3], -				buf[4], -				buf[5], -				buf[6], -				buf[7], -				buf[8]); -			setenv ("ethaddr", (char *) mac); -			sprintf (mac, "%02x:%02x:%02x:%02x:%02x:%02x", -				buf[9], -				buf[10], -				buf[11], -				buf[12], -				buf[13], -				buf[14]); -			setenv ("eth1addr", (char *) mac); +			if (!ok_ethaddr) +				eth_setenv_enetaddr("ethaddr", &buf[3]); +			if (!ok_eth1addr) +				eth_setenv_enetaddr("eth1addr", &buf[9]);  			return;  		}  	} @@ -446,6 +441,8 @@ int misc_init_r (void)  	uint pbcr;  	int size_val = 0; +	load_ethaddr(); +  	/* Re-do sizing to get full correct info */  	mtdcr(ebccfga, pb0cr);  	pbcr = mfdcr(ebccfgd); |