diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/3c589.c | 7 | ||||
| -rw-r--r-- | drivers/net/4xx_enet.c | 13 | ||||
| -rw-r--r-- | drivers/net/dc2114x.c | 9 | ||||
| -rw-r--r-- | drivers/net/dm9000x.c | 26 | ||||
| -rw-r--r-- | drivers/net/enc28j60.c | 4 | ||||
| -rw-r--r-- | drivers/net/fsl_mcdmafec.c | 11 | ||||
| -rw-r--r-- | drivers/net/ks8695eth.c | 8 | ||||
| -rw-r--r-- | drivers/net/mcffec.c | 10 | ||||
| -rw-r--r-- | drivers/net/rtl8019.c | 14 | ||||
| -rw-r--r-- | drivers/net/rtl8169.c | 2 | ||||
| -rw-r--r-- | drivers/net/s3c4510b_eth.c | 2 | ||||
| -rw-r--r-- | drivers/net/s3c4510b_eth.h | 2 | ||||
| -rw-r--r-- | drivers/net/xilinx_emac.c | 12 | ||||
| -rw-r--r-- | drivers/net/xilinx_emaclite.c | 11 | 
14 files changed, 63 insertions, 68 deletions
| diff --git a/drivers/net/3c589.c b/drivers/net/3c589.c index 0cf8dff68..f2c7d326b 100644 --- a/drivers/net/3c589.c +++ b/drivers/net/3c589.c @@ -259,10 +259,13 @@ static void el_reset(bd_t *bd)  	/* set mac addr */  	{ -		unsigned char *mac_addr = bd->bi_enetaddr; +		uchar mac_addr[6];  		int i; -		el_get_mac_addr( mac_addr ); +		if (!eth_getenv_enetaddr("ethaddr", mac_addr)) { +			el_get_mac_addr(mac_addr); +			eth_setenv_enetaddr("ethaddr", mac_addr); +		}  		GO_WINDOW(2);  		VX_BUSY_WAIT; diff --git a/drivers/net/4xx_enet.c b/drivers/net/4xx_enet.c index 197826959..918373bd1 100644 --- a/drivers/net/4xx_enet.c +++ b/drivers/net/4xx_enet.c @@ -1927,24 +1927,22 @@ int ppc_4xx_eth_initialize (bd_t * bis)  		memcpy(ethaddr[eth_num], "\0\0\0\0\0\0", 6);  	for (eth_num = 0; eth_num < LAST_EMAC_NUM; eth_num++) { +		int ethaddr_idx = eth_num + CONFIG_EMAC_NR_START;  		switch (eth_num) {  		default:		/* fall through */  		case 0: -			memcpy(ethaddr[eth_num + CONFIG_EMAC_NR_START], -			       bis->bi_enetaddr, 6); +			eth_getenv_enetaddr("ethaddr", ethaddr[ethaddr_idx]);  			hw_addr[eth_num] = 0x0;  			break;  #ifdef CONFIG_HAS_ETH1  		case 1: -			memcpy(ethaddr[eth_num + CONFIG_EMAC_NR_START], -			       bis->bi_enet1addr, 6); +			eth_getenv_enetaddr("eth1addr", ethaddr[ethaddr_idx]);  			hw_addr[eth_num] = 0x100;  			break;  #endif  #ifdef CONFIG_HAS_ETH2  		case 2: -			memcpy(ethaddr[eth_num + CONFIG_EMAC_NR_START], -			       bis->bi_enet2addr, 6); +			eth_getenv_enetaddr("eth2addr", ethaddr[ethaddr_idx]);  #if defined(CONFIG_460GT)  			hw_addr[eth_num] = 0x300;  #else @@ -1954,8 +1952,7 @@ int ppc_4xx_eth_initialize (bd_t * bis)  #endif  #ifdef CONFIG_HAS_ETH3  		case 3: -			memcpy(ethaddr[eth_num + CONFIG_EMAC_NR_START], -			       bis->bi_enet3addr, 6); +			eth_getenv_enetaddr("eth3addr", ethaddr[ethaddr_idx]);  #if defined(CONFIG_460GT)  			hw_addr[eth_num] = 0x400;  #else diff --git a/drivers/net/dc2114x.c b/drivers/net/dc2114x.c index c0137a7f2..5ae53e816 100644 --- a/drivers/net/dc2114x.c +++ b/drivers/net/dc2114x.c @@ -752,11 +752,14 @@ static void update_srom(struct eth_device *dev, bd_t *bis)  		0x0000, 0x0000, 0x0000, 0x0000,	/* 38 */  		0x0000, 0x0000, 0x0000, 0x4e07,	/* 3c */  	}; +	uchar enetaddr[6];  	/* Ethernet Addr... */ -	eeprom[0x0a] = ((bis->bi_enetaddr[1] & 0xff) << 8) | (bis->bi_enetaddr[0] & 0xff); -	eeprom[0x0b] = ((bis->bi_enetaddr[3] & 0xff) << 8) | (bis->bi_enetaddr[2] & 0xff); -	eeprom[0x0c] = ((bis->bi_enetaddr[5] & 0xff) << 8) | (bis->bi_enetaddr[4] & 0xff); +	if (!eth_getenv_enetaddr("ethaddr", enetaddr)) +		return; +	eeprom[0x0a] = (enetaddr[1] << 8) | enetaddr[0]; +	eeprom[0x0b] = (enetaddr[3] << 8) | enetaddr[2]; +	eeprom[0x0c] = (enetaddr[5] << 8) | enetaddr[4];  	for (i=0; i<0x40; i++) {  		write_srom(dev, DE4X5_APROM, i, eeprom[i]); diff --git a/drivers/net/dm9000x.c b/drivers/net/dm9000x.c index ffb739de9..c52d30790 100644 --- a/drivers/net/dm9000x.c +++ b/drivers/net/dm9000x.c @@ -287,6 +287,7 @@ eth_init(bd_t * bd)  	int i, oft, lnk;  	u8 io_mode;  	struct board_info *db = &dm9000_info; +	uchar enetaddr[6];  	DM9000_DBG("eth_init()\n"); @@ -345,32 +346,19 @@ eth_init(bd_t * bd)  	DM9000_iow(DM9000_ISR, ISR_ROOS | ISR_ROS | ISR_PTS | ISR_PRS);  	/* Set Node address */ +	if (!eth_getenv_enetaddr("ethaddr", enetaddr)) {  #if !defined(CONFIG_AT91SAM9261EK) -	for (i = 0; i < 6; i++) -		((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i); +		for (i = 0; i < 6; i++) +			enetaddr[i] = read_srom_word(i); +		eth_setenv_enetaddr("ethaddr", enetaddr);  #endif - -	if (is_zero_ether_addr(bd->bi_enetaddr) || -	    is_multicast_ether_addr(bd->bi_enetaddr)) { -		/* try reading from environment */ -		u8 i; -		char *s, *e; -		s = getenv ("ethaddr"); -		for (i = 0; i < 6; ++i) { -			bd->bi_enetaddr[i] = s ? -				simple_strtoul (s, &e, 16) : 0; -			if (s) -				s = (*e) ? e + 1 : e; -		}  	} -	printf("MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", bd->bi_enetaddr[0], -	       bd->bi_enetaddr[1], bd->bi_enetaddr[2], bd->bi_enetaddr[3], -	       bd->bi_enetaddr[4], bd->bi_enetaddr[5]); +	printf("MAC: %pM\n", enetaddr);  	/* fill device MAC address registers */  	for (i = 0, oft = DM9000_PAR; i < 6; i++, oft++) -		DM9000_iow(oft, bd->bi_enetaddr[i]); +		DM9000_iow(oft, enetaddr[i]);  	for (i = 0, oft = 0x16; i < 8; i++, oft++)  		DM9000_iow(oft, 0xff); diff --git a/drivers/net/enc28j60.c b/drivers/net/enc28j60.c index 5c24b0d9f..3238a502c 100644 --- a/drivers/net/enc28j60.c +++ b/drivers/net/enc28j60.c @@ -330,6 +330,7 @@ static int rxResetCounter = 0;  int eth_init (bd_t * bis)  {  	unsigned char estatVal; +	uchar enetaddr[6];  	/* configure GPIO */  	(*((volatile unsigned long *) IO1DIR)) |= ENC_SPI_SLAVE_CS; @@ -351,7 +352,8 @@ int eth_init (bd_t * bis)  	/* initialize controller */  	encReset (); -	encInit (bis->bi_enetaddr); +	eth_getenv_enetaddr("ethaddr", enetaddr); +	encInit (enetaddr);  	m_nic_bfs (CTL_REG_ECON1, ENC_ECON1_RXEN);	/* enable receive */ diff --git a/drivers/net/fsl_mcdmafec.c b/drivers/net/fsl_mcdmafec.c index d056010c7..35a6dfbe9 100644 --- a/drivers/net/fsl_mcdmafec.c +++ b/drivers/net/fsl_mcdmafec.c @@ -369,6 +369,7 @@ static int fec_init(struct eth_device *dev, bd_t * bd)  	struct fec_info_dma *info = dev->priv;  	volatile fecdma_t *fecp = (fecdma_t *) (info->iobase);  	int i; +	uchar enetaddr[6];  #ifdef ET_DEBUG  	printf("fec_init: iobase 0x%08x ...\n", info->iobase); @@ -397,11 +398,11 @@ static int fec_init(struct eth_device *dev, bd_t * bd)  	fecp->eir = 0xffffffff;  	/* Set station address   */ -	if ((u32) fecp == CONFIG_SYS_FEC0_IOBASE) { -		fec_set_hwaddr(fecp, bd->bi_enetaddr); -	} else { -		fec_set_hwaddr(fecp, bd->bi_enet1addr); -	} +	if ((u32) fecp == CONFIG_SYS_FEC0_IOBASE) +		eth_getenv_enetaddr("ethaddr", enetaddr); +	else +		eth_getenv_enetaddr("eth1addr", enetaddr); +	fec_set_hwaddr(fecp, enetaddr);  	/* Set Opcode/Pause Duration Register */  	fecp->opd = 0x00010020; diff --git a/drivers/net/ks8695eth.c b/drivers/net/ks8695eth.c index 7f3e0c2e4..5ea6e7fda 100644 --- a/drivers/net/ks8695eth.c +++ b/drivers/net/ks8695eth.c @@ -150,13 +150,7 @@ void eth_reset(bd_t *bd)  	ks8695_write(KS8695_LAN_DMA_RX, 0x71);  	ks8695_write(KS8695_LAN_DMA_RX_START, 0x1); -	printf("KS8695 ETHERNET: "); -	for (i = 0; (i < 5); i++) { -		bd->bi_enetaddr[i] = eth_mac[i]; -		printf("%02x:", eth_mac[i]); -	} -	bd->bi_enetaddr[i] = eth_mac[i]; -	printf("%02x\n", eth_mac[i]); +	printf("KS8695 ETHERNET: %pM\n", eth_mac);  }  /****************************************************************************/ diff --git a/drivers/net/mcffec.c b/drivers/net/mcffec.c index 18240a81a..64be5de52 100644 --- a/drivers/net/mcffec.c +++ b/drivers/net/mcffec.c @@ -416,7 +416,7 @@ int fec_init(struct eth_device *dev, bd_t * bd)  	struct fec_info_s *info = dev->priv;  	volatile fec_t *fecp = (fec_t *) (info->iobase);  	int i; -	u8 *ea = NULL; +	uchar ea[6];  	fecpin_setclear(dev, 1); @@ -444,25 +444,25 @@ int fec_init(struct eth_device *dev, bd_t * bd)  	if ((u32) fecp == CONFIG_SYS_FEC0_IOBASE) {  #ifdef CONFIG_SYS_FEC1_IOBASE  		volatile fec_t *fecp1 = (fec_t *) (CONFIG_SYS_FEC1_IOBASE); -		ea = &bd->bi_enet1addr[0]; +		eth_getenv_enetaddr("eth1addr", ea);  		fecp1->palr =  		    (ea[0] << 24) | (ea[1] << 16) | (ea[2] << 8) | (ea[3]);  		fecp1->paur = (ea[4] << 24) | (ea[5] << 16);  #endif -		ea = &bd->bi_enetaddr[0]; +		eth_getenv_enetaddr("ethaddr", ea);  		fecp->palr =  		    (ea[0] << 24) | (ea[1] << 16) | (ea[2] << 8) | (ea[3]);  		fecp->paur = (ea[4] << 24) | (ea[5] << 16);  	} else {  #ifdef CONFIG_SYS_FEC0_IOBASE  		volatile fec_t *fecp0 = (fec_t *) (CONFIG_SYS_FEC0_IOBASE); -		ea = &bd->bi_enetaddr[0]; +		eth_getenv_enetaddr("ethaddr", ea);  		fecp0->palr =  		    (ea[0] << 24) | (ea[1] << 16) | (ea[2] << 8) | (ea[3]);  		fecp0->paur = (ea[4] << 24) | (ea[5] << 16);  #endif  #ifdef CONFIG_SYS_FEC1_IOBASE -		ea = &bd->bi_enet1addr[0]; +		eth_getenv_enetaddr("eth1addr", ea);  		fecp->palr =  		    (ea[0] << 24) | (ea[1] << 16) | (ea[2] << 8) | (ea[3]);  		fecp->paur = (ea[4] << 24) | (ea[5] << 16); diff --git a/drivers/net/rtl8019.c b/drivers/net/rtl8019.c index 3ddf91793..f516afe6b 100644 --- a/drivers/net/rtl8019.c +++ b/drivers/net/rtl8019.c @@ -91,6 +91,7 @@ void eth_halt (void)  int eth_init (bd_t * bd)  { +	uchar enetaddr[6];  	eth_reset ();  	put_reg (RTL8019_COMMAND, RTL8019_PAGE0STOP);  	put_reg (RTL8019_DATACONFIGURATION, 0x48); @@ -105,12 +106,13 @@ int eth_init (bd_t * bd)  	put_reg (RTL8019_INTERRUPTSTATUS, 0xff);  	put_reg (RTL8019_INTERRUPTMASK, 0x11);	/*b; */  	put_reg (RTL8019_COMMAND, RTL8019_PAGE1STOP); -	put_reg (RTL8019_PHYSICALADDRESS0, bd->bi_enetaddr[0]); -	put_reg (RTL8019_PHYSICALADDRESS1, bd->bi_enetaddr[1]); -	put_reg (RTL8019_PHYSICALADDRESS2, bd->bi_enetaddr[2]); -	put_reg (RTL8019_PHYSICALADDRESS3, bd->bi_enetaddr[3]); -	put_reg (RTL8019_PHYSICALADDRESS4, bd->bi_enetaddr[4]); -	put_reg (RTL8019_PHYSICALADDRESS5, bd->bi_enetaddr[5]); +	eth_getenv_enetaddr("ethaddr", enetaddr); +	put_reg (RTL8019_PHYSICALADDRESS0, enetaddr[0]); +	put_reg (RTL8019_PHYSICALADDRESS1, enetaddr[1]); +	put_reg (RTL8019_PHYSICALADDRESS2, enetaddr[2]); +	put_reg (RTL8019_PHYSICALADDRESS3, enetaddr[3]); +	put_reg (RTL8019_PHYSICALADDRESS4, enetaddr[4]); +	put_reg (RTL8019_PHYSICALADDRESS5, enetaddr[5]);  	put_reg (RTL8019_MULTIADDRESS0, 0x00);  	put_reg (RTL8019_MULTIADDRESS1, 0x00);  	put_reg (RTL8019_MULTIADDRESS2, 0x00); diff --git a/drivers/net/rtl8169.c b/drivers/net/rtl8169.c index e9f6391b3..f8c14b428 100644 --- a/drivers/net/rtl8169.c +++ b/drivers/net/rtl8169.c @@ -750,7 +750,7 @@ static int rtl_init(struct eth_device *dev, bd_t *bis)  	/* Get MAC address.  FIXME: read EEPROM */  	for (i = 0; i < MAC_ADDR_LEN; i++) -		bis->bi_enetaddr[i] = dev->enetaddr[i] = RTL_R8(MAC0 + i); +		dev->enetaddr[i] = RTL_R8(MAC0 + i);  #ifdef DEBUG_RTL8169  	printf("chipset = %d\n", tpc->chipset); diff --git a/drivers/net/s3c4510b_eth.c b/drivers/net/s3c4510b_eth.c index 6dcb24486..818ed3d34 100644 --- a/drivers/net/s3c4510b_eth.c +++ b/drivers/net/s3c4510b_eth.c @@ -100,7 +100,7 @@ int eth_init(bd_t *bis)  	ETH *eth = &m_eth;  	/* store our MAC address */ -	eth->m_mac = bis->bi_enetaddr; +	eth_getenv_enetaddr("ethaddr", eth->m_mac);  	/* setup DBMA and MAC */  	PUT_REG( REG_BDMARXCON, ETH_BRxRS);   /* reset BDMA RX machine */ diff --git a/drivers/net/s3c4510b_eth.h b/drivers/net/s3c4510b_eth.h index 048307f21..18a52a7f4 100644 --- a/drivers/net/s3c4510b_eth.h +++ b/drivers/net/s3c4510b_eth.h @@ -296,7 +296,7 @@ typedef struct __ETH {  	TX_FrameDescriptor  *m_baseTX_FD; /*  pointer to base TX frame descriptor    */  	RX_FrameDescriptor   *m_curRX_FD; /*  pointer to current RX frame descriptor */  	RX_FrameDescriptor  *m_baseRX_FD; /*  pointer to base RX frame descriptor    */ -	u8                        *m_mac; /*  pointer to our MAC address             */ +	u8                      m_mac[6]; /*  pointer to our MAC address             */  } ETH;  #endif diff --git a/drivers/net/xilinx_emac.c b/drivers/net/xilinx_emac.c index c7f1a2a8d..a489aa97f 100644 --- a/drivers/net/xilinx_emac.c +++ b/drivers/net/xilinx_emac.c @@ -166,6 +166,7 @@ void eth_halt(void)  int eth_init(bd_t * bis)  { +	uchar enetaddr[6];  	u32 helpreg;  	debug ("EMAC Initialization Started\n\r"); @@ -200,15 +201,16 @@ int eth_init(bd_t * bis)  	helpreg &= ~(XEM_ECR_XMIT_ENABLE_MASK | XEM_ECR_RECV_ENABLE_MASK);  	out_be32 (emac.baseaddress + XEM_ECR_OFFSET, helpreg); -	if (!getenv("ethaddr")) { -		memcpy(bis->bi_enetaddr, emacaddr, ENET_ADDR_LENGTH); +	if (!eth_getenv_enetaddr("ethaddr", enetaddr)) { +		memcpy(enetaddr, emacaddr, ENET_ADDR_LENGTH); +		eth_setenv_enetaddr("ethaddr", enetaddr);  	}  	/* Set the device station address high and low registers */ -	helpreg = (bis->bi_enetaddr[0] << 8) | bis->bi_enetaddr[1]; +	helpreg = (enetaddr[0] << 8) | enetaddr[1];  	out_be32 (emac.baseaddress + XEM_SAH_OFFSET, helpreg); -	helpreg = (bis->bi_enetaddr[2] << 24) | (bis->bi_enetaddr[3] << 16) | -			(bis->bi_enetaddr[4] << 8) | bis->bi_enetaddr[5]; +	helpreg = (enetaddr[2] << 24) | (enetaddr[3] << 16) | +			(enetaddr[4] << 8) | enetaddr[5];  	out_be32 (emac.baseaddress + XEM_SAL_OFFSET, helpreg);  	helpreg = XEM_ECR_UNICAST_ENABLE_MASK | XEM_ECR_BROAD_ENABLE_MASK | diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c index 0e96ef184..cf3957380 100644 --- a/drivers/net/xilinx_emaclite.c +++ b/drivers/net/xilinx_emaclite.c @@ -140,12 +140,15 @@ void eth_halt (void)  int eth_init (bd_t * bis)  { +	uchar enetaddr[6]; +  	debug ("EmacLite Initialization Started\n");  	memset (&emaclite, 0, sizeof (xemaclite));  	emaclite.baseaddress = XILINX_EMACLITE_BASEADDR; -	if (!getenv("ethaddr")) { -		memcpy(bis->bi_enetaddr, emacaddr, ENET_ADDR_LENGTH); +	if (!eth_getenv_enetaddr("ethaddr", enetaddr)) { +		memcpy(enetaddr, emacaddr, ENET_ADDR_LENGTH); +		eth_setenv_enetaddr("ethaddr", enetaddr);  	}  /* @@ -154,7 +157,7 @@ int eth_init (bd_t * bis)  	/* Restart PING TX */  	out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET, 0);  	/* Copy MAC address */ -	xemaclite_alignedwrite (bis->bi_enetaddr, +	xemaclite_alignedwrite (enetaddr,  		emaclite.baseaddress, ENET_ADDR_LENGTH);  	/* Set the length */  	out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH); @@ -167,7 +170,7 @@ int eth_init (bd_t * bis)  #ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG  	/* The same operation with PONG TX */  	out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET, 0); -	xemaclite_alignedwrite (bis->bi_enetaddr, emaclite.baseaddress + +	xemaclite_alignedwrite (enetaddr, emaclite.baseaddress +  		XEL_BUFFER_OFFSET, ENET_ADDR_LENGTH);  	out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);  	out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET, |