]> git.sur5r.net Git - u-boot/commitdiff
OMAP3: tam3517: add function to read MAC from EEPROM
authorStefano Babic <sbabic@denx.de>
Wed, 29 Aug 2012 01:21:59 +0000 (01:21 +0000)
committerTom Rini <trini@ti.com>
Wed, 5 Sep 2012 00:05:38 +0000 (17:05 -0700)
The manufacturer delivers the TAM3517 SOM with 4 MAC address.
They are stored on the EEPROM of the SOM. The patch adds a
function to get their values and set the ethaddr variables.

Signed-off-by: Stefano Babic <sbabic@denx.de>
include/configs/tam3517-common.h

index 375265d475b3e2b64feb7abd6e59fa4ea97d096a..a13fd937621f5516b2dfa072053b919d9ae4b17b 100644 (file)
 #define CONFIG_CMD_NAND                /* NAND support                 */
 #define CONFIG_CMD_PING
 #define CONFIG_CMD_USB
+#define CONFIG_CMD_EEPROM
 
 #undef CONFIG_CMD_FLASH                /* only NAND on the SOM */
 #undef CONFIG_CMD_IMLS
 #define CONFIG_SYS_I2C_SLAVE           1
 #define CONFIG_SYS_I2C_BUS             0
 #define CONFIG_SYS_I2C_BUS_SELECT      1
+#define CONFIG_SYS_I2C_EEPROM_ADDR     0x50            /* base address */
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1               /* bytes of address */
+#define CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW    0x07
 #define CONFIG_DRIVER_OMAP34XX_I2C
 
 
                "fi;"                                                   \
                "else echo U-Boot not downloaded..exiting;fi\0"         \
 
+
+/*
+ * this is common code for all TAM3517 boards.
+ * MAC address is stored from manufacturer in
+ * I2C EEPROM
+ */
+#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
+
+/*
+ * The I2C EEPROM on the TAM3517 contains
+ * mac address and production data
+ */
+struct tam3517_module_info {
+       char customer[48];
+       char product[48];
+
+       /*
+        * bit 0~47  : sequence number
+        * bit 48~55 : week of year, from 0.
+        * bit 56~63 : year
+        */
+       unsigned long long sequence_number;
+
+       /*
+        * bit 0~7   : revision fixed
+        * bit 8~15  : revision major
+        * bit 16~31 : TNxxx
+        */
+       unsigned int revision;
+       unsigned char eth_addr[4][8];
+       unsigned char _rev[100];
+};
+
+#define TAM3517_READ_MAC_FROM_EEPROM   \
+do {                                   \
+       struct tam3517_module_info info;\
+       char buf[80], ethname[20];      \
+       int i;                          \
+       i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);   \
+       if (eeprom_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0,          \
+                       (void *)&info, sizeof(info)))           \
+               break;                                          \
+       memset(buf, 0, sizeof(buf));                            \
+       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]);                   \
+                                                               \
+               if (i)                                          \
+                       sprintf(ethname, "eth%daddr", i);       \
+               else                                            \
+                       sprintf(ethname, "ethaddr");            \
+               printf("Setting %s from EEPROM with %s\n", ethname, buf);\
+               setenv(ethname, buf);                           \
+       }                                                       \
+} while (0)
+#endif
+
 #endif /* __TAM3517_H */