@ -834,10 +834,8 @@ static int smc_open (bd_t * bd)
SMC_SELECT_BANK ( 1 ) ;
err = smc_get_ethaddr ( bd ) ; /* set smc_mac_addr, and sync it with u-boot globals */
if ( err < 0 ) {
memset ( bd - > bi_enetaddr , 0 , 6 ) ; /* hack to make error stick! upper code will abort if not set */
return ( - 1 ) ; /* upper code ignores this, but NOT bi_enetaddr */
}
if ( err < 0 )
return - 1 ;
# ifdef USE_32_BIT
for ( i = 0 ; i < 6 ; i + = 2 ) {
word address ;
@ -1535,66 +1533,20 @@ int eth_send(volatile void *packet, int length) {
int smc_get_ethaddr ( bd_t * bd )
{
int env_size , rom_valid , env_present = 0 , reg ;
char * s = NULL , * e , es [ ] = " 11:22:33:44:55:66 " ;
char s_env_mac [ 64 ] ;
uchar v_env_mac [ 6 ] , v_rom_mac [ 6 ] , * v_mac ;
env_size = getenv_r ( " ethaddr " , s_env_mac , sizeof ( s_env_mac ) ) ;
if ( ( env_size > 0 ) & & ( env_size < sizeof ( es ) ) ) { /* exit if env is bad */
printf ( " \n *** ERROR: ethaddr is not set properly!! \n " ) ;
return ( - 1 ) ;
}
uchar v_mac [ 6 ] ;
if ( env_size > 0 ) {
env_present = 1 ;
s = s_env_mac ;
}
for ( reg = 0 ; reg < 6 ; + + reg ) { /* turn string into mac value */
v_env_mac [ reg ] = s ? simple_strtoul ( s , & e , 16 ) : 0 ;
if ( s )
s = ( * e ) ? e + 1 : e ;
}
rom_valid = get_rom_mac ( v_rom_mac ) ; /* get ROM mac value if any */
if ( ! env_present ) { /* if NO env */
if ( rom_valid ) { /* but ROM is valid */
v_mac = v_rom_mac ;
sprintf ( s_env_mac , " %02X:%02X:%02X:%02X:%02X:%02X " ,
v_mac [ 0 ] , v_mac [ 1 ] , v_mac [ 2 ] , v_mac [ 3 ] ,
v_mac [ 4 ] , v_mac [ 5 ] ) ;
setenv ( " ethaddr " , s_env_mac ) ;
} else { /* no env, bad ROM */
printf ( " \n *** ERROR: ethaddr is NOT set !! \n " ) ;
return ( - 1 ) ;
if ( ! eth_getenv_enetaddr ( " ethaddr " , v_mac ) ) {
/* get ROM mac value if any */
if ( ! get_rom_mac ( v_mac ) ) {
printf ( " \n *** ERROR: ethaddr is NOT set !! \n " ) ;
return - 1 ;
}
} else { /* good env, don't care ROM */
v_mac = v_env_mac ; /* always use a good env over a ROM */
eth_setenv_enetaddr ( " ethaddr " , v_mac ) ;
}
if ( env_present & & rom_valid ) { /* if both env and ROM are good */
if ( memcmp ( v_env_mac , v_rom_mac , 6 ) ! = 0 ) {
printf ( " \n Warning: MAC addresses don't match: \n " ) ;
printf ( " \t HW MAC address: "
" %02X:%02X:%02X:%02X:%02X:%02X \n " ,
v_rom_mac [ 0 ] , v_rom_mac [ 1 ] ,
v_rom_mac [ 2 ] , v_rom_mac [ 3 ] ,
v_rom_mac [ 4 ] , v_rom_mac [ 5 ] ) ;
printf ( " \t \" ethaddr \" value: "
" %02X:%02X:%02X:%02X:%02X:%02X \n " ,
v_env_mac [ 0 ] , v_env_mac [ 1 ] ,
v_env_mac [ 2 ] , v_env_mac [ 3 ] ,
v_env_mac [ 4 ] , v_env_mac [ 5 ] ) ;
debug ( " ### Set MAC addr from environment \n " ) ;
}
}
memcpy ( bd - > bi_enetaddr , v_mac , 6 ) ; /* update global address to match env (allows env changing) */
smc_set_mac_addr ( ( uchar * ) v_mac ) ; /* use old function to update smc default */
PRINTK ( " Using MAC Address %02X:%02X:%02X:%02X:%02X:%02X \n " , v_mac [ 0 ] , v_mac [ 1 ] ,
v_mac [ 2 ] , v_mac [ 3 ] , v_mac [ 4 ] , v_mac [ 5 ] ) ;
return ( 0 ) ;
smc_set_mac_addr ( v_mac ) ; /* use old function to update smc default */
PRINTK ( " Using MAC Address %pM \n " , v_mac ) ;
return 0 ;
}
int get_rom_mac ( uchar * v_rom_mac )