Jelajahi Sumber

cpu/: get mac address from environment

The environment is the canonical storage location of the mac address, so
we're killing off the global data location and moving everything to
querying the env directly.

The cpus that get converted here:
	at91rm9200
	mpc512x
	mpc5xxx
	mpc8260
	mpc8xx
	ppc4xx

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
CC: Ben Warren <biggerbadderben@gmail.com>
CC: John Rigby <jrigby@freescale.com>
CC: Stefan Roese <sr@denx.de>
Mike Frysinger 16 tahun lalu
induk
melakukan
6bacfa6a8e

+ 5 - 3
cpu/arm920t/at91rm9200/ether.c

@@ -155,6 +155,7 @@ int eth_init (bd_t * bd)
 {
 	int ret;
 	int i;
+	uchar enetaddr[6];
 
 	p_mac = AT91C_BASE_EMAC;
 
@@ -190,9 +191,10 @@ int eth_init (bd_t * bd)
 	rbfdt[RBF_FRAMEMAX - 1].addr |= RBF_WRAP;
 	rbfp = &rbfdt[0];
 
-	p_mac->EMAC_SA2L = (bd->bi_enetaddr[3] << 24) | (bd->bi_enetaddr[2] << 16)
-			 | (bd->bi_enetaddr[1] <<  8) | (bd->bi_enetaddr[0]);
-	p_mac->EMAC_SA2H = (bd->bi_enetaddr[5] <<  8) | (bd->bi_enetaddr[4]);
+	eth_getenv_enetaddr("ethaddr", enetaddr);
+	p_mac->EMAC_SA2L = (enetaddr[3] << 24) | (enetaddr[2] << 16)
+			 | (enetaddr[1] <<  8) | (enetaddr[0]);
+	p_mac->EMAC_SA2H = (enetaddr[5] <<  8) | (enetaddr[4]);
 
 	p_mac->EMAC_RBQP = (long) (&rbfdt[0]);
 	p_mac->EMAC_RSR &= ~(AT91C_EMAC_RSR_OVR | AT91C_EMAC_REC | AT91C_EMAC_BNA);

+ 4 - 2
cpu/mpc512x/cpu.c

@@ -148,15 +148,17 @@ static void old_ft_cpu_setup(void *blob, bd_t *bd)
 	 * avoid fixing up by path because that
 	 * produces scary error messages
 	 */
+	uchar enetaddr[6];
 
 	/*
 	 * old device trees have ethernet nodes with
 	 * device_type = "network"
 	 */
+	eth_getenv_enetaddr("ethaddr", enetaddr);
 	do_fixup_by_prop(blob, "device_type", "network", 8,
-		"local-mac-address", bd->bi_enetaddr, 6, 0);
+		"local-mac-address", enetaddr, 6, 0);
 	do_fixup_by_prop(blob, "device_type", "network", 8,
-		"address", bd->bi_enetaddr, 6, 0);
+		"address", enetaddr, 6, 0);
 	/*
 	 * old device trees have soc nodes with
 	 * device_type = "soc"

+ 4 - 2
cpu/mpc5xxx/cpu.c

@@ -121,6 +121,7 @@ void ft_cpu_setup(void *blob, bd_t *bd)
 	int div = in_8((void*)CONFIG_SYS_MBAR + 0x204) & 0x0020 ? 8 : 4;
 	char * cpu_path = "/cpus/" OF_CPU;
 #ifdef CONFIG_MPC5xxx_FEC
+	uchar *enetaddr[6];
 	char * eth_path = "/" OF_SOC "/ethernet@3000";
 #endif
 
@@ -131,8 +132,9 @@ void ft_cpu_setup(void *blob, bd_t *bd)
 	do_fixup_by_path_u32(blob, "/" OF_SOC, "system-frequency",
 				bd->bi_busfreq*div, 1);
 #ifdef CONFIG_MPC5xxx_FEC
-	do_fixup_by_path(blob, eth_path, "mac-address", bd->bi_enetaddr, 6, 0);
-	do_fixup_by_path(blob, eth_path, "local-mac-address", bd->bi_enetaddr, 6, 0);
+	eth_getenv_enetaddr("ethaddr", enetaddr);
+	do_fixup_by_path(blob, eth_path, "mac-address", enetaddr, 6, 0);
+	do_fixup_by_path(blob, eth_path, "local-mac-address", enetaddr, 6, 0);
 #endif
 }
 #endif

+ 2 - 2
cpu/mpc8260/ether_fcc.c

@@ -654,7 +654,7 @@ eth_loopback_test (void)
 
 	puts ("FCC Ethernet External loopback test\n");
 
-	memcpy (NetOurEther, gd->bd->bi_enetaddr, 6);
+	eth_getenv_enetaddr("ethaddr", NetOurEther);
 
 	/*
 	 * global initialisations for all FCC channels
@@ -841,7 +841,7 @@ eth_loopback_test (void)
 		 * So, far we have only been given one Ethernet address. We use
 		 * the same address for all channels
 		 */
-#define ea gd->bd->bi_enetaddr
+#define ea NetOurEther
 		fpp->fen_paddrh = (ea[5] << 8) + ea[4];
 		fpp->fen_paddrm = (ea[3] << 8) + ea[2];
 		fpp->fen_paddrl = (ea[1] << 8) + ea[0];

+ 2 - 2
cpu/mpc8260/ether_scc.c

@@ -199,6 +199,7 @@ static int sec_init(struct eth_device *dev, bd_t *bis)
     volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
     scc_enet_t *pram_ptr;
     uint dpaddr;
+    uchar ea[6];
 
     rxIdx = 0;
     txIdx = 0;
@@ -261,11 +262,10 @@ static int sec_init(struct eth_device *dev, bd_t *bis)
     pram_ptr->sen_gaddr3 = 0x0;   /* Group Address Filter 3 (unused) */
     pram_ptr->sen_gaddr4 = 0x0;   /* Group Address Filter 4 (unused) */
 
-#  define ea bis->bi_enetaddr
+    eth_getenv_enetaddr("ethaddr", ea);
     pram_ptr->sen_paddrh = (ea[5] << 8) + ea[4];
     pram_ptr->sen_paddrm = (ea[3] << 8) + ea[2];
     pram_ptr->sen_paddrl = (ea[1] << 8) + ea[0];
-#  undef ea
 
     pram_ptr->sen_pper   = 0x0;   /* Persistence (unused) */
 

+ 8 - 6
cpu/ppc4xx/cpu_init.c

@@ -324,6 +324,7 @@ int cpu_init_r (void)
 #if defined(CONFIG_405GP)  || defined(CONFIG_405EP)
 	bd_t *bd = gd->bd;
 	unsigned long reg;
+	uchar enetaddr[6];
 #if defined(CONFIG_405GP)
 	uint pvr = get_pvr();
 #endif
@@ -332,19 +333,20 @@ int cpu_init_r (void)
 	 * Write Ethernetaddress into on-chip register
 	 */
 	reg = 0x00000000;
-	reg |= bd->bi_enetaddr[0];           /* set high address */
+	eth_getenv_enetaddr("ethaddr", enetaddr);
+	reg |= enetaddr[0];           /* set high address */
 	reg = reg << 8;
-	reg |= bd->bi_enetaddr[1];
+	reg |= enetaddr[1];
 	out32 (EMAC_IAH, reg);
 
 	reg = 0x00000000;
-	reg |= bd->bi_enetaddr[2];           /* set low address  */
+	reg |= enetaddr[2];           /* set low address  */
 	reg = reg << 8;
-	reg |= bd->bi_enetaddr[3];
+	reg |= enetaddr[3];
 	reg = reg << 8;
-	reg |= bd->bi_enetaddr[4];
+	reg |= enetaddr[4];
 	reg = reg << 8;
-	reg |= bd->bi_enetaddr[5];
+	reg |= enetaddr[5];
 	out32 (EMAC_IAL, reg);
 
 #if defined(CONFIG_405GP)

+ 2 - 2
post/cpu/mpc8xx/ether.c

@@ -110,6 +110,7 @@ static RTXBD *rtx;
 static void scc_init (int scc_index)
 {
 	bd_t *bd = gd->bd;
+	uchar ea[6];
 
 	static int proff[] =
 			{ PROFF_SCC1, PROFF_SCC2, PROFF_SCC3, PROFF_SCC4 };
@@ -296,11 +297,10 @@ CPM_CR_CH_SCC4 };
 	pram_ptr->sen_gaddr3 = 0x0;	/* Group Address Filter 3 (unused) */
 	pram_ptr->sen_gaddr4 = 0x0;	/* Group Address Filter 4 (unused) */
 
-#define ea bd->bi_enetaddr
+	eth_getenv_enetaddr("ethaddr", ea);
 	pram_ptr->sen_paddrh = (ea[5] << 8) + ea[4];
 	pram_ptr->sen_paddrm = (ea[3] << 8) + ea[2];
 	pram_ptr->sen_paddrl = (ea[1] << 8) + ea[0];
-#undef ea
 
 	pram_ptr->sen_pper = 0x0;	/* Persistence (unused) */
 	pram_ptr->sen_iaddr1 = 0x0;	/* Individual Address Filter 1 (unused) */