FSL: Fix common EEPROM_data structure definition
authorHaiying Wang <Haiying.Wang@freescale.com>
Wed, 16 Jan 2008 22:12:12 +0000 (17:12 -0500)
committerJon Loeliger <jdl@freescale.com>
Thu, 17 Jan 2008 18:26:56 +0000 (12:26 -0600)
- Fix EEPROM_data structure definition according to System EEPROM Data Format.
- Read MAC addresses from EEPROM to ethXaddr before saving ethXaddr to
  bd->bi_ethaddr.

Signed-off-by: Haiying Wang <Haiying.Wang@freescale.com>
board/freescale/common/sys_eeprom.c
common/cmd_mac.c
lib_ppc/board.c

index bb91e67262b0ab8c49d2f39893532f19f84b4a35..44c097867f3802c7e29f6ffba5fd345b3f73e94f 100644 (file)
 #include <linux/ctype.h>
 
 typedef struct {
-       unsigned char id[4];            /* 0x0000 - 0x0003 */
-       unsigned char sn[12];           /* 0x0004 - 0x000F */
-       unsigned char errata[5];        /* 0x0010 - 0x0014 */
-       unsigned char date[7];          /* 0x0015 - 0x001a */
-       unsigned char res_1[37];        /* 0x001b - 0x003f */
-       unsigned char tab_size;         /* 0x0040 */
-       unsigned char tab_flag;         /* 0x0041 */
-       unsigned char mac[8][6];        /* 0x0042 - 0x0071 */
-       unsigned char res_2[126];       /* 0x0072 - 0x00ef */
-       unsigned int crc;               /* 0x00f0 - 0x00f3 crc32 checksum */
+       u8 id[4];               /* 0x0000 - 0x0003 EEPROM Tag */
+       u8 sn[12];              /* 0x0004 - 0x000F Serial Number */
+       u8 errata[5];           /* 0x0010 - 0x0014 Errata Level */
+       u8 date[6];             /* 0x0015 - 0x001a Build Date */
+       u8 res_0;               /* 0x001b          Reserved */
+       u8 version[4];          /* 0x001c - 0x001f Version */
+       u8 tempcal[8];          /* 0x0020 - 0x0027 Temperature Calibration Factors*/
+       u8 tempcalsys[2];       /* 0x0028 - 0x0029 System Temperature Calibration Factors*/
+       u8 res_1[22];           /* 0x0020 - 0x003f Reserved */
+       u8 mac_size;            /* 0x0040          Mac table size */
+       u8 mac_flag;            /* 0x0041          Mac table flags */
+       u8 mac[8][6];           /* 0x0042 - 0x0071 Mac addresses */
+       u32 crc;                /* 0x0072          crc32 checksum */
 } EEPROM_data;
 
 static EEPROM_data mac_data;
@@ -45,28 +48,57 @@ static EEPROM_data mac_data;
 int mac_show(void)
 {
        int i;
+       u8 mac_size;
        unsigned char ethaddr[8][18];
+       unsigned char enetvar[32];
+
+       /* Show EEPROM tagID,
+        * always the four characters 'NXID'.
+        */
+       printf("ID ");
+       for (i = 0; i < 4; i++)
+               printf("%c", mac_data.id[i]);
+       printf("\n");
+
+       /* Show Serial number,
+        * 0 to 11 charaters of errata information.
+        */
+       printf("SN ");
+       for (i = 0; i < 12; i++)
+               printf("%c", mac_data.sn[i]);
+       printf("\n");
 
-       printf("ID %c%c%c%c\n",
-              mac_data.id[0],
-              mac_data.id[1],
-              mac_data.id[2],
-              mac_data.id[3]);
-       printf("Errata %c%c%c%c%c\n",
-              mac_data.errata[0],
-              mac_data.errata[1],
-              mac_data.errata[2],
-              mac_data.errata[3],
-              mac_data.errata[4]);
-       printf("Date %c%c%c%c%c%c%c\n",
+       /* Show Errata Level,
+        * 0 to 4 characters of errata information.
+        */
+       printf("Errata ");
+       for (i = 0; i < 5; i++)
+               printf("%c", mac_data.errata[i]);
+       printf("\n");
+
+       /* Show Build Date,
+        * BCD date values, as YYMMDDhhmmss.
+        */
+       printf("Date 20%02x\/%02x\/%02x %02x:%02x:%02x\n",
               mac_data.date[0],
               mac_data.date[1],
               mac_data.date[2],
               mac_data.date[3],
               mac_data.date[4],
-              mac_data.date[5],
-              mac_data.date[6]);
-       for (i = 0; i < 8; i++) {
+              mac_data.date[5]);
+
+       /* Show MAC table size,
+        * Value from 0 to 7 indicating how many MAC
+        * addresses are stored in the system EEPROM.
+        */
+       if((mac_data.mac_size > 0) && (mac_data.mac_size <= 8))
+               mac_size = mac_data.mac_size;
+       else
+               mac_size = 8; /* Set the max size */
+       printf("MACSIZE %x\n", mac_size);
+
+       /* Show Mac addresses */
+       for (i = 0; i < mac_size; i++) {
                sprintf((char *)ethaddr[i],
                        "%02x:%02x:%02x:%02x:%02x:%02x",
                        mac_data.mac[i][0],
@@ -76,12 +108,12 @@ int mac_show(void)
                        mac_data.mac[i][4],
                        mac_data.mac[i][5]);
                printf("MAC %d %s\n", i, ethaddr[i]);
-       }
 
-       setenv("ethaddr",  (char *)ethaddr[0]);
-       setenv("eth1addr", (char *)ethaddr[1]);
-       setenv("eth2addr", (char *)ethaddr[2]);
-       setenv("eth3addr", (char *)ethaddr[3]);
+               sprintf((char *)enetvar,
+                       i ? "eth%daddr" : "ethaddr", i);
+               setenv((char *)enetvar, (char *)ethaddr[i]);
+
+       }
 
        return 0;
 }
@@ -120,17 +152,14 @@ int mac_prog(void)
        unsigned char dev = ID_EEPROM_ADDR, *ptr;
        unsigned char *eeprom_data = (unsigned char *)(&mac_data);
 
-       for (i = 0; i < sizeof(mac_data.res_1); i++)
-               mac_data.res_1[i] = 0;
-       for (i = 0; i < sizeof(mac_data.res_2); i++)
-               mac_data.res_2[i] = 0;
+       mac_data.res_0 = 0;
+       memset((void *)mac_data.res_1, 0, sizeof(mac_data.res_1));
+
        length = sizeof(EEPROM_data);
        crc = crc32(crc, eeprom_data, length - 4);
        mac_data.crc = crc;
        for (i = 0, ptr = eeprom_data; i < length; i += 8, ptr += 8) {
-               ret =
-                   i2c_write(dev, i, 1, ptr,
-                             (length - i) < 8 ? (length - i) : 8);
+               ret = i2c_write(dev, i, 1, ptr, min((length - i),8));
                udelay(5000);   /* 5ms write cycle timing */
                if (ret)
                        break;
@@ -179,12 +208,13 @@ int do_mac(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                        }
                        break;
                case 'd':       /* date */
-                       for (i = 0; i < 7; i++) {
-                               mac_data.date[i] = argv[2][i];
+                       mac_val = simple_strtoull(argv[2], NULL, 16);
+                       for (i = 0; i < 6; i++) {
+                               mac_data.date[i] = (mac_val >> (40 - 8 * i));
                        }
                        break;
-               case 'p':       /* number of ports */
-                       mac_data.tab_size =
+               case 'p':       /* mac table size */
+                       mac_data.mac_size =
                            (unsigned char)simple_strtoul(argv[2], NULL, 16);
                        break;
                case '0':       /* mac 0 */
index 0add43285f31eb2bf7bf93066384cab904f645eb..faed8f763ca7c8fab218bf459de6eb6b07c9bd23 100644 (file)
@@ -33,7 +33,7 @@ U_BOOT_CMD(
        "mac     - display and program the system ID and MAC addresses in EEPROM\n",
        "[read|save|id|num|errata|date|ports|0|1|2|3|4|5|6|7]\n"
        "read\n"
-       "    - show content of mac\n"
+       "    - show content of EEPROM\n"
        "mac save\n"
        "    - save to the EEPROM\n"
        "mac id\n"
@@ -43,7 +43,7 @@ U_BOOT_CMD(
        "mac errata\n"
        "    - program errata data\n"
        "mac date\n"
-       "    - program data date\n"
+       "    - program date\n"
        "mac ports\n"
        "    - program the number of ports\n"
        "mac 0\n"
index 7b95246e1109450449ebdef77ccf9ecbfc3f7b10..158db50ed5fd52c8a7d26c592a6770205ccdb6a6 100644 (file)
@@ -835,6 +835,11 @@ void board_init_r (gd_t *id, ulong dest_addr)
 #if defined(CONFIG_SC3)
        sc3_read_eeprom();
 #endif
+
+#ifdef CFG_ID_EEPROM
+       mac_read_from_eeprom();
+#endif
+
        s = getenv ("ethaddr");
 #if defined (CONFIG_MBX) || \
     defined (CONFIG_RPXCLASSIC) || \
@@ -902,10 +907,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
        }
 #endif
 
-#ifdef CFG_ID_EEPROM
-       mac_read_from_eeprom();
-#endif
-
 #if defined(CONFIG_TQM8xxL) || defined(CONFIG_TQM8260) || \
     defined(CONFIG_TQM8272) || \
     defined(CONFIG_CCM) || defined(CONFIG_KUP4K) || \