summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorAnish Trivedi <anish@freescale.com>2011-01-04 17:41:00 -0600
committerAnish Trivedi <anish@freescale.com>2011-01-05 10:06:52 -0600
commit57c938c25c39fce91192ad9703457367e11f7809 (patch)
treeab0b6198db4512a42ee16efa7f0fded983f2b6c5 /drivers/net
parent7c1313ce24e98332119882646762f4af53695abd (diff)
downloadu-boot-imx-57c938c25c39fce91192ad9703457367e11f7809.zip
u-boot-imx-57c938c25c39fce91192ad9703457367e11f7809.tar.gz
u-boot-imx-57c938c25c39fce91192ad9703457367e11f7809.tar.bz2
ENGR00137596 MX53 Uboot SMC911X driver needs to get mac addr from IIM
If the MAC addr read from the controller's ADDRH and ADDRL registers is invalid, then try to read MAC address programmed in MX53's IIM. Signed-off-by: Anish Trivedi <anish@freescale.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/smc911x.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
index adcb9c9..a36b040 100644
--- a/drivers/net/smc911x.c
+++ b/drivers/net/smc911x.c
@@ -2,6 +2,7 @@
* SMSC LAN9[12]1[567] Network driver
*
* (c) 2007 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
+ * Copyright (C) 2011 Freescale Semiconductor, Inc.
*
* See file CREDITS for list of people who contributed to this
* project.
@@ -27,6 +28,10 @@
#include <malloc.h>
#include <net.h>
#include <miiphy.h>
+#ifdef CONFIG_MX53
+#include <asm/io.h>
+#include <asm/imx_iim.h>
+#endif
#include "smc911x.h"
@@ -235,6 +240,20 @@ static int smc911x_rx(struct eth_device *dev)
return 0;
}
+#ifdef CONFIG_MX53
+void smc911x_get_mac_from_iim(unsigned char *mac)
+{
+ unsigned int mac_ptr;
+ int i;
+
+ for (i = 0; i < 6; i++) {
+ mac_ptr = IMX_IIM_BASE + IIM_BANK_AREA_1_OFFSET + 0x24 +
+ (i << 2);
+ mac[5-i] = readl(mac_ptr);
+ }
+}
+#endif
+
int smc911x_initialize(u8 dev_num, int base_addr)
{
unsigned long addrl, addrh;
@@ -264,6 +283,12 @@ int smc911x_initialize(u8 dev_num, int base_addr)
dev->enetaddr[4] = addrh;
dev->enetaddr[5] = addrh >> 8;
+#ifdef CONFIG_MX53
+ /* Get MAC addr from IIM if the one on the controller is not valid */
+ if (!is_valid_ether_addr(dev->enetaddr))
+ smc911x_get_mac_from_iim(dev->enetaddr);
+#endif
+
dev->init = smc911x_init;
dev->halt = smc911x_halt;
dev->send = smc911x_send;