浏览代码

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 年之前
父节点
当前提交
6bacfa6a8e
共有 7 个文件被更改,包括 27 次插入19 次删除
  1. 5 3
      cpu/arm920t/at91rm9200/ether.c
  2. 4 2
      cpu/mpc512x/cpu.c
  3. 4 2
      cpu/mpc5xxx/cpu.c
  4. 2 2
      cpu/mpc8260/ether_fcc.c
  5. 2 2
      cpu/mpc8260/ether_scc.c
  6. 8 6
      cpu/ppc4xx/cpu_init.c
  7. 2 2
      post/cpu/mpc8xx/ether.c

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

@@ -155,6 +155,7 @@ int eth_init (bd_t * bd)
 {
 {
 	int ret;
 	int ret;
 	int i;
 	int i;
+	uchar enetaddr[6];
 
 
 	p_mac = AT91C_BASE_EMAC;
 	p_mac = AT91C_BASE_EMAC;
 
 
@@ -190,9 +191,10 @@ int eth_init (bd_t * bd)
 	rbfdt[RBF_FRAMEMAX - 1].addr |= RBF_WRAP;
 	rbfdt[RBF_FRAMEMAX - 1].addr |= RBF_WRAP;
 	rbfp = &rbfdt[0];
 	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_RBQP = (long) (&rbfdt[0]);
 	p_mac->EMAC_RSR &= ~(AT91C_EMAC_RSR_OVR | AT91C_EMAC_REC | AT91C_EMAC_BNA);
 	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
 	 * avoid fixing up by path because that
 	 * produces scary error messages
 	 * produces scary error messages
 	 */
 	 */
+	uchar enetaddr[6];
 
 
 	/*
 	/*
 	 * old device trees have ethernet nodes with
 	 * old device trees have ethernet nodes with
 	 * device_type = "network"
 	 * device_type = "network"
 	 */
 	 */
+	eth_getenv_enetaddr("ethaddr", enetaddr);
 	do_fixup_by_prop(blob, "device_type", "network", 8,
 	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,
 	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
 	 * old device trees have soc nodes with
 	 * device_type = "soc"
 	 * 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;
 	int div = in_8((void*)CONFIG_SYS_MBAR + 0x204) & 0x0020 ? 8 : 4;
 	char * cpu_path = "/cpus/" OF_CPU;
 	char * cpu_path = "/cpus/" OF_CPU;
 #ifdef CONFIG_MPC5xxx_FEC
 #ifdef CONFIG_MPC5xxx_FEC
+	uchar *enetaddr[6];
 	char * eth_path = "/" OF_SOC "/ethernet@3000";
 	char * eth_path = "/" OF_SOC "/ethernet@3000";
 #endif
 #endif
 
 
@@ -131,8 +132,9 @@ void ft_cpu_setup(void *blob, bd_t *bd)
 	do_fixup_by_path_u32(blob, "/" OF_SOC, "system-frequency",
 	do_fixup_by_path_u32(blob, "/" OF_SOC, "system-frequency",
 				bd->bi_busfreq*div, 1);
 				bd->bi_busfreq*div, 1);
 #ifdef CONFIG_MPC5xxx_FEC
 #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
 }
 }
 #endif
 #endif

+ 2 - 2
cpu/mpc8260/ether_fcc.c

@@ -654,7 +654,7 @@ eth_loopback_test (void)
 
 
 	puts ("FCC Ethernet External loopback test\n");
 	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
 	 * 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
 		 * So, far we have only been given one Ethernet address. We use
 		 * the same address for all channels
 		 * 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_paddrh = (ea[5] << 8) + ea[4];
 		fpp->fen_paddrm = (ea[3] << 8) + ea[2];
 		fpp->fen_paddrm = (ea[3] << 8) + ea[2];
 		fpp->fen_paddrl = (ea[1] << 8) + ea[0];
 		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;
     volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
     scc_enet_t *pram_ptr;
     scc_enet_t *pram_ptr;
     uint dpaddr;
     uint dpaddr;
+    uchar ea[6];
 
 
     rxIdx = 0;
     rxIdx = 0;
     txIdx = 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_gaddr3 = 0x0;   /* Group Address Filter 3 (unused) */
     pram_ptr->sen_gaddr4 = 0x0;   /* Group Address Filter 4 (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_paddrh = (ea[5] << 8) + ea[4];
     pram_ptr->sen_paddrm = (ea[3] << 8) + ea[2];
     pram_ptr->sen_paddrm = (ea[3] << 8) + ea[2];
     pram_ptr->sen_paddrl = (ea[1] << 8) + ea[0];
     pram_ptr->sen_paddrl = (ea[1] << 8) + ea[0];
-#  undef ea
 
 
     pram_ptr->sen_pper   = 0x0;   /* Persistence (unused) */
     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)
 #if defined(CONFIG_405GP)  || defined(CONFIG_405EP)
 	bd_t *bd = gd->bd;
 	bd_t *bd = gd->bd;
 	unsigned long reg;
 	unsigned long reg;
+	uchar enetaddr[6];
 #if defined(CONFIG_405GP)
 #if defined(CONFIG_405GP)
 	uint pvr = get_pvr();
 	uint pvr = get_pvr();
 #endif
 #endif
@@ -332,19 +333,20 @@ int cpu_init_r (void)
 	 * Write Ethernetaddress into on-chip register
 	 * Write Ethernetaddress into on-chip register
 	 */
 	 */
 	reg = 0x00000000;
 	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 = reg << 8;
-	reg |= bd->bi_enetaddr[1];
+	reg |= enetaddr[1];
 	out32 (EMAC_IAH, reg);
 	out32 (EMAC_IAH, reg);
 
 
 	reg = 0x00000000;
 	reg = 0x00000000;
-	reg |= bd->bi_enetaddr[2];           /* set low address  */
+	reg |= enetaddr[2];           /* set low address  */
 	reg = reg << 8;
 	reg = reg << 8;
-	reg |= bd->bi_enetaddr[3];
+	reg |= enetaddr[3];
 	reg = reg << 8;
 	reg = reg << 8;
-	reg |= bd->bi_enetaddr[4];
+	reg |= enetaddr[4];
 	reg = reg << 8;
 	reg = reg << 8;
-	reg |= bd->bi_enetaddr[5];
+	reg |= enetaddr[5];
 	out32 (EMAC_IAL, reg);
 	out32 (EMAC_IAL, reg);
 
 
 #if defined(CONFIG_405GP)
 #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)
 static void scc_init (int scc_index)
 {
 {
 	bd_t *bd = gd->bd;
 	bd_t *bd = gd->bd;
+	uchar ea[6];
 
 
 	static int proff[] =
 	static int proff[] =
 			{ PROFF_SCC1, PROFF_SCC2, PROFF_SCC3, PROFF_SCC4 };
 			{ 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_gaddr3 = 0x0;	/* Group Address Filter 3 (unused) */
 	pram_ptr->sen_gaddr4 = 0x0;	/* Group Address Filter 4 (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_paddrh = (ea[5] << 8) + ea[4];
 	pram_ptr->sen_paddrm = (ea[3] << 8) + ea[2];
 	pram_ptr->sen_paddrm = (ea[3] << 8) + ea[2];
 	pram_ptr->sen_paddrl = (ea[1] << 8) + ea[0];
 	pram_ptr->sen_paddrl = (ea[1] << 8) + ea[0];
-#undef ea
 
 
 	pram_ptr->sen_pper = 0x0;	/* Persistence (unused) */
 	pram_ptr->sen_pper = 0x0;	/* Persistence (unused) */
 	pram_ptr->sen_iaddr1 = 0x0;	/* Individual Address Filter 1 (unused) */
 	pram_ptr->sen_iaddr1 = 0x0;	/* Individual Address Filter 1 (unused) */