int eth_initialize(bd_t *bis) { char enetvar[32], env_enetaddr[6]; int i, eth_number = 0; char *tmp, *end; eth_devices = NULL; eth_current = NULL; #if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII) miiphy_init(); #endif #if defined(CONFIG_DB64360) || defined(CONFIG_CPCI750) mv6436x_eth_initialize(bis); #endif #if defined(CONFIG_DB64460) || defined(CONFIG_P3Mx) mv6446x_eth_initialize(bis); #endif #if defined(CONFIG_4xx) && !defined(CONFIG_IOP480) && !defined(CONFIG_AP1000) ppc_4xx_eth_initialize(bis); #endif #ifdef CONFIG_INCA_IP_SWITCH inca_switch_initialize(bis); #endif #ifdef CONFIG_PLB2800_ETHER plb2800_eth_initialize(bis); #endif #ifdef SCC_ENET scc_initialize(bis); #endif #if defined(CONFIG_MPC5xxx_FEC) mpc5xxx_fec_initialize(bis); #endif #if defined(CONFIG_MPC8220_FEC) mpc8220_fec_initialize(bis); #endif #if defined(CONFIG_SK98) skge_initialize(bis); #endif #if defined(CONFIG_MPC85XX_TSEC1) tsec_initialize(bis, 0, CONFIG_MPC85XX_TSEC1_NAME); #elif defined(CONFIG_MPC83XX_TSEC1) tsec_initialize(bis, 0, CONFIG_MPC83XX_TSEC1_NAME); #endif #if defined(CONFIG_MPC85XX_TSEC2) tsec_initialize(bis, 1, CONFIG_MPC85XX_TSEC2_NAME); #elif defined(CONFIG_MPC83XX_TSEC2) tsec_initialize(bis, 1, CONFIG_MPC83XX_TSEC2_NAME); #endif #if defined(CONFIG_MPC85XX_FEC) tsec_initialize(bis, 2, CONFIG_MPC85XX_FEC_NAME); #else # if defined(CONFIG_MPC85XX_TSEC3) tsec_initialize(bis, 2, CONFIG_MPC85XX_TSEC3_NAME); # elif defined(CONFIG_MPC83XX_TSEC3) tsec_initialize(bis, 2, CONFIG_MPC83XX_TSEC3_NAME); # endif # if defined(CONFIG_MPC85XX_TSEC4) tsec_initialize(bis, 3, CONFIG_MPC85XX_TSEC4_NAME); # elif defined(CONFIG_MPC83XX_TSEC4) tsec_initialize(bis, 3, CONFIG_MPC83XX_TSEC4_NAME); # endif #endif #if defined(CONFIG_UEC_ETH1) uec_initialize(0); #endif #if defined(CONFIG_UEC_ETH2) uec_initialize(1); #endif #if defined(CONFIG_MPC86XX_TSEC1) tsec_initialize(bis, 0, CONFIG_MPC86XX_TSEC1_NAME); #endif #if defined(CONFIG_MPC86XX_TSEC2) tsec_initialize(bis, 1, CONFIG_MPC86XX_TSEC2_NAME); #endif #if defined(CONFIG_MPC86XX_TSEC3) tsec_initialize(bis, 2, CONFIG_MPC86XX_TSEC3_NAME); #endif #if defined(CONFIG_MPC86XX_TSEC4) tsec_initialize(bis, 3, CONFIG_MPC86XX_TSEC4_NAME); #endif #if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC) fec_initialize(bis); #endif #if defined(CONFIG_AU1X00) au1x00_enet_initialize(bis); #endif #if defined(CONFIG_IXP4XX_NPE) npe_initialize(bis); #endif #ifdef CONFIG_E1000 e1000_initialize(bis); #endif #ifdef CONFIG_EEPRO100 eepro100_initialize(bis); #endif #ifdef CONFIG_TULIP dc21x4x_initialize(bis); #endif #ifdef CONFIG_3COM eth_3com_initialize(bis); #endif #ifdef CONFIG_PCNET pcnet_initialize(bis); #endif #ifdef CFG_GT_6426x gt6426x_eth_initialize(bis); #endif #ifdef CONFIG_NATSEMI natsemi_initialize(bis); #endif #ifdef CONFIG_NS8382X ns8382x_initialize(bis); #endif #if defined(CONFIG_RTL8139) rtl8139_initialize(bis); #endif #if defined(CONFIG_RTL8169) rtl8169_initialize(bis); #endif if (!eth_devices) { puts ("No ethernet found.\n"); } else { struct eth_device *dev = eth_devices; char *ethprime = getenv ("ethprime"); do { if (eth_number) puts (", "); printf("%s", dev->name); if (ethprime && strcmp (dev->name, ethprime) == 0) { eth_current = dev; puts (" [PRIME]"); } sprintf(enetvar, eth_number ? "eth%daddr" : "ethaddr", eth_number); tmp = getenv (enetvar); for (i=0; i<6; i++) { env_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0; if (tmp) tmp = (*end) ? end+1 : end; } if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) { if (memcmp(dev->enetaddr, "\0\0\0\0\0\0", 6) && memcmp(dev->enetaddr, env_enetaddr, 6)) { printf ("\nWarning: %s MAC addresses don't match:\n", dev->name); printf ("Address in SROM is " "%02X:%02X:%02X:%02X:%02X:%02X\n", dev->enetaddr[0], dev->enetaddr[1], dev->enetaddr[2], dev->enetaddr[3], dev->enetaddr[4], dev->enetaddr[5]); printf ("Address in environment is " "%02X:%02X:%02X:%02X:%02X:%02X\n", env_enetaddr[0], env_enetaddr[1], env_enetaddr[2], env_enetaddr[3], env_enetaddr[4], env_enetaddr[5]); } memcpy(dev->enetaddr, env_enetaddr, 6); } eth_number++; dev = dev->next; } while(dev != eth_devices); #ifdef CONFIG_NET_MULTI /* update current ethernet name */ if (eth_current) { char *act = getenv("ethact"); if (act == NULL || strcmp(act, eth_current->name) != 0) setenv("ethact", eth_current->name); } else setenv("ethact", NULL); #endif putc ('\n'); } return eth_number; }
int eth_initialize(bd_t *bis) { unsigned char rt2880_gmac1_mac[6]; int eth_number = 0, regValue=0; eth_devices = NULL; eth_current = NULL; #ifdef CONFIG_DB64360 mv6436x_eth_initialize(bis); #endif #ifdef CONFIG_CPCI750 mv6436x_eth_initialize(bis); #endif #ifdef CONFIG_DB64460 mv6446x_eth_initialize(bis); #endif #if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \ ( defined(CONFIG_440) && !defined(CONFIG_NET_MULTI) ) ppc_4xx_eth_initialize(bis); #endif #if defined(CONFIG_440) && defined(CONFIG_NET_MULTI) ppc_440x_eth_initialize(bis); #endif #ifdef CONFIG_INCA_IP_SWITCH inca_switch_initialize(bis); #endif #ifdef CONFIG_PLB2800_ETHER plb2800_eth_initialize(bis); #endif #ifdef SCC_ENET scc_initialize(bis); #endif #if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC) fec_initialize(bis); #endif #if defined(CONFIG_MPC5xxx_FEC) mpc5xxx_fec_initialize(bis); #endif #if defined(CONFIG_MPC8220) mpc8220_fec_initialize(bis); #endif #if defined(CONFIG_SK98) skge_initialize(bis); #endif #if defined(CONFIG_MPC85XX_TSEC1) tsec_initialize(bis, 0); #endif #if defined(CONFIG_MPC85XX_TSEC2) tsec_initialize(bis, 1); #endif #if defined(CONFIG_MPC85XX_FEC) tsec_initialize(bis, 2); #endif #if defined(CONFIG_AU1X00) au1x00_enet_initialize(bis); #endif #ifdef CONFIG_E1000 e1000_initialize(bis); #endif #ifdef CONFIG_EEPRO100 eepro100_initialize(bis); #endif #ifdef CONFIG_TULIP dc21x4x_initialize(bis); #endif #ifdef CONFIG_3COM eth_3com_initialize(bis); #endif #ifdef CONFIG_PCNET pcnet_initialize(bis); #endif #ifdef CFG_GT_6426x gt6426x_eth_initialize(bis); #endif #ifdef CONFIG_NATSEMI natsemi_initialize(bis); #endif #ifdef CONFIG_NS8382X ns8382x_initialize(bis); #endif #if defined(CONFIG_RTL8139) rtl8139_initialize(bis); #endif #if defined(CONFIG_RTL8169) rtl8169_initialize(bis); #endif #if defined(CONFIG_RT2880_ETH) rt2880_eth_initialize(bis); #endif if (!eth_devices) { puts ("No ethernet found.\n"); } else { struct eth_device *dev = eth_devices; char *ethprime = getenv ("ethprime"); unsigned char empty_mac[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; do { if (eth_number) puts (", "); if (ethprime && strcmp (dev->name, ethprime) == 0) { eth_current = dev; puts (" [PRIME]"); } #if defined (MT7621_MP) #define GMAC0_OFFSET 0xE000 #else #define GMAC0_OFFSET 0x28 #endif //get Ethernet mac address from flash #if defined (CFG_ENV_IS_IN_NAND) ranand_read(rt2880_gmac1_mac, CFG_FACTORY_ADDR - CFG_FLASH_BASE + GMAC0_OFFSET, 6); #elif defined (CFG_ENV_IS_IN_SPI) raspi_read(rt2880_gmac1_mac, CFG_FACTORY_ADDR - CFG_FLASH_BASE + GMAC0_OFFSET, 6); #else //CFG_ENV_IS_IN_FLASH memmove(rt2880_gmac1_mac, CFG_FACTORY_ADDR + GMAC0_OFFSET, 6); #endif //if flash is empty, use default mac address if (memcmp(rt2880_gmac1_mac, empty_mac, 6) == 0) eth_parse_enetaddr(CONFIG_ETHADDR, rt2880_gmac1_mac); if (memcmp (rt2880_gmac1_mac, "\0\0\0\0\0\0", 6) == 0) eth_parse_enetaddr(CONFIG_ETHADDR, rt2880_gmac1_mac); memcpy(dev->enetaddr, rt2880_gmac1_mac, 6); eth_number++; dev = dev->next; } while(dev != eth_devices); #ifdef CONFIG_NET_MULTI /* update current ethernet name */ if (eth_current) { char *act = getenv("ethact"); if (act == NULL || strcmp(act, eth_current->name) != 0) setenv("ethact", eth_current->name); } else setenv("ethact", NULL); #endif //printf("\n eth_current->name = %s\n",eth_current->name); printf("\n"); } return eth_number; }