[U-Boot] [PATCH 6/6] cm-t35: use the new EEPROM module to read the MAC address

Igor Grinberg grinberg at compulab.co.il
Mon Jan 2 15:01:35 CET 2012


From: Nikita Kiryanov <nikita at compulab.co.il>

Switch to the new EEPROM module and fix the problem of MAC address
being read from the wrong offset due to lack of distinction between
EEPROM layouts.

Signed-off-by: Nikita Kiryanov <nikita at compulab.co.il>
Signed-off-by: Igor Grinberg <grinberg at compulab.co.il>
---
 board/cm_t35/cm_t35.c |    6 +++---
 board/cm_t35/eeprom.c |   18 ++++++++++++++++++
 board/cm_t35/eeprom.h |    9 ++++++++-
 3 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/board/cm_t35/cm_t35.c b/board/cm_t35/cm_t35.c
index ff372d8..caafe06 100644
--- a/board/cm_t35/cm_t35.c
+++ b/board/cm_t35/cm_t35.c
@@ -41,6 +41,8 @@
 #include <asm/arch/sys_proto.h>
 #include <asm/mach-types.h>
 
+#include "eeprom.h"
+
 DECLARE_GLOBAL_DATA_PTR;
 
 const omap3_sysinfo sysinfo = {
@@ -382,11 +384,9 @@ static int handle_mac_address(void)
 	if (rc)
 		return 0;
 
-#ifdef CONFIG_DRIVER_OMAP34XX_I2C
-	rc = i2c_read(0x50, 0, 1, enetaddr, 6);
+	rc = cm_t3x_eeprom_read_mac_addr(enetaddr);
 	if (rc)
 		return rc;
-#endif
 
 	if (!is_valid_ether_addr(enetaddr))
 		return -1;
diff --git a/board/cm_t35/eeprom.c b/board/cm_t35/eeprom.c
index 8386d18..e975855 100644
--- a/board/cm_t35/eeprom.c
+++ b/board/cm_t35/eeprom.c
@@ -31,6 +31,8 @@
 #define BOARD_REV_OFFSET_LEGACY		6
 #define BOARD_REV_SIZE			4
 #define BOARD_REV_SIZE_LEGACY		2
+#define MAC_ADDR_OFFSET			4
+#define MAC_ADDR_OFFSET_LEGACY		0
 
 #define LAYOUT_INVALID	0
 #define LAYOUT_LEGACY	0xff
@@ -83,6 +85,22 @@ void get_board_serial(struct tag_serialnr *serialnr)
 }
 
 /*
+ * 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: get_board_rev
  * Description: read system revision
  */
diff --git a/board/cm_t35/eeprom.h b/board/cm_t35/eeprom.h
index 97a002a..e8680d7 100644
--- a/board/cm_t35/eeprom.h
+++ b/board/cm_t35/eeprom.h
@@ -23,7 +23,9 @@
 
 #include <common.h>
 
-#ifndef CONFIG_DRIVER_OMAP34XX_I2C
+#ifdef CONFIG_DRIVER_OMAP34XX_I2C
+int cm_t3x_eeprom_read_mac_addr(uchar *buf);
+#else
 void get_board_serial(struct tag_serialnr *serialnr)
 {
 	/*
@@ -33,6 +35,11 @@ void get_board_serial(struct tag_serialnr *serialnr)
 	serialnr->low = 0;
 	serialnr->high = 0;
 };
+
+int cm_t3x_eeprom_read_mac_addr(uchar *buf)
+{
+	return 1;
+}
 #endif /* CONFIG_DRIVER_OMAP34XX_I2C */
 
 #endif
-- 
1.7.3.4



More information about the U-Boot mailing list