boards: get mac address from environment
authorMike Frysinger <vapier@gentoo.org>
Wed, 11 Feb 2009 23:38:38 +0000 (18:38 -0500)
committerWolfgang Denk <wd@denx.de>
Fri, 20 Mar 2009 21:39:10 +0000 (22:39 +0100)
The boards that get converted here to use the environment for the mac
address rather than global data:
debris
mgcoge
mgsuvd
muas3001
netstal
pn62
sixnet
vcma9
xilinx (the ones that use xilinx_enet)

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
CC: Ben Warren <biggerbadderben@gmail.com>
CC: Sangmoon Kim <dogoil@etinsys.com>
CC: Heiko Schocher <hs@denx.de>
CC: David Mueller <d.mueller@elsoft.ch>
CC: Niklaus Giger <niklaus.giger@netstal.com>
CC: Wolfgang Grandegger <wg@denx.de>
CC: Dave Ellis <DGE@sixnetio.com>
CC: Ricardo Ribalda <ricardo.ribalda@uam.es>
board/etin/debris/debris.c
board/keymile/km8xx/km8xx.c
board/keymile/mgcoge/mgcoge.c
board/mpl/vcma9/cmd_vcma9.c
board/muas3001/muas3001.c
board/netstal/common/nm_bsp.c
board/pn62/pn62.c
board/sixnet/sixnet.c
board/xilinx/xilinx_enet/emac_adapter.c

index 227c49a14dfed02da344bf066bf2e5c77b549559..a971af3aa93ee68da5fe19b046504bfd8570c77d 100644 (file)
@@ -173,9 +173,13 @@ void nvram_write(long dest, const void *src, size_t count)
 
 int misc_init_r(void)
 {
-       /* Write ethernet addr in NVRAM for VxWorks */
-       nvram_write(CONFIG_ENV_ADDR + CONFIG_SYS_NVRAM_VXWORKS_OFFS,
-                       (char*)&gd->bd->bi_enetaddr[0], 6);
+       uchar ethaddr[6];
+
+       if (eth_getenv_enetaddr("ethaddr", ethaddr))
+               /* Write ethernet addr in NVRAM for VxWorks */
+               nvram_write(CONFIG_ENV_ADDR + CONFIG_SYS_NVRAM_VXWORKS_OFFS,
+                               ethaddr, 6);
+
        return 0;
 }
 
index 845d3f2a0e7f7b02625f6028999a8e5e711c6952..7c5817977784564f080e75b84c757cfb840a262d 100644 (file)
@@ -174,6 +174,7 @@ void ft_blob_update (void *blob, bd_t *bd)
        ulong memory_data[2] = {0};
        ulong flash_data[4] = {0};
        ulong flash_reg[3] = {0};
+       uchar enetaddr[6];
 
        memory_data[0] = cpu_to_be32 (bd->bi_memstart);
        memory_data[1] = cpu_to_be32 (bd->bi_memsize);
@@ -195,8 +196,9 @@ void ft_blob_update (void *blob, bd_t *bd)
                                sizeof (brg_data));
 
        /* MAC adr */
+       eth_getenv_enetaddr("ethaddr", enetaddr);
        fdt_set_node_and_value (blob, "/soc/cpm/ethernet", "mac-address",
-                               bd->bi_enetaddr, sizeof (u8) * 6);
+                               enetaddr, sizeof (u8) * 6);
 }
 
 void ft_board_setup(void *blob, bd_t *bd)
index 0e3aa49df99e02b00bc5a72368a5a04c195f5054..67722e708d7f413ba1cc082ee719825809e5d4a0 100644 (file)
@@ -326,6 +326,7 @@ void ft_blob_update (void *blob, bd_t *bd)
        ulong memory_data[2] = {0};
        ulong flash_data[8] = {0};
        flash_info_t    *info;
+       uchar enetaddr[6];
 
        memory_data[0] = cpu_to_be32 (bd->bi_memstart);
        memory_data[1] = cpu_to_be32 (bd->bi_memsize);
@@ -344,8 +345,9 @@ void ft_blob_update (void *blob, bd_t *bd)
        fdt_set_node_and_value (blob, "/localbus", "ranges", flash_data,
                                sizeof (flash_data));
        /* MAC addr */
+       eth_getenv_enetaddr("ethaddr", enetaddr);
        fdt_set_node_and_value (blob, "/soc/cpm/ethernet", "mac-address",
-                               bd->bi_enetaddr, sizeof (u8) * 6);
+                               enetaddr, sizeof (u8) * 6);
 }
 
 void ft_board_setup (void *blob, bd_t *bd)
index 2748fa97f8ae1fcebdcc21818b6aa38285d80bdc..7d2aa3cceeb68222f8f2f5c142e0b30b015575a1 100644 (file)
@@ -76,21 +76,18 @@ int do_vcma9(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        cs8900_e2prom_write(addr, data);
                } else if (strcmp(argv[2], "setaddr") == 0) {
                        uchar addr, i, csum; ushort data;
+                       uchar ethaddr[6];
 
                        /* check for valid ethaddr */
-                       for (i = 0; i < 6; i++)
-                               if (gd->bd->bi_enetaddr[i] != 0)
-                                       break;
-
-                       if (i < 6) {
+                       if (eth_getenv_enetaddr("ethaddr", ethaddr)) {
                                addr = 1;
                                data = 0x2158;
                                cs8900_e2prom_write(addr, data);
                                csum = cs8900_chksum(data);
                                addr++;
                                for (i = 0; i < 6; i+=2) {
-                                       data = gd->bd->bi_enetaddr[i+1] << 8 |
-                                              gd->bd->bi_enetaddr[i];
+                                       data = enetaddr[i+1] << 8 |
+                                              enetaddr[i];
                                        cs8900_e2prom_write(addr, data);
                                        csum += cs8900_chksum(data);
                                        addr++;
index 6b1e59f97f7212968ea81348fd59b1664acc66c8..8f83dd9af8eb419cba80ee923da74f5fc05ee12c 100644 (file)
@@ -346,7 +346,9 @@ void ft_blob_update (void *blob, bd_t *bd)
        /* MAC Adresse */
        nodeoffset = fdt_path_offset (blob, "/soc/cpm/ethernet");
        if (nodeoffset >= 0) {
-               ret = fdt_setprop (blob, nodeoffset, "mac-address", bd->bi_enetaddr,
+               uchar ethaddr[6];
+               eth_getenv_enetaddr("ethaddr", ethaddr);
+               ret = fdt_setprop (blob, nodeoffset, "mac-address", ethaddr,
                                        sizeof (uchar) * 6);
        if (ret < 0)
                printf ("ft_blob_update): cannot set /soc/cpm/ethernet/mac-address "
index e38b7069ceeed12ddb656234c06ed4a48b78e2b3..237f4ed74c5f74cafc84c5de068d130830d1b583 100644 (file)
@@ -83,40 +83,20 @@ void set_params_for_sw_install(int install_requested, char *board_name )
 
 void common_misc_init_r(void)
 {
-       char *s = getenv(DEFAULT_ETH_ADDR);
-       char *e;
-       int i;
-       u32 serial = get_serial_number();
        IPaddr_t ipaddr;
        char *ipstring;
+       uchar ethaddr[6];
 
-       for (i = 0; i < 6; ++i) {
-               gd->bd->bi_enetaddr[i] = s ? simple_strtoul(s, &e, 16) : 0;
-               if (s)
-                       s = (*e) ? e + 1 : e;
-       }
-
-       if (gd->bd->bi_enetaddr[3] == 0 &&
-           gd->bd->bi_enetaddr[4] == 0 &&
-           gd->bd->bi_enetaddr[5] == 0) {
-               char ethaddr[22];
-
+       if (!eth_getenv_enetaddr(DEFAULT_ETH_ADDR, ethaddr)) {
                /* Must be in sync with CONFIG_ETHADDR */
-               gd->bd->bi_enetaddr[0] = 0x00;
-               gd->bd->bi_enetaddr[1] = 0x60;
-               gd->bd->bi_enetaddr[2] = 0x13;
-               gd->bd->bi_enetaddr[3] = (serial >> 16) & 0xff;
-               gd->bd->bi_enetaddr[4] = (serial >>  8) & 0xff;
-               gd->bd->bi_enetaddr[5] = hcu_get_slot();
-               sprintf(ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X%c",
-                       gd->bd->bi_enetaddr[0], gd->bd->bi_enetaddr[1],
-                       gd->bd->bi_enetaddr[2], gd->bd->bi_enetaddr[3],
-                       gd->bd->bi_enetaddr[4],
-                       gd->bd->bi_enetaddr[5],
-                       0) ;
-               printf("%s: Setting eth %s serial 0x%x\n",  __FUNCTION__,
-                      ethaddr, serial);
-               setenv(DEFAULT_ETH_ADDR, ethaddr);
+               u32 serial = get_serial_number();
+               ethaddr[0] = 0x00;
+               ethaddr[1] = 0x60;
+               ethaddr[2] = 0x13;
+               ethaddr[3] = (serial >> 16) & 0xff;
+               ethaddr[4] = (serial >>  8) & 0xff;
+               ethaddr[5] = hcu_get_slot();
+               eth_setenv_enetaddr(DEFAULT_ETH_ADDR, ethaddr);
        }
 
        /* IP-Adress update */
index 1b545bfa9d5e9aed0730cf37c2006545df4fc855..53d7e5763d7d797a3633dbe2c8d1efebb637bbaf 100644 (file)
@@ -30,7 +30,7 @@
 DECLARE_GLOBAL_DATA_PTR;
 
 static int get_serial_number (char *string, int size);
-static int get_mac_address (int id, u8 * mac, char *string, int size);
+static void get_mac_address(int id, u8 *mac);
 
 #ifdef CONFIG_SHOW_BOOT_PROGRESS
 void show_boot_progress (int phase)
@@ -138,18 +138,16 @@ int misc_init_r (void)
        }
        show_startup_phase (9);
 
-       if (getenv ("ethaddr") == NULL &&
-               get_mac_address (0, mac, str, sizeof (str)) > 0) {
-               setenv ("ethaddr", str);
-               memcpy (gd->bd->bi_enetaddr, mac, 6);
+       if (!eth_getenv_enetaddr("ethaddr", mac)) {
+               get_mac_address(0, mac);
+               eth_setenv_enetaddr("ethaddr", mac);
        }
        show_startup_phase (10);
 
 #ifdef CONFIG_HAS_ETH1
-       if (getenv ("eth1addr") == NULL &&
-               get_mac_address (1, mac, str, sizeof (str)) > 0) {
-               setenv ("eth1addr", str);
-               memcpy (gd->bd->bi_enet1addr, mac, 6);
+       if (!eth_getenv_enetaddr("eth1addr", mac)) {
+               get_mac_address(1, mac);
+               eth_setenv_enetaddr("eth1addr", mac);
        }
 #endif /* CONFIG_HAS_ETH1 */
        show_startup_phase (11);
@@ -177,15 +175,9 @@ static int get_serial_number (char *string, int size)
        return i;
 }
 
-static int get_mac_address (int id, u8 * mac, char *string, int size)
+static void get_mac_address(int id, u8 *mac)
 {
-       if (size < 6 * 3)
-               return -1;
-
        i2155x_read_vpd (I2155X_VPD_MAC0_START + 6 * id, 6, mac);
-       return sprintf (string, "%02x:%02x:%02x:%02x:%02x:%02x",
-                               mac[0], mac[1], mac[2],
-                               mac[3], mac[4], mac[5]);
 }
 
 int board_eth_init(bd_t *bis)
index 3ed581ec09ea8a207b5cd2cbf8d7a4bd49e736a7..4fcd84b6f034c9d2ec6abc8d69181ee861e03e07 100644 (file)
@@ -264,6 +264,7 @@ int misc_init_r (void)
        char* e;
        int reg;
        bd_t *bd = gd->bd;
+       uchar enetaddr[6];
 
        memctl->memc_or2 = NVRAM_OR_PRELIM;
        memctl->memc_br2 = NVRAM_BR_VALUE;
@@ -315,13 +316,9 @@ int misc_init_r (void)
         * is present it gets a unique address, otherwise it
         * shares the FEC address.
         */
-       s = getenv("eth1addr");
-       if (s == NULL)
-               s = getenv("ethaddr");
-       for (reg=0; reg<6; ++reg) {
-               bd->bi_enet1addr[reg] = s ? simple_strtoul(s, &e, 16) : 0;
-               if (s)
-                       s = (*e) ? e+1 : e;
+       if (!eth_getenv_enetaddr("eth1addr", enetaddr)) {
+               eth_getenv_enetaddr("ethaddr", enetaddr);
+               eth_setenv_enetaddr("eth1addr", enetaddr);
        }
 
        return (0);
index 0b100d215c70b7e15a8174620fa1ead9a1f8795b..35bcc4d9da381fc75db9670a2c34011c03636d93 100644 (file)
@@ -74,6 +74,7 @@ eth_init(bd_t * bis)
 {
        u32 Options;
        XStatus Result;
+       uchar enetaddr[6];
 
 #ifdef DEBUG
        printf("EMAC Initialization Started\n\r");
@@ -87,11 +88,14 @@ eth_init(bd_t * bis)
        /* make sure the Emac is stopped before it is started */
        (void) XEmac_Stop(&Emac);
 
+       if (!eth_getenv_enetaddr("ethaddr", enetaddr)) {
 #ifdef CONFIG_ENV_IS_NOWHERE
-       memcpy(bis->bi_enetaddr, EMACAddr, 6);
+               memcpy(enetaddr, EMACAddr, 6);
+               eth_setenv_enetaddr("ethaddr", enetaddr);
 #endif
+       }
 
-       Result = XEmac_SetMacAddress(&Emac, bis->bi_enetaddr);
+       Result = XEmac_SetMacAddress(&Emac, enetaddr);
        if (Result != XST_SUCCESS) {
                return 0;
        }