summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJason Chen <b02280@freescale.com>2010-06-30 11:25:26 +0800
committerJustin Waters <justin.waters@timesys.com>2010-12-17 12:10:42 -0500
commit9fe0c73a58995b42a97dae4fda6f10e228e8e09d (patch)
tree6328f8fc4b3130ba921d16b11f929bfe73bdb9a3 /drivers
parent315b3096450de88a0b1f8070d57110779b8d6cb4 (diff)
ENGR00124760 fec: set mac address correctly
Fix dynamicly set mac address make network hang issue. Signed-off-by: Jason Chen <b02280@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/fec.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/fec.c b/drivers/net/fec.c
index 63d84b692390..b176bd4f20e9 100644
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -1131,17 +1131,18 @@ fec_set_mac_address(struct net_device *dev, void *p)
{
struct fec_enet_private *fep = netdev_priv(dev);
struct sockaddr *addr = p;
+ u32 temp_mac[2];
if (!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
- writel(dev->dev_addr[3] | (dev->dev_addr[2] << 8) |
- (dev->dev_addr[1] << 16) | (dev->dev_addr[0] << 24),
- fep->hwp + FEC_ADDR_LOW);
- writel((dev->dev_addr[5] << 16) | (dev->dev_addr[4] << 24),
- fep + FEC_ADDR_HIGH);
+ memcpy(&temp_mac, dev->dev_addr, ETH_ALEN);
+
+ writel(cpu_to_be32(temp_mac[0]), fep->hwp + FEC_ADDR_LOW);
+ writel(cpu_to_be32(temp_mac[1]), fep->hwp + FEC_ADDR_HIGH);
+
return 0;
}