]> git.sur5r.net Git - u-boot/blobdiff - board/cm_t35/eeprom.c
Merge branch 'u-boot-imx/master' into 'u-boot-arm/master'
[u-boot] / board / cm_t35 / eeprom.c
index 93ed6cbc0b2592fb29b65eed398b8096e06774c7..b0af103cdd42cc312ae8db4406070d5fb3a01ba3 100644 (file)
 #define EEPROM_LAYOUT_VER_OFFSET       44
 #define BOARD_SERIAL_OFFSET            20
 #define BOARD_SERIAL_OFFSET_LEGACY     8
+#define BOARD_REV_OFFSET               0
+#define BOARD_REV_OFFSET_LEGACY                6
+#define BOARD_REV_SIZE                 2
+#define MAC_ADDR_OFFSET                        4
+#define MAC_ADDR_OFFSET_LEGACY         0
 
 #define LAYOUT_INVALID 0
 #define LAYOUT_LEGACY  0xff
@@ -76,3 +81,50 @@ void get_board_serial(struct tag_serialnr *serialnr)
                serialnr->high = serial[1];
        }
 }
+
+/*
+ * Routine: cm_t3x_eeprom_read_mac_addr
+ * Description: read mac address and store it in buf.
+ */
+int cm_t3x_eeprom_read_mac_addr(uchar *buf)
+{
+       uint offset;
+
+       if (eeprom_setup_layout())
+               return 0;
+
+       offset = (eeprom_layout != LAYOUT_LEGACY) ?
+                       MAC_ADDR_OFFSET : MAC_ADDR_OFFSET_LEGACY;
+       return cm_t3x_eeprom_read(offset, buf, 6);
+}
+
+/*
+ * Routine: cm_t3x_eeprom_get_board_rev
+ * Description: read system revision from eeprom
+ */
+u32 cm_t3x_eeprom_get_board_rev(void)
+{
+       u32 rev = 0;
+       char str[5]; /* Legacy representation can contain at most 4 digits */
+       uint offset = BOARD_REV_OFFSET_LEGACY;
+
+       if (eeprom_setup_layout())
+               return 0;
+
+       if (eeprom_layout != LAYOUT_LEGACY)
+               offset = BOARD_REV_OFFSET;
+
+       if (cm_t3x_eeprom_read(offset, (uchar *)&rev, BOARD_REV_SIZE))
+               return 0;
+
+       /*
+        * Convert legacy syntactic representation to semantic
+        * representation. i.e. for rev 1.00: 0x100 --> 0x64
+        */
+       if (eeprom_layout == LAYOUT_LEGACY) {
+               sprintf(str, "%x", rev);
+               rev = simple_strtoul(str, NULL, 10);
+       }
+
+       return rev;
+};