nx823: get mac address from environment
authorMike Frysinger <vapier@gentoo.org>
Thu, 12 Feb 2009 00:36:20 +0000 (19:36 -0500)
committerWolfgang Denk <wd@denx.de>
Fri, 20 Mar 2009 21:39:11 +0000 (22:39 +0100)
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.

For the nx823, the serial number is moved out of load_sernum_ethaddr() and
into misc_init_r() as is the env setup.  This lets us kill off the former
function in the process.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
CC: Ben Warren <biggerbadderben@gmail.com>
board/nx823/flash.c
board/nx823/nx823.c
lib_ppc/board.c

index 194d841e4ea85fa819468e7db65707b1009e7278..336e70412be0219acbef3ba5f694188efb5f6029 100644 (file)
@@ -27,8 +27,9 @@
 #include <common.h>
 #include <mpc8xx.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 flash_info_t   flash_info[CONFIG_SYS_MAX_FLASH_BANKS]; /* info for FLASH chips */
-extern u_long  *my_sernum;             /* from nx823.c */
 
 /*-----------------------------------------------------------------------
  * Protection Flags:
@@ -346,7 +347,7 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
        if (addr >= CONFIG_SYS_FLASH_SN_SECTOR && addr < CONFIG_SYS_FLASH_SN_BASE)
        {
                u_long dest = CONFIG_SYS_FLASH_SN_BASE;
-               u_short *sn = (u_short *)my_sernum;
+               u_short *sn = (u_short *)gd->bd->bi_sernum;
 
                printf("(saving sernum)");
                for (i=0; i<4; i++)
index df9aaab7a7a702d61eed85705b4fae324eb583e0..6ec29dc8575db08dc90bb55268b0cab6887962e5 100644 (file)
@@ -360,39 +360,30 @@ static long int dram_size (long int mamr_value, long int *base,
        return (get_ram_size (base, maxsize));
 }
 
-u_long *my_sernum;
-
 int misc_init_r (void)
 {
+       int i;
        char tmp[50];
-       u_char *e = gd->bd->bi_enetaddr;
+       uchar ethaddr[6];
+       bd_t *bd = gd->bd;
+       ulong my_sernum = bd->bi_sernum;
 
-       /* save serial numbre from flash (uniquely programmed) */
-       my_sernum = malloc (8);
-       memcpy (my_sernum, gd->bd->bi_sernum, 8);
+       /* load unique serial number */
+       for (i = 0; i < 8; ++i)
+               bd->bi_sernum[i] = *(u_char *) (CONFIG_SYS_FLASH_SN_BASE + i);
 
        /* save env variables according to sernum */
        sprintf (tmp, "%08lx%08lx", my_sernum[0], my_sernum[1]);
        setenv ("serial#", tmp);
 
-       sprintf (tmp, "%02x:%02x:%02x:%02x:%02x:%02x", e[0], e[1], e[2], e[3],
-                e[4], e[5]);
-       setenv ("ethaddr", tmp);
-       return (0);
-}
-
-void load_sernum_ethaddr (void)
-{
-       int i;
-       bd_t *bd = gd->bd;
-
-       for (i = 0; i < 8; i++) {
-               bd->bi_sernum[i] = *(u_char *) (CONFIG_SYS_FLASH_SN_BASE + i);
+       if (!eth_getenv_enetaddr("ethaddr", ethaddr)) {
+               ethaddr[0] = 0x10;
+               ethaddr[1] = 0x20;
+               ethaddr[2] = 0x30;
+               ethaddr[3] = bd->bi_sernum[1] << 4 | bd->bi_sernum[2];
+               ethaddr[4] = bd->bi_sernum[5];
+               ethaddr[5] = bd->bi_sernum[6];
        }
-       bd->bi_enetaddr[0] = 0x10;
-       bd->bi_enetaddr[1] = 0x20;
-       bd->bi_enetaddr[2] = 0x30;
-       bd->bi_enetaddr[3] = bd->bi_sernum[1] << 4 | bd->bi_sernum[2];
-       bd->bi_enetaddr[4] = bd->bi_sernum[5];
-       bd->bi_enetaddr[5] = bd->bi_sernum[6];
+
+       return 0;
 }
index f69c5f4f1f4f6dfc65f4cdea78387cfdb39d4bc3..b1612ff01c1b0313fa4075665ea548c3440aa7bc 100644 (file)
@@ -899,10 +899,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
                bd->bi_ethspeed = 0xFFFF;
 #endif
 
-#ifdef CONFIG_NX823
-       load_sernum_ethaddr ();
-#endif
-
 #ifdef CONFIG_HAS_ETH1
        /* handle the 2nd ethernet address */