]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
OMAP3: TAM3517: add macros for reading eeprom
authorStefano Babic <sbabic@denx.de>
Fri, 23 Nov 2012 05:19:25 +0000 (05:19 +0000)
committerTom Rini <trini@ti.com>
Mon, 10 Dec 2012 15:56:38 +0000 (08:56 -0700)
Added macros to read SOM information from the I2C
EEPROM.

Signed-off-by: Stefano Babic <sbabic@denx.de>
board/technexion/twister/twister.c
board/teejet/mt_ventoux/mt_ventoux.c
include/configs/tam3517-common.h

index 1471559909d3ad378e97e3ca08235fba0f4f167b..c9eea9b3045d92ed18845184f839a6154f83a09a 100644 (file)
@@ -98,9 +98,12 @@ int board_init(void)
        return 0;
 }
 
+#ifndef CONFIG_SPL_BUILD
 int misc_init_r(void)
 {
        char *eth_addr;
+       struct tam3517_module_info info;
+       int ret;
 
        dieid_num_r();
 
@@ -108,12 +111,13 @@ int misc_init_r(void)
        if (eth_addr)
                return 0;
 
-#ifndef CONFIG_SPL_BUILD
-       TAM3517_READ_MAC_FROM_EEPROM;
-#endif
+       TAM3517_READ_EEPROM(&info, ret);
+       if (!ret)
+               TAM3517_READ_MAC_FROM_EEPROM(&info);
 
        return 0;
 }
+#endif
 
 /*
  * Routine: set_muxconf_regs
index 98b92f3b38d9a5cda5f1548bc17961c370f71d73..c516c75a0066d2341365057fdb7d27e61734253f 100644 (file)
@@ -258,21 +258,26 @@ int board_init(void)
        return 0;
 }
 
+#ifndef CONFIG_SPL_BUILD
 int misc_init_r(void)
 {
        char *eth_addr;
+       struct tam3517_module_info info;
+       int ret;
 
+       TAM3517_READ_EEPROM(&info, ret);
        dieid_num_r();
 
-       eth_addr = getenv("ethaddr");
-       if (eth_addr)
+       if (ret)
                return 0;
+       eth_addr = getenv("ethaddr");
+       if (!eth_addr)
+               TAM3517_READ_MAC_FROM_EEPROM(&info);
 
-#ifndef CONFIG_SPL_BUILD
-       TAM3517_READ_MAC_FROM_EEPROM;
-#endif
+       TAM3517_PRINT_SOM_INFO(&info);
        return 0;
 }
+#endif
 
 /*
  * Routine: set_muxconf_regs
index dd7757cb97550ffe01d61268a9d014b34a3dc90b..a3e84a3c7513524cada80787eeb80c868dcd929d 100644 (file)
  * I2C EEPROM
  */
 #if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
-
 /*
  * The I2C EEPROM on the TAM3517 contains
  * mac address and production data
@@ -383,24 +382,29 @@ struct tam3517_module_info {
        unsigned char _rev[100];
 };
 
-#define TAM3517_READ_MAC_FROM_EEPROM   \
-do {                                   \
-       struct tam3517_module_info info;\
-       char buf[80], ethname[20];      \
-       int i;                          \
+#define TAM3517_READ_EEPROM(info, ret) \
+do {                                                           \
        i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);   \
        if (eeprom_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0,          \
-                       (void *)&info, sizeof(info)))           \
-               break;                                          \
+               (void *)info, sizeof(*info)))                   \
+               ret = 1;                                        \
+       else                                                    \
+               ret = 0;                                        \
+} while (0)
+
+#define TAM3517_READ_MAC_FROM_EEPROM(info)                     \
+do {                                                           \
+       char buf[80], ethname[20];                              \
+       int i;                                                  \
        memset(buf, 0, sizeof(buf));                            \
-       for (i = 0 ; i < ARRAY_SIZE(info.eth_addr); i++) {      \
+       for (i = 0 ; i < ARRAY_SIZE((info)->eth_addr); i++) {   \
                sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X",   \
-                       info.eth_addr[i][5],                    \
-                       info.eth_addr[i][4],                    \
-                       info.eth_addr[i][3],                    \
-                       info.eth_addr[i][2],                    \
-                       info.eth_addr[i][1],                    \
-                       info.eth_addr[i][0]);                   \
+                       (info)->eth_addr[i][5],                 \
+                       (info)->eth_addr[i][4],                 \
+                       (info)->eth_addr[i][3],                 \
+                       (info)->eth_addr[i][2],                 \
+                       (info)->eth_addr[i][1],                 \
+                       (info)->eth_addr[i][0]);                        \
                                                                \
                if (i)                                          \
                        sprintf(ethname, "eth%daddr", i);       \
@@ -410,6 +414,30 @@ do {                                       \
                setenv(ethname, buf);                           \
        }                                                       \
 } while (0)
+
+/* The following macros are taken from Technexion's documentation */
+#define TAM3517_sequence_number(info) \
+       ((info)->sequence_number % 0x1000000000000LL)
+#define TAM3517_week_of_year(info) (((info)->sequence_number >> 48) % 0x100)
+#define TAM3517_year(info) ((info)->sequence_number >> 56)
+#define TAM3517_revision_fixed(info) ((info)->revision % 0x100)
+#define TAM3517_revision_major(info) (((info)->revision >> 8) % 0x100)
+#define TAM3517_revision_tn(info) ((info)->revision >> 16)
+
+#define TAM3517_PRINT_SOM_INFO(info)                           \
+do {                                                           \
+       printf("Vendor:%s\n", (info)->customer);                \
+       printf("SOM:   %s\n", (info)->product);                 \
+       printf("SeqNr: %02llu%02llu%012llu\n",                  \
+               TAM3517_year(info),                             \
+               TAM3517_week_of_year(info),                     \
+               TAM3517_sequence_number(info));                 \
+       printf("Rev:   TN%u %u.%u\n",                           \
+               TAM3517_revision_tn(info),                      \
+               TAM3517_revision_major(info),                   \
+               TAM3517_revision_fixed(info));                  \
+} while (0)
+
 #endif
 
 #endif /* __TAM3517_H */